




/PAGE 1
/INDEX PROGRAM FOR PDP 5/8
/DIRECTORY LOOKUP AND LOADING
/CALLED BY BOOTSTRAPS #1 AND #2
*7000
/STORED ON BLOCKS 14,15,16
BEGN,     KCC
          JMS LEND   /TYPE CARRIAGE RETURN-LINE FEED
          TAD ACN1
          DCA ADR1
          DCA NUMB   /SET TEST TO 0
          DCA CHAR   /SET CHARACTERS TO 0
          DCA CHAR+1
          DCA CHAR+2
          TAD MIN3   /SET FOR THREE 12-BIT WORDS
          DCA CNT2
GO,       TAD MIN2   /SET FOR TWO PARTS
          DCA CNT1
          JMS INPT   /GET CHARACTER
          TAD TEMP
          TAD TST1   /IS CHARACTER>240
          SNA SPA CLA
          JMP EXIT0  /NO-EXIT
          TAD TEMP   /YES-TRIM IT
          AND MASK
          ISZ NUMB   /ADD 1 TO VALID CHARACTER COUNT
          ISZ CNT1   /IS IT FIRST HALF
          JMP FRST   /YES-PUT INTO LEFT PART
          TAD I ADR1 /NO-GET LEFT PART
          DCA I ADR1 /ADD TOGETHER AND PUT BACK
          ISZ ADR1   /UPDATE TO HANDLE NEXT TWO
          ISZ CNT2   /HAVE WE READ 6 CHARACTERS ?
          JMP GO     /NO
          JMS INPT   /YES  LOOK FOR TERMINATOR
EXIT0,    TAD NUMB   /DID WE ACCEPT ANY CHARACTERS?
          SNA CLA
          JMP ERR    /NO - OPERATOR ERROR
          TAD TEMP   /UES - WAS TERMINATOR A CR?
          TAD TST2
          SZA CLA
          JMP ERR    /NO - OPERATOR ERROR
          JMS LEND   /YES - START LOOKUP
          JMP STRT










/PAGE 2
FRST,     CLL RTL    /TO PACK INTO LEFT
          RTL        /PART OF WORD
          RTL
          DCA I ADR1
          JMP GO+2
TST1,     0-240
TST2,     0-215
MASK,     0077
MIN2,     0-2
MIN3,     0-3
ACN1,     CHAR
CNT1,     0
CNT2,     0
ADR1,     0
NUMB,     0
STRT,     TAD ACN2   /START TABLE SEARCH
          DCA ADR2
          DCA I ACC9  /SET TO ZERO
          CMA
          TAD I NMBR
          DCA NUMB   /NUMBER OF NAMES IN DIRECTORY
TRY1,     TAD MIN3   /TEST 3 12-BIT WORDS
          DCA CNT1
          TAD ACN1   /COMPARE WITH CHAR, CHAR+1, CHAR+2
          DCA ADR1
ISIT,     TAD I ADR2
          CMA IAC
          TAD I ADR1
          SZA CLA    /ARE THESE EQUAL?
          JMP STOP   /NO-STOP-RESET TABLE POINTER
          ISZ ADR1   /UPDATE TEST
          ISZ ADR2
          ISZ CNT1   /WAS IT THE THIRD?
          JMP ISIT   /NO-TRY AGAIN
          TAD I ACC9
          SNA CLA
          JMP I INDX
          TAD ADR2
          JMP I CODE









/PAGE 3
STOP,     ISZ ADR2   /SET POINTER THROUGH AT LEAST
          ISZ CNT1   /THE FIRST THREE ELEMENTS OF
          JMP .-2    /DIRECTORY ENTRY
          ISZ I ACC9
          ISZ ADR2
          ISZ ADR2
          TAD I ADR2 /NUMBER OF ELEMENTS IN
          ISZ ADR2
          SZA CLA
          JMP .-3
          ISZ NUMB   /HAVE WE EXHAUSTED DIRECTORY?
          JMP TRY1   /NO - TRY AGAIN
ERR,      TAD QST    /YES - NAME NOT IN DIRECTORY
          JMS TYPE
          TAD QST    /0277
          JMS TYPE
          JMP BEGN
INPT,     0          /ROUTINE TO INPUT A CHARACTER
          KSF        /AND ECHO IT
          JMP .-1
          KRB
          DCA TEMP
          TAD TEMP
          JMS TYPE   /ECHO IT
          JMP I INPT
