#include <stdio.h>
+#include <readline/readline.h>
-int main (int argc, char *argv[])
+/* Read-Send-Print-Loop */
+void rspl ()
{
- char exp[1024];
+ static char *line = (char *)NULL;
+ int exit = 0;
+
+ while (!exit)
+ {
+ if (line)
+ {
+ free (line);
+ line = (char *)NULL;
+ }
+
+ line = readline ("gacela>");
- printf("gacela>");
- scanf("%s", exp);
+ if (line && *line)
+ {
+ add_history (line);
+ if (strcmp (line, "(quit)") == 0)
+ exit = 1;
+ }
+ }
+}
+int main (int argc, char *argv[])
+{
+ rspl ();
return 0;
}
#include <SDL/SDL.h>
#include <GL/gl.h>
#include <libguile.h>
-#include <pthread.h>
-
-SCM prueba () {
- int flags;
-
- SDL_Init (SDL_INIT_EVERYTHING);
-
- SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
-
- flags = SDL_OPENGL | SDL_GL_DOUBLEBUFFER | SDL_HWPALETTE | SDL_RESIZABLE | SDL_SWSURFACE;
- SDL_SetVideoMode (200, 200, 32, flags);
-
- glShadeModel (GL_SMOOTH);
- glClearColor (0, 0, 0, 0);
- glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
- glViewport (0, 0, 200, 200);
- glMatrixMode (GL_PROJECTION);
- glLoadIdentity ();
- glOrtho (-200, 200, -200, 200, 0, 1);
- glMatrixMode (GL_MODELVIEW);
- glLoadIdentity ();
-
- return SCM_UNSPECIFIED;
-}
-
-void *bucle () {
- while (1) {
- scm_c_eval_string("(define contador (+ contador incremento))");
- scm_c_eval_string("(if (> contador 1000) (define incremento -1))");
- scm_c_eval_string("(if (< contador 0) (define incremento 1))");
- }
- pthread_exit(NULL);
-}
-
-void *bucle2 () {
- char *argv[0];
-
- argv[0] = malloc(10);
- strcpy(argv[0], "./gacela");
- scm_shell(1, argv);
-}
-
-int lanzar_bucle2 () {
- pthread_t t;
-
- pthread_create(&t, NULL, bucle2, NULL);
- return 0;
-}
-
-SCM lanzar_bucle () {
- pthread_t t;
-
- pthread_create(&t, NULL, bucle, NULL);
- return SCM_UNSPECIFIED;
-}
-
-/*SCM ver_contador () {
- return scm_from_int(contador);
-}*/
static void*
register_functions (void* data)
scm_c_eval_string("(set-repl-prompt! \"gacela>\")");
scm_c_eval_string("(use-modules (ice-9 readline))");
scm_c_eval_string("(activate-readline)");
- scm_c_eval_string("(define contador 0)");
- scm_c_eval_string("(define incremento 1)");
// scm_shell (argc, argv);
- lanzar_bucle2();
while (1) {}
}