home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / adb / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  1.9 KB  |  144 lines

  1. #
  2. /*
  3.  *
  4.  *    UNIX debugger
  5.  *
  6.  */
  7.  
  8. #include "defs.h"
  9.  
  10.  
  11. MSG        NOEOR;
  12.  
  13. INT        mkfault;
  14. INT        executing;
  15. INT        infile;
  16. CHAR        *lp;
  17. INT        maxoff;
  18. INT        maxpos;
  19. INT        sigint;
  20. INT        sigqit;
  21. INT        wtflag;
  22. L_INT        maxfile;
  23. L_INT        maxstor;
  24. L_INT        txtsiz;
  25. L_INT        datsiz;
  26. L_INT        datbas;
  27. L_INT        stksiz;
  28. STRING        errflg;
  29. INT        exitflg;
  30. INT        magic;
  31. L_INT        entrypt;
  32.  
  33. CHAR        lastc;
  34. INT        eof;
  35.  
  36. INT        lastcom;
  37. L_INT        var[36];
  38. STRING        symfil;
  39. STRING        corfil;
  40. CHAR        printbuf[];
  41. CHAR        *printptr;
  42.  
  43.  
  44. L_INT    round(a,b)
  45. L_INT        a, b;
  46. {
  47.     L_INT        w;
  48.     w = ((a+b-1)/b)*b;
  49.     return(w);
  50. }
  51.  
  52. /* error handling */
  53.  
  54. chkerr()
  55. {
  56.     IF errflg ORF mkfault
  57.     THEN    error(errflg);
  58.     FI
  59. }
  60.  
  61. error(n)
  62.     STRING        n;
  63. {
  64.     errflg=n;
  65.     iclose(); oclose();
  66.     longjmp(erradb,1);
  67. }
  68.  
  69. fault(a)
  70. {
  71.     signal(a,fault);
  72.     lseek(infile,0L,2);
  73.     mkfault++;
  74. }
  75.  
  76. /* set up files and initial address mappings */
  77. INT argcount;
  78.  
  79. main(argc, argv)
  80. REG STRING    *argv;
  81. REG INT        argc;
  82. {
  83.     maxfile=1L<<24; maxstor=1L<<16;
  84.  
  85.     gtty(0,&adbtty);
  86.     gtty(0,&usrtty);
  87.     WHILE argc>1
  88.     DO    IF eqstr("-w",argv[1])
  89.         THEN    wtflag=2; argc--; argv++;
  90.         ELSE    break;
  91.         FI
  92.     OD
  93.  
  94.     IF argc>1 THEN symfil = argv[1]; FI
  95.     IF argc>2 THEN corfil = argv[2]; FI
  96.     argcount=argc;
  97.     setsym(); setcor();
  98.  
  99.     /* set up variables for user */
  100.     maxoff=MAXOFF; maxpos=MAXPOS;
  101.     var[VARB] = datbas;
  102.     var[VARD] = datsiz;
  103.     var[VARE] = entrypt;
  104.     var[VARM] = magic;
  105.     var[VARS] = stksiz;
  106.     var[VART] = txtsiz;
  107.  
  108.     IF (sigint=signal(SIGINT,01))!=01
  109.     THEN    sigint=fault; signal(SIGINT,fault);
  110.     FI
  111.     sigqit=signal(SIGQUIT,1);
  112.     setjmp(erradb);
  113.     IF executing THEN delbp(); FI
  114.     executing=FALSE;
  115.  
  116.     LOOP    flushbuf();
  117.         IF errflg
  118.         THEN printf("%s\n",errflg);
  119.              exitflg=errflg;
  120.              errflg=0;
  121.         FI
  122.         IF mkfault
  123.         THEN    mkfault=0; printc(EOR); prints(DBNAME);
  124.         FI
  125.         lp=0; rdc(); lp--;
  126.         IF eof
  127.         THEN    IF infile
  128.             THEN    iclose(); eof=0; longjmp(erradb,1);
  129.             ELSE    done();
  130.             FI
  131.         ELSE    exitflg=0;
  132.         FI
  133.         command(0,lastcom);
  134.         IF lp ANDF lastc!=EOR THEN error(NOEOR); FI
  135.     POOL
  136. }
  137.  
  138. done()
  139. {
  140.     endpcs();
  141.     exit(exitflg);
  142. }
  143.  
  144.