static void path_extname (char *path) { #ifdef VMS char *p; #endif path = SLpath_extname (path); #ifndef VMS SLang_push_string (path); #else p = strchr (path, ';'); if (p == NULL) (void)SLang_push_string (p); else (void)SLang_push_malloced_string (SLmake_nstring (path, (unsigned int)(p - path))); #endif }
/* returns SLmalloced string */ static char *find_file (SLFUTURE_CONST char *path, SLFUTURE_CONST char *file) { char *dirfile; char *extname; char *filebuf; char *filesl, *fileslc; unsigned int len; if (NULL != (dirfile = SLpath_find_file_in_path (path, file))) return dirfile; /* Not found, or an error occured. */ if (_pSLang_Error) return NULL; extname = SLpath_extname (file); if (*extname != 0) return NULL; /* No extension. So look for .slc and .sl forms */ len = (extname - file); filebuf = SLmalloc (len + 5); strcpy (filebuf, file); strcpy (filebuf + len, ".sl"); filesl = SLpath_find_file_in_path (path, filebuf); if ((filesl == NULL) && _pSLang_Error) { SLfree (filebuf); return NULL; } strcpy (filebuf + len, ".slc"); fileslc = SLpath_find_file_in_path (path, filebuf); SLfree (filebuf); dirfile = more_recent (filesl, fileslc); if (dirfile != filesl) SLfree (filesl); if (dirfile != fileslc) SLfree (fileslc); return dirfile; }
int main (int argc, char **argv) { int i; int utf8 = 0; for (i = 1; i < argc; i++) { char *arg = argv[i]; if (*arg != '-') break; if (0 == strcmp (arg, "-utf8")) { utf8 = 1; continue; } i = argc; } if (i >= argc) { fprintf (stderr, "Usage: %s [-utf8] FILE...\n", argv[0]); return 1; } (void) SLutf8_enable (utf8); if ((-1 == SLang_init_all ()) || (-1 == SLang_init_array_extra ()) || (-1 == SLadd_intrin_fun_table (Intrinsics, NULL)) || (-1 == add_test_classes ())) return 1; SLang_Traceback = 1; if (-1 == SLang_set_argc_argv (argc, argv)) return 1; #ifdef HAVE_FPSETMASK # ifndef FP_X_OFL # define FP_X_OFL 0 # endif # ifndef FP_X_INV # define FP_X_INV 0 # endif # ifndef FP_X_DZ # define FP_X_DZ 0 # endif # ifndef FP_X_DNML # define FP_X_DNML 0 # endif # ifndef FP_X_UFL # define FP_X_UFL 0 # endif # ifndef FP_X_IMP # define FP_X_IMP 0 # endif fpsetmask (~(FP_X_OFL|FP_X_INV|FP_X_DZ|FP_X_DNML|FP_X_UFL|FP_X_IMP)); #endif if (i + 1 < argc) Ignore_Exit = 1; while (i < argc) { char *file = argv[i]; if (0 == strncmp (SLpath_extname (file), ".slc", 4)) { char *file_sl = SLmake_string (file); file_sl[strlen(file_sl)-1] = 0; if (-1 == SLang_byte_compile_file (file_sl, 0)) { SLfree (file_sl); return 1; } SLfree (file_sl); } if (-1 == SLang_load_file (file)) return 1; i++; } return SLang_get_error (); }