      HED RENUMBER* THE RENUMBER ROUTINE IS CALLED BY A USER TO ASSIGN A NEW* SET OF SEQUENCE NUMBERS TO HIS PROGRAM. RENUMBER MAY* BE GIVEN 2 PARAMETERS--THE STARTING SEQUENCE NUMBER * AND THE INCREMENT. IF EITHER IS NOT GIVEN, IT IS AUTOMATICALLY* SET TO 10.      SPC 2       ORG LIBRA       LDA MLINK+1       ADA .+?PROG-?LINK       LDB 0,I       CPB PBUFF     NULL PROGRAM?       JMP LLEND     YES       JSB RDPRG     READ IN USER PROGRAM. * *  SET UP INITIAL SEQUENCE NUMBER AND INCREMENT *       LDA .+10      DEFAULT       STA RENM      STA RENN        VALUES      JSB RENUM     PARAMETER?      JMP REN1      NO      STB RENM      YES, RECORD IT      CPA .+15B     END OF RECORD?      JMP REN1      YES       CPA .+54B     NO--CHECK FOR COMMA       JSB RENUM     DEMAND SECOND       JMP RENF1     NO      STB RENN      RECORD IT       CPA .+15B     END OF RECORD?      RSS           YES       JMP RENF1     NO* * TEST FOR WHETHER SEQUENCING WILL OVERFLOW PAST 9999 * REN1  LDB PBPTR     COMPUTE       LDA CFLAG       PROGRAM       AND LMSK          STATE       STA RENC            AND       SZA                   END-OF-       LDB SPTR                PROGRAM       STB RENEN                 POINTER       CLA,INA       INITIALIZE STATEMENT      STA RENNS      COUNTER TO ONE.      LDB PBUFF       LDA RENM      COMPUTE INITIAL       ADA MAXSN       SEQUENCE NUMBER - 10000 REN2  INB           MOVE TO       ADB 1,I         NEXT      ADB .-1           STATEMENT       CPB RENEN     DONE?       JMP REN3      YES       ADA RENN      NO, ADD IN SEQUENCE INCREMENT       SSA,RSS       PAST 9999 ?       JMP RENF2     YES       ISZ RENNS     BUMP STATEMENT COUNTER.       JMP REN2      NOREN3  LDB RENC      PROGRAM       SZB            COMPILED?      JMP REN9      YES *       LDA RENNS     GET # OF STATEMENTS IN PROGRAM.       DIV .+32      DIVIDE INTO 32 PARTS.       CMB           SET B=-1-#OF OVERSIZE GROUPS,       SZA,RSS        BUT IF <32 STATEMENTS USE -#.      INB       INA           SET A TO SIZE OF LARGER GROUP.      STA RENC1     SET COUNTER.      STB RENC2       LDB ERSCA     SET INITIAL POINTER TO ERSEC.       STB RENSN * * NOW BUILD A TABLE IN ERSEC HAVING TH FOLLOWING STRUCTURE: *     ERSEC(0:31) ARE SEQUENCE NOS. OF STATEMENTS WHICH DIVIDE* THE PROGRAM INTO 32 ALMOST EQUAL PARTS. ERSEC(32:63) ARE THE ABSO-* LUTE ADDRESSES OF THESE STATEMENTS. ERSEC(0) IS THE SEQ.NO. OF THE* FIRST STATEMENTS. *       LDA PBUFF REN15 ADB .+32      STA 1,I       SET ABSOLUTE ADDRESS INTO TABLE.      LDB 0,I       SET SEQUENCE # INTO TABLE.      STB RENSN,I       ISZ RENSN     BUMP POINTERS.*       ISZ RENC2     TEST FOR ANY MORE OVERSIZE      CLB,RSS        GROUPS.      CCB           COMPUTE SIZE OF NEXT GROUP.       ADB RENC1       STB RENC1       CMB       STB RENC3 *       LDB RENSN     TEST FOR DONE.      CPB ERS32       JMP REN14 *       ISZ RENC3     COMPUTE 1ST STATEMENT IN      INA,RSS        NEXT GROUP.      JMP REN15       ADA 0,I       ADA .-1       JMP *-5 * * SCAN THROUGH PROGRAM FOR SEQUENCE NUMBER REFERENCES.* FOR EACH ONE, DETERMINE ABSOLUTE ADDRESS OF THE LABEL * AND REPLACE IT WITH THAT ADDRESS. IF LABEL IS NONEXISTENT,* PLACE THE NEGATIVE LABEL IN TO INDICATE THIS FACT.* REN14 LDA PBUFF     INITIALIZE POINTERS       STA RENQ       FOR RENSK.       ADA .-1       STA RENP* REN4  JSB RENSK     GET NEXT STATEMENT REFERENCE.       JMP REN9      NONE LEFT.*       LDB ERSCA REN7  LDA 1,I       FIRST STATEMENT >=SOUGHT STATE.?      CMA       ADA RENP,I      SSA,INA       JMP REN5      FOUND ONE.      INB       CPB ERS32     TEST FOR DONE.      RSS       JMP REN7*       ADB .+31      LDA PBPTR     STATEMENT IS IN LAST GROUP.       JMP REN6REN5  ADB .+32      B=>FIRST STATEMENT IN GROUP.      SZA,RSS       TEST FOR FOUND.       JMP REN18       CPB ERS32     TEST FOR NOT THERE.       JMP REN17       LDA 1,I       SET A=>FIRST WORD BEYOND GROUP.       ADB .-1         AT FIRST WORD BEYOND GROUP. REN6  LDB 1,I       STA RENC1     SAVE END TEST.      LDA RENP,I    GET SEQUENCE NUMBER.REN16 INB           BUMP STATEMENT POINTER.       ADB 1,I       ADB .-1       CPB RENC1     TEST FOR DONE.      JMP REN17       CPA 1,I       TEST FOR FOUND.       JMP REN8      JMP REN16 * REN18 LDB 1,I       JMP *+3 REN17 LDB RENP,I    SET BIT15 FOR       ADB BIT15      UNDEFINED LABELS.REN8  STB RENP,I      JMP REN4* * NOW CHANGE ALL LABELS TO THEIR NEW VALUES.* REN9  LDA PBUFF     FIRST PROGRAM STATEMENT       LDB RENM      INITIAL LINE NUMBER REN10 CPA RENEN     DONE?       JMP REN11     YES       STB 0,I       NO, RECORD NEW LINE NUMBER      ADB RENN      INCREMENT TO NEXT LINE NUMBER       INA           MOVE TO       ADA 0,I         NEXT      ADA .-1           STATEMENT       JMP REN10 * * SCAN REFERENCES AGAIN. IF ABSOLUTE ADDRESS IS THERE,* REPLACE BY NEW LABEL. OTHERWISE REPLACE BY OLD LABEL. * REN11 LDA RENC      IS PROGRAM      SZA             COMPILED?       JMP REN13     YES       LDA PBUFF     NO      STA RENQ      ADA .-1       STA RENP      SEEK EMBEDDED REN12 JSB RENSK       STATEMENT REFERENCES      JMP REN13     NONE LEFT       LDA RENP,I    IF REFERENCE IS       RAL,CLE,SLA,ERA    NEGATIVE, CLEAR BIT 15.      RSS                OTHERWISE, REPLACE IT.       LDA 0,I             WITH THE NEW      STA RENP,I            LINE NUMBER       JMP REN12 REN13 LDA MLINK+1   SET FLAG TO SAY       ADA .-?LINK     'USER PROGRAM TO CORE'      STA MAIN      JMP LLEND RENF2 LDA .-25      LDB REN0      JMP LIBER REN0  DEF *+1       OCT 5123      LF-S      ASC 12,EQUENCE NUMBER OVERFLOW* * RENUM SCANS INPUT BUFFER FOR A NUMBER. IF IT FINDS NOTHING* IT RETURNS WITHOUT SKIPPING.IF IT FINDS A LEGAL LABEL * (1-9999) IT RETURNS WITH IT IN B AND THE NEXT CHARACTER IN A, * AND SKIPS ON THE WAY BACK. IF IT FINDS AN ERROR IT GOES TO RENF.* RENUM NOP       CLA           INITIALIZE INTEGER      STA RENL       !TO![ERO!      JSB LCHAR     ANY CHARACTERS?       JMP RENUM,I   NORENU1 ADA M72B      YES, IS IT      SSA,RSS         < ASCII 72 ?      JMP RENU2     NO      ADA .+10      YES,      SSA             > ASCII 57 ?      JMP RENU2     NO      LDB RENL      YES, PREVIOUS       ADB M1000       INTEGER       SSB,RSS           < 1000 ?      JMP RENF1     NO      LDB RENL      YES       RBL,RBL       MULTIPLY      ADB RENL        BY      RBL               10      ADA 1         ADD IN      STA RENL        NEW DIGIT       JSB LCHAR     FETCH NEXT      JMP *+3         CHARACTER       JMP RENU1 RENU2 ADA .+60B     RESTORE ANY LEGAL CHARACTER       LDB RENL      ISZ RENUM       SZB           NON-ZERO INTEGER?       JMP RENUM,I   YES RENF1 LDA .-14      LDB *+2       JMP LIBER       DEF *+1       OCT 5102      LF-B      ASC 6,AD PARAMETERRENSK NOP       ISZ RENP      INCREMENT POINTER       LDB RENP      STATEMENT       CPB RENQ        FINISHED?       JMP RENS2     YES RENS1 ISZ RENSK     NO, RETURN WITH RENP      JMP RENSK,I     SET TO NEXT REFERENCE       STB RENQ      UPDATE TO NEXT STATEMENTRENS2 CPB PBPTR     PROGRAM EXHAUSTED?      JMP RENSK,I   YES       ISZ RENQ      LDB RENQ      ISZ RENQ      EXTRACT       LDA RENQ,I      STATEMENT       AND OPMSK         TYPE      ADB 1,I       SET (B) TO      ADB .-1         NEXT STATEMENT      CPA RESOP     <RESTORE STATEMENT> ?       JMP RENS5     YES       CPA GOTOP     NO, <GOTO STATEMENT> ?      JMP RENS3     YES       CPA GOSOP     NO, <GOSUB STATEMENT> ?       JMP RENS3     YES       CPA IFOP      NO, <IF STATEMENT> ?      RSS           YES       JMP RENS2-1   NO      LDA THNOP     LOAD 'THEN' RENS3 IOR INTFL     CREATE REFERENCE HEADER       STB RENQ      SET POINTER TO NEXT STATEMENT       ADB .-1       SET POINTER TORENS4 STB RENP        PROSPECTIVE REFERENCE       ADB .-1       PRECEDED BY       CPA 1,I         REFERENCE HEADER?       JMP RENS1     YES       LDA OFOP      NO, LOAD HEADER FOR       CPA 1,I       JMP RENS1       JMP RENS4       REFERENCE LISTRENS5 CPA RENQ,I    ANY REFERENCE?      JMP RENS2-1   NO      JMP RENS3     YES RENL  EQU LTEMP RENM  EQU LTEMP+1 RENN  EQU LTEMP+2 RENC  EQU LTEMP+3 RENP  EQU LTEMP+4 RENQ  EQU LTEMP+5 RENY  EQU LTEMP+7 RENEN EQU LTEMP+8 RENNS EQU LTEMP+9 RENC1 EQU LTEMP+10RENC2 EQU LTEMP+11RENC3 EQU LTEMP+12RENMP EQU LTEMP+13RENSN EQU LTEMP+14ERS32 DEF ERSEC+32RESOP OCT 66000 GOTOP OCT 52000 GOSOP OCT 56000 IFOP  OCT 53000 THNOP OCT 75000 $REN  EQU *       HED NAME* THE NAME ROUTINE ALLOWS A USER TO ASSIGN HIS PROGRAM A NAME.      SPC 1       ORG LIBRA       SPC 1       LDA MLINK+1   SET POINTER TO NAME.      ADA .+?NAME-?LINK       STA LTEMP       STA LTEMP+3   SAVE NAME POINTER IN LTEMP+3.       LDA 0,I       SAVE RUN-ONLY BIT IN LTEMP+4.       AND BIT15       STA LTEMP+4       LDA .-3       SET COUNTER.      STA LTEMP+1       CLA           SET FLAG TO SAY       STA LTEMP+2   FIRST CHARACTER NAME1 JSB NAMER     GET A CHAR.       ALF,ALF       STA LTEMP,I       JSB NAMER     GET 2ND CHAR.       IOR LTEMP,I       STA LTEMP,I       ISZ LTEMP     BUMP NAME POINTER.      ISZ LTEMP+1   TEST FOR DONE.      JMP NAME1       LDA LTEMP+3,I GET FIRST WORD OF NAME      IOR LTEMP+4   MERGE IN RUN-ONLY BIT.      STA LTEMP+3,I       JSB NAMER     TEST FOR ONLY 6 CHARS.      CPA .+40B       JMP LLEND *       LDA NAM27       LDB *+2       JMP LIBER       DEF *+1       OCT 5117      LF-O      ASC 13,NLY 6 CHARACTERS ACCEPTEDNAM27 DEC -27 * NAMER NOP           GETS NEXT NAME CHARACTER.       JSB LCHAR       LDA .+40B     USE BLANK IF END OF LINE.       STA 1         HOLD IN B.      AND .140      TEST FOR CONTROL CHAR.      SZA       CPA .140      JMP NAMER+1   SKIP CONTROL CHARS.       LDA 1         GET IN A AGAIN.       LDB LTEMP+2   GET 1ST CHAR FLAG.      ISZ LTEMP+2       CPA .+44B     IF $ AND      SZB            FIRST CHAR., IT'S ILLEGAL.       JMP NAMER,I *       LDA NAM29     PRINT ERROR.      LDB *+2       JMP LIBER       DEF *+1       OCT 5044      LF-$      ASC 14, ILLEGAL AS FIRST CHARACTERNAM29 DEC -29 $NAM  EQU *       HED CATALOG * CATALOG PRINTS A LIST OF USER FILES ON THE USER * TELETYPE. IT PRINTS THESE, 6 PER LINE, ALONG WITH THEIR LENGTHS.* CATALOG IS IDENTICAL TO LIBRARY, EXCEPT THAT LIBRARY PRINTS * FROM THE A000 FILE DIRECTORY. LIBRARY MUST FOLLOW CATALOG * IN SEQUENCE.*       ORG LIBRA *       CLA           FIRST TIME IN, SET LTEMP(1:3)=0.      STA LTEMP+1   WE WILL HAVE TO LOCATE THE FIRST      STA LTEMP+2   DIRECTORY ENTRY FOLLOWING       STA LTEMP+3   LTEMP(0:3). *                                                                [F]      LDB CATBL     SET BUFFER LENGTH COUNTER.   [F]      STB CATN                                   [F]      LDB MLINK+1   GET POINTER TO USER'S BUFFER.[F]      ADB .+?BGIN-?LINK                          [F]      LDB 1,I                                    [F]      CLE,ERB       CLEAR BUFFER TO ALL ZEROES.  [F]      STA 1,I        THIS IS TO GUARANTEE THAT   [F]      INB             NO CHARACTERS HAVE PARITY  [F]      ISZ CATN        BIT SET.                   [F]      JMP *-3                                    [F]* CAT1  LDA MLINK+1   SET USER ID INTO LTEMP.       ADA .+?ID-?LINK       LDA 0,I CAT2  STA LTEMP     RENDEZVOUS WITH "LIBRARY".*       LDA .-6       SET N TO COUNT # OF NAMES ON      STA CATN      THIS LINE.      CLA           SET J=0 TO INDICATE THAT NO       STA CATJ       DIRECTORY TRACK HAS BEEN EXAMED      LDA .+12B     EMIT A LINE FEED.       JSB LOUT*       JSB DLOOK     FIND LAST ENTRY <= LAST ONE       NOP           OUTPUT.       LDA CATI,I    COMPUTE LAST ADDRESS      CMA,INA       IN TRACK.       ADA LIBD      STA CATQ*       LDA CATP      SET P TO NEXT       ADA .+8        ENTRY. CAT10 STA CATP      CPA CATQ      IF P=Q, WERE DONE WITH THIS       JMP CAT11      TRACK--GO LOOK AT NEXT ONE       LDA CATP,I    TEST FOR ENTRY BELONGING TO THIS      CPA LTEMP     USER--IF NOT, WE'RE DONE.       JMP CAT12 * CAT13 LDA .+15B     EMIT CRLF       JSB LOUT      JMP LLEND * CAT12 LDA .-3       SET UP COUNTER FOR      STA CATC       PRINTING NAME. CAT15 ISZ CATP      BUMP P TO NEXT WORD.      LDA CATP,I      ALF,ALF       GET LEFT CHAR.      JSB LOUT      PRINT IT. *                                                                [F]      LDA CATC      IF THIS IS THE FIRST         [F]      CPA .-3        CHARACTER OF THE            [F]      RSS            LAST FILE NAME ON THE       [F]      JMP CAT14       LINE, IT HAS TO BE MARKED. [F]      LDA CATN                                   [F]      INA,SZA                                    [F]      JMP CAT14                                  [F]*                                                                [F]      LDB MLINK+1   SET B TO                     [F]      ADB .+?BSTR-?LINK  POINT AT                [F]      LDB 1,I         CHARACTER.                 [F]      CLE,ERB       B=>WORD.                     [F]      LDA 1,I       FETCH FROM BUFFER.           [F]      IOR BIT15     SET LEFT PARITY.             [F]      SEZ           IF RIGHT CHAR,               [F]      XOR CATPR      SET RIGHT PARITY            [F]      STA 1,I         INSTEAD.                   [F]*                                                                [F]CAT14 LDA CATP,I    OUTPUT RIGHT CHAR.           [F]      JSB LOUT      ISZ CATC      TEST FOR 6 CHARS OUT.       JMP CAT15       LDA .+40B     OUTPUT A BLANK.       JSB LOUT      LDA CATP     BUMP P TO PROGRAM LENGTH.      ADA .+4       STA CATP*       LDA CATP,I    GET NUMBER.       CMA,INA       CLB       DIV DVSRS+1   DIV BY 1000.      STB CATLN     SAVE REMAINDER.       ADA ASC00       JSB LOUT      LDA CATLN     GET HUNDREDS.       CLB       DIV DVSRS+2       STB CATLN       ADA ASC00       JSB LOUT      LDA CATLN     GET TENS.       CLB       DIV .+10      STB CATLN       ADA ASC00       JSB LOUT      LDA CATLN     GET UNITS       ADA ASC00       JSB LOUT      LDA .+40B     OUTPUT A BLANK      JSB LOUT*       ISZ CATP      BUMP POINTER TO NEXT ENTRY.       LDA CATP      ISZ CATN      END OF LINE?      JMP CAT10     NO. *       LDA .+15B     OUTPUT CR.      JSB LOUT      JSB SCHOU,I   OUTPUT WAIT.*                                                                [F]*  SCAN USES'S!CUGGES!TO LOCATE MARKED CHARACTER.                [F]*                                                                [F]      LDB MLINK+1   B=>FIRST CHAR. IN BUFFER.    [F]      ADB .+?BGIN-?LINK                          [F]      LDB 1,I                                    [F]      CLE,ERB       B=>FIRST WORD.               [F]      LDA 1,I       FETCH FROM BUFFER.           [F]      AND CATPR     CLEAR NON-PARITY BITS.       [F]      SZA           ANY PARITY SET?              [F]      JMP *+3       YES.                         [F]      INB           NO. BUMP BUFFER PTR & LOOP.  [F]      JMP *-5                                    [F]      CMA           BUILD BUFFER PTR.            [F]      LSL 1                                      [F]      STB LTYP1     SET UP FOR CATCH.            [F]      CLE,ERB       CLEAR PARITY BIT IN BUFFER.  [F]      LDA 1,I                                    [F]      AND CATCL                                  [F]      STA 1,I                                    [F]* * READ THE LAST ENTRY OUT OF THE USER'S BUFFER AND* PUT IT INTO LTEMP(1:3). *       LDA DLTEM     SET POINTER TO      STA CATP       LTEMP.      LDA .-3      STA CATCCAT16 ISZ CATP      JSB CATCH     GET 1ST CHAR.       ALF,ALF       STA CATP,I      JSB CATCH     GET 2ND CHAR.       ADA CATP,I    MERGE IN.       STA CATP,I      ISZ CATC      TEST FOR DONE.      JMP CAT16       JMP CAT1      GO TO START.* CAT11 LDA CATI      TEST FOR USER DIRECTORY CONTIN-       ADA .+7        UED ON NEXT DIRECTORY TRACK.       STA CATI      LDB 0,I       SZB,RSS       JMP CAT11+1   NEXT TRACK ENPTY.       STB WORD      CMB,INB       ADB LIBD      STB CATQ      INA           DOES NEXT TRACK BEGIN WITH      LDB 0,I        THIS USER?       CPB LTEMP       RSS           YES       JMP CAT13     NO--QUIT. *       ADA .+5       GET DIRECTORY DISC ADDRESS.       LDA 0,I       LDB LIBDI       JSB DISCL     READ DIRECTORY.       LDA LIBD      JMP CAT10 * *                                                                [F]* * CATCH IS IDENTICAL TO LCHAR EXCEPT THAT IT DOESN'T* IGNORE BLANKS OR SKIP ON RETURNS. * CATCH NOP       LDB MLINK+1       ADB .+?BEND-?LINK SET UP ENDOFBUFFER PNTR. [F]      STB LTYP2       LDB LTYP1     GET BUFFER POINTER.          [F]      CLE,ERB       LDA 1,I            GET WORD.      SEZ,RSS            ROTATE IF NECESSARY.       ALF,ALF       AND B177           MASK CHARACTER.      ELB           GET BUFFER POINTER.          [F]      INB                BUMP TO NEXT CHARACTER.      CPB LTYP2,I        IF END OF BUFFER,      ADB MBLEN     MOVE TO START.      STB LTYP1                                  [F]      JMP CATCH,I CATBL ABS -BUFLN                                 [F]CATPR OCT 100200                                 [F]CATCL OCT 77577                                  [F]CATI  EQU LTEMP+4 CATP  EQU LTEMP+5 CATJ  EQU LTEMP+6 CATN  EQU LTEMP+7 CATQ  EQU LTEMP+9 CATC  EQU LTEMP+10CATLN EQU LTEMP+11$CAT  EQU *       HED LIBRARY * LIBRARY IS IDENTICAL TO CATALOG EXCEPT THAT IT USES A000* AS ID RATHER THAN THE USER ID. IT MUST BE LOADED IMMEDIATELY* AFTER CATALOG.      SPC 1       ORG LIBRA       CLA       ORG CAT1      LDA A000      JMP CAT2