[Gnupos-cvs] gnupos/src GnuPOS-xml-P.h,1.10,1.11 GnuPOS.h,1.7,1.8 GnuPOSprocessing.c,1.9,1.10 GnuPOS
Status: Pre-Alpha
Brought to you by:
conrad_c
From: <con...@us...> - 2003-01-04 14:01:57
|
Update of /cvsroot/gnupos/gnupos/src In directory sc8-pr-cvs1:/tmp/cvs-serv27048/src Modified Files: GnuPOS-xml-P.h GnuPOS.h GnuPOSprocessing.c GnuPOSregisters.c GnuPOSxml.c main.c Log Message: More work. Compiles, just chasing segfaults. Index: GnuPOS-xml-P.h =================================================================== RCS file: /cvsroot/gnupos/gnupos/src/GnuPOS-xml-P.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** GnuPOS-xml-P.h 1 Jan 2003 14:09:53 -0000 1.10 --- GnuPOS-xml-P.h 4 Jan 2003 14:01:54 -0000 1.11 *************** *** 67,71 **** gboolean gnp_parse_state (xmlDocPtr, xmlNodePtr, guint); gboolean gnp_parse_library (statefile_struct *, xmlNodePtr, ! guint *); gboolean gnp_parse_register (statefile_struct *, guint *, xmlNodePtr); --- 67,71 ---- gboolean gnp_parse_state (xmlDocPtr, xmlNodePtr, guint); gboolean gnp_parse_library (statefile_struct *, xmlNodePtr, ! guint *, gchar *); gboolean gnp_parse_register (statefile_struct *, guint *, xmlNodePtr); Index: GnuPOS.h =================================================================== RCS file: /cvsroot/gnupos/gnupos/src/GnuPOS.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** GnuPOS.h 25 Dec 2002 14:34:45 -0000 1.7 --- GnuPOS.h 4 Jan 2003 14:01:54 -0000 1.8 *************** *** 18,22 **** char *script_version; char *station_id; ! } gnp_global_data_struct; --- 18,24 ---- char *script_version; char *station_id; ! char *ui_event; ! char *ui_name; ! void (*ui_event_ptr)(); } gnp_global_data_struct; Index: GnuPOSprocessing.c =================================================================== RCS file: /cvsroot/gnupos/gnupos/src/GnuPOSprocessing.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** GnuPOSprocessing.c 25 Dec 2002 14:34:45 -0000 1.9 --- GnuPOSprocessing.c 4 Jan 2003 14:01:54 -0000 1.10 *************** *** 434,439 **** { printf ("-------------------------------------------------------\n"); ! printf ("%d: %s -> %x: ", i, register_table[i].sym, ! register_table[i].code); if (register_table[i].initial_value != NULL) --- 434,438 ---- { printf ("-------------------------------------------------------\n"); ! printf ("%d: %s -> ", i, register_table[i].sym); if (register_table[i].initial_value != NULL) *************** *** 463,488 **** } } ! switch (gnp_get_register_value_type (®ister_table[i])) { ! case GNP_VALUE_INTEGER: ! printf ("current value (integer): %d ", ! *register_table[i].value->value.integer); ! break; ! case GNP_VALUE_UNDEF: ! printf ("current value undefined"); ! break; ! case GNP_VALUE_STRING: ! printf ("current value (string): \"%s\", ", ! register_table[i].value->value.string); ! break; ! case GNP_VALUE_GNCNUMERIC: ! printf ("current value (gncnum): \"%s\", ", ! gnc_numeric_to_string (*register_table[i].value->value.gncnum)); ! break; ! default: ! printf ("current value type undefined!: type %x ", ! register_table[i].value->value_type); ! break; } printf ("\n"); } --- 462,496 ---- } } ! else ! printf(" No initial value. "); ! ! if(register_table[i].value != NULL) { ! switch (gnp_get_register_value_type (®ister_table[i])) ! { ! case GNP_VALUE_INTEGER: ! printf ("current value (integer): %d ", ! *register_table[i].value->value.integer); ! break; ! case GNP_VALUE_UNDEF: ! printf ("current value undefined"); ! break; ! case GNP_VALUE_STRING: ! printf ("current value (string): \"%s\", ", ! register_table[i].value->value.string); ! break; ! case GNP_VALUE_GNCNUMERIC: ! printf ("current value (gncnum): \"%s\", ", ! gnc_numeric_to_string (*register_table[i].value->value.gncnum)); ! break; ! default: ! printf ("current value type undefined!: type %x ", ! register_table[i].value->value_type); ! break; ! } } + else + printf(" No current value."); + printf ("\n"); } Index: GnuPOSregisters.c =================================================================== RCS file: /cvsroot/gnupos/gnupos/src/GnuPOSregisters.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** GnuPOSregisters.c 3 Jan 2003 01:25:16 -0000 1.14 --- GnuPOSregisters.c 4 Jan 2003 14:01:55 -0000 1.15 *************** *** 51,55 **** {"statustext", GNPR_STATUSTEXT, GNP_REGISTER_DISPLAY, NULL, NULL, NULL,NULL,FALSE}, {"receiptprn", GNPR_RECEIPTPRN, GNP_REGISTER_DISPLAY, NULL, NULL, NULL,NULL,FALSE}, ! {"custdisp", GNPR_CUSTDISPLY, GNP_REGISTER_DISPLAY, NULL, NULL, NULL,NULL,FALSE}, {"statestack", GNPR_STATESTACK, GNP_REGISTER_READONLY|GNP_REGISTER_LIST, NULL, NULL, NULL,NULL,FALSE} }; --- 51,55 ---- {"statustext", GNPR_STATUSTEXT, GNP_REGISTER_DISPLAY, NULL, NULL, NULL,NULL,FALSE}, {"receiptprn", GNPR_RECEIPTPRN, GNP_REGISTER_DISPLAY, NULL, NULL, NULL,NULL,FALSE}, ! {"custdisplay", GNPR_CUSTDISPLY, GNP_REGISTER_DISPLAY, NULL, NULL, NULL,NULL,FALSE}, {"statestack", GNPR_STATESTACK, GNP_REGISTER_READONLY|GNP_REGISTER_LIST, NULL, NULL, NULL,NULL,FALSE} }; *************** *** 157,181 **** register_table[register_current_count].typed = FALSE; ! loop = value; ! ! while(loop!=NULL) { ! rvs = (register_value_struct *)g_malloc(sizeof(register_value_struct)); ! if(rvs == NULL) ! { ! printf("ERROR: Out of memory building register value. ABORTING.\n"); ! exit(-1); ! } ! rvs->value = loop->value; ! rvs->value_type = loop->value_type; ! rvs->next = NULL; ! if(current == NULL) ! register_table[register_current_count].value = rvs; ! else ! current->next = rvs; ! current = rvs; ! loop = loop->next; } --- 157,186 ---- register_table[register_current_count].typed = FALSE; ! if(value==NULL) ! register_table[register_current_count].value = NULL; ! else { ! loop = value; ! while(loop!=NULL) ! { ! rvs = (register_value_struct *)g_malloc(sizeof(register_value_struct)); ! if(rvs == NULL) ! { ! printf("ERROR: Out of memory building register value. ABORTING.\n"); ! exit(-1); ! } ! rvs->value = loop->value; ! rvs->value_type = loop->value_type; ! rvs->next = NULL; ! if(current == NULL) ! register_table[register_current_count].value = rvs; ! else ! current->next = rvs; ! ! current = rvs; ! loop = loop->next; ! } } *************** *** 194,208 **** reg=gnp_lookup_register(reg_name); if(gnp_debug) printf(" Setting callbacks. sub: %p, param: %s, typed: %d\n",sub, parameter_string, typed); reg->sub = sub; - printf("1\n"); reg->optional = parameter_string; - printf("2\n"); if(typed == 0) reg->typed = FALSE; else reg->typed = TRUE; - printf("3\n"); } --- 199,214 ---- reg=gnp_lookup_register(reg_name); + if(reg==NULL) + printf(" Register \"%s\" not found. ABORTING.\n"); + if(gnp_debug) printf(" Setting callbacks. sub: %p, param: %s, typed: %d\n",sub, parameter_string, typed); + reg->sub = sub; reg->optional = parameter_string; if(typed == 0) reg->typed = FALSE; else reg->typed = TRUE; } Index: GnuPOSxml.c =================================================================== RCS file: /cvsroot/gnupos/gnupos/src/GnuPOSxml.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** GnuPOSxml.c 3 Jan 2003 01:25:16 -0000 1.15 --- GnuPOSxml.c 4 Jan 2003 14:01:55 -0000 1.16 *************** *** 310,313 **** --- 310,315 ---- gboolean ssfound = FALSE; /* found <startstate> tag */ gboolean server = FALSE; /* found <server> tag */ + gboolean ui = FALSE; /* found <userinterface> tag */ + gboolean uieventloop = FALSE; /* found <ui_event_loop> tag */ gboolean namefound = FALSE; /* found <script><name> tag */ gboolean idfound = FALSE; /* found <identifier> tag */ *************** *** 455,459 **** } } ! if (!upperallok) printf("WARNING: Tag <%s> not recognised. IGNORED.\n",innernode->name); innernode = innernode->next; --- 457,502 ---- } } ! if ((!xmlStrcmp (innernode->name, (const xmlChar *) "userinterface")) && ! (innernode->ns == sf->namespace)) ! { ! if(gnp_debug) ! printf("Reading userinterface name.\n"); ! ! if(ui) ! { ! printf("ERROR: Two <userinterface> tags supplied. ABORTING.\n"); ! exit(-1); ! } ! ui=TRUE; ! ! gnp_global_data.ui_name = ! xmlNodeListGetString (sf->document, innernode->xmlChildrenNode, 1); ! ! if (gnp_global_data.verbose_status) ! printf ("User interface %s.\n", gnp_global_data.ui_name); ! upperallok = TRUE; ! } ! if ((!xmlStrcmp (innernode->name, (const xmlChar *) "ui_event_loop")) && ! (innernode->ns == sf->namespace)) ! { ! if(gnp_debug) ! printf("Reading ui_event_loop.\n"); ! ! if(uieventloop) ! { ! printf("ERROR: Two <ui_event_loop> tags supplied. ABORTING.\n"); ! exit(-1); ! } ! uieventloop=TRUE; ! ! gnp_global_data.ui_event = ! xmlNodeListGetString (sf->document, innernode->xmlChildrenNode, 1); ! ! if (gnp_global_data.verbose_status) ! printf ("UI Event Loop loaded as %s.\n", gnp_global_data.ui_event); ! upperallok = TRUE; ! } ! ! if (!upperallok) printf("WARNING: Tag <%s> not recognised. IGNORED.\n",innernode->name); innernode = innernode->next; *************** *** 520,524 **** { /* parse library here */ ! gnp_parse_library (sf, innerstates->xmlChildrenNode, counters); } innerstates = innerstates->next; --- 563,567 ---- { /* parse library here */ ! gnp_parse_library (sf, innerstates->xmlChildrenNode, counters, xmlGetProp (innerstates, (const xmlChar *) "name")); } innerstates = innerstates->next; *************** *** 693,697 **** gboolean ! gnp_parse_library (statefile_struct * sf, xmlNodePtr node, guint counters[]) { xmlNodePtr moreinner; --- 736,740 ---- gboolean ! gnp_parse_library (statefile_struct * sf, xmlNodePtr node, guint counters[], gchar *libname) { xmlNodePtr moreinner; *************** *** 699,704 **** gchar *type = NULL; gchar *init_routine = NULL; - extern_func_struct *top = NULL; - extern_func_struct *current = NULL; guint param_count = 99999; gchar *name = NULL; --- 742,745 ---- *************** *** 707,713 **** gboolean validtopok = FALSE; void (*initialise)(); if(gnp_debug) ! printf("In gnp_parse_library.\n"); moreinner = node; --- 748,755 ---- gboolean validtopok = FALSE; void (*initialise)(); + extern_func_struct *top=NULL,*current=NULL; if(gnp_debug) ! printf("In gnp_parse_library, library name \"%s\".\n",libname); moreinner = node; *************** *** 834,838 **** guile_name = xmlNodeListGetString (sf->document, ! moreinner->xmlChildrenNode, 1); match = TRUE; --- 876,880 ---- guile_name = xmlNodeListGetString (sf->document, ! fnode->xmlChildrenNode, 1); match = TRUE; *************** *** 890,907 **** guile_name = name; ! if (current == NULL) { if(gnp_debug) printf(" Initialising External Function structure.\n"); ! top = g_malloc (sizeof (extern_func_struct)); ! if (top == NULL) { printf ("OUT OF MEMORY!\n"); exit (-1); } ! if(efs_top==NULL) ! efs_top=top; ! current = top; } else --- 932,948 ---- guile_name = name; ! if (efs_current == NULL) { if(gnp_debug) printf(" Initialising External Function structure.\n"); ! efs_top = g_malloc (sizeof (extern_func_struct)); ! if (efs_top == NULL) { printf ("OUT OF MEMORY!\n"); exit (-1); } ! efs_current = top; ! top=efs_current; } else *************** *** 910,930 **** printf(" Adding to External Function structure.\n"); ! current->next = g_malloc (sizeof (extern_func_struct)); ! if (current->next == NULL) { printf ("OUT OF MEMORY!\n"); exit (-1); } ! current = current->next; } ! current->name = name; ! current->other_name = guile_name; ! current->parameter_string = NULL; ! current->param_count = param_count; ! current->register_flag = 0; ! current->handle=NULL; ! current->next = NULL; ! efs_current=current; } --- 951,974 ---- printf(" Adding to External Function structure.\n"); ! efs_current->next = g_malloc (sizeof (extern_func_struct)); ! if (efs_current->next == NULL) { printf ("OUT OF MEMORY!\n"); exit (-1); } ! efs_current = efs_current->next; ! ! if(top==NULL) ! top=efs_current; } ! efs_current->name = name; ! efs_current->other_name = guile_name; ! efs_current->parameter_string = NULL; ! efs_current->param_count = param_count; ! efs_current->register_flag = 0; ! efs_current->handle=NULL; ! efs_current->next = NULL; ! current=efs_current; } *************** *** 1012,1029 **** exit(-1); } ! if (current == NULL) { if(gnp_debug) printf(" Initialising External Function structure.\n"); ! top = g_malloc (sizeof (extern_func_struct)); ! if (top == NULL) { printf ("OUT OF MEMORY!\n"); exit (-1); } ! if(efs_top==NULL) ! efs_top=top; ! current = top; } else --- 1056,1073 ---- exit(-1); } ! ! if (efs_current == NULL) { if(gnp_debug) printf(" Initialising External Function structure.\n"); ! efs_top = g_malloc (sizeof (extern_func_struct)); ! if (efs_top == NULL) { printf ("OUT OF MEMORY!\n"); exit (-1); } ! efs_current = efs_top; ! top=efs_top; } else *************** *** 1032,1052 **** printf(" Adding to External Function structure.\n"); ! current->next = g_malloc (sizeof (extern_func_struct)); ! if (current->next == NULL) { printf ("OUT OF MEMORY!\n"); exit (-1); } ! current = current->next; } ! current->name = expname; ! current->other_name = expreg; ! current->parameter_string = expparam; ! current->param_count = typed; ! current->register_flag = 1; ! current->handle=NULL; ! current->next = NULL; ! efs_current=current; validtopok = TRUE; --- 1076,1096 ---- printf(" Adding to External Function structure.\n"); ! efs_current->next = g_malloc (sizeof (extern_func_struct)); ! if (efs_current->next == NULL) { printf ("OUT OF MEMORY!\n"); exit (-1); } ! efs_current = efs_current->next; } ! efs_current->name = expname; ! efs_current->other_name = expreg; ! efs_current->parameter_string = expparam; ! efs_current->param_count = typed; ! efs_current->register_flag = 1; ! efs_current->handle=NULL; ! efs_current->next = NULL; ! current=efs_current; validtopok = TRUE; *************** *** 1064,1067 **** --- 1108,1199 ---- exit (-1); } + + if (init_routine!=NULL) + { + if(gnp_debug) + printf(" Setting Initialisation routine for library.\n"); + + if (efs_current == NULL) + { + if(gnp_debug) + printf(" Initialising External Function structure.\n"); + + efs_top = g_malloc (sizeof (extern_func_struct)); + if (efs_top == NULL) + { + printf ("OUT OF MEMORY!\n"); + exit (-1); + } + efs_current = efs_top; + top=efs_current; + } + else + { + if(gnp_debug) + printf(" Adding to External Function structure.\n"); + + efs_current->next = g_malloc (sizeof (extern_func_struct)); + if (efs_current->next == NULL) + { + printf ("OUT OF MEMORY!\n"); + exit (-1); + } + efs_current = efs_current->next; + } + + efs_current->name = init_routine; + efs_current->other_name = NULL; + efs_current->parameter_string = NULL; + efs_current->param_count = 0; + efs_current->register_flag = 2; + efs_current->handle=NULL; + efs_current->next = NULL; + current=efs_current; + } + + if ((libname!=NULL)&&(!strcmp(libname,gnp_global_data.ui_name))) + { + + if(gnp_debug) + printf(" Setting UI event loop.\n"); + + if (efs_current == NULL) + { + if(gnp_debug) + printf(" Initialising External Function structure.\n"); + + efs_top = g_malloc (sizeof (extern_func_struct)); + if (efs_top == NULL) + { + printf ("OUT OF MEMORY!\n"); + exit (-1); + } + efs_current = efs_top; + top=efs_current; + } + else + { + if(gnp_debug) + printf(" Adding to External Function structure.\n"); + + efs_current->next = g_malloc (sizeof (extern_func_struct)); + if (efs_current->next == NULL) + { + printf ("OUT OF MEMORY!\n"); + exit (-1); + } + efs_current = efs_current->next; + } + + efs_current->name = gnp_global_data.ui_event; + efs_current->other_name = NULL; + efs_current->parameter_string = NULL; + efs_current->param_count = 0; + efs_current->register_flag = 3; + efs_current->handle=NULL; + efs_current->next = NULL; + current=efs_current; + } + if ((type == NULL) || (!strcmp (type, (const char *) "internal"))) { *************** *** 1094,1133 **** printf(" Determined library to be of external type.\n"); ! /* Testing: Move this stuff to gnp_load_dynlibsyms() ! x = dlinit (); ! if (x != 0) ! { ! printf ("ERROR: dl_init() returns an error. ABORTING.\n"); ! exit (-1); ! } ! ! if(gnp_debug) ! printf(" Opening library %s\n",path); ! ! myhandle = dlopen (path,RTLD_LAZY); ! if(myhandle==NULL) ! { ! printf("ERROR: Library \"%s\" could not be opened. ABORTING.\n",path); ! exit(-1); ! } ! ! if(gnp_debug) ! printf(" Library opened, handle is %x.\n",myhandle); ! */ ! current = top; ! while (current != NULL) { if(gnp_debug) ! printf(" Setting handle %x for %s.\n",myhandle, current->name); ! current->handle=myhandle; current->library_path = path; ! current = current->next; } - /* - if(init_routine!=NULL) - { - initialise=lt_dlsym(myhandle,init_routine); - initialise(); - } */ } else --- 1226,1239 ---- printf(" Determined library to be of external type.\n"); ! while (top != NULL) { if(gnp_debug) ! printf(" Setting handle %x for %s.\n",myhandle, top->name); current->library_path = path; ! if(top!=current) ! top = current->next; ! else ! top=NULL; } } else *************** *** 1524,1528 **** { extern_func_struct *ecurrent; ! void *sub; typedef struct --- 1630,1634 ---- { extern_func_struct *ecurrent; ! void (*sub)(); typedef struct *************** *** 1541,1548 **** if(efs_top!=NULL) { ! /* if(gnp_debug) printf(" Initialising libltdl.\n"); ! x = lt_dlinit (); if (x != 0) { --- 1647,1654 ---- if(efs_top!=NULL) { ! if(gnp_debug) printf(" Initialising libltdl.\n"); ! /* x = lt_dlinit (); if (x != 0) { *************** *** 1585,1589 **** lstop=g_malloc(sizeof(libstruct)); ! /* FIXME: Put error checking here! */ lscurrent=lstop; } --- 1691,1699 ---- lstop=g_malloc(sizeof(libstruct)); ! if(lstop == NULL) ! { ! printf("ERROR: Out of memory!\n"); ! exit(-1); ! } lscurrent=lstop; } *************** *** 1594,1598 **** lscurrent->next=g_malloc(sizeof(libstruct)); ! /* FIXME: Put error checking here */ lscurrent=lscurrent->next; } --- 1704,1712 ---- lscurrent->next=g_malloc(sizeof(libstruct)); ! if(lscurrent->next == NULL) ! { ! printf("ERROR: Out of memory!\n"); ! exit(-1); ! } lscurrent=lscurrent->next; } *************** *** 1629,1659 **** } ! if(ecurrent->register_flag==0) { if(gnp_debug) printf(" - Function identified as a guile function called \"%s\".\n", ecurrent->other_name); /* This is a guile function */ scm_make_gsubr(ecurrent->other_name,ecurrent->param_count,0,0,sub); ! } ! else ! if(ecurrent->register_flag==1) ! { ! if(gnp_debug) ! printf(" - Function identified as a callback function called \"%s\".\n", ! ecurrent->other_name); /* This is a register callback */ ! gnp_add_register_callback(ecurrent->other_name, sub, ! ecurrent->parameter_string, ecurrent->param_count); ! if(gnp_debug) ! printf(" Function callback added.\n"); ! } ! else ! { ! printf("ERROR: Internal error - invalid value for register_flag! ABORTING.\n"); ! exit(-1); ! } if(gnp_debug) ! printf(" End processing for %s.\n"); ecurrent=ecurrent->next; } --- 1743,1799 ---- } ! switch(ecurrent->register_flag) { + case 0: if(gnp_debug) + { printf(" - Function identified as a guile function called \"%s\".\n", ecurrent->other_name); + printf(" Parameter count: %d. Subroutine pointer %p.\n", + ecurrent->param_count, sub); + } /* This is a guile function */ scm_make_gsubr(ecurrent->other_name,ecurrent->param_count,0,0,sub); ! break; ! ! case 1: ! if(gnp_debug) ! printf(" - Function identified as a callback function called \"%s\".\n", ! ecurrent->other_name); /* This is a register callback */ ! gnp_add_register_callback(ecurrent->other_name, sub, ! ecurrent->parameter_string, ecurrent->param_count); ! if(gnp_debug) ! printf(" Function callback added.\n"); ! break; ! ! case 2: ! /* This is a library initialisation routine */ ! /* WE call this straight away, we don't save it. */ ! ! if(gnp_debug) ! printf(" - Function identified as a library initialisation function.\n"); ! ! sub(); ! break; ! ! case 3: ! /* This is the UI event loop handler. We store this straight into the */ ! /* global data structure. */ ! ! if(gnp_debug) ! printf(" - Function identified as the UI event loop handler.\n"); ! ! gnp_global_data.ui_event_ptr = sub; ! break; ! ! default: ! printf("ERROR: Internal error - invalid value for register_flag! ABORTING.\n"); ! exit(-1); ! } ! if(gnp_debug) ! printf(" End processing for %s.\n",ecurrent->name); ! ecurrent=ecurrent->next; } Index: main.c =================================================================== RCS file: /cvsroot/gnupos/gnupos/src/main.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** main.c 26 Dec 2002 12:50:43 -0000 1.8 --- main.c 4 Jan 2003 14:01:55 -0000 1.9 *************** *** 23,30 **** innermain (int argc, char **argv, void *closure) { gnp_initialise_guile (); ! /* Load the gui library here and call its execution loop */ } --- 23,42 ---- innermain (int argc, char **argv, void *closure) { + if (gnp_debug) + printf("Initialising internal data structures.\n"); + + gnp_initialise_tables (); + + if (gnp_debug) + printf("Initialising guile functions.\n"); + gnp_initialise_guile (); ! if (gnp_debug) ! printf("Starting event loop.\n"); ! ! gnp_global_data.ui_event_ptr(); + printf ("Thank you for using GnuPOS. Have a nice day.\n"); } *************** *** 102,107 **** } ! gnp_initialise_tables (); scm_boot_guile (argc, &argv, innermain, NULL); return (0); } --- 114,122 ---- } ! if (gnp_debug) ! printf("Booting guile.\n"); ! scm_boot_guile (argc, &argv, innermain, NULL); + return (0); } |