TYPE,     0          /ROUTINE TO TYPE ONE CHARACTER
          TLS
          TSF
          JMP .-1
          CLA
          JMP I TYPE
LEND,     0          /ROUTINE TO TYPE CARRIAGE RETURN, LINE FEED
          TAD CAR    /0215
          JMS TYPE
          TAD LF     /0212
          JMS TYPE
          JMP I LEND








/PAGE 4
ACN2,     6204       /POINTER TO FIRST DIRECTORY ENTRY
NMBR,     6201       /POINTER TO # OF DIRECTORY ENTRIES
INDX,     NDX        /POINTER TO "INDEX"
CODE,     CDE        /POINTER TO DECODING SUB-PROGRAM
CAR,      0215
LF,       0212
QST,      0277
ADR2,     0
CHAR,     0
          0
          0
TEMP,     0
ACC9,     CNT9








/PAGE 5
*7200
NDX,      TAD ADR5   /THIS SUB-PROGRAM PRINTS THE NAMES
          DCA ADR3   /OF ALL PROGRAMS ON THE SYSTEM TAPE
          TAD I MINN /IT IS CALLED BY THE SYMBOL "INDEX"
          DCA CNT3   /NUMBER OF DIRECTORY ENTRIES
NDX1,     JMS I LND
          TAD M3
          DCA CNT4   /3 12-BIT WORDS/ENTRY
NDX2,     TAD I ADR3
          JMS PAGE   /7 LEFT=6 RIGHT; IE GET LEFT
          JMS PRIN   /PRINT LEFT HALF
          TAD I ADR3 /PRINT RIGHT HALF
          JMS PRIN
          ISZ ADR3
          ISZ CNT4   /DONE 3 YET?
          JMP NDX2   /NO
          ISZ CNT3   /DONE ENTIRE DIRECTORY?
          JMP .+3    /NO
          JMS I LND  /YES - RETURN
          JMP I RETN
          ISZ ADR3   /UPDATE DIRECTORY POINTER
          ISZ ADR3   /TO NAME-ELEMENT OF NEXT
          TAD I ADR3 /ENTRY
          ISZ ADR3
          SZA CLA
          JMP .-3
          JMP NDX1
MINN,     6201       /POINTER TO NUMBER OF DIRECTORY ENTRIES
LND,      LEND
RETN,     BEGN
M3,       0-3
ADR5,     6213
ADR3,     0
CNT3,     0
CNT4,     0








/PAGE 6
CDE,      DCA ADR3   /THIS SUBPROGRAM INTERPRETES ELEMENTS
          TAD ACN3   /OF THE DIRECTORY ENTRIES AND DECODES
          DCA ADR4   /THEM FOR "EXEC"
          DCA I SIZE /NUMBER OF BLOCK SECTIONS ON EXPANDED
          TAD I ADR3 /LIST
          DCA I ADR4 /INITIAL BLOCK NUMBER OF CALLED
          ISZ ADR3   /PROGRAM
          ISZ ADR4
          TAD I ADR3 /STARTING ADDRESS OF CALLED PROGRAM
          DCA I ACN9
CDE1,     ISZ ADR3
          TAD I ADR3
          SNA        /IS THIS THE END OF ENTRY?
          JMP EXEC   /YES-GO AND EXECUTE
          AND MSKL   /NO - BITS 2-6
          CLL RAL
          JMS PAGE
          DCA CNT3   /SAVE LEFT BITS
          TAD I ADR3
          AND MSKR   /BITS 7-11
          DCA CNT4   /SAVE RIGHT BITS
          TAD I ADR3
          RAL        /TEST BIT 0 IF=1, IT IS A STRING
          SZL CLA    /IF NOT, DISCRETE PAGE(S)
          JMP CDE2   /A STRING
          JMS TRCD   /DECODE LEFT
          TAD CNT4
          DCA CNT3
          JMS TRCD   /DECODE RIGHT
          JMP CDE1   /GET NEXT ELEMENT
TRCD,     0
          TAD CNT3
          SNA CLA
          JMP CDE1   /NON-VALID SUB-ELEMENT, GET NEXT ELEMENT
          CMA
          TAD CNT3
          JMS PAGE   /EXPAND TO PAGE ADDRESS
          DCA I ADR4
          TAD I ADR4
          DCA I HIGH /UPDATE LARGEST
          ISZ ADR4
          CMA
          DCA I ADR4 /PUT -1 ON LIST
          ISZ ADR4
          ISZ I SIZE /ADD 1 TO # OF BLOCK SECTIONS
          JMP I TRCD









