This is sl2slc.c in view mode; [Download] [Up]
#include <config.h> #include <stdio.h> #include <slang.h> #include <string.h> volatile int Lang_Error = 0; FILE *FPout = stdout; void lang_doerror(char *error) { char err[80]; char *str; if (!Lang_Error) Lang_Error = UNKNOWN_ERROR; *err = 0; switch(Lang_Error) { case (UNDEFINED_NAME): str = "Undefined_Name"; break; case (SYNTAX_ERROR): str = "Syntax_Error"; break; case (STACK_OVERFLOW): str = "Stack_Overflow"; break; case (STACK_UNDERFLOW): str = "Stack_Underflow"; break; case (DUPLICATE_DEFINITION): str = "Duplicate_Definition"; break; case (TYPE_MISMATCH): str = "Type_Mismatch"; break; case(READONLY_ERROR): str = "Variable is read only."; break; case (MALLOC_ERROR) : str = "S-Lang: Malloc Error."; break; case USER_BREAK: strcpy(err, "User Break!"); break; case (INTRINSIC_ERROR): str = "Intrinsic Error"; break; case DIVIDE_ERROR: str = "Divide by zero."; break; /* application code should handle this */ default: if (error != NULL) str = error; else str = "Unknown Error."; } if (*err == 0) sprintf(err, "S-Lang Error: %s\n", str); fputs(err, stderr); } static int Slang_Line_Len = 257; static int defining_variables = 0; extern char *byte_compile_name(char *); void lang_compile(char *s) { int n = Slang_Line_Len; int dn; if (Lang_Error) return; if (!defining_variables) s = byte_compile_name(s); if (*s == '[') defining_variables = 1; else if (*s == ']') defining_variables = 0; dn = strlen(s) + 1; n += dn; if (n > 250) { fputs("\n.", FPout); n = dn; } fputs(s, FPout); putc(' ', FPout); fflush(FPout); Slang_Line_Len = n; } int doit(char *f) { lang_load_file(f); if (Lang_Error && (f != NULL)) { fprintf(stderr, "Parse Error: file: %s\n", f); return(-1); } putc('\n', FPout); return(0); } int main(int argc, char **argv) { char file[256], *f; init_lang(); if (argc <= 1) return doit(NULL); argc--; argv++; while (argc--) { f = *argv++; strcpy(file, f); strcat(file, "c"); if ((FPout = fopen(file, "wt")) == NULL) { fprintf(stderr, "Unable to open %s\n"); exit(1); } fprintf(stderr, "processing %s\n", f); Slang_Line_Len = 257; if (doit(f)) exit(1); fclose (FPout); } return (0); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.