Browse Source

Added readline to gravity_utils and minor code refactoring in gravity cli.

Marco Bambini 8 years ago
parent
commit
6ee7232061
3 changed files with 26 additions and 4 deletions
  1. 7 4
      src/cli/gravity.c
  2. 16 0
      src/utils/gravity_utils.c
  3. 3 0
      src/utils/gravity_utils.h

+ 7 - 4
src/cli/gravity.c

@@ -7,6 +7,7 @@
 //
 //
 
 
 #include "gravity_compiler.h"
 #include "gravity_compiler.h"
+#include "gravity_utils.h"
 #include "gravity_core.h"
 #include "gravity_core.h"
 #include "gravity_vm.h"
 #include "gravity_vm.h"
 
 
@@ -87,10 +88,6 @@ static void print_help (void) {
 	printf("file_name          compile file_name and executes it\n");
 	printf("file_name          compile file_name and executes it\n");
 }
 }
 
 
-static void gravity_repl (void) {
-	printf("REPL not yet implemented.\n");
-}
-
 static op_type parse_args (int argc, const char* argv[]) {
 static op_type parse_args (int argc, const char* argv[]) {
 	if (argc == 1) return OP_REPL;
 	if (argc == 1) return OP_REPL;
 	
 	
@@ -128,6 +125,12 @@ static op_type parse_args (int argc, const char* argv[]) {
 
 
 // MARK: -
 // MARK: -
 
 
+static void gravity_repl (void) {
+	printf("REPL not yet implemented.\n");
+}
+
+// MARK: -
+
 int main (int argc, const char* argv[]) {
 int main (int argc, const char* argv[]) {
 	// parse arguments and return operation type
 	// parse arguments and return operation type
 	op_type type = parse_args(argc, argv);
 	op_type type = parse_args(argc, argv);

+ 16 - 0
src/utils/gravity_utils.c

@@ -86,6 +86,22 @@ double millitime (nanotime_t tstart, nanotime_t tend) {
 	return ((double)t / 1000000.0f);
 	return ((double)t / 1000000.0f);
 }
 }
 
 
+// MARK: - Console Functions -
+
+char *readline (char *prompt, int *length) {
+	char	*line = NULL;
+	size_t	size = 0;
+	
+	printf("%s", prompt);
+	fflush(stdout);
+	
+	ssize_t nread = getline(&line, &size, stdin);
+	if (nread == -1 || feof(stdin)) return NULL;
+	
+	*length = (int)nread;
+	return line;
+}
+
 // MARK: - I/O Functions -
 // MARK: - I/O Functions -
 
 
 uint64_t file_size (const char *path) {
 uint64_t file_size (const char *path) {

+ 3 - 0
src/utils/gravity_utils.h

@@ -27,6 +27,9 @@ nanotime_t	nanotime (void);
 double		microtime (nanotime_t tstart, nanotime_t tend);
 double		microtime (nanotime_t tstart, nanotime_t tend);
 double		millitime (nanotime_t tstart, nanotime_t tend);
 double		millitime (nanotime_t tstart, nanotime_t tend);
 
 
+// CONSOLE
+char		*readline (char *prompt, int *length);
+
 // FILE
 // FILE
 uint64_t	file_size (const char *path);
 uint64_t	file_size (const char *path);
 const char	*file_read (const char *path, size_t *len);
 const char	*file_read (const char *path, size_t *len);