X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=gacela.c;h=dee76599553337a3b551f46a5f208586bc5b1d22;hb=53ad34084c4f4d6378f71ac04c2aa0c0e6b40e18;hp=24dda3d5d18c4253eeece9dfecdd24df3933793d;hpb=a77a0257caeeaaa3cc0977008d4cf9a92a9ee1cd;p=gacela.git diff --git a/gacela.c b/gacela.c index 24dda3d..dee7659 100644 --- a/gacela.c +++ b/gacela.c @@ -1,68 +1,55 @@ -#include -#include -#include -#include +#include +#include +#include +#include -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); -} - -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) +/* Read-Send-Print-Loop */ +void rspl(int pin, int pout) { - scm_c_define_gsubr ("prueba", 0, 0, 0, &prueba); -// scm_c_define_gsubr ("ver-contador", 0, 0, 0, &ver_contador); - scm_c_define_gsubr ("lanzar-bucle", 0, 0, 0, &lanzar_bucle); - return NULL; + static char *line = (char *)NULL; + int exit = 0; + + while (!exit) { + if (line) { + free(line); + line = (char *)NULL; + } + + line = readline("gacela>"); + + if (line && *line) { + add_history(line); + if (strcmp(line, "(quit)") == 0) + exit = 1; + else { + write(pout, line, strlen(line)); + write(pout, "\n", 1); + } + } + } } - -int main (int argc, char *argv[]) { - scm_with_guile (®ister_functions, NULL); - 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); +int main (int argc, char *argv[]) +{ + pid_t cpid; + int pfd[2]; + + pipe(pfd); + cpid = fork(); + if (cpid != 0) { + rspl(pfd[0], pfd[1]); + return 0; + } + else { + char buf; + + while (1) { + while (read(pfd[0], &buf, 1) > 0) { + if (buf == '\n') + write(STDOUT_FILENO, "-\n", 2); + else + write(STDOUT_FILENO, &buf, 1); + } + } + } } -