.IFUND %RSX .SYSID < .TITLE CREF >,<000 EDIT 125> .ENDC .IFDEF %RSX .TITLE CREF XVM/RSX V1A000 EDIT 125 .ENDC / /COPYRIGHT (C) 1975 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY /ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH /THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS /SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO- /VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON /EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO /THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE /WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM- /MITMENT BY DIGITAL EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. .EJECT /EDIT #019 SK 31-AUG-72 / 020 SK 16-NOV-73 INCORPORATE ALL PATCHES TODATE. / 021 JMW 17-DEC-74 TAKE OUT CONDITIONALIZATIONS AND / CODE UNNEEDED FOR DOS-15. / 121 JMW 07/AUG/75 REMOVE X4K CODE AND MAKE RELOCATABLE. / 122 JMW 11/SEPT/75 PASS ARGS FROM MACRO AT BOTTOM FREE CORE. / 123 JMW 18/OCT/75 PUT IN RSX CONDITIONALS (AGAIN!!!). / 124 JMW 03/NOV/75 CORRECTIONS TO RSX CONDITIONALIZATIONS. / 125 JMW 06/NOV/75 CREF ALL ARGS TO MACRO CALLS. / / CREF FOR XVM/DOS-15. / CROSS REFERENCE PROGRAM FOR MACRO ELEMENTS: 3RD PASS FOR THE MACRO ASSEMBLER. / / ASSEMBLY PARAMETERS: / NONE YIELDS THE STANDARD SYSTEM VERSION; / %BIN DEFINED GIVES A VERSION THAT IS A SUBROUTINE THAT RUNS WITH / MACRO UNDER DDT. / %RSX PRODUCES THE RSX VERSION. THERE ARE SEVERAL SUBCONDITIONALS / HERE, FOR .DAT SLOT (LUN) ASSIGNMENTS MOSTLY. / /CREF IS LOADED AS A SYSTEM PROGRAM VIA THE READR COMMAND IN PATCH. / / MAX CANGIANO. / SHAL=660000 IDX=ISZ / / .IFDEF %BIN /(JMW:122) .GLOBL CREF /(JMW:122) .ENDC .IFDEF %RSX / / DEFAULT LUN ASSIGNMENTS. / .IFUND DAT2 DAT2=14 .ENDC .IFUND DAT3 DAT3=15 .ENDC .IFUND DAT11 DAT11=17 .ENDC .IFUND DAT12 DAT12=20 .ENDC .IFUND DAT13 DAT13=21 .ENDC .IFUND DAT14 DAT14=22 .ENDC .GLOBL CREF,FILNMS,EXIT,IOERR .ENDC .TITLE MOVE PASS 2 ARGS / /ARGUMENTS NEEDED FROM MACRO ARE PASSED AT THE BOTTOM OF FREE CORE. / CREF=. .IFDEF %BIN 0 /(JMW:122)SUBROUTINE TO MACRO UNDER DDT. .ENDC .IFDEF %RSX 0 /ENTRY POINT FOR RSX CREF. LAC FILNMS /GET STARTING LOCATION OF MACRO ARGS. AAC -1 .ENDC .IFUND %RSX LAC* SCM102 /(JMW:122) MACRO HAS PUT 16 (8) ARGS AT C(102). .ENDC DAC* L10 LAC (FIL2NM-1 DAC* L11 .IFUND %RSX LAW -16 .ENDC .IFDEF %RSX LAW -20 /RSX HAS 2 MORE THAN DOS. .ENDC DAC TEMP CREF1 LAC* 10 DAC* 11 ISZ TEMP JMP CREF1 .TITLE MOVE USER SYMBOL TABLE. /THIS CODE MOVES UST TO TOP OF FREE CORE /THEN IT MOVES UST BACK TO LOW CORE WITH /EACH ENTRY INCREASED TO SIX WORDS /THE SYMBOL NAME IS CONVERTED FROM RADIX 50 /TO .SIXBT /MOVE UST TO TOP OF FREE CORE / BEGIN DZM UPAROP .IFUND %RSX LAC MULTIN /MULTIPLE INPUT? SNA JMP INIT1 /NO LAC (SKP /YES, FORCE ^P DAC CP-2 DAC CP-4 LAC* SCM152 SPA XOR L20000 DAC* SCM152 INIT1 .INIT -3,1,RSTRT. .WRITE -3,2,ENDP2-2,8 .WAIT -3 .ENDC .IFDEF %RSX LAC FIL2NM+2 /CHECK EXTENSION OF FILE NAME. SNA LAC SIXSRC /ADD 'SRC' EXTENSION. DAC FIL2NM+2 LAC FILENM+2 SNA LAC SIXSRC /SAME FOR PRIMARY FILE. DAC FILENM+2 INIT1 LAC VERPNT /NEED TO OUTPUT TO TTY. SZA JMS ENDPAS /YES - PRINT THE PASS 2 MESAGE. .ENDC LAC USTSZE SNA /IF SIZE OF UST IS 0,THERE ARE JMP FINE /NO SYMBOLS,THEREFORE EXIT .IFUND %RSX DAC OVRL1 TAD OVRL1 TAD OVRL1 CMA /TOPCOR-USTSZE ADD* SCM103 /Y=TOPCORE-X. DAC* L10 /SAVE Y IN AIR 10 DAC OVRL1 / LAC BEGUST /GET BEGINNING OF UST AAC -1 DAC* L11 /STORE IT IN AIR 11 LOOP1 LAC* 11 /GET WORD FORM UST DAC* 10 /STORE IT IN HIGH CORE LAC* L10 /ARE WE DONE? SAD* SCM103 /NO, CONTINUE. JMP .+2 /YES, EXIT JMP LOOP1 .ENDC .IFDEF %RSX LAC BEGUST /BEG OF THE UST. AAC -1 DAC OVRL1 LAC ENDPAR /END OF THE PARTITION. AAC -1 DAC ENDPAR DAC FRLAST /END OF FREE CORE POINTER. .ENDC / /CONVERT SYMBOL NAMES FROM RADIX 50 TO SIXBT /THEN EXPAND EACH ENTRY IN UST TO SIX WORDS /AND MOVE THE EXPANDED ENTRY TO LOW CORE / .IFUND %RSX LAC* SCM102 .ENDC .IFDEF %RSX LAC ENDTSK /POINTER TO END OF CREF. .ENDC AAC -1 DAC* L11 /IN AIR 11 (LOW CORE) LAC OVRL1 /PUT BEGINNING OF MOVED UST DAC* L10 /IN AIR 10 (HIGH CORE) LOOP2 JMS UNSQZE / LAC* 10 /MOVE THREE WORDS DAC* 11 /DOWN TO LOW CORE LAC* 10 / DAC* 11 LAC* 10 / DAC* 11 / DZM* 11 /ZERO THE FOURTH WORD OF NEW ENTRY LAC CNTRL /GET CONTROL BITS DAC* 11 /DEPOSIT THEM IN THE FIFTH WORD OF THE DZM* 11 /NEW ENTRY, ZERO LAST WORD LAC* L10 /ARE WE DONE? .IFUND %RSX SAD* SCM103 /NO, CONTINUE. .ENDC .IFDEF %RSX SAD ENDPAR /(JMW:124) .ENDC JMP ININPT /YES, INIT INPUT JMP LOOP2 / UNSQZE 0 /CONVERT FROM RADIX 50 TO .SIXBT LAW -2 /INTIALIZE WORD COUNTER DAC USQCTR / LAC* L10 /PICK UP ADDRESS OF FIRST AAC 1 DAC XR1 /WORD TO CONVERT LAC* XR1 /PICK UP FIRST WORD TO CONVERT AND L650S /MASK IN BITS 0 AND 1 JMP COMMON / HALF2 LAC* XR1 /PICK UP SECOND WORD TO CONVERT AND L650S /MASK IN BITS 0 AND 1 CLL /SHIFT TWO TO THE RIGHT RTR /AND STORE THEM WITH BITS 0 XOR CNTRL /AND 1 OF FIRST WORD TO COMMON DAC CNTRL /CONVERT LAC* XR1 /PICK UP WORD TO CONVERT AND L157S /AND MASK OUT BITS 0 AND 1 IDIV!SHAL 3100 DAC OVRL1 LACQ JMS SIXBIT JMS LFT12 /LEFTMOST BITS, THEN STORE DAC* XR1 /IT BACK IN UST ENTRY LAC OVRL1 IDIV!SHAL 50 DAC OVRL1 LACQ JMS SIXBIT JMS LFT6 /MOVE CHAR TO MIDDLE OF WORD XOR* XR1 /COMBINE MIDDLE CHARACTER DAC* XR1 /WITH LEFT CHARACTER LAC OVRL1 /GET RIGHTMOST CHARACTER JMS SIXBIT XOR* XR1 /COMBINE RIGHT CHARACTER WITH DAC* XR1 /OTHER TWO ISZ XR1 /MOVE POINTER TO SECOND WORD ISZ USQCTR /OF SYMBOL NAME,IF WE HAVE ALREADY JMP HALF2 /PROCESSED 2 WORDS RETURN, OTHERWISE JMP* UNSQZE /GO TO PROCESS SECOND WORD SIXBIT 0 DAC QUO SNA JMP* SIXBIT AAC -33 SMA JMP SIXBT2 LAC QUO JMP* SIXBIT SIXBT2 SZA JMP SIXBT3 LAC AND% JMP* SIXBIT SIXBT3 SAD (1 JMP SIXBT4 LAC QUO AAC 23 JMP* SIXBIT SIXBT4 LAC DOT JMP* SIXBIT L650S 600000 L157S 177777 AVLSPC=OPACK LINENO=OWRITE OPPRO=ADRPRO FALPHA=ALPHA .IFDEF %RSX 4002 0 .ENDC ENDP2 .ASCII ' END OF PASS 2'<15> FRLAST FRLAST-1 /LAST AVAILABLE REGISTER .TITLE INITIALIZE INPUT. /INITIALIZE INPUT .IFUND %RSX ININPT LAC* L11 DAC ENDUST AAC 1 DAC AVLSPC LAC FSWTCH SNA /IS THERE A FILE ON DAT SLOT -14? JMP INIT2 /NO LAC CAL14 /YES, SET UP CALS TO -14. DAC INIT3-2 LAC INIT7 DAC DBL DAC INIT4-2 INIT7 .INIT -14,0,RSTRT LAW -64 TAD .-2 SPA JMP CP JMP RSTRT CAL14 2764 CNTRLP .ASCII '^P'<175> INIT11 .CLOSE -14 DZM FSWTCH LAC CAL11 DAC INIT3-2 LAC CAL11P DAC DBL DAC INIT4-2 LAC FILE1% DAC INIT4 JMP INIT2 CAL11 2767 CAL11P 767 FILE1% FILENM INIT2 .INIT -11,0,RSTRT LAW -64 TAD .-2 SMA JMP RSTRT CP=. LAC* SCM152 SPA XOR L20000 DAC* SCM152 ISZ UPAROP .WRITE -3,2,CNTRLP-2,4 JMP . UPAROP 0 RSTRT.=. LAC UPAROP SNA JMP FINE DZM UPAROP RSTRT CAL+767 3 INIT4 FIL2NM .ENDC .IFDEF %RSX ININPT LAC* L11 DAC ENDUST TAD (1 DAC AVLSPC LAC FSWTCH SNA JMP RSTRTA /SKIP IF NOT F SWITCH LAC (DAT14) /SET UP TO READ DAT14 DAC READA /SET IN CPB DAC SEKLU /SET IN SEEK FILN2F LAC FIL2NM /PICK UP THE FILE NAME DAC SKFIL /SET IT IN THE CPB REQUEST LAC FIL2NM+1 DAC SKFIL+1 LAC FIL2NM+2 DAC SKFIL+2 JMP RSTRT INIT11 CAL CLOS14 /CLOSE LUN 14 RSTRTA LAC (DAT11) /SET UP THE READ AND SEEK REQUESTS DAC READA DAC SEKLU LAC FSWTCH /CHECK TO SEE IF THERE ARE 2 FILES DZM FSWTCH /CLEAR THE F SWITCH SNA JMP FILN2F /IF NO 2 FILES THEN FILENAME IS IN FIL2NM LAC FILENM /SET UP THE FILE NAMES DAC SKFIL LAC FILENM+1 DAC SKFIL+1 LAC FILENM+2 DAC SKFIL+2 RSTRT CAL SEEKL CAL WFEVR LAC EVR /PICK UP THE EVENT VARIABLE SMA /IS TI LEGAL? JMP NXTLIN /GO LOOK AT THE NEXT LINE SAD (-6) /IS THE FILE NAME LEGAL? SKP JMS* IOERR /NO -- I/O ERROR LAC SEKLU /LUN OF I/O ERROR .ENDC .TITLE MAIN FLOW OF CREF. / /GENERAL FLOW / /START BY READING IN THE NEXT LINE / NXTLIN JMS DBLBUF /GET NEXT LINE ISZ LINENO /UPDATE LINE NUMBER LAC (5 /INITIALIZE GETCHR DAC GETPTR LAC LINBF% /INITIALIZE POINTER TO NEXT DAC ADPCHR /WORD PAIR IN LINE BUFFER / /START ANALYZING THE LINE / START JMS GETCHR /GET NEXT CHARACTER JMS FALPHA /DO WE HAVE A TAG? JMS TAGPRO /YES SAD TAB /NO, DO WE HAVE A TAB? JMP STOP /YES, GO START OP-CODE SAD SPACE /NO, DO WE HAVE SPACES? JMP STOP /YES, GO START OP-CODE JMP STCOMS /NO STOP JMS GETCHR /GET NEXT CHARACTER SAD SPACE /PASS OVER BLANKS JMP .-2 / JMS FALPHA /DO WE HAVE AN OP CODE? JMS OPPRO /YES SAD TAB /NO, TAB? JMP STADR /YES, GO START ADDRESS FIELD SAD SPACE /NO, IS IT A SPACE? JMP STADR /YES, GO START ADDRESS FIELD JMP STADR+1 /NO STADR JMS GETCHR /GET NEXT CHARACTER SAD SPACE /PASS OVER BLANKS JMP .-2 / SAD PLUS /PLUS SIGN? JMP STCAL1 /YES SAD MINUS /NO, MINUS SIGN? JMP STCAL1 /YES SAD NOSIGN /NO, VARIABLE? JMP STCAL1 /YES. SAD LPAREN /NO, LEFT PARENTHESIS? JMP STOP /YES JMS NUMERC JMP .+2 JMS FALPHA /NO, IS IT ALPHABETIC? JMS ADRPRO / JMP STCOMS / STCAL1 JMS GETCHR / JMP STCAL1-5 / STCOMS SAD CR /NO, CR? JMP NXTLIN /YES SAD SEMICL /NO, IS IT ;? JMP START /YES SAD SLASH /IS IT SLASH? JMP NXTLIN /YES JMS GETCHR /NO JMP STCOMS /LOOP .TITLE CONSTANTS, ETC. / OVRL1 0 LINCNT -65 .IFDEF %RSX UPAROP 0 .ENDC / /CHARACTER CONSTANTS / .OCT SPACE 40 CHRTBL=. TAB 11 SEMICL 73 CR 15 PLUS 53 MINUS 55 STAR 52 SLASH 57 AND% 45 DOT 56 LPAREN 50 EQUALS 75 NOSIGN 43 IOTLIT IOT / /OCTAL CONSTANTS AND MASKS / .OCT L7 7 L13 13 L14 14 L77 77 L177 177 L17 17 L6400 6400 L60 60 L10 10 L37777 37777 L77777 77777 L20000 20000 .IFUND %RSX SCM102 102 /.SCOM+2. SCM152 152 SCM103 103 .ENDC L40=SPACE L11=TAB L170 170 L7%50S=IOTLIT / /CORE LOCATION POINTERS / LINBF% LINBUF+1 / /PASS 2 ARGUMENTS /(JMW:122) / FIL2NM 0 0 0 FILENM 0 0 0 FSWTCH 0 BATCH 0 .IFDEF %RSX VERPNT 0 ENDPAR 0 .ENDC USTSZE 0 ENDUST 0 BEGUST 0 LSTLIN 0 LSTPGE 0 MULTIN 0 / /BUFFERS AND DATA WORDS / PACKS .BLOCK 2 LINBUF .BLOCK 43 RDLST 0 CHRHLD 0 CHRCNT 0 FLDSW=UNSIX / / SHIFT ROUTINES / LFT4 0 RTL!CLL RTL JMP* LFT4 LFT6 0 JMS LFT4 RTL JMP* LFT6 RT3 0 CLL!RAR RTR JMP* RT3 RT4 0 JMS RT3 RAR JMP* RT4 RT5 0 JMS RT3 RTR JMP* RT5 RT6 0 JMS RT4 RTR JMP* RT6 RT7 0 JMS RT5 RTR JMP* RT7 LFT15=RT4 LFT12=RT7 / CNTRL=LINBUF USQCTR=LINBUF+1 XR1=LINBUF+2 QUO 0 TEMP 0 .EJECT /SUBROUTINE TAGPRO / /TAGPRO RECEIVES CONTROL IF THE FIRST CHARACTER /OF A STATEMENT IS AN ALPHA OR DOT /DIRECT ASSIGNMENTS ARE ALSO HANDLED HERE / TAGPRO 0 / DZM FLDSW /CLEAR FIELD SWITCH DZM CHRCNT /CLEAR CHARACTER COUNT TAGCE ISZ CHRCNT /INCREMENT CHARACTER COUNT DAC CHRHLD /SAVE CURRENT CHARACTER LAC CHRCNT / SAD L7 /DO WE HAVE SIX CHARACTERS? JMP TAGEND /YES, GO MAKE ENTRY JMS PACKER /NO, PACK CHARACTER JMS GETCHR /GET NEXT CHARACTER JMS FALPHA /IS IT ALPHABETIC? JMP TAGCE /YES JMS NUMERC /NO,NUMERIC? JMP TAGCE /YES JMS TAGDEL /NO, IS IT A LEGAL DELIMITER? JMP TAGFND-1 /YES SAD EQUALS /NO, IS IT AN EQUAL SIGN JMP TAGDIR /YES, DIRECT ASSIGNMENT DAC CHRHLD /SAVE CHARACTER TAGFND JMS SYMBOL /MAKE ENTRY LAC CHRHLD /RESTORE CHARACTER JMP* TAGPRO /RETURN TAGDIR JMS SYMBOL /MAKE ENTRY JMS GETCHR /GET NEXT CHARACTER JMS FALPHA /IS IT ALAPHABETIC? JMS ADRPRO /YES, TREAT IT AS AN ADDRESS FIELD JMS NUMERC /NO, CHECK IF IT IS A NUMBER JMP CHKSYM /YES, NOW CHECK IF THERE IS A SYMBOL JMP NXTLIN /NO / CHKSYM JMS GETCHR JMS NUMERC /CHECK IF CHARACTER IS A NUMBER JMP CHKSYM /YES, LOOP JMS ADRDEL /NO, CHECK IF NEXT CHAR. IS AN OPERATOR JMP TAGDIR+1 /YES, CHECK FOR SYMBOL JMP NXTLIN /NO, GO TO NEXT LINE / TAGEND JMS GETCHR /EDIT #16 SAD EQUALS JMP TAGDIR JMS TAGDEL JMP TAGFND-1 JMP TAGEND .EJECT / /SUBROUTINE SYMBOL / /SUBROUTINE SYMBOL IS CALLED WHEN A SYMBOL /IS FOUND /PACKS AND PACKS+1+CONTAIN THE SYMBOL IN /.SIXBIT REPRESENTATION /FLDSW IS INTERROGATED TO FIND OUT IF /WE ARE DEALING WITH A TAG SYMBOL /LINE NO HAS THE LINE#IN WHICH THE SYMBOL /IS REFERENCED /A NEW ENTRY IS MADE IN THE LINE #TABLE / SYMBOL 0 LAW -1 /GET STARTING ADDR. OF UST .IFUND %RSX TAD* SCM102 / .ENDC .IFDEF %RSX TAD ENDTSK /END OF TASK. .ENDC DAC* L10 /STORE IT IN AIR 10 SYMTST LAC* 10 /GET 1ST WORD OF SYMBOL IN TABLE SAD PACKS /IS IT EQUAL TO OUR SYMBOL? JMP SYMBEQ /YES, TEST SECOND WORD LAC* L10 /NO, MOVE POINTER UP AAC 5 /TO NEXT SYMBOL. SYMNXT DAC* L10 / CMA /ARE WE AT THE ADD ENDUST /END OF THE USER SPA /SYMBOL TABLE? JMP* SYMBOL /YES, NO FIND RETURN JMP SYMTST /NO, TRY AGAIN SYMBEQ LAC* 10 /GET 2ND WORD OF SYMBOL IN TABLE SAD PACKS+1 /IS IT EQUAL TO OUR SYMBOL JMP SYMENT /YES, GO MAKE LINE # ENTRY LAC* L10 /NO, MOVE POINTER UP AAC 4 /TO NEXT SYMBOL JMP SYMNXT / / /SUBROUTINE TO MAKE NEW ENTRIES IN LINE # LIST /AND TO READJUST LINKAGES AND POINTERS / SYMENT LAC* L10 /MOVE POINTER TO FOURTH WORD AAC 2 /OF HEADER DAC* L10 DAC TEMP / LAC FLDSW /GET FIELD INDICATOR SNA!CLL /IS IT A TAG FIELD? STL /YES, SET LINK TO ONE LAC* TEMP /GET ADDRESS OF LAST ENTRY SNA /ARE THERE ANY ENTRIES? JMP SYMFST /NO, TREAT FIRST ENTRY AS SPECIAL LAC LINENO /YES, FETCH CURRENT LINE NO. DAC* AVLSPC /PLACE IT IN NEW WNTRY LAC* TEMP /SAVE ADRESS OF LAST ENTRY DAC PACKS /IN PACKS TEMPORARILY ISZ PACKS /PACKS POINTS TO WORD 2 OF LAST ENTRY LAC* PACKS /NOW FETCH IT XOR AVLSPC /OR-IN FORWARD POINTER TO DAC* PACKS /NEW ENTRY LAC AVLSPC /READJUST POINTER TO LAST DAC* TEMP /ENTRY ISZ AVLSPC /MOVE AVAILABLE SPACE POINTER CLA!RAR /TURN ON BIT 0 IF THIS IS DAC* AVLSPC /A FIELD SWITCH ISZ AVLSPC / LAC AVLSPC /COMPUTE: FRLAST-AVLSPC CMA / .IFUND %BIN /(JMW:122) ADD FRLAST / .ENDC .IFDEF %BIN /(JMW:122) IF RUNNING WITH DDT, DON'T WANT ADD* SCM103 /(JMW:122) TO CLOBBER RETURN. .ENDC SMA /ARE WE AT END OF FREE CORE? JMP* SYMBOL /NO, RETURN JMP OUTPT1 /YES. SYMFST LAC TEMP /ADJUST LAST ENTRY POINTER AAC 1 DAC* TEMP / ISZ TEMP / LAC* TEMP /ENTER LINE NO. IN HEADER XOR LINENO / DAC* TEMP / ISZ TEMP / CLA!RAR /TURN ON TAG FLAG DAC* TEMP / JMP* SYMBOL /RETURN .EJECT / /SUBROUTINE GETCHR / /THIS SUBROUTINE ALWAYS RETURNS THE NEXT /CHARACTER FROM LINBUF IN THE AC, IN 1-BIT ASCII / GETCHR 0 / ISZ GETPTR /FETCH CHAR POINTER LAC GETPTR / SAD (6 /DO WE NEED THE SIXTH CHAR? JMP GETNEW /YES, GO DECODE 5 MORE CHARS. ISZ .+1 /NO GETCAC LAC .-. /FETCH CHARACTER AND L177 /MASK IT SAD D10 /IGNORE LF,FF,VT JMP GETCHR+1 SAD L13 JMP GETCHR+1 SAD L14 JMP GETCHR+1 GETWDS JMP* GETCHR / 0 /CHAR1 0 /CHAR2 0 /CHAR3 0 /CHAR4 0 /CHAR5 GETPTR 5 /INITIAL VALUE GETNEW ISZ ADPCHR /GET WORD 1 TO BE UNPACKED LAC* ADPCHR JMS RT4 /SHIFT IT 4 BITS RIGHT DAC GETWDS+2 /SAVE SECOND CHARACTER JMS RT7 /SHIFT AC 7 BITS RIGHT DAC GETWDS+1 /SAVE FIRST CHARACTER LAC* ADPCHR ALS 3 AND L170 /MASK OFF LAST DIGIT DAC GETWDS+3 /SAVE HALF1 OF CHAR3 ISZ ADPCHR / LAC* ADPCHR /GET WORD2 TO BE UNPACKED RAR /SHIFT 1 RIGHT DAC GETWDS+5 /SAVE FIFTH CHARACTER JMS RT7 /SHIFT AC 7 BITS RIGHT DAC GETWDS+4 /SAVE FOURTH CHARACTER JMS RT7 /SHIFT 7 MORE BITS AND L7 /LEAVE IN ONLY 3 RIGHT BITS XOR GETWDS+3 / DAC GETWDS+3 /SAVE THIRD CHARACTER LAC (LAC GETWDS /RESTORE GETWDS DAC GETCAC /ADDRESS DZM GETPTR /RESTORE GETPTR JMP GETCHR+1 / / /SUBROUTINE TAGDEL / /RETURNS TO LOC+1 IF CHARACTER IN AC IS: / SPACE, TAB, ;, CR, / /RETURNS TO LOC+2 OTHERWISE / TAGDEL 0 DAC CHRHLD LAW -4 DAC* L10 LAC (SAD CHRTBL-2 /SAD CHRTBL-2 DAC TAGMP LAC CHRHLD ISZ .+1 TAGMP SAD .-. JMP* TAGDEL ISZ* L10 JMP .-4 ISZ TAGDEL JMP* TAGDEL ADRDEL 0 DAC CHRHLD LAW -10 DAC* L10 LAC ADRDEL DAC TAGDEL LAC (SAD CHRTBL+2 JMP TAGMP-3 / / /SUBROUTINE PACKER / /PACKER PACKS .SIXBT CHARACTERS IN PACKS AND /PACKS+1, CHRCHT HAS THE POSITION TO PACK /THE CHARACTER IN / PACKER 0 / LAC PAKJMP /SELECT APPROPRIATE JUMP TAD CHRCNT / DAC .+3 / LAC CHRHLD /FETCH CHARACTER AND L77 XCT .-. / PAKJMP XCT . /JUMP TABLE JMP PACK1 / JMP PACK2 / JMP PACK3 / JMP PACK4 / JMP PACK5 / JMP PACK6 / PACK1 DZM PACKS /PLACE BLANKS IN PACKS AND DZM PACKS+1 /PACKS+1 JMS RT7 /MOVE CHAR TO LEFTMOST POS JMP PACK3 / PACK2 JMS LFT6 /MOVE CHARACTER TO MIDDLE POSITION PACK3 XOR PACKS / DAC PACKS / JMP* PACKER /RETURN PACK4 JMS RT7 /MOVE CHARACTR TO LEFTMOST POSITION JMP PACK6 / PACK5 JMS LFT6 /MOVE CHARACTDR TO MIDDLE POSITION PACK6 XOR PACKS+1 / DAC PACKS+1 / JMP* PACKER /RETURN / /SUBROUTINE ALPHA / /ALPHA LOOKS AT THE CHARACTER IN THE AC AND /RETURNS TO LOC+1 IF IT IS ALPHABETIC , %, OR ., /TO LOC+2 OTHERWISE / ALPHA 0 / SAD AND% /IS CHARACTER %? JMP* ALPHA /YES, RETURN TO LOC+1 SAD DOT JMP* ALPHA DAC CHRHLD /NO, SAVE CHARACTER AAC -100 SPA /IS CHAR.>100? JMP NOALPH /NO AAC -33 /YES SMA /IS CHAR.<133? NOALPH ISZ ALPHA /NO LAC CHRHLD /YES, RESTORE CHARACTER JMP* ALPHA /RETURN TO LOC+1 / /SUBROUTINE NUMERC / /NUMERC LOOKS AT THE CHARACTER IN THE AC AND /RETURNS TO LOC+1 IF IT IS NUMERIC TO LOC+2 /OTHERWISE / NUMERC 0 / DAC CHRHLD /SAVE CHARACTER AAC -60 SPA /IS CHARACTER>57? JMP NONUM /NO AAC -12 /YES SMA /IS CHAR.<71? NONUM ISZ NUMERC /NO LAC CHRHLD /YES, RESTORE CHAR JMP* NUMERC /RETURN TO LOC+1 .TITLE OUTPUT ROUTINES. / /SUBROUTINE OUTPUT / /AT THE END OF THE SOURCE SCAN OUTPUT IS /CALLED TO GENERATE OUTPUT / OFLAG=DBLBUF /LINE FULL FLAG ERR1% ERRLIN-1 ERRLIN .ASCII 'CORE EXHAUSTED AT LINE ' / / ENTER HERE IN CASE WE EXHAUSTED CORE. / OUTPT1=. LAW -12 DAC TEMP LAC LINBF% DAC* L11 LAC ERR1% DAC* L10 LAC* 10 DAC* 11 ISZ TEMP JMP .-3 JMS OINIT LAC LINBF% AAC 2 AAC 10 DAC CHRCNT LAC LINENO JMS UNDEC JMS OWRITE / / NORMAL ENTRY TO OUTPUT ROUTINE. / OUTPT2=. JMS LINHDR JMS OINIT /INITIALIZE OUTPUT BUFFERS. .IFUND %RSX LAC* SCM102 .ENDC .IFDEF %RSX LAC ENDTSK .ENDC OUTST DAC PACKS+1 / DAC TEMP / LAC* TEMP /GET SYMBOL WORD 1 JMS UNSIX /CONVERT IT TO 5/7 ASCII ISZ TEMP / LAC* TEMP /GET SYMBOL WORD 2 JMS UNSIX /CONVERT IT TO 5-7 ASCII LAC SPACE /PACK-IN A SPACE JMS OPACK / LAC TEMP /ONLY 5 CHARACTERS IF NOT A AAC 3 /DIRECT ASSIGNMENT DAC UNOCTL LAC* UNOCTL SMA DZM OINIT ISZ TEMP LAC* TEMP JMS UNOCTL LAC TEMP / AAC 2 DAC TEMP / LAC* TEMP /GET FIRST LINE NUMBER AND L37777 / OLOOP JMS UNDEC /CONVERT LINE # AND PACK IT ISZ TEMP / LAC* TEMP /FETCH FORWARD POINTER SMA JMP OUTCE1 AND L77777 DAC* TEMP LAC STAR JMS OPACK LAC* TEMP OUTCE SNA /ARE WE DONE FOR THIS SYMBOL? JMP ONEXT /YES, LOOK AT NEXT SYMBOL DAC TEMP LAC SPACE JMS OPACK LAC* TEMP /GET LINE# ISZ OFLAG /IS LINE FULL? JMP OLOOP /NO JMS OWRITE /YES LAW -16 / DAC PACKS / LAC SPACE /PACK 7 SPACES AT BEGINNING JMS OPACK /OF NEW LINE ISZ PACKS / JMP .-3 / JMP OLOOP-2 / OUTCE1 DAC UNDEC LAC SPACE JMS OPACK LAC UNDEC JMP OUTCE ONEXT JMS OWRITE /WRITE LINE LAC PACKS+1 /MOVE POINTER TO NEXT SYMBOL AAC 5 SAD ENDUST /ARE WE AT END OF UST? JMP .+3 AAC 1 JMP OUTST /NO, CONTINUE. .IFUND %RSX FINE .CLOSE -12 .CLOSE -11 LAC BATCH /DO WE HAVE TO CALL MACRO SNA /BACK IN? JMP EXIT /NO. .IFUND %BIN .OVRLA MACR15 MACR15 .SIXBT /MACRO/ .ENDC .IFDEF %BIN JMP* CREF .ENDC EXIT .EXIT .ENDC .IFDEF %RSX FINE CAL CLOS12 /CLOSE THE INPUT AND CAL CLOS11 / OUTPUT FILES. JMP* CREF /RETURN TO RESIDENT CODE. .ENDC .EJECT / /SUBROUTINE UNSIX - / / CONVERTS CONTENTS OF AC FROM .SIXBT TO / .ASCII AND PACKS RESULT IN BUFFER. / UNSIX1=ININPT UNSIX 0 DAC UNSIX1 JMS LFT6 RAL JMS UNDO LAC UNSIX1 JMS RT6 JMS UNDO LAC UNSIX1 JMS UNDO JMP* UNSIX UNDO 0 AND L77 SNA LAC SPACE XOR L40 AAC 40 JMS OPACK JMP* UNDO / /SUBROUTINE UNDEC - / / CONVERTS CONTENTS OF AC FROM BINARY TO / DECIMAL AND PACKS RESULT IN BUFFER. / UNDEC 0 / DZM OINIT /FLAG LEADING ZEROS IDIV!SHAL DTENTH 23420 /10000 DEC. DAC OVRL1 LACQ JMS UNSEND LAC OVRL1 IDIV!SHAL 1750 /1000 DEC DAC OVRL1 LACQ JMS UNSEND LAC OVRL1 IDIV!SHAL 144 DAC OVRL1 LACQ JMS UNSEND LAC OVRL1 IDIV!SHAL D10 12 DAC OVRL1 LACQ JMS UNSEND LAC OVRL1 JMS UNSEND JMP* UNDEC UNSEND 0 AAC 60 SAD L60 JMP .+4 ISZ OINIT JMS OPACK JMP* UNSEND CLA SAD OINIT JMP .+3 LAC L60 JMP UNSEND+5 LAC SPACE JMP UNSEND+5 / / SUBROUTINE UNOCTAL / / CONVERTS CONTENTS OF AC FROM BINARY TO / OCTAL} UNOCTL 0 DAC UNDEC LAC OINIT /OINIT=0 IF NOT SZA /DIRECT ASSIGNMENT JMP DIRASG /IN THIS CASE PRINT LAC UNDEC /ONLY 5 CHARACTERS JMS LFT4 /IS VARIABLE NAME A MACRO NAME? AND (1 SZA JMP MACRO /YES. TYPE 'MACRO.' LAC UNDEC /NO. AND L77777 DAC UNDEC DIRASG=. LAW -6 DAC UPAROP LAC UNDEC SKP UNLOP DAC UNDEC AND L7%50S JMS LFT4 JMS UNSEND ISZ OINIT LAC UNDEC RTL RAL ISZ UPAROP JMP UNLOP LAC SPACE JMS OPACK JMP* UNOCTL MACRO LAC MACR /PRINT 'MACRO' INSTEAD OF JMS UNSIX /OCTAL VALUE LAC MACR+1 JMS UNSIX JMP MACRO-3 MACR .SIXBT ' MACRO' / /SUBROUTINE OINIT - INITIALIZES OUTPUT BUFFERS / OINIT 0 LAW -5 DAC GETPTR LAC (DAC GETWDS /REINITIALIZE POINTER. DAC OPACK+2 LAC LINBF% DAC CHRCNT LAW -10 /8 LINE NUMBERS PER LINE DAC OFLAG JMP* OINIT / /SUBROUTINE OPACK - PACKS OUTPUT BUFFER / OPACK 0 / ISZ .+1 /STORE CHARACTER DAC GETWDS / ISZ GETPTR /DO WE HAVE 5 CHARS? JMP* OPACK /NO, RETURN LAW -5 /YES, PACK THEM DAC GETPTR /RESTORE GETPTR LAC (DAC GETWDS /RESTORE DAC GETWDS DAC OPACK+2 / ISZ CHRCNT / LAC GETWDS+1 /FETCH FIRST CHARACTER JMS RT6 /PACK IT RTR DAC GETWDS+1 / LAC GETWDS+2 /FETCH SECOND CHAR JMS LFT4 /PACK IT XOR GETWDS+1 / DAC GETWDS+1 / LAC GETWDS+3 /FETCH THIRD CHAR. (LEFT HALF) JMS RT3 /PACK IT AND L17 / XOR GETWDS+1 / DAC* CHRCNT /FIRST 5/7 ASCII WORD LAC GETWDS+3 /FETCH THIRD CHAR. (RIGHT HALF) AND L7 JMS LFT15 DAC GETWDS+2 / LAC GETWDS+4 /GET FOURTH CHARACTER JMS LFT6 /PACK IT RTL XOR GETWDS+2 / DAC GETWDS+2 / LAC GETWDS+5 /GET FIFTH CHARACTER RAL /PACK IT XOR GETWDS+2 / ISZ CHRCNT / DAC* CHRCNT /SECOND 5/7 ASCII WORD JMP* OPACK /RETURN / /SUBROUTINE OWRITE / / WRITES OUTPUT LINES / OWRITE 0 LAC HDRLIN /RESTORE HEADER WORD DAC LINBUF CRFILL LAC CR /MAKE SURE THERE IS A 'CR' JMS OPACK /AT THE END OF THE LINE. LAW -5 /CLOSE OUT BUFFER SAD GETPTR SKP JMP CRFILL LAC LINCNT /ARE WE AT NEW PAGE? SNA /NO. JMS LINHDR /YES. .IFUND %RSX .WRITE -12,2,LINBUF,36 .WAIT -12 .ENDC .IFDEF %RSX CAL WROUT JMS WFEV /WAIT FOR EVENT VARIABLE. .ENDC JMS OINIT /REINITIALIZE BUFFERS. ISZ LINCNT JMP* OWRITE JMP* OWRITE /RETURN / / SUBROUTINE LINHDR / / PRINTS HEADER LINE WITH PAGE NUMBER / AT THE TOP OF EACH NEW PAGE. / LINHDR 0 ISZ LSTPGE JMS OINIT LAC HR% DAC CHRCNT LAC LSTPGE JMS UNDEC LAW -3 DAC ALPHA LAC SPACE JMS OPACK ISZ ALPHA JMP .-3 .IFUND %RSX LAC INIT4 .ENDC .IFDEF %RSX LAC (SKFIL /ADDRESS OF FILE NAME. .ENDC DAC ALPHA LAC* ALPHA JMS UNSIX ISZ ALPHA LAC* ALPHA JMS UNSIX LAC SPACE JMS OPACK .IFUND %RSX .WRITE -12,2,HDRLIN,36 .WRITE -12,2,LNFEED,36 .WAIT -12 .ENDC .IFDEF %RSX CAL WRHDRL JMS WFEV /WAIT FOR PRINT. CAL WRLNFD /OUTPUT LF. JMS WFEV /WAIT. .ENDC LAW -65 DAC LINCNT JMP* LINHDR HDRLIN 022002 0 .ASCII <14>'PAGE CROSS REFERENCE'<15> .LOC .-1 HR% HDRLIN+3 LNFEED 002002 0 .ASCII <12><15> .LOC .-1 .EJECT / /SUBROUTINE ADRPRO / /ADRPRO PROCESSES AN ADDRESS FIELD / ADRPRO 0 / ISZ FLDSW DZM CHRCNT /CLEAR CHARACTER COUNT ADRCE ISZ CHRCNT /INCREMENT CHARACTER COUNT DAC CHRHLD LAC CHRCNT / SAD L7 /DO WE HAVE SIX CHARACTERS? JMP ADRNEW /YES, FOUND SYMBOL, BUT LOOK FOR DEL JMS PACKER /NO, PACK CHARACTER ADRCE1 JMS GETCHR /GET CHARACTER JMS FALPHA /IS IT ALPHABETIC? JMP ADRCE /YES JMS NUMERC /NO, IS IT NUMERIC? JMP ADRCE /YES SAD (54 JMP ADRMOR SAD NOSIGN /NO, IS IT NUMBER SIGN? JMP ADRCE1 /YES, IGNORE IT JMS ADRDEL /NO, IS IT +, -,*? JMP ADRMOR /HAVE SYMBOL BUT MAY HAVE MORE JMS TAGDEL /NO, IS IT SPACE,TAB,;,CR,/? JMP ADRLST /YES, LAST SYMBOL JMP ADRNEW /DON'T HAVE SYMB. BUT MAY HAVE MORE ADRLST DAC CHRHLD /SAVE CHARACTER JMS SYMBOL /MAKE ENTRY LAC CHRHLD /RESTORE CHARACTER JMP* ADRPRO /RETURN ADRMOR JMS SYMBOL /MAKE ENTRY JMS GETCHR /GET NEXT CHARACTER JMS FALPHA /IS IT ALPHABETIC? JMP ADRCE-1 /YES JMP ADRNW1 /NO, LOOK FOR DELIMITER ADRNEW JMS SYMBOL /MAKE ENTRY JMS GETCHR /FETCH NEXT CHARACTER SAD (54 JMP ADRMOR+1 ADRNW1 JMS TAGDEL /IS IT A DELIMITER? JMP* ADRPRO /YES, RETURN JMS ADRDEL /NO, IS IT AN OPERATOR? JMP ADRMOR+1 /YES, LOOK FOR SYMBOL JMP ADRNEW+1 /NO, CONTINUE .TITLE INPUT ROUTINES. / /SUBROUTINE DBLBUF / / DOUBLE BUFFERED INPUT ROUTINE / DBLBUF 0 / .IFUND %RSX .READ -11,2,LINBUF,36 INIT3=.-2 DBL .WAIT -11 .ENDC .IFDEF %RSX CAL RDLIN /READ A LINE FROM INPUT. CAL WFEVR /WAIT. LAC EVR /GET EVENT VARIABLE. SPA JMP IOER11 /I/O ERROR. .ENDC LAC RDLST /FETCH LAST WORD OF SRCBUF AND IOTLIT /AND FORCE LAST CHARACTER XOR L6400 /TO BE A CR DAC RDLST LAC LINENO SAD LSTLIN JMP OUTPT2 LAC LINBUF / AND L17 / SAD (6 /DID WE HIT AN EOT? JMP EOTEOM SAD (5 /NO, DID WE HIT AN EOF? JMP EOTEOM /NO JMP* DBLBUF /RETURN ADPCHR 0 / EOTEOM LAC FSWTCH /COME HERE IF WE HIT SZA /AN EOT OR EOM JMP INIT11 .IFUND %RSX .CLOSE -11 /NO. CLOSE FILES AND .ENDC .IFDEF %RSX CAL CLOS11 .ENDC JMP CP /GO TYPE ^P FOR MORE INPUT. .IFDEF %RSX / / / RSX I/O CPB'S AND I/O SUBROUTINES / / CLOS11 3400 /CLOSE CPB EVA /EVENT VARIABLE ADDRESS DAT11 /LUN SLOT / CLOS12 3400 /CLOSE CPB EVA /EVENT VARIABLE ADDRESS DAT12 /LUN SLOT / CLOS14 3400 /CLOSE CPB 0 /EVENT VARIABLE ADDRESS DAT14 / ENDPAS 0 /PRINT END OF PASS MESSAGE CAL PA2MSG CAL WFEVA /WAIT FOR EVENT VARIABLE JMP* ENDPAS /RETURN / PA2MSG 2700 /WRITE CPB EVA /EVENT VARIABLE ADDRESS DAT3 /LUN SLOT 2 /MODE IOPS ASCII ENDP2-2 /BUFFER ADDRESS / SIXSRC .SIXBT /SRC/ / / WROUT 2700 /WRITE LINE EVA /EVENT VARIABLE ADDRESS DAT12 /LUN SLOT 2 /MODE LINBUF /LINE BUFFER / / SEEKL 3200 /SEEK REQUEST EVR /EVENT VARIABLE ADDRESS SEKLU 0 /LUN OF SEEK SKFIL .BLOCK 3 /FILE NAME / / RDLIN 2600 /READ CPB EVR /EVENT VARIABLE ADDRESS READA DAT11 /LUN SLOT 2 /MODE INIT3 LINBUF /LINE BUFFER ADDRESS 44 /MAX WORD COUNT / EVR 0 /EVENT VARIABLE FOR READ / WFEVR 20 /WAIT FOR READ EVR /EVENT VARIABLE ADDRESS / WFEV 0 /WAIT FOR EVENT VARIABLE AND CHECK VALIDITY CAL WFEVA LAC EVA /PICK UP THE EVENT VARIABLE SMA /IS IT LEGAL? JMP* WFEV /YES RETURN JMS* IOERR /NO PRINT I/O ERROR MESSAGE LAC (DAT12) /LUN OF I/O ERROR / WFEVA 20 /WAIT FOR EVENT VARIABLE EVA /EVENT VARIABLE ADDRESS / EVA 0 /EVENT VARIABLE / WRHDRL 2700 /WRITE HEADER LINE EVA /EVENT VARIABLE ADDRESS DAT12 /LUN SLOT 2 /MODE HDRLIN /LINE BUFFER ADDRESS / WRLNFD 2700 /WRITE LINE FEED EVA /EVENT VARIABLE ADDRESS DAT12 /LUN SLOT 2 /MODE LNFEED /LINE BUFFER ADDRESS / ENDTSK .SIZE /END OF CREF IOER11 JMS* IOERR /GO REPORT I/O ERROR LAC READA /LUN OF I/O ERROR / CP CAL WRCP /WRITE ^P ON TTY CAL WFEVR /WAIT FOR EVENT VARIABLE CAL RDCP /READ A LINE CAL WFEVR /WAIT FOR EVENT VARIABLE LAC EVR /CHECK EVENT VARIABLE SPA JMP* EXIT /BAD EXIT LAC LINBUF+2 /PICK UP THE FIRST WORD AND (774000) /MASK OFF THE FIRST CHARACTER SAD (100000) /IS IT A ^P? JMP RSTRT /YES -- READ A NEW FILE SAD (104000) /NO -- IS IT A ^Q? JMP* EXIT /YES EXIT JMP CP /NEITHER TRY AGAIN / WRCP 2700 /WRITE ON OUTPUT DEVICE EVR /EVENT VARIABLE ADDRESS DAT3 /TDV OUTPUT DEVICE 2 /IOPS ASCII CPMSG / CPMSG 4002 /HEADER 0 .ASCII /MAC-^P/<175> / RDCP 2600 EVR /READ ^P DAT2 /TDV INPUT DEVICE 2 /IOPS ASCII LINBUF / / .ENDC .END CREF