X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Finterpreter%2Fhugs.c;h=c1120b1ddd008967fdb712f31ebd4843dcafa030;hb=674ad01f5f5edcc20e3fee4e5f39a2d8388120a3;hp=1da17a12bcd0c0e740e65858dc3982adfc97b20d;hpb=9308edd2f5c71c40c996f7dea9ac9d706db65508;p=ghc-hetmet.git diff --git a/ghc/interpreter/hugs.c b/ghc/interpreter/hugs.c index 1da17a1..c1120b1 100644 --- a/ghc/interpreter/hugs.c +++ b/ghc/interpreter/hugs.c @@ -9,8 +9,8 @@ * included in the distribution. * * $RCSfile: hugs.c,v $ - * $Revision: 1.62 $ - * $Date: 2000/04/07 10:00:28 $ + * $Revision: 1.65 $ + * $Date: 2000/04/10 14:28:14 $ * ------------------------------------------------------------------------*/ #include @@ -70,9 +70,6 @@ static Void local listNames ( Void ); static Void local toggleSet ( Char,Bool ); static Void local togglesIn ( Bool ); static Void local optionInfo ( Void ); -#if USE_REGISTRY -static String local optionsToStr ( Void ); -#endif static Void local readOptions ( String ); static Bool local processOption ( String ); static Void local setHeapSize ( String ); @@ -203,11 +200,9 @@ char *argv[]; { * Initialization, interpret command line args and read prelude: * ------------------------------------------------------------------------*/ -static List /*CONID*/ initialize(argc,argv) /* Interpreter initialization */ -Int argc; -String argv[]; { - Int i; - char argv_0_orig[1000]; +static List /*CONID*/ initialize ( Int argc, String argv[] ) +{ + Int i, j; List initialModules; setLastEdit((String)0,0); @@ -221,19 +216,8 @@ String argv[]; { #endif hugsPath = strCopy(HUGSPATH); readOptions("-p\"%s> \" -r$$"); -#if USE_REGISTRY - projectPath = strCopy(readRegChildStrings(HKEY_LOCAL_MACHINE,ProjectRoot, - "HUGSPATH", PATHSEP, "")); - readOptions(readRegString(HKEY_LOCAL_MACHINE,HugsRoot,"Options","")); - readOptions(readRegString(HKEY_CURRENT_USER, HugsRoot,"Options","")); -#endif /* USE_REGISTRY */ readOptions(fromEnv("STGHUGSFLAGS","")); - strncpy(argv_0_orig,argv[0],1000); /* startupHaskell mangles argv[0] */ - startupHaskell (argc,argv,NULL); - argc = prog_argc; - argv = prog_argv; - # if DEBUG { char exe_name[N_INSTALLDIR + 6]; @@ -243,29 +227,37 @@ String argv[]; { } # endif + /* startupHaskell extracts args between +RTS ... -RTS, and sets + prog_argc/prog_argv to the rest. We want to further process + the rest, so we then get hold of them again. + */ + startupHaskell ( argc, argv, NULL ); + getProgArgv ( &argc, &argv ); + /* Find out early on if we're in combined mode or not. everybody(PREPREL) needs to know this. Also, establish the heap size; */ - for (i=1; i < argc; ++i) { + for (i = 1; i < argc; ++i) { if (strcmp(argv[i], "--")==0) break; if (strcmp(argv[i], "-c")==0) combined = FALSE; if (strcmp(argv[i], "+c")==0) combined = TRUE; - if (strncmp(argv[i],"+h",2)==0 || - strncmp(argv[i],"-h",2)==0) + if (strncmp(argv[i],"+h",2)==0 || strncmp(argv[i],"-h",2)==0) setHeapSize(&(argv[i][2])); } everybody(PREPREL); initialModules = NIL; - for (i=1; i < argc; ++i) { /* process command line arguments */ - if (strcmp(argv[i], "--")==0) break; - if (argv[i] && argv[i][0]/* workaround for /bin/sh silliness*/ - && !processOption(argv[i])) { - initialModules - = cons ( mkCon(findText(argv[i])), initialModules ); + for (i = 1; i < argc; ++i) { /* process command line arguments */ + if (strcmp(argv[i], "--")==0) + { argv[i] = NULL; break; } + if (argv[i] && argv[i][0]/* workaround for /bin/sh silliness*/) { + if (!processOption(argv[i])) + initialModules + = cons ( mkCon(findText(argv[i])), initialModules ); + argv[i] = NULL; } } @@ -285,6 +277,16 @@ String argv[]; { " combined mode\n\n" ); } + /* slide args back over the deleted ones. */ + j = 1; + for (i = 1; i < argc; i++) + if (argv[i]) + argv[j++] = argv[i]; + + argc = j; + + setProgArgv ( argc, argv ); + initDone = TRUE; return initialModules; } @@ -380,65 +382,6 @@ ToDo Putchar('\n'); } -#if USE_REGISTRY -#define PUTC(c) \ - *next++=(c) - -#define PUTS(s) \ - strcpy(next,s); \ - next+=strlen(next) - -#define PUTInt(optc,i) \ - sprintf(next,"-%c%d",optc,i); \ - next+=strlen(next) - -#define PUTStr(c,s) \ - next=PUTStr_aux(next,c,s) - -static String local PUTStr_aux ( String,Char, String)); - -static String local PUTStr_aux(next,c,s) -String next; -Char c; -String s; { - if (s) { - String t = 0; - sprintf(next,"-%c\"",c); - next+=strlen(next); - for(t=s; *t; ++t) { - PUTS(unlexChar(*t,'"')); - } - next+=strlen(next); - PUTS("\" "); - } - return next; -} - -static String local optionsToStr() { /* convert options to string */ - static char buffer[2000]; - String next = buffer; - - Int i; - for (i=0; toggle[i].c; ++i) { - PUTC(*toggle[i].flag ? '+' : '-'); - PUTC(toggle[i].c); - PUTC(' '); - } - PUTS(haskell98 ? "+98 " : "-98 "); - PUTInt('h',hpSize); PUTC(' '); - PUTStr('p',prompt); - PUTStr('r',repeatStr); - PUTStr('P',hugsPath); - PUTStr('E',hugsEdit); - PUTInt('c',cutoff); PUTC(' '); -#if USE_PREPROCESSOR && (defined(HAVE_POPEN) || defined(HAVE__POPEN)) - PUTStr('F',preprocessor); -#endif - PUTC('\0'); - return buffer; -} -#endif /* USE_REGISTRY */ - #undef PUTC #undef PUTS #undef PUTInt @@ -545,11 +488,7 @@ String s; { hpSize = MAXIMUMHEAP; if (initDone && hpSize != heapSize) { /* ToDo: should this use a message box in winhugs? */ -#if USE_REGISTRY - FPrintf(stderr,"Change to heap size will not take effect until you rerun Hugs\n"); -#else FPrintf(stderr,"You cannot change heap size from inside Hugs\n"); -#endif } else { heapSize = hpSize; } @@ -711,12 +650,9 @@ static Void local set() { /* change command line options from*/ do { if (!processOption(s)) { ERRMSG(0) "Option string must begin with `+' or `-'" - EEND; + EEND_NO_LONGJMP; } } while ((s=readFilename())!=0); -#if USE_REGISTRY - writeRegString("Options", optionsToStr()); -#endif } else optionInfo();