1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: char copyright[] =
   9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
  10:  All rights reserved.\n";
  11: #endif not lint
  12: 
  13: #ifndef lint
  14: static char sccsid[] = "@(#)main.c	5.1 (Berkeley) 6/7/85";
  15: #endif not lint
  16: 
  17: /*
  18:  * Debugger main routine.
  19:  */
  20: 
  21: #include "defs.h"
  22: #include <setjmp.h>
  23: #include <signal.h>
  24: #include "main.h"
  25: #include "command.h"
  26: #include "process.h"
  27: #include "object.h"
  28: 
  29: #define FIRST_TIME 0        /* initial value setjmp returns */
  30: 
  31: LOCAL int firstarg;
  32: LOCAL jmp_buf env;
  33: LOCAL catchintr();
  34: 
  35: main(argc, argv)
  36: int argc;
  37: char **argv;
  38: {
  39:     FILE *fp;
  40:     int i;
  41: 
  42:     catcherrs();
  43:     catchsigs();
  44:     scanargs(argc, argv);
  45:     cmdname = argv[0];
  46:     if ((fp = fopen(objname, "r")) == NIL) {
  47:     panic("can't read %s", objname);
  48:     } else {
  49:     fclose(fp);
  50:     }
  51:     if (option('r')) {
  52:     if (setjmp(env) == FIRST_TIME) {
  53:         arginit();
  54:         for (i = firstarg; i < argc; i++) {
  55:         newarg(argv[i]);
  56:         }
  57:         run();
  58:         /* NOTREACHED */
  59:     } else {
  60:         option('r') = FALSE;
  61:     }
  62:     } else {
  63:     initstart();
  64:     prompt();
  65:     init();
  66:     }
  67:     setjmp(env);
  68:     signal(SIGINT, catchintr);
  69:     yyparse();
  70:     putchar('\n');
  71:     quit(0);
  72: }
  73: 
  74: /*
  75:  * Initialize the world, including setting initial input file
  76:  * if the file exists.
  77:  */
  78: 
  79: init()
  80: {
  81:     initinput();
  82:     readobj(objname);
  83:     lexinit();
  84: }
  85: 
  86: /*
  87:  * After a non-fatal error we jump back to command parsing.
  88:  */
  89: 
  90: erecover()
  91: {
  92:     gobble();
  93:     prompt();
  94:     longjmp(env, 1);
  95: }
  96: 
  97: /*
  98:  * This routine is called when an interrupt occurs.
  99:  */
 100: 
 101: LOCAL catchintr()
 102: {
 103:     putchar('\n');
 104:     prompt();
 105:     longjmp(env, 1);
 106: }
 107: 
 108: /*
 109:  * scan the argument list
 110:  */
 111: 
 112: LOCAL scanargs(argc, argv)
 113: int argc;
 114: char **argv;
 115: {
 116:     register int i, j;
 117:     BOOLEAN done;
 118: 
 119:     if (streq(argv[0], "pxhdr") || streq(argv[0], "pix")) {
 120:     objname = argv[1];
 121:     option('r') = TRUE;
 122:     option('t') = TRUE;
 123:     if (streq(argv[0], "pxhdr")) {
 124:         setargs("pdx", argv[2]);
 125:         firstarg = 3;
 126:     } else {
 127:         setargs("pix", NIL);
 128:         firstarg = 2;
 129:     }
 130:     argv[0] = "pdx";
 131:     } else {
 132:     done = FALSE;
 133:     i = 1;
 134:     while (i < argc && !done) {
 135:         if (argv[i][0] == '-') {
 136:         for (j = 1; argv[i][j] != '\0'; j++) {
 137:             switch (argv[i][j]) {
 138:             case 'r':   /* run program before accepting commands */
 139:             case 'i':   /* assume input is a terminal */
 140:             case 'b':   /* (internal) trace breakpoints */
 141:             case 'e':   /* (internal) trace execution */
 142:             case 'h':   /* (internal) display header information */
 143:                 option(argv[i][j]) = TRUE;
 144:                 break;
 145: 
 146:             default:
 147:             panic("bad option \"%c\"", argv[i]);
 148:             }
 149:         }
 150:         } else {
 151:         objname = argv[i];
 152:         done = TRUE;
 153:         }
 154:         i++;
 155:     }
 156:     firstarg = i;
 157:     setargs("pdx", objname);
 158:     }
 159: }
 160: 
 161: /*
 162:  * Terminate program.  In the case of the -t option, we must remove
 163:  * the object file because it's a tmp file.
 164:  */
 165: 
 166: quit(r)
 167: int r;
 168: {
 169:     if (option('t')) {
 170:     unlink(objname);
 171:     }
 172:     exit(r);
 173: }
 174: 
 175: LOCAL catchsigs()
 176: {
 177:     signal(SIGHUP, quit);
 178:     signal(SIGQUIT, quit);
 179: }

Defined functions

catchintr defined in line 101; used 2 times
catchsigs defined in line 175; used 1 times
  • in line 43
erecover defined in line 90; never used
init defined in line 79; used 1 times
  • in line 65
main defined in line 35; never used
quit defined in line 166; used 3 times
scanargs defined in line 112; used 1 times
  • in line 44

Defined variables

copyright defined in line 8; never used
env defined in line 32; used 4 times
firstarg defined in line 31; used 4 times
sccsid defined in line 14; never used

Defined macros

FIRST_TIME defined in line 29; used 1 times
  • in line 52
Last modified: 1985-06-07
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1074
Valid CSS Valid XHTML 1.0 Strict