/PAGE 7
CDE2,     CMA
          TAD CNT3
          JMS PAGE   /STARTING PAGE ADDRESS
          DCA I ADR4
          ISZ ADR4
          TAD CNT4
          CMA
          TAD CNT3
          DCA I ADR4 /NUMBER OF CONSECUTIVE PAGES
          ISZ ADR4
          ISZ I SIZE /ADD 1 TO # OF BLOCK SECTIONS
          CMA
          TAD CNT4
          JMS PAGE
          DCA I HIGH /UPDATE LARGEST
          JMP CDE1
PAGE,     0
          CLL RAL
          RTL
          RTL
          RTL
          JMP I PAGE
ACN3,     OPLT
SIZE,     SZE
HIGH,     UPPR
MSKL,     1740       /BITS 2-6
MSKR,     0037       /BITS 7-11
ADR4,     0
PRIN,     0          /PRINT 6-BIT TRIMMED CODE
          AND BIT6
          SNA
          JMP I PRIN /IF ZERO, FORGET IT
          TAD M40
          SPA
          TAD C100
          TAD C240
          JMS I TPE
          JMP I PRIN
BIT6,     0077
M40,      0-40
C100,     0100
C240,     0240
TPE,      TYPE
ACN9,     6176
ACN,      6000
ADS1,     ADDRS1





/PAGE 8
EXEC,     TAD ACN    /6000
          DCA I ADS1
          CMA
          DCA I BSZ1 /1 BLOCK
          TAD M10    /-10 IE. BLOCK #10 (OCTAL)
          DCA I BK1
          TAD ACN7   /TAPE+2
          DCA I STPT
          TAD WRT   
          DCA I FN1
          JMS TAPE
          TAD RD     /0002
          DCA I FN1
          CMA
          DCA I BK1  /BLOCK 1
          TAD M6
          DCA I BSZ1 /6 BLOCKS
          JMS TAPE
          CLA CLL
          TAD UPPR   /HIGHEST PAGE USED
          TAD UPCN
          TAD UPCN
          SZL CLA    /CAN WE RESTORE 7400-7577?
          TAD UPCN   /NO
          TAD CN12   /YES
          DCA I ADS2
          SNL
          IAC
          TAD M10    /-10 IE. BLOCK #10 (OCTAL)
          DCA I BK2
          TAD CNT9
          CMA IAC
          TAD K4
          SMA CLA
          JMP SPEC   /IT IS ONE OF THE SYSTEM PROGRAMS
UPGO,     TAD ACN7
          DCA I STP1
          TAD OPLT
          CMA IAC    /BLOCK NUMBER OF CALLED PROGRAM
          DCA I BK1
          TAD SZE
          CMA IAC
          DCA SZE
          CMA
          DCA OPLT
          TAD ACN8
          DCA UPPR







/PAGE 9
TGO,      TAD I UPPR
          DCA I ADS9
          ISZ UPPR
          TAD I UPPR
          DCA I BSZ1
          ISZ UPPR
          ISZ SZE
          JMP .+3
          CLA CMA
          DCA I MOD2
          JMS TAPE
          ISZ OPLT
          JMP TGO
          ISZ TAPE+1
          JMP TGO
SPEC,     ISZ SZE    /DO NOT ALLOW MODE 2 TO BE
          CMA        /ENTERED
          TAD CNT9
          SZA CLA
          JMP .+5
          CMA        /IT IS EXCAPE--CALL 8 BLOCKS
          TAD OPLT+2
          DCA OPLT+2
          JMP UPGO
          TAD RET1   /SPECIAL RETURN
          DCA I STPT
          JMP UPGO+2
TAPE,     0
          JMP I MOD1
          JMP I TAPE








/PAGE 10
CNT9,     0
ACN7,     TAPE+2
ACN8,     OPLT+1
M6,       0-6
M10,      0-10
CN12,     7400
UPCN,     0200
K4,       4
WRT,      50
RD,       30
RET1,     7000       /RETURN FOR SYSTEM PROGRAMS
MOD1,     SENTER
          MENTER
MOD2,     MDSWIT
ADS9,     ADDRS1
ADS2,     ADDRS2
BSZ1,     BLOCK1
BK1,      BLK1
BK2,      BLK2
FN1,      FUNCT
STPT,     STOPPD
STP1,     MOVING
UPPR,     0
SZE,      0
OPLT,     0          /BLOCK NUMBER
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
$



