]> git.jsancho.org Git - gacela.git/commitdiff
(no commit message)
authorjsancho <devnull@localhost>
Wed, 24 Aug 2011 08:07:09 +0000 (08:07 +0000)
committerjsancho <devnull@localhost>
Wed, 24 Aug 2011 08:07:09 +0000 (08:07 +0000)
gacela_tetris.scm
src/gacela.c
src/gacela.scm

index e8a97bdbb87268a98b6cde1d6ec6b400a6ce822a..63e0fc7669e258c44fb00b108d24f3e90453aedc 100644 (file)
@@ -1,4 +1,4 @@
-(set-game-properties #:title "Gacela Tetris" #:fps 15)
+(set-game-properties! #:title "Gacela Tetris" #:fps 15)
 
 (define (tetramine-i)
   (let ((color '(1 0 0)))
index 6891d4b9f1180e661f256703cd07fde8b68c1c18..489d8c622897b8ad365c35b21898d42579f1afc5 100644 (file)
@@ -133,13 +133,36 @@ init_gacela_client ()
   sigaction (SIGINT, &new_action, NULL);
 }
 
+int
+opened_parens (char *line, int k)
+{
+  int i;
+  int opened = 0;
+  char c = 0;
+
+  // Choose the corresponding opening bracket
+  if (k == ')') c = '(';
+  else if (k == ']') c = '[';
+  else if (k == '}') c = '{';
+
+  for (i = 0; i < strlen (line); i++) {
+    if (line[i] == c)
+      opened++;
+    else if (line[i] == k)
+      opened--;
+  }
+
+  return opened;
+}
+
 void
 gacela_client (SCM rec_channel, SCM send_channel)
 {
   int n;
   SCM buffer;
-  char *line;
+  char *line, *line_for_sending;
   char *history_path;
+  int opened = 0;
 
   // Command line
   asprintf (&history_path, "%s/.gacela_history", getenv("HOME"));
@@ -148,25 +171,32 @@ gacela_client (SCM rec_channel, SCM send_channel)
   read_history (history_path);
 
   while (1) {
-    line = readline ("gacela> ");
+    if (opened > 0)
+      line = readline ("... ");
+    else
+      line = readline ("gacela> ");
+
+    opened += opened_parens (line, ')');
     ctrl_c = 0;
     if (!line) break;
     if (line && *line)
       {
        add_history (line);
-       scm_write (scm_from_locale_string (line), send_channel);
-       scm_force_output (send_channel);
-
-       while (scm_char_ready_p (rec_channel) == SCM_BOOL_F) {
-         if (ctrl_c) break;
-         sleep (0.5);
-       }
-       if (ctrl_c)
-         ctrl_c = 0;
-       else {
-         buffer = scm_read (rec_channel);
-         if (strlen (scm_to_locale_string (buffer)) > 0)
-           printf ("%s\n", scm_to_locale_string (buffer));
+       if (opened == 0) {
+         scm_write (scm_from_locale_string (line), send_channel);
+         scm_force_output (send_channel);
+
+         while (scm_char_ready_p (rec_channel) == SCM_BOOL_F) {
+           if (ctrl_c) break;
+           sleep (0.5);
+         }
+         if (ctrl_c)
+           ctrl_c = 0;
+         else {
+           buffer = scm_read (rec_channel);
+           if (strlen (scm_to_locale_string (buffer)) > 0)
+             printf ("%s\n", scm_to_locale_string (buffer));
+         }
        }
       }
     free (line);
index fe31b8fe57dcbea67838d036f41678849d7ee34b..f5a751a2b87421bba534399cabc1c360e9b7f361 100644 (file)
                   (SDL_Delay (- time-per-frame frame-time))))))))
 
 
-(define set-game-properties #f)
+(define set-game-properties! #f)
 (define get-game-properties #f)
 
 (let ((ptitle *title*) (pwidth *width-screen*) (pheight *height-screen*) (pbpp *bpp-screen*) (pfps *frames-per-second*) (pmode *mode*))
-  (set! set-game-properties
+  (set! set-game-properties!
        (lambda* (#:key title width height bpp fps mode)
 ;        (init-video-mode)
          (if title