         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
        ENABLE   = ASSEMBLE( SED 1 )#,                         <<09381>>00681000
        DISABLE  = ASSEMBLE( SED 0 )#,                         <<09381>>00682000
           LIVE'SYS, <<TRUE: WE ARE ANALYZING THE LIVE SYSTEM>><<09380>>00742500
             MSTART,  <<TRUE: POINTER TO CURR MONITOR ENTRY >> <<09381>>00762000
INTRINSIC READX;                                               <<09381>>00857000
                 S1=S-1,                                       <<09381>>00876000
   LIVENUMBANKS       = COREBUF(%1047)        #,               <<09380>>01087000
INTEGER PROCEDURE GETDATASEG(MSIZE,VMSIZE);                    <<09381>>01520000
  VALUE MSIZE, VMSIZE;                                         <<09381>>01520200
  INTEGER MSIZE, VMSIZE;                                       <<09381>>01520400
  OPTION EXTERNAL;                                             <<09381>>01520600
                                                               <<09381>>01520800
PROCEDURE RELDATASEG(EN);                                      <<09381>>01521000
  VALUE EN;                                                    <<09381>>01521200
  INTEGER EN;                                                  <<09381>>01521400
  OPTION EXTERNAL;                                             <<09381>>01521600
                                                               <<09381>>01521800
PROCEDURE FMTMON(PRNTFILE);                                    <<09381>>01771000
  VALUE PRNTFILE;                                              <<09381>>01771200
  INTEGER PRNTFILE;                                            <<09381>>01771400
  OPTION FORWARD;                                              <<09381>>01771600
                                                               <<09381>>01771800
PROCEDURE PUTDNUM(NUM);                                        <<09381>>01772000
  VALUE NUM;                                                   <<09381>>01772200
  DOUBLE NUM;                                                  <<09381>>01772400
  OPTION FORWARD;                                              <<09381>>01772600
                                                               <<09381>>01772800
PROCEDURE PUTDNUMP(NUM);                                       <<09381>>01773000
  VALUE NUM;                                                   <<09381>>01773200
  DOUBLE NUM;                                                  <<09381>>01773400
  OPTION FORWARD;                                              <<09381>>01773600
                                                               <<09381>>01773800
PROCEDURE FIND(PARMSTRING);                                    <<*9388>>01774000
  BYTE ARRAY PARMSTRING;                                       <<*9388>>01774200
  OPTION FORWARD;                                              <<*9388>>01774400
                                                               <<*9388>>01774600
<< IF LIVE'SYS THEN GET WORD FROM RUNNING HOST'S MEMORY >>     <<09380>>02120500
IF LIVE'SYS THEN                                               <<09380>>02121000
BEGIN                                                          <<09380>>02121500
  TOS := ADR;                                                  <<09380>>02122000
  ASSEMBLE(LSEA);                                              <<09380>>02122500
  CORE := TOS;                                                 <<09380>>02123000
  DDEL;                                                        <<09380>>02123500
  RETURN;                                                      <<09380>>02124000
END;                                                           <<09380>>02124500
                                                               <<09380>>02125000
IF LIVE'SYS THEN                                               <<09380>>02737500
BEGIN                                                          <<09380>>02738000
  FOR TCOUNT := 0 UNTIL WORDCOUNT - 1 DO                       <<09380>>02738500
  BEGIN                                                        <<09380>>02739000
    TOS := ADR + DOUBLE(TCOUNT);                               <<09380>>02739500
    ASSEMBLE(LSEA);                                            <<09380>>02740000
    BUFFER(TCOUNT) := TOS;                                     <<09380>>02740500
    DDEL;                                                      <<09380>>02741000
    END;                                                       <<09380>>02741500
  RETURN;                                                      <<09380>>02742000
END;                                                           <<09380>>02742500
                                                               <<09380>>02743000
PROCEDURE PRINTLINE(PRNTFILE);                                 <<09381>>03040200
                                                               <<09381>>03040400
<<             PRINTLINE                                    >> <<09381>>03040600
<<    THIS PROCEDURE WILL OUTPUT A LINE TO THE OUTPUT FILE  >> <<09381>>03040800
<<    FROM LBUF. AFTER PRINTING THE PRINT BUFFER IS FILLED  >> <<09381>>03041000
<<    WITH BLANKS.                                          >> <<09381>>03041200
                                                               <<09381>>03041400
    VALUE PRNTFILE;                                            <<09381>>03041500
    INTEGER PRNTFILE;                                          <<09381>>03041510
                                                               <<09381>>03041520
      BEGIN                                                    <<09381>>03041600
         FWRITE(PRNTFILE,LBUF,39,%40);                         <<09381>>03042000
NOPRJMP:   <<NO PRINT JUMP POINT>>                             <<09381>>03042200
         @PBUF:=@BUF;                                          <<09381>>03042400
         << LINECOUNT:=LINECOUNT+1; >>                         <<09381>>03042600
BLANKBUF:                                                      <<09381>>03042800
         LBUF:="  ";                                           <<09381>>03043000
         MOVE LBUF(1):=LBUF,(39);                              <<09381>>03043200
         << IF LINECOUNT > LNSPERPG THEN NEWPAGE; >>           <<09381>>03043400
      END;                                                     <<09381>>03043600
                                                               <<09381>>03043800
PROCEDURE BLANKBUF;                                            <<09381>>03044000
  BEGIN                                                        <<09381>>03044200
    LBUF:=" "; MOVE LBUF(1):=LBUF,(39);                        <<09381>>03044400
  END;                                                         <<09381>>03044600
                                                               <<09381>>03044800
LOGICAL PROCEDURE CHECK'STOP;                                  <<09381>>03045000
BEGIN                                                          <<09381>>03045200
  INTEGER LENGTH;                                              <<09381>>03045400
                                                               <<09381>>03045600
  CTRLY := FALSE;                                              <<09381>>03045800
  FWRITE(OUTFILE,LBUF,0,%40);                                  <<09381>>03046000
  MOVE BUF := "<CR to Continue> ";                             <<09381>>03046200
  FWRITE(OUTFILE,LBUF,-17,%320);                               <<09381>>03046400
  LENGTH := READX(LBUF,-1);                                    <<09381>>03046600
  IF LENGTH = 0 THEN CHECK'STOP := FALSE                       <<09381>>03046800
  ELSE CHECK'STOP := TRUE;                                     <<09381>>03047000
  MOVE BUF := (27,"A",27,"G",27,"K");                          <<09381>>03047200
  FWRITE(OUTFILE,LBUF,-6,%320);                                <<09381>>03047600
  BLANKBUF;                                                    <<09381>>03047800
END;                                                           <<09381>>03048000
                                                               <<09381>>03048200
LIVE'SYS := FALSE;                                             <<09380>>03962500
OUTFILE:=FOPEN(,%410);                                         <<09381>>03970000
        FMT'SIR    =  7,                                       <<09381>>13480000
        FMT'MON    =  8;                                       <<09381>>13482500
OWN BYTE ARRAY ITEMLIST(0:39):=  <<LIST FOR SEARCH INTRINSIC>> <<09381>>13565000
   6, 4, "MON",                                                <<09381>>13597500
  ELSE                                                         <<09381>>14126000
    IF STRING = "MON" THEN ITEMNUM:= FMT'MON                   <<09381>>14127000
            FMTSIR(OUTFILE);  END;                             <<09381>>14215000
            FMTMON(OUTFILE);                                   <<09381>>14217500
<<  CHK'FOR'DEADLOCKS                                        >><<*9349>>14705000
      WHILE (INDX:=INDX+4) < LSIR-4 DO BEGIN                   <<*9349>>14845000
         HOLDER'IMPEDED:=CORE(LOCSIR+DOUBLE(INDX))/%25;        <<*9349>>14850000
               NXT'IMPD:=CORE(DOUBLE(CURRENT'Q*4+2)+           <<*9349>>14885000
                  LOCSIR)/%25;                                 <<*9349>>14886000
                     IMPDRS(NEXT):=CORE(DOUBLE(CURRENT'Q*4)+   <<*9349>>14905000
                        LOCSIR)/%25;                           <<*9349>>14906000
                     NXT'IMPD:=CORE(DOUBLE(NXT'IMPD*21+17)+    <<*9349>>14925000
                        LOCPCB)/%25;                           <<*9349>>14926000
      WORK2:=CORE(LOCSIR+DOUBLE(INDX+1));                      <<*9349>>15235000
$PAGE"                       PROCEDURE SNAPSHOT"               <<09381>>16270025
LOGICAL PROCEDURE SNAPSHOT(LOCATION,LENGTH);                   <<09381>>16270050
    VALUE LOCATION,LENGTH;                                     <<09381>>16270075
    DOUBLE LOCATION;                                           <<09381>>16270100
    INTEGER LENGTH;                                            <<09381>>16270125
  <<Procedure SNAPSHOT takes a picture of the IOQ or the DRQ,>><<09381>>16270150
  <<stores it in a data seg to be recalled later for display>> <<09381>>16270175
  <<LOCATION contains the location of the table to access.>>   <<09381>>16270200
  <<LENGTH passes the size of the data segment. SNAPSHOT>>     <<09381>>16270225
  <<returns the extra data segment number. >>                  <<09381>>16270250
    BEGIN                                                      <<09381>>16270275
      EQUATE MAX'XDS'SIZE'ADR = %1111;                         <<09381>>16270300
      EQUATE MSTARTPTR = %1034;                                <<09381>>16270325
      LOGICAL ARRAY DUMMYBUF(0:15);                            <<09381>>16270350
      LOGICAL MAX'XDS'SIZE,DSTNO,RESIDENT:=FALSE;              <<09381>>16270375
      MAX'XDS'SIZE := ABSOLUTE(MAX'XDS'SIZE'ADR);              <<09381>>16270400
      ABSOLUTE(MAX'XDS'SIZE'ADR) := LENGTH + 128;              <<09381>>16270425
      SNAPSHOT := DSTNO := GETDATASEG(LENGTH,0);               <<09381>>16270450
      IF < THEN PRINT(LBUF,10,0);                              <<09381>>16270475
      ABSOLUTE(MAX'XDS'SIZE'ADR) := MAX'XDS'SIZE;              <<09381>>16270500
      WHILE NOT RESIDENT DO                                    <<09381>>16270525
        BEGIN                                                  <<09381>>16270550
        TOS := @DUMMYBUF;                                      <<09381>>16270575
        TOS := DSTNO;  <<DATA SEGMENT OF TABLE SPECIFIED>>     <<09381>>16270600
        TOS := 0;   << OFFSET >>                               <<09381>>16270625
        TOS := 2;                                              <<09381>>16270650
        ASSEMBLE(MFDS 4);                                      <<09381>>16270675
        DISABLE;                                               <<09381>>16270700
        IF ABSOLUTE(DSTNO*4 +ABSOLUTE(2) ).(0:1)=1             <<09381>>16270725
          THEN ENABLE                                          <<09381>>16270750
          ELSE                                                 <<09381>>16270775
            BEGIN                                              <<09381>>16270800
            TOS := ABSOLUTE(DSTNO*4 + ABSOLUTE(2) + 2);        <<09381>>16270825
            TOS := ABSOLUTE(DSTNO*4 + ABSOLUTE(2) + 3);        <<09381>>16270850
            TOS := LOCATION;                                   <<09381>>16270875
            TOS := LENGTH;                                     <<09381>>16270900
            ASSEMBLE(MABS 5);                                  <<09381>>16270925
            RESIDENT := TRUE;                                  <<09381>>16270950
            MSTART:=CORE( MSTARTPTR D );                       <<09381>>16270975
                                                               <<09381>>16271000
            ENABLE;                                            <<09381>>16271025
            END; << ELSE >>                                    <<09381>>16271050
        END;  << WHILE >>                                      <<09381>>16271075
                                                               <<09381>>16271100
    END;   << SNAPSHOT >>                                      <<09381>>16271125
                                                               <<09381>>16271150
$PAGE"                          PROCEDURE FMTMON"              <<09381>>16271175
PROCEDURE FMTMON(PRNTFILE);                                    <<09381>>16271200
  VALUE PRNTFILE;                                              <<09381>>16271210
  INTEGER PRNTFILE;                                            <<09381>>16271220
  BEGIN                                                        <<09381>>16271225
      LOGICAL CYSTOPPED;                                       <<09381>>16271230
    DOUBLE MONPTR:=%1017D,LOCMON,CLOC,ENDMON,STMON:=%1260D;    <<09381>>16271250
      LOGICAL  MSIZE;                                          <<09381>>16271275
      LOGICAL WORK1,WORK2,MFDSWORD,MONDST;                     <<09381>>16271300
   EQUATE MEASINFOTABPTR = %1261;                              <<09381>>16271325
                                                               <<09381>>16271350
LOGICAL SUBROUTINE MON(CORELOC);                               <<09381>>16271375
  VALUE CORELOC;                                               <<09381>>16271400
  DOUBLE CORELOC;                                              <<09381>>16271425
    BEGIN                                                      <<09381>>16271450
    TOS := LOGICAL(CORELOC-LOCMON);                            <<09381>>16271475
    TOS := 1;   << MOVE COUNT >>                               <<09381>>16271500
    TOS := @MFDSWORD;                                          <<09381>>16271525
    TOS := MONDST;                                             <<09381>>16271550
    ASSEMBLE( DXCH );  << SWITCH SEGMENT OFFSET AND LENGTH>>   <<09381>>16271575
                       <<WITH PREVIOUS TWO WORDS >>            <<09381>>16271600
    ASSEMBLE(MFDS4);                                           <<09381>>16271625
    MON := MFDSWORD;                                           <<09381>>16271650
    END;                                                       <<09381>>16271675
                                                               <<09381>>16271700
                                                               <<09381>>16271725
SUBROUTINE EVENT(ENUMB);                                       <<09381>>16271750
  VALUE ENUMB;                                                 <<09381>>16271775
  INTEGER ENUMB;                                               <<09381>>16271800
  BEGIN                                                        <<09381>>16271825
      IF 0<=ENUMB<=8 THEN                                      <<09381>>16271850
      CASE ENUMB OF                                            <<09381>>16271875
      BEGIN   << CASES >>                                      <<09381>>16271900
            MOVE PBUF:="QONOBJ";        <<0>>                  <<09381>>16271925
            MOVE PBUF:="MAKEOC";        <<1>>                  <<09381>>16271950
            MOVE PBUF:="SPECIALRQ";     <<2>>                  <<09381>>16271975
            GO TO PNUMB;                <<3>>                  <<09381>>16272000
            MOVE PBUF:="FETCHSEG";      <<4>>                  <<09381>>16272025
            MOVE PBUF:="SEGIO";         <<5>>                  <<09381>>16272050
            MOVE PBUF:="SIODONE";       <<6>>                  <<09381>>16272075
            MOVE PBUF:="CGARBAGE";      <<7>>                  <<09381>>16272100
            MOVE PBUF:="SWAPIN";        <<8>>                  <<09381>>16272125
      END                                                      <<09381>>16272150
      ELSE IF ENUMB=12 THEN MOVE PBUF:="ALLOCMEM"              <<09381>>16272175
      ELSE IF ENUMB=13 THEN MOVE PBUF:="DEALLOCM"              <<09381>>16272200
      ELSE IF ENUMB=14 THEN MOVE PBUF:="CACHEMOV"              <<09381>>16272225
      ELSE IF ENUMB=15 THEN MOVE PBUF:="GET CDT"               <<09381>>16272250
      ELSE IF ENUMB=16 THEN MOVE PBUF:="QUE LDR"               <<09381>>16272275
      ELSE IF ENUMB=17 THEN MOVE PBUF:="DQUE LDR"              <<09381>>16272300
      ELSE IF ENUMB=18 THEN MOVE PBUF:="FIND DE"               <<09381>>16272325
      ELSE IF ENUMB=19 THEN MOVE PBUF:="LOCKRANG"              <<09381>>16272350
      ELSE IF ENUMB=24 THEN MOVE PBUF:="EXCHDB"                <<09381>>16272375
      ELSE IF ENUMB=40 THEN MOVE PBUF:="QUIESCE"               <<09381>>16272400
      ELSE IF ENUMB=82 THEN MOVE PBUF:="AWAKEDEV"              <<09381>>16272425
      ELSE IF ENUMB=83 THEN MOVE PBUF:="STRATEGY"              <<09381>>16272450
      ELSE IF ENUMB=84 THEN MOVE PBUF:="INITIATE"              <<09381>>16272475
      ELSE IF ENUMB=90 THEN MOVE PBUF:="REQCACHE"              <<09381>>16272500
      ELSE IF ENUMB=86 THEN MOVE PBUF:="CDT'ATT"               <<09381>>16272525
      ELSE IF ENUMB=87 THEN MOVE PBUF:="MAP DOM"               <<09381>>16272550
      ELSE IF ENUMB=88 THEN MOVE PBUF:="UN MAP RG"             <<09381>>16272575
      ELSE IF ENUMB=89 THEN MOVE PBUF:="LINK REG"              <<09381>>16272600
      ELSE IF ENUMB=139 THEN MOVE PBUF:="C ABSENT"             <<09381>>16272625
      ELSE IF ENUMB=240 THEN MOVE PBUF:="PFAIL"                <<09381>>16272650
      ELSE IF ENUMB=%300 THEN MOVE PBUF:="INTERRUPT"           <<09381>>16272675
      ELSE IF ENUMB=%301 THEN MOVE PBUF:="SIOP-INST"           <<09381>>16272700
      ELSE IF ENUMB=%302 THEN MOVE PBUF:="SIODM-ENT"           <<09381>>16272725
      ELSE IF ENUMB=%303 THEN MOVE PBUF:="SIODM-EXT"           <<09381>>16272750
      ELSE IF ENUMB=-211 THEN MOVE PBUF:="TERMIN"              <<09381>>16272775
      ELSE IF ENUMB=-240 THEN MOVE PBUF:="CAUSE"               <<09381>>16272800
      ELSE IF ENUMB=-241 THEN MOVE PBUF:="PROCESS"             <<09381>>16272825
      ELSE IF ENUMB=-242 THEN MOVE PBUF:="BUILD MKR"           <<09381>>16272850
      ELSE IF ENUMB=-243 THEN MOVE PBUF:="CHANGE ST"           <<09381>>16272875
      ELSE IF ENUMB=-244 THEN MOVE PBUF:="TIMEOUT"             <<09381>>16272900
      ELSE                                                     <<09381>>16272925
PNUMB:                                                         <<09381>>16272950
        IF PBUF="  " THEN                                      <<09381>>16272975
         BEGIN        <<PUT OUT NUMBER ONLY>>                  <<09381>>16273000
          PUTNUMP(ENUMB);   <<EVENT NUMBER>>                   <<09381>>16273025
          @PBUF:=@PBUF-7;   <<BACK OFF POINTER>>               <<09381>>16273050
         END;         <<PUT OUT NUMBER ONLY>>                  <<09381>>16273075
 END;  <<EVENT SUBROUTINE>>                                    <<09381>>16273100
                                                               <<09381>>16273125
                                                               <<09381>>16273150
                                                               <<09381>>16273175
BLANKBUF;                                                      <<09381>>16273176
LBUF:="  ";  MOVE LBUF(1):=LBUF,(39);                          <<09381>>16273177
MOVE LBUF(8):="******    MONITOR TABLE    ******";             <<09381>>16273200
PRINTLINE(PRNTFILE);                                           <<09381>>16273225
   WORK1 := CORE(%1011D);                                      <<09381>>16273250
   TOS := WORK1 LAND %37;                                      <<09381>>16273275
   TOS := (WORK1 LAND %177740) + %1000; << OFFSET IN BANK >>   <<09381>>16273300
   LOCMON := TOS;                                              <<09381>>16273325
  MSIZE:=CORE(LOCMON-1D);                                      <<09381>>16273350
  IF MSIZE < 8 THEN MSIZE:=%2000;                              <<09381>>16273375
  IF MSIZE > 8192 THEN MSIZE:=%2000;                           <<09381>>16273400
  MONDST := SNAPSHOT(LOCMON,MSIZE);                            <<09381>>16273425
  ENDMON:=LOCMON+DOUBLE(MSIZE);                                <<09381>>16273450
   << MSTART IS SET IN SNAPSHOT WHILE DISABLED >>              <<09381>>16273475
   IF (MSTART:=MSTART-8)<8 THEN MSTART:=CORE(LOCMON-1D)-8;     <<09381>>16273500
  IF MSTART>(MSIZE-8) THEN GO BAILOUT;                         <<09381>>16273525
  MOVE LBUF:="LOC    PIN   EVENT";                             <<09381>>16273550
  PRINTLINE(PRNTFILE);                                         <<09381>>16273600
   CLOC:=DOUBLE(MSTART)+LOCMON;                                <<09381>>16273625
  IF CLOC < 1D THEN GO BAILOUT;                                <<09381>>16273650
  CYSTOPPED := FALSE;                                          <<09381>>16273660
  CTRLY := FALSE;                                              <<09381>>16273675
  WHILE (MSIZE > 8) AND NOT CYSTOPPED DO                       <<09381>>16273700
  BEGIN                                                        <<09381>>16273725
    @PBUF:=@BUF;        <<BEGINNING OF LINE>>                  <<09381>>16273750
    PUTDNUMP(CLOC);      <<LOCATION OF MEMORY POINTER>>        <<09381>>16273775
    @PBUF:=@BUF+5;      <<SPACE OVER MEMORY ADDRESS>>          <<09381>>16273800
    WORK2:=0;            <<COLUMN COUNTER>>                    <<09381>>16273825
    WHILE MSIZE > 0 LAND WORK2 < 1 DO                          <<09381>>16273850
     BEGIN               <<WHILE ROOM ACROSS PAGE>>            <<09381>>16273875
      @PBUF:=@PBUF+1;    <<OVER PREVIOUS EVENT>>               <<09381>>16273900
      PUTNUMP(MON(CLOC)/21);  <<PICK UP PIN>>                  <<09381>>16273925
      EVENT(MON(CLOC+1D));   <<EVENT>>                         <<09381>>16274000
      @PBUF:=@PBUF+10;      <<SKIP OVER EVENT>>                <<09381>>16274025
      PUTNUM(MON(CLOC+2D));<<WORD 1>>                          <<09381>>16274050
      PUTNUM(MON(CLOC+3D));<<WORD 2>>                          <<09381>>16274075
      PUTNUM(MON(CLOC+4D));<<WORD 3>>                          <<09381>>16274100
      PUTNUM(MON(CLOC+5D));<<WORD 4>>                          <<09381>>16274125
      PUTNUM(MON(CLOC+6D));<<WORD 5>>                          <<09381>>16274150
      PUTNUM(MON(CLOC+7D));<<WORD 6>>                          <<09381>>16274175
      CLOC:=CLOC-8D;        <<NEXT LOCATION>>                  <<09381>>16274200
      IF CLOC < LOCMON                                         <<09381>>16274225
        THEN CLOC:=ENDMON-8D;  << TABLE WRAPS AROUND >>        <<09381>>16274250
      MSIZE:=MSIZE-8;       <<FOUR FEWER WORDS LEFT>>          <<09381>>16274275
      WORK2:=WORK2+1;       <<COUNT COLUMNS DONE>>             <<09381>>16274300
     END;                <<DONE ACROSS PAGE>>                  <<09381>>16274325
    PRINTLINE(PRNTFILE);                                       <<09381>>16274350
    IF CTRLY THEN CYSTOPPED := CHECK'STOP;                     <<09381>>16274360
  END;                                                         <<09381>>16274375
BAILOUT:                                                       <<09381>>16274400
CTRLY := FALSE;                                                <<09381>>16274425
IF MONDST <> 0 THEN RELDATASEG(MONDST);                        <<09381>>16274450
END;  <<  PROCEDURE PRINTMON  >>                               <<09381>>16274475
                                                               <<09381>>16274500
                                                               <<09381>>16274525
        FIND'CMD =  4,                                         <<*9388>>16987000
         FMT'CMD =  5,                                         <<*9388>>16990000
        TEXT'CMD =  6,                                         <<*9388>>16995000
     COMPUTE'CMD =  7,                                         <<*9388>>17000000
       DEBUG'CMD =  8,                                         <<*9388>>17005000
         SET'CMD =  9,                                         <<*9388>>17010000
        HELP'CMD = 10,                                         <<*9388>>17015000
        LIVE'CMD = 11;                                         <<*9388>>17017500
LOGICAL ARRAY LBUF(0:99);                                      <<*9388>>17085000
  NUMCHAR:= FREAD(INFILE,LBUF,-200);                           <<*9388>>17150000
  <<DETERMINE COMMAND FROM FIRST LETTER(S) OF INPUT>>          <<*9388>>17210000
              ELSE                                             <<*9388>>17281000
              IF CMDSTART = "FI" THEN FIND'CMD                 <<*9388>>17282000
              ELSE                                             <<09380>>17341250
              IF CMDSTART = "L" THEN LIVE'CMD                  <<09380>>17342500
                   command=find'cmd or                         <<*9388>>17358000
              and not live'sys                                 <<09380>>17367500
    <<FIND COMMAND>>                                           <<*9388>>17501000
    FIND(PARMSTART);                                           <<*9388>>17502000
                                                               <<*9388>>17503000
    BEGIN                                                      <<09380>>17521000
      LIVE'SYS := FALSE;                                       <<09380>>17522000
    END;                                                       <<09380>>17526000
    <<LIVE COMMAND>>                                           <<09380>>17590500
    BEGIN                                                      <<09380>>17591000
      LIVE'SYS := TRUE;                                        <<09380>>17591500
      TEXTFILE(PARMSTART);                                     <<09380>>17592000
    END;                                                       <<09380>>17592500
                                                               <<09380>>17593000
EQUATE SERDISC = %37;                                          <<*9524>>18452000
LOGICAL INFOWORD, USETAPE, JNK;                                <<*9524>>18460000
IF LIVE'SYS THEN                                               <<09380>>19645250
BEGIN                                                          <<09380>>19645500
  MAXMEM := 4095D;                                             <<09380>>19645750
  FOR I := 0 UNTIL 4095 DO                                     <<09380>>19646000
    COREBUF(I) := CORE(DOUBLE(I));                             <<09380>>19646250
  ASSEMBLE(PCN);                                               <<09380>>19646500
  CNMACHINEID := TOS;                                          <<09380>>19646750
  GET'SERIES'TYPE;                                             <<09380>>19647000
  TOS := LIVENUMBANKS;  TOS := -1;                             <<09380>>19647100
  MAXMEM := TOS;                                               <<09380>>19647200
  RETURN;                                                      <<09380>>19647250
END;                                                           <<09380>>19647500
                                                               <<09380>>19647750
  IF DEVTYPE.(10:6) = TAPE'TYPE AND                            <<*9524>>20540000
      (RECSIZE <> 4096 OR BLKSIZE <> RECSIZE) THEN             <<*9524>>20545000
    BEGIN                                                      <<*9524>>20550000
    PRINTERROR(24);                                            <<*9524>>20555000
    RETURN;                                                    <<*9524>>20560000
    END;                                                       <<*9524>>20565000
                                                               <<*9524>>20570000
  IF DEVTYPE.(10:6) = SERDISC THEN                             <<*9524>>20570500
    IF RECSIZE <> 4096 THEN                                    <<*9524>>20571000
      BEGIN                                                    <<*9524>>20571500
      PRINTERROR(24);                                          <<*9524>>20572000
      RETURN;                                                  <<*9524>>20572500
      END                                                      <<*9524>>20573000
    ELSE FCONTROL(DMPTAPE,7,JNK);                              <<*9524>>20573500
   << CHECK'TAPE'FILES; << ADD EOF IF NEEDED >>                <<*9333>>20870000
$page "                         PROCEDURE GET'TOKEN"           <<*9388>>23410020
<<********************************************************>>   <<*9388>>23410030
<<  GET'TOKEN                                             >>   <<*9388>>23410031
<<-------------------------------------------------------->>   <<*9388>>23410032
<<  Get the next token, its length, and its delimiter     >>   <<*9388>>23410033
<<  given the input line and a set of delimiters.         >>   <<*9388>>23410034
<<********************************************************>>   <<*9388>>23410035
integer procedure get'token(line,delimiters,tknline,delim);    <<*9388>>23410040
  byte array line,delimiters,tknline;                          <<*9388>>23410060
  byte delim;                                                  <<*9388>>23410080
                                                               <<*9388>>23410100
begin                                                          <<*9388>>23410120
  integer delim'indx,delims'len,line'len,i;                    <<*9388>>23410140
  logical found;                                               <<*9388>>23410160
                                                               <<*9388>>23410180
  line'len := 0;  << Find line length and upshift >>           <<*9388>>23410200
  while line(line'len) <> CR and line'len < 300 do             <<*9388>>23410220
    begin                                                      <<*9388>>23410240
    if line(line'len) >= "a" and line(line'len) <= "z" then    <<*9388>>23410260
      line(line'len) := line(line'len) - 32;                   <<*9388>>23410280
    line'len := line'len + 1;                                  <<*9388>>23410300
    end;                                                       <<*9388>>23410320
  line(line'len) := CR;   << Guarantee terminated input >>     <<*9388>>23410340
  i := 0;  << Strip leading spaces >>                          <<*9388>>23410360
  while line(i) = " " and i < line'len do i := i + 1;          <<*9388>>23410380
  line'len := line'len - i;                                    <<*9388>>23410400
  move line := line(i), (line'len+1);                          <<*9388>>23410420
  delims'len := 0;  << Find delimiter buffer length >>         <<*9388>>23410440
  while delimiters(delims'len) <> CR and delims'len < 31 do    <<*9388>>23410460
    begin                                                      <<*9388>>23410480
    if delims'len = 31 then delimiters(31) := CR;              <<*9388>>23410500
    delims'len := delims'len + 1;                              <<*9388>>23410520
    end;                                                       <<*9388>>23410540
  delims'len := delims'len + 1;   << include CR >>             <<*9388>>23410560
  i := 0;  << Look for a delimiter in the line >>              <<*9388>>23410580
  found := false;                                              <<*9388>>23410600
  while not found do                                           <<*9388>>23410620
    begin                                                      <<*9388>>23410640
    delim'indx := 0;                                           <<*9388>>23410660
    while delim'indx < delims'len and not found do             <<*9388>>23410680
      begin                                                    <<*9388>>23410700
      if line(i) = delimiters(delim'indx) then found := true;  <<*9388>>23410720
      delim'indx := delim'indx + 1;                            <<*9388>>23410740
      end;                                                     <<*9388>>23410760
    i := i + 1;                                                <<*9388>>23410800
    end;                                                       <<*9388>>23410820
  delim := delimiters(delim'indx - 1);                         <<*9388>>23410840
  i := i - 1;                                                  <<*9388>>23410860
  move tknline := line, (i);                                   <<*9388>>23410880
  move line := line(i+1), (line'len - i);                      <<*9388>>23410900
<< Strip trailing spaces >>                                    <<*9388>>23410920
  while tknline(i-1) = " " and i > 0  do i := i - 1;           <<*9388>>23410940
  get'token := i;                                              <<*9388>>23410960
end;                                                           <<*9388>>23410980
                                                               <<*9388>>23411000
$page "                       PROCEDURE FIND"                  <<*9388>>23411020
<<*******************************************************>>    <<*9388>>23411030
<<  FIND                                                 >>    <<*9388>>23411031
<<------------------------------------------------------->>    <<*9388>>23411032
<<  Parse and execute the find command.                  >>    <<*9388>>23411033
<<*******************************************************>>    <<*9388>>23411034
procedure find(parmstring);                                    <<*9388>>23411040
   byte array parmstring;                                      <<*9388>>23411060
                                                               <<*9388>>23411080
begin                                                          <<*9388>>23411100
   equate octal'mode =  0,                                     <<*9388>>23411120
          esc        = 27;                                     <<*9388>>23411130
   byte delim;                                                 <<*9388>>23411140
   byte array delimiters(0:31),str2(0:10),tknbuf(0:79);        <<*9388>>23411160
   integer indx,len,lnlen,i,j;                                 <<*9388>>23411180
   logical good,found;                                         <<*9388>>23411200
   logical array numbers(0:31);                                <<*9388>>23411220
   double memaddr,startaddr,endaddr,foundaddr;                 <<*9388>>23411240
                                                               <<*9388>>23411260
                                                               <<*9388>>23411280
logical subroutine binary8(str,len);                           <<*9388>>23411300
 << Convert octal ascii to binary and set syntax error flag >> <<*9388>>23411310
   value len;                                                  <<*9388>>23411320
   byte array str;                                             <<*9388>>23411340
   integer len;                                                <<*9388>>23411360
begin                                                          <<*9388>>23411380
   str2 := "%";                                                <<*9388>>23411420
   move str2(1) := str,(len);                                  <<*9388>>23411440
   binary8 := BINARY(str2,len+1);                              <<*9388>>23411460
   if <> then good := false;  << Syntax error >>               <<*9388>>23411480
end;                                                           <<*9388>>23411500
                                                               <<*9388>>23411520
                                                               <<*9388>>23411540
logical subroutine str'search(buf,length,startaddr,            <<*9388>>23411560
    endaddr,foundaddr);                                        <<*9388>>23411570
 << Find a string of words in the dump (or live system) >>     <<*9388>>23411575
  value length;                                                <<*9388>>23411580
  array buf;                                                   <<*9388>>23411600
  integer length;                                              <<*9388>>23411620
  double startaddr,endaddr,foundaddr;                          <<*9388>>23411640
begin                                                          <<*9388>>23411660
  ctrly := false;                                              <<*9388>>23411670
  found := false;                                              <<*9388>>23411680
  memaddr := startaddr-1D;                                     <<*9388>>23411700
  while (memaddr:=memaddr+1D) <= endaddr-double(length-1)      <<*9388>>23411720
      and not found and not ctrly do                           <<*9388>>23411740
  begin                                                        <<*9388>>23411760
    if core(memaddr) = buf(0) then                             <<*9388>>23411780
    begin                                                      <<*9388>>23411800
      i := length;                                             <<*9388>>23411820
      found := true;                                           <<*9388>>23411840
      while (i:=i-1) > 0 and found do                          <<*9388>>23411860
        if core(memaddr + double(i)) <> buf(i) then            <<*9388>>23411880
          found := false;                                      <<*9388>>23411900
    end;                                                       <<*9388>>23411920
  end;                                                         <<*9388>>23411940
  foundaddr := memaddr-1D;                                     <<*9388>>23411960
  str'search := found;                                         <<*9388>>23411980
  ctrly := false;                                              <<*9388>>23411990
end;                                                           <<*9388>>23412000
                                                               <<*9388>>23412020
<<  M A I N  >>                                                <<*9388>>23412040
   move delimiters := (",I",CR);                               <<*9388>>23412060
   indx := 0;                                                  <<*9388>>23412080
   good := true;                                               <<*9388>>23412100
   do                                                          <<*9388>>23412120
      begin                                                    <<*9388>>23412140
      len := get'token(parmstring,delimiters,tknbuf,delim);    <<*9388>>23412160
      numbers(indx) := binary8(tknbuf,len);                    <<*9388>>23412180
      indx := indx + 1;                                        <<*9388>>23412200
      end                                                      <<*9388>>23412220
   until delim = "I" or delim = CR;                            <<*9388>>23412240
   if delim = "I" then                                         <<*9388>>23412260
      begin    << delim = "I" >>                               <<*9388>>23412280
      move delimiters := (".+/A",CR);                          <<*9388>>23412300
      len := get'token(parmstring,delimiters,tknbuf,delim);    <<*9388>>23412320
      if delim = "A" then                                      <<*9388>>23412340
         begin                                                 <<*9388>>23412360
         startaddr := 0D;                                      <<*9388>>23412380
         endaddr := maxmem;                                    <<*9388>>23412400
         end                                                   <<*9388>>23412420
      else                                                     <<*9388>>23412440
         begin   << delim not "A" >>                           <<*9388>>23412460
         j := 0;                                               <<*9388>>23412480
         while tknbuf(j) < "0" or tknbuf(j) > "7" do           <<*9388>>23412500
            j := j + 1;                                        <<*9388>>23412520
         tos := binary8(tknbuf(j),len-j);  << starting bank >> <<*9388>>23412540
         if delim = "." or delim = "+" then                    <<*9388>>23412560
            begin                                              <<*9388>>23412580
            len := get'token(parmstring,delimiters,tknbuf,     <<*9388>>23412600
                  delim);                                      <<*9388>>23412610
            tos := binary8(tknbuf,len);  << starting displ >>  <<*9388>>23412620
            end                                                <<*9388>>23412640
         else                                                  <<*9388>>23412660
            tos := 0;  << starting displ >>                    <<*9388>>23412680
         startaddr := tos;                                     <<*9388>>23412700
         if delim <> "/" then good := false                    <<*9388>>23412720
         else                                                  <<*9388>>23412740
            begin   << delim = "/" >>                          <<*9388>>23412760
            len := get'token(parmstring,delimiters,tknbuf,     <<*9388>>23412780
                  delim);                                      <<*9388>>23412790
            tos := binary8(tknbuf,len);  << ending bank >>     <<*9388>>23412800
            if delim = "." or delim = "+" then                 <<*9388>>23412820
               begin                                           <<*9388>>23412840
               len := get'token(parmstring,delimiters,tknbuf,  <<*9388>>23412860
                     delim);                                   <<*9388>>23412870
               tos := binary8(tknbuf,len);  << ending displ >> <<*9388>>23412880
               end                                             <<*9388>>23412900
            else                                               <<*9388>>23412920
               tos := %177777;  << ending displ >>             <<*9388>>23412940
            endaddr := tos;                                    <<*9388>>23412960
            end;   << delim = "/" >>                           <<*9388>>23412980
         end;   << delim not "A" >>                            <<*9388>>23413000
      end    << delim = "I" >>                                 <<*9388>>23413020
   else                                                        <<*9388>>23413040
      begin   << delim not "I" >>                              <<*9388>>23413060
      startaddr := 0D;                                         <<*9388>>23413080
      endaddr := maxmem;                                       <<*9388>>23413100
      end;    << delim not "I" >>                              <<*9388>>23413120
   if good then                                                <<*9388>>23413140
      begin   << good >>                                       <<*9388>>23413160
      do                                                       <<*9388>>23413180
         begin   << search >>                                  <<*9388>>23413200
         found := str'search(numbers,indx,startaddr,endaddr,   <<*9388>>23413220
               foundaddr);                                     <<*9388>>23413240
         if found then                                         <<*9388>>23413260
            begin                                              <<*9388>>23413270
            octaldump(outfile,foundaddr,                       <<*9388>>23413271
                  foundaddr+double(indx-1),octal'mode);        <<*9388>>23413280
            startaddr := foundaddr + 1D;                       <<*9388>>23413300
            move buf := "Continue? ";                          <<*9388>>23413320
            fwrite(outfile,lbuf,-10,%320);                     <<*9388>>23413340
            len := fread(infile,lbuf,-1);                      <<*9388>>23413360
            move buf(2) := (esc,"A",esc,"K");                  <<*9388>>23413365
            fwrite(outfile,lbuf(1),-4,0);                      <<*9388>>23413366
            end;                                               <<*9388>>23413370
         end   << search >>                                    <<*9388>>23413380
      until not found or buf = "n" or buf = "N" or             <<*9388>>23413400
            foundaddr + double(indx) > endaddr;                <<*9388>>23413420
      if not found then                                        <<*9388>>23413440
         begin                                                 <<*9388>>23413460
         if indx = 1 then move buf := "** WORD NOT FOUND **",2 <<*9388>>23413480
         else move buf := "** STRING NOT FOUND **",2;          <<*9388>>23413500
         lnlen := tos - @buf;                                  <<*9388>>23413520
         fwrite(outfile,lbuf,-lnlen,0);                        <<*9388>>23413540
         end;                                                  <<*9388>>23413560
      end   << good >>                                         <<*9388>>23413580
   else printerror(12);  << Syntax error >>                    <<*9388>>23413600
end;                                                           <<*9388>>23413620
$PAGE "                  PROCEDURE PUTDNUM"                    <<09381>>23605050
                                                               <<09381>>23605100
<<             PUT DOUBLE NUMBER                            >> <<09381>>23605200
<<    THIS PROCEDURE CONVERTS A DOUBLE WORD NUMBER INTO AN  >> <<09381>>23605250
<<    ASCII REPRESENTATION OF OCTAL AND STORES IT INTO THE  >> <<09381>>23605300
<<    PRINT BUFFER AT THE CURRENT POINTER AND ADVANCES THE  >> <<09381>>23605350
<<    POINTER                                               >> <<09381>>23605400
                                                               <<09381>>23605450
PROCEDURE PUTDNUM(DNUM);                                       <<09381>>23605500
      VALUE DNUM;                                              <<09381>>23605550
      DOUBLE DNUM;                                             <<09381>>23605600
      BEGIN                                                    <<09381>>23605650
         LOGICAL FLAG:=FALSE;                                  <<09381>>23605700
         INTEGER I:=10;                                        <<09381>>23605750
         ENTRY PUTDNUMP;                                       <<09381>>23605800
         FLAG:=TRUE;                                           <<09381>>23605850
PUTDNUMP:                                                      <<09381>>23605900
           TOS:=DNUM;                                          <<09381>>23605950
           TOS:=TOS&DCSL(1);<<GET LOW ORDER BIT>>              <<09381>>23606000
           TOS:=S0.(15:1);                                     <<09381>>23606050
           IF <> THEN                                          <<09381>>23606100
           BEGIN                                               <<09381>>23606150
              PBUF:="-"; DEL;                                  <<09381>>23606200
              @PBUF:=@PBUF+1;                                  <<09381>>23606250
              TOS:=TOS&DCSR(1);                                <<09381>>23606300
              TOS:=-TOS;                                       <<09381>>23606350
              IF S0=0 THEN S1:=-S1                             <<09381>>23606400
              ELSE S1:=-S1-1;                                  <<09381>>23606450
              TOS:=TOS&DCSL(1);                                <<09381>>23606500
           END ELSE DEL;                                       <<09381>>23606550
           TOS:=TOS&DCSL(1);<<GET NEXT LOW ORDER BIT>>         <<09381>>23606600
           TOS:=S0.(15:1);                                     <<09381>>23606650
LOOP:                                                          <<09381>>23606700
           IF <> OR FLAG OR I=0 THEN                           <<09381>>23606750
           BEGIN                                               <<09381>>23606800
              PBUF:=TOS+"0";                                   <<09381>>23606850
              FLAG:=TRUE;                                      <<09381>>23606900
              @PBUF:=@PBUF+1;                                  <<09381>>23606950
           END ELSE DEL;                                       <<09381>>23607000
           I:=I-1;                                             <<09381>>23607050
           IF < THEN                                           <<09381>>23607100
           BEGIN                                               <<09381>>23607150
              PBUF:=" ";                                       <<09381>>23607200
              @PBUF:=@PBUF+1;                                  <<09381>>23607250
              RETURN;                                          <<09381>>23607300
           END;                                                <<09381>>23607350
           TOS:=TOS&DCSL(3);                                   <<09381>>23607400
           TOS:=S0.(13:3);                                     <<09381>>23607450
           GO LOOP;                                            <<09381>>23607500
        END;<<PUTDNUM/PUTDNUMP>>                               <<09381>>23607550
