if (line && *line)
{
add_history (line);
- scm_write (scm_from_locale_string ("("), send_channel);
scm_write (scm_from_locale_string (line), send_channel);
- scm_write (scm_from_locale_string (")"), send_channel);
+ scm_force_output (send_channel);
while (scm_char_ready_p (rec_channel) == SCM_BOOL_F) {
if (ctrl_c) break;
- sleep (1);
+ sleep (0.5);
}
if (ctrl_c)
ctrl_c = 0;
else {
- buffer = scm_read_line (rec_channel);
+ buffer = scm_read (rec_channel);
printf ("%s\n", scm_to_locale_string (buffer));
}
}
init_gacela (void *data, int argc, char **argv)
{
// Guile configuration
- scm_c_eval_string ("(set-repl-prompt! \"gacela>\")");
+ 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 ("(use-modules (ice-9 optargs))");
scm_c_define ("pipes", pipes);
scm_c_eval_string ("(start-server pipes)");
}
+
/*
void
start_remote_client (char *hostname, int port)
}
}
*/
+
+void
+start_remote_client (char *hostname, int port)
+{
+ SCM sockfd;
+ struct hostent *server;
+ struct sockaddr_in serv_addr;
+
+ server = gethostbyname (hostname);
+ bzero ((char *) &serv_addr, sizeof (serv_addr));
+ serv_addr.sin_family = AF_INET;
+ bcopy ((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);
+ serv_addr.sin_port = htons (port);
+
+ //sockfd = scm_socket (AF_INET, SOCK_STREAM);
+ // scm_from_sockaddr (serv_addr, sizeof (serv_addr));
+ // scm_connect (sockfd, AF_INET, , scm_from_integer (port));
+}
+
int
main (int argc, char *argv[])
{
char *host;
int port = 0;
int i;
- SCM pipes;
+ SCM fd1, fd2;
int pid;
- char *string = "prueba\n";
- int p[2];
- char buffer[150];
-
// Checking arguments
for (i = 1; i < argc; i++) {
if (strcmp (argv[i], "--shell-mode") == 0)
else if (mode == 2 && port != 0)
start_server (dirname (argv[0]), port);
else if (mode == 3 && port != 0)
- //start_remote_client (host, port);
return;
+ //start_remote_client (host, port);
else {
- /*
- pipes = scm_pipe ();
+ fd1 = scm_pipe ();
+ fd2 = scm_pipe ();
pid = fork ();
- if (pid == 0)
- start_local_server (dirname (argv[0]), pipes);
- else
- gacela_client (SCM_CAR (pipes), SCM_CDR (pipes));
- */
- /*
if (pid == 0) {
- scm_write (scm_from_locale_string ("prueba"), SCM_CDR (pipes));
- sleep (10);
+ scm_close (SCM_CAR (fd1));
+ scm_close (SCM_CDR (fd2));
+ start_local_server (dirname (argv[0]), scm_cons (SCM_CAR (fd2), SCM_CDR (fd1)));
}
else {
- while (scm_char_ready_p (SCM_CAR (pipes)) == SCM_BOOL_F) {
- sleep (1);
- printf ("1\n");
- }
- SCM buffer;
- buffer = scm_read_line (SCM_CAR (pipes));
- printf ("%s\n", scm_to_locale_string (buffer));
+ scm_close (SCM_CDR (fd1));
+ scm_close (SCM_CAR (fd2));
+ gacela_client (SCM_CAR (fd1), SCM_CDR (fd2));
+ kill (pid, SIGKILL);
}
- */
- FILE *stream;
- pipe (p);
+
+ /*
+ SCM buffer;
if (pid == 0) {
- close (p[1]);
- stream = fdopen (p[0], "w");
- fprintf (stream, "prueba\n");
- fclose (stream);
- printf ("1\n");
- sleep (10);
+ printf ("Hijo: 0\n");
+ scm_write (scm_from_locale_string ("Hola mundo\n"), SCM_CDR (pipes));
+ scm_force_output (SCM_CDR (pipes));
+ printf ("Hijo: 1\n");
}
else {
- int c;
- close (p[0]);
- stream = fdopen (p[1], "r");
- while ((c = fgetc (stream)) != EOF)
- putchar (c);
+ printf ("Padre: 0\n");
+ buffer = scm_read (SCM_CAR (pipes));
+ printf ("%s\n", scm_to_locale_string (buffer));
+ printf ("Padre: 1\n");
}
+ */
}
}