1 /2 PDP-8 OS/8 CROSS REFERENCE
11 /COPYRIGHT (C) 1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
46 \f/CREF IS A CROSS REFERENCING PROGRAM FOR THE OS/8 ASSEMBLERS,
47 /PAL8 AND SABR. THE PURPOSE OF CREF IS:
49 / 1) PROVIDE A SEQUENCE NUMBERED (DECIMAL) OUTPUT LISTING
51 / 2) PROVIDE A LIST OF ALL USER DEFINED SYMBOLS AND LITERALS
52 / AND THE SEQUENCE NUMBER OF THE LINES IN WHICH THEY OCCUR
54 /FIXES FOR MAINTENANCE RELEASE:
56 /1. 1975 COPYRIGHT, VERSION 4, EDIT 1
57 /2. UNIFIED PAGE SIZE INTO ONE PLACE (& MADE IT WORK)
58 /3. OUTPUT EXTRA FORM FEED AT END
59 /4. MADE /A MEAN KEEP CREFLS.TM INSTEAD OF /E
63 /INSTALLED ALL PUBLISHED PATCHES
70 /0-3377: MAINLINE CREF CODE
71 /4200-4577: INITIALIZATION CODE.EXECUTED ONCE AT BEGINNING
72 /5600-6177: LATER OVERWRITTEN
73 /DEVICE HANDLERS + BUFFERS ALLOCATED ACCORDING
74 /TO REQUIREMENTS OF DEVICES.
75 /USES 3400-5577 FOR INPUT HANDLER, OUTPUT HANDLER, + INPUT BUFFER
76 /7200-7577: OUTPUT BUFFER
77 /5600-7174: USED FOR REFERENCE STORAGE
81 /0-NSYM*4+10 NSYM=NO. OF SYMBOLS.(USER+PERMANENT+LITERALS).
82 /7424-7577 PSEUDO OP TABLE
83 /THE REMAINDER IS USED FOR REFERENCES DURING PASSES GREATER THAN ONE
86 /IF CREF DECIDES THAT MORE THAN 2 PASSES ARE REQUIRED, THE SYMBOL
87 /TABLE IS SEGMENTED AT AN OPTIMUM POINT, AND PART IS SAVED
88 /IN SCRATCH BLOCKS 27-50 FOR A THIRD (OR LARGER) PASS.
91 /MAJOR ROUTINES AND CODE SECTIONS
93 /MAIN-START OF TEXT PROCESSING.CHECKS FOR VALID LINE.READS AND WRITES
95 /CVTSEQ CONVERTS SEQUENCE NUMBERS FROM OCTAL TO DECIMAL AND
96 / WRITES THEM INTO THE OUTPUT BUFFER
98 /GETLIN- GET A LINE OF INPUT INTO LINE BUFFER
100 /WRTLIN- WRITE A LINE OF TEXT INTO OUTPUT BUFFER
102 /ANALYZ- LINE SCANNING BEGINS.ALL SYMBOLS COLLECTED HERE
104 /PACK- CHARACTER PACKING ROUTINE. THE SCHEME USED MAPS LETTERS
105 /A-Z AND [,],\,^ INTO 0-37. 0-9 INTO 40-51
106 / THE PACKING IS: CHAR1-300^52+CHAR2-300
108 /SYMCHK- BINARY SYMBOL TABLE SEARCH
110 /ENTRY- MAKES ENTRIES IN USER SYMBOL TABLE
112 /BUMP- BUMPS REFERENCE COUNTER OF SYMBOLS IN PASS 1
114 /ENDPAS- TERMINATES A PASS THROUGH INPUT
116 /PASSN2- FILLS IN REFERENCE STORAGE ARE DURING PASSES
119 /DUMP- DUMPS CREF TABLE TO OUT BUFFER
123 /Q=INPUT IS SABR CODE
124 /R=INPUT IS RALF CODE
125 /P=DISABLE LISTING OUTPUT. RE ENABLE FOR CREF TABLE
126 /X=DON'T CREF LITERALS
127 /M=MAMMOTH FILE(2 PASSES)
128 /E=DON'T ELIMINATE CREFLS.TM
129 /U=/P + NO SYMBOL TABLE
132 PAGLEN=66 /V3C MOST PAPER HAS 66 LINES PER PAGE
136 PAGLEN=PAGLEN-6 /HEADINGS
144 /AUTO INDEX REGISTERS
146 XRLINE, SYMTAB-1 /USED TO MOVE UP SYMBOL TABLE
149 XRSYM2, 0 /THESE ARE USED IN SEARCHING SYMBOLS
150 OUSAVX, 7611 /USED TO SAVE ARGS FOR /M
153 TXTBEG, LINBUF+12 /TEXT STARTS HERE
154 MARGIN, LINBUF-1 /LINE BUFFER
155 COUNT, 0 /GENERAL COUNTER
156 CHAR, 0 /HOLDS CHARACTER TO EXAMINE
157 SEQNO, 0 /SEQUENCE NO.
160 TEMP1, 0 /THESE THREE ARE TEMPORARY STORAGE
162 RSWIT, 0 /CD SWITCH WORDS
163 MLF, -212 /-LINE FEED
164 SYMCNT, -6 /ALLOW 6 CHARACTER SYMBOLS
165 ISYM, SYM1 /POINTER TO SYMBOL COLLECTOR
166 PSWCH, 0 /PACK SWITCH..LEFT OR RIGHT HALF
169 SYM3, 0 /COLLECT SYMBOLS HERE
170 USER, 0 /USER MUST FOLLOW SYM3!
171 110 /INITIAL SYMBOL TABLE ENTRIES
173 0 /THESE 2 GET FILLED IN AT INITIALIZATION
174 PASN2, PASSN2 /IF NOT PASS 1 GO HERE WITH A SYMBOL
175 PASSG1, -1 /=0 IF NOT PASS1
176 MAXFLD, 0 /-# OF FIRST NON-EXISTENT FIELD
177 CONST, 0 /EITHER 0 OR 96(10)
178 FLDPTR, 0 /POINTER TO CORE FIELD
179 USR, 200 /MONITOR IN CORE..CHANGED TO 7700
181 SYMFLD, 2 /FIELDS WITH SYMBOLS: BITS 5-11
182 MASKF, 0 /MASK FOR ABOVE WORD
184 /THESE ARE THE DEFAULT PARAMETERS FOR THE I/O ROUTINES
185 /AJUSTED ACCORDING TO REQUIREMENTS OF DEVICES REQUESTED
189 OUDEVH=4000 /VARIABLE-MAY ALSO BE 3600
193 INBUF=4600 /ALSO 4200
197 /(SUBJECT TO CHANGE WITHOUT NOTICE!)
199 SYMADD, 0 /CONTAINS SYMBOL ADDRESS
200 SYMNUM, 0 /ABOVE MOD 4
202 BUFFER, 0 /POINTER FOR UNPACKING
204 RAD=52 /RADIX FOR CONVERTING SYMBOLS
208 BASE, 0 /THESE ARE USED TO END A PASS
209 SYMLIM, 0 /UPPER LIMIT FOR SYMBOL REF TABLE
214 CNTROL, 4010 /THIS IS ON PAGE ZERO MAINLY
215 CTPTR, 4 /BECAUSE CTPTR IS USED A LOT
217 SCRATCH /SYSTEM SCRATCH FOR OVERFLOW
222 LNPRPG, -PAGLEN /# LINES OF TEXT PER PAGE
223 LINES, -PAGLEN /V3C MASTER COPY
224 THOUS, 6030 /CONVERSION TABLE..OCTAL-DECIMAL
229 FPUT, STORIT /INITIALLY POINTS TO DCA I XRLINE
240 JMP I (ST1 /INITIALIZATION GETS DESTROYED
241 BREAK, JMP I (CHAIN /CHAIN ENTRY POINT
242 ZBLOCK 7 /BREAK TABLE. HOLDS SYMBOL
243 /NUMBERS DURING VARIOUS PASSES
244 /OF CREF. THE ENTRIES ARE THE NUMBER
245 /OF THE LARGEST SYMBOL
246 /WHOSE REFERENCES ARE IN A PARTICULAR
247 /FIELD. THE 0TH ENTRY CORRESPONDS TO
255 DCA SYMCNT /12 CHARACTER MESSAGES
256 TAD TTY /POINT TO TTY OUT ROUTINE
260 JMS I [DIVIDE /CONVERT AND PRINT MESSAGE
267 /THE INPUT LINE IS STORED HERE. XRLINE POINTS TO VARIOUS
268 /PLACES THROUGHOUT THE SCAN, AND CHAR HOLDS THE CORRESPONDING
269 /CHARACTER WHILE WE EXAMINE IT.
291 DCA I (OUBLK /LAST BLOCK WRITTEN TO
295 DCA I (OUELEN /SIZE OF HOLE
298 DCA LNPRPG /NO. LINES IN LAST BLK WRITTEN
299 TAD I OUSAVX /NO. BLKS WRITTEN SO FAR
304 DCA MAXFLD /IN CASE NOT DEFINED
308 JMP I MORCOR /USE OLD WAY TO DETERMINE
316 TAD I [7600 /DETERMINE WHAT TYPE OF DEVICE
321 TAD I Q /CHECK DEVICE CONTROL BLOCK
327 /MAIN IS THE START OF CREF.(IF SABR, NXTLIN IS START).
328 /AT MAIN WE SCAN A LINE OF TEXT FOR BINARY DATA. IF NONE IS FOUND,
329 /THE LINE IS WRITTEN OUT AND A NEW LINE READ. IF BINARY IS FOUND,
330 /THE SEQUENCE NUMBER OF THE LINE IS PLACED IN THE OUTPUT
331 /BUFFER AND THE ANALYSIS BEGINS AT ANALYZ.
333 MAIN, JMS I [FORM /FORM FEED (CR/LF)
334 JMS I [HEADER /SKIP HEADER
335 JMS I (GETLIN /AND ONE CR/LF
337 NXTLIN, JMS I (GETLIN
340 JMS I [CHECK /CHECK FOR ALPHA LINE
344 NOFIRM, ISZ LNPRPG /NEED A FORM FEED YET?
349 TAD MCTLD /IF RUB OUT, USED /D
351 JMP I [ENDPAS /CAN'T OUTPUT SYM TABLE
352 TAD (163 /CHECK FOR FORM FEED
355 TAD (-41 /IF ------, HE USED /T(DUMMY!)
357 JMP MAIN /GIVE HIM A FORM FEED
358 NOFORM, ISZ LNPRPG /=0 AFTER PASS1 NEW PAGE?
359 SKP /SKIP A FORM FEED
361 ISZ SEQNO /BUMP SEQUENCE
365 MAIN2, JMS I [PASTST /STILL PASS ONE?
378 /THIS ROUTINE CONVERTS SEQUENCE NUMBERS TO DECIMAL NUMBERS AND
379 /PUTS THEM INTO THE OUTPUT BUFFER. IT IS USED WHEN PRINTING
381 /THE CALLING SEQUENCE IS: AC=OCTAL NUMBER TO BE CONVERTED.
382 /THE OUTPUT IS AUTOMATICALLY 4 DIGITS.
397 DCA DIGIT1+3 /ZERO CONVERSION AREA
401 CLL /SEE IF SEQUENCE IS ABOVE 8000(10)
402 TAD CONST /EITHER 0 OR 140(8)
405 DCA SAVE /CORRECTED NUMBER
407 DCA DIGIT1 /PUT AN 8 INTO THERE FOR PRINTING
415 TAD I POSPT /POINTS TO -1000,-100,-10, OR -1
416 SNL /IF LINK ON,WE DID TOO MUCH
417 JMP ADDUP /COLLECT THE CONVERTED DIGIT
418 ISZ I DIGPT /BUMP THE COUNTER DIGIT1-DIGIT1+3
421 ADDUP, CIA /RESTORE THE LAST ONE
426 ISZ COUNT /DONE ALL 4?
428 TAD [-4 /YES..OUTPUT THE CONVERTED NUMBERS
433 TAD ZSPRES /LEADING ZERO SUPPRESSION
436 SNA CLA /ZSPRES IS 0 UNTIL A VALID # IS FOUND
452 \f /WRTLIN TRANSFERS INPUT LINE TO OUTPUT BUFFER
456 DCA XRLINE /RESET MARGIN TO LEFT
457 OLINE, TAD I XRLINE /PICK UP TEXT CHARACTER
460 SNA /IF NULL,WAS PREMATURE TERMINATOR
461 JMP FLUSH /YES. READ AND WRITE THE REST
462 JMS I [OCHAR /OUTPUT THE CHARACTER
464 TAD MLF /WAS THIS END OF LINE?
466 JMP OLINE /NO..LOOP AGAIN
470 JMP I WRTLIN /OVERFLOW NOT IN BUFFER
473 /ANALYZ IS A WORK HORSE. IN IT CHARACTERS ARE EXAMINED AND
474 /SYMBOLS ARE BUILT UP. IF A SYMBOL OR A REFERENCE TO A
475 /SYMBOL IS FOUND,THE APPROPRIATE ACTION IS TAKEN;I.E.
476 /EITHER ENTERING A NEW SYMBOL, BUMPING THE RFERENCE COUNTER,
479 ANALYZ, TAD SEMISV /IF #0, LAST WAS SEMICOLON
481 TAD TXTBEG /IF=0, START NORMALLY
486 JMS I [CHECK /ALPHANUMERIC CHECK
489 SKP /NONE..TEST FOR SPECIAL CHARS
490 JMP PAKIT /FOUND A LETTER PACK AWAY
491 JMS I [CHECK /TEST FOR 0-9
494 SKP /NOPE..COULD BE SABR
496 SCAN3, JMP TSTIT /IF SABR, THIS LOC IS AND 0
497 JMS I [CHECK /TEST FOR [,],\,AND ^
501 JMP PAKIT /VALID SABR CHARACTERS
504 TAD CHAR /IS THIS A ;?
505 TAD (-273 /IF SO, SAVE PLACE ON LINE
507 JMP .+3 /IF ; SAVE PLACE ON LINE
510 TAD SYM1 /IS THERE A LEGAL SYMBOL?
512 JMP TSTEND /NO..LOOK FOR A LINE FEED
516 IAC /YES..NEED SPECIAL RETURN
519 JMS I [SYMCHK /THIS IS EITHER A REFERENCE OR A
520 /DEFINITION OR A PERMANENT SYMBOL,PSEUDO
521 PSEUDO /CHECK PSEUDOS FIRST
522 HC1, JMP USSYM /NOT A PSEUDO-OP
523 /BECOMES JMP PATCH IF /M USED
526 DCA SAVE /SYMCHK RETURNS ADDRESS OF SYMBOL IN SYMADD
531 JMS I (CLEAR /WIPE OUT PSEUDO OP
532 JMP I SAVE /PERFORM THE NECESSARY OP FOR PSEUDO
535 PATCH1, CLA SZL SPA /LG-LH SPLIT
541 USER /CHECK PERMANENT AND USER SYMBOLS
542 JMP NTER /DIDN'T FIND IT; SO WE HAVE TO ENTER IT
543 JMS I (TSTPRM /FOUND;TEST FOR PERMANENT SYMBOL
544 JMP B /WAS A PERMANENT SYMBOL
545 JMP BMPIT /FOUND AND NOT PERMANENT;INCREASE THE
546 /REFERENCE COUNTER BY ONE
548 NTER, JMS I [ENTRY /ENTER THE SYMBOL BY PUSHING DOWN ALL
550 BMPIT, JMS I [BUMP /AND INCREASE THE REFERENCE COUNT
551 B, JMS I (CLEAR /SETUP FOR NEXT
552 TAD SLSWIT /WAS LAST A /?
558 TAD MLF /ARE WE DONE WITH THIS LINE?
560 JMP .+3 /IF LF, CLEAR OUT SEMICOLON
569 ISZ XRLINE /YES..SKIP NEXT LETTER
578 JMP SCANER /NONE OF THEM KEEP GOING
581 SCAN1, TAD SYM1 /IF WE DON'T HAVE A SYMBOL
582 SNA CLA /DON'T PACK THIS CHARACTER
585 JMS I [PACK /PACK A CHARACTER
588 REPACK, 0 /RESET SYMBOL AREA
590 DCA SYMCNT /SYMBOL COUNTER..6 CHARS
599 SCANER, TAD CHAR /IF LAST WAS ; READ IN OVERLAY
605 SUB3, 0 /SUBTRACTS 3 FROM CTPTR
613 /THE PACKING SCHEME IS THE SAME AS THAT USED IN PAL8. THAT IS
614 /IN EACH WORD WE HAVE 2 CHARS. CHAR1-300^45+CHAR2-300.
615 /PERMANENT SYMBOLS HAVE THE FIRST WORD SET TO A NEGATIVE.
620 SMA CLA /OVERFLOW PROTECT
624 TAD (-37 /INCLUDE VALID SABR CHARS
626 TAD (-20 /NUMBERS GET MAPPED: 40-51
627 TAD (37 /LETTERS ARE MAPPED:01-37
628 ISZ PSWCH /WHICH HALF?
644 CLA CMA /RESET FLIP FLOP
654 /SYMCHK IS THE BINARY SEARCH ROUTINE FOR CREF. SYMBOLS
655 /ARE A GROUP OF FOUR ENTRIES:THE FIRST THREE WORDS ARE
656 /THE STRIPPED-40 REPRESENTATION OF THE SYMBOL. THE LAST
657 /IS THE REFERENCE COUNTER (IN THE CASE OF A USER SYMBOL) OR
658 /A -1 (IN THE CASE OF A PERMANENT SYMBOL). IN PSEUDO OPS
659 /THE FOURTH WORD DESCRIBES THE DESTINATION OR ACTION
660 /TO BE PERFORMED BY THAT PSEUDO OP.
661 /THE TABLE USER,0 HAS ENTRIES WHICH ARE THE SYMBOL NUMBER
662 /AND NOT THE ABSOLUTE CORE LOCATION OF A SYMBOL.
666 / TABLE /FIRST WORD OF TWO WHICH GIVES THE LIMITS
667 /MOD 4 OF THE APPROPRIATE TABLE
668 /SYMCHK RETURNS WITH THE NUMBER OF THE SYMBOL IN SYMNUM
669 /AND THE CORE ADDRESS OF THE SYMBOL IN SYMADD. IF THE
670 /SYMBOL IS NOT FOUND, THESE WORDS CONTAIN THE PROPER LOCATION
677 TAD I THI /GET LIMITS OF TABLE
686 CLL RAR /HALF DIFFERENCE BETWEEN THE LIMITS
687 SNA /IF THIS IS ZERO, WE'RE DONE
688 ISZ LAST /THIS WILL BE LAST TRY
689 TAD TLOW /FORM THE NUMBER OF THE ENTRY
690 DCA SYMNUM /WE ARE GOING TO TEST NOW
691 JMS SETXR /SET UP INDICES FOR TEST
692 ISZ COUNT /WE ONLY WANT -3 IN COUNT!
696 TAD I XRSYM2 /SYMBOL TABLE ENTRY
698 AND [3777 /MASK PERMANENT SYMBOL BIT
699 CMA /USE ONE'S COMPLEMENT
700 TAD I XRSYM1 /OUR COLLECTED SYMBOL
702 SZA CLA /WATCH THE LINK!!
703 JMP COMPR /NOW TEST FOR HI OR LOW COMPARISON
706 ISZ SYMCHK /TAKE FOUND ENTRY
710 COMPR, TAD LAST /LAST GASP?
713 TAD SYMNUM /LINK TELLS THE TALE!
715 JMP COMP-1 /ADJUST HIGH LIMIT
724 OUT1, TAD SYMNUM /ADDING THE FIRST ENTRY AFTER
725 SZA /AN EXPUNGE WILL CAUSE SYMNUM TO BE 0
726 /AUTOMATICALLY IT HAS TO BE 1
730 CLL RTL /FORM SYMADD FROM SYMNUM
731 DCA SYMADD /CORE ADDRESS OF THE SYMBOL
742 /THESE TABLES DEFINE THE LIMITS OF CORE STORAGE IN CREF.
743 /BASTBL GIVES THE START LOC WHERE REFERENCES WILL BE STORED.
744 /LTTBL GIVES THE LO CORE LIMIT OF THOSE REFS. THERE IS ONE ENTRY FOR
747 BASTBL, 7174 /THIS TABLE GIVES THE BASE
748 7424 /LOCATIONS INEACH FIELD WHERE THE
749 7574 /REFERENCES BEGIN
750 7574 /REFS START HERE AND BUILD TOWARD LOWER
755 LTTBL, DOLL1 /THIS TABLE GIVES THE LOW
756 10 /CORE ADDRESS OF THE REFS IN EACH FIELD
757 4 /NOTE:ENDPAS JUGGLES THESE AROUND
758 4 /TO OPTIMIZE CREF STORAGE
765 SNA /IF 0, PRODUCE A SPACE
774 SETXR, 0 /SETUP INDEX REGS FOR SEARC,ENTRY
775 TAD SYMNUM /SETUP WHEN FOUND SYMBOL
776 CLL RTL /CORE ADDRESS OF SYMBOL
786 /ENTRY IS SLOW! IT ENTERS A SYMBOL BY PUSHING DOWN WHAT IS
787 /BELOW THE PROPER ENTRY.ENTRY CAN ONLY BE USED IN MAKING
788 /ENTRIES IN THE PERMANENT (USER) SYMBOL TABLE.
789 /ENTRY CONDITIONS:AC SHOULD BE CLEAR!
790 / SYMNUM SHOULD HAVE THE SYMBOL NUMBER OF THE
791 / PROPOSED ENTRY. SYMCHK RETURNS THIS WHEN THE
792 / SEARCH IS UNSUCCESSFUL.
795 JMS I (SETXR /SETUP INDEX REGISTERS
796 TAD USER+1 /CHECK FOR POSSIBLE OVERFLOW
797 CMA /WE DON'T WANT TO WIPE PSEUDO TABLE
800 JMP NMOR /BAD!OVERFLOW HAS OCCURRED
801 ISZ USER+1 /OK..BUMP SYMBOL COUNT
803 CLL RTL /CORE ADDRESS OF ENTRY
806 TAD [-4 /GIVES BOTTOM OF TABLE NOW
808 TAD SAVE /TEST FOR AN 'ADD-ON' ENTRY
811 DCA COUNT /-# OF WORDS TO MOVE
815 DCA I TEMP1 /THE BAD LOOP!
818 DCA SAVE /I WISH WE HAD A DSZ!(DECREMENT &SKIP ON 0
823 JMP NTR1 /UNFORTUNATELY NOT
826 ENTER, CLA /NOW PUT IN OUR ENTRY
828 DCA COUNT /THE 4TH IS A 0 WORD (USER FOLLOWS SYM3)
837 NMOR, JMS I [ERROR /SYMBOL OVERFLOW
842 TAD (-240 /IGNORE SPACES
846 CIA /STRING DELIMITER
849 TAD DELMIT /REACHED END OF STRING?
852 TAD CHAR /NO..END OF LINE?
862 JMP I GETC /GET A CHAR;STORE IT, RETURN IN AC
868 BUMP, 0 /ROUTINE TO BUMP REFERENCE COUNTERS
871 DCA SAVE /ADDRESS OF REFERENCE COUNTER
874 SPA CLA /IF 4000 BIT ON, AN EXTRA ENTRY HAS
875 /ALREADY BEEN MADE FOR THIS SYMBOL
878 SNA CLA /IS SEQNO >4095?
882 DCA I SAVE /MARK IT AS BEING NOTED
884 ONEISZ, TAD M1 /EITHER -1 OR -2
886 BUMP2, TAD [3777 /THIS CODE PROTECTS AGAINST
887 AND I SAVE />2048 REFS. IF SIGN BIT EVER BECOMES
888 ISZ I SAVE /NEG. ON THE ISZ,KILL IT!!
889 NOP /USELESS PROTECTION
890 TAD [3 /IF AC GOES NEG. HE DIES!!
902 PTRSET, 0 /THIS ROUTINE TAKES
903 TAD [3 /THE SYMBOL TABLE THAT
904 DCA BUFFER /PRODUCED AND SETS UP EACH REFERENCE
905 DCA SYMNUM /AREA WITH A POINTER INTO THE AREA
907 TAD USER+1 /AND A 0 LOCATION TO HOLD THE DEFINITION
910 PTRST1, TAD [4 /START PICKING UP POINTERS
913 ISZ SYMNUM /CORRESPONDING SYMBOL NUMBER
914 JMS I (GETFLD /FORM CDF N FOR REFERENCE AREA
917 TAD I BUFFER /IF PERMANENT SYMBOL, THIS LOC=0
924 ISZ SAVE /POINT TO INDEX WORD
933 /ENDPAS IS ARRIVED AT WHEN A PASS THROUGH THE INPUT HAS BEEN
934 /COMPLETED.SOME COMPLICATED DIDDLING GOES ON HERE.
937 JMP I (DUMP /DUMP WHAT WE HAVE
939 IAC /POINT TO END OF NEW TABLE
940 DCA USER+1 /YES..THAT BECOMES THE TOTAL NO.
941 /OF SYMBOLS IN OUR NEW TABLE
942 TAD [3777 /O.K...NOW READ IN A SEGMENT
943 AND CNTROL /NOW FORMING READ CONTROL
945 TAD [4 /READ SYMBOLS INTO F1 AT LOC.4
947 JMS IOSR /DO THE READ
948 NDPS1, DCA FLDPTR /INITIALLY AT FIELD 0
951 END2, DCA ADDER /ADDER HOLDS THE COUNT OF THE NUMBER
952 /OF REFERENCES TO THE SYMBOLS THUS FAR
953 /EXAMINED. THIS IS COMPARED TO THE AVAILABLE
954 /CORE IN A PARTICULAR FIELD. WHEN THAT OVER-
955 /FLOWS WE HAVE TO EITHER MOVE TO ANOTHER FIELD
956 /FOR THE REFERENCES OR WRITE PART OF THE SYMBOL
960 DCA TEMP1 /INITIAL BASE OF REFS
963 TAD FLDPTR /NOW GET MASK FOR QUESTION..
964 CMA /DOES THIS FIELD HAVE SYMBOLS?
971 TAD FLDPTR /GET ADDRESS OF UPPER LIMIT
972 TAD (LTTBL /FOR LATER
974 TAD FLDPTR /SET NEW LIMIT IN FIELD 1
976 DCA NUSER /THE NEW LIMIT FOR REFS IS
977 DCA I NUSER /ZERO SYMBOL IN CURRENT FIELD LOC.
979 FUJ1, TAD CTPTR /IF MORE THAN 2 FIELDS EXIST
980 /THIS BECOMES A NOP. THE LIMIT IN
981 /FIELD 1 IS AT THE BOTTOM OF THE
984 NDPS2, TAD CTPTR /CTPTR HOLD THE CORE ADDRESS OF THE
985 /THE 4TH LOCATION OF A GIVEN SYMBOL. THIS
986 /IS ALSO THE REFERENCE COUNTER FOR THAT SYMBOL
987 CLL RTR /FORM SYMBOL NUMBER
989 DCA COUNT /SAVE FOR LATER
992 TAD BASE /NEXT REFERENCE AREA
993 DCA SAVE /IF IT FITS IN THIS AREA
994 /USED WHEN WE MAKE ACTUAL REF ENTRIES
996 TAD I CTPTR /# REFS FOR THIS SYMBOL
1002 SPA CLA /PERMANENT SYMBOL
1005 AND [3777 /MASK GT 4095 BIT
1007 DCA ADDER /SEE IF THIS SYMBOL WILL FIT IN THE
1008 /CURRENT FIELD HOLDING REFS
1009 CDF 10 /MUST ADD UP NEW REFS ALSO
1014 TAD LIMIT /IF LINK GOES ON, REFS WON'T FIT
1017 CMA CLL /WHEN UPPER MEETS LOWER,QUIT
1020 JMP CUTSYM /OK..QUIT!
1022 TAD SAVE /FITS..PUT IN BASE WHERE THIS SYMBOL'S
1026 ISZ ADDER /2 EXTRA FOR BOOKKEEPING
1028 TAD COUNT /SYMBOL NUMBER..REMEMBER?
1030 TAD SYMFLD /BUT..IF THIS FIELD HAS SYMBOLS,
1031 AND MASKF /LET'S REDUCE HIS AVAILABLE SPACE
1037 TAD COUNT /SEE IF WE ARE DONE
1041 JMP I (DONE /YES!! PROBABLY FORGOT SOMETHING
1042 DCA SYSM /BECOMES # SYMBOLS TO WRITE OUT IN CASE
1045 JMP NDPS2 /CYCLE FOR NEXT SYMBOL
1048 ISZ FLDPTR /GO TO ANOTHER FIELD
1049 TAD FLDPTR /DOES IT EXIST?
1053 JMP END3 /YES..GROOVY
1054 TAD SYSM /NOPE..HAVE TO WRITE REMAINDER OUT
1055 CLL RAL /CONVER TO PAGES
1056 AND (3700 /FORM CONTROL WORD FOR WRITE
1059 JMS I (SUB3 /RESET CTPTR
1061 IAC /FUDGE LAST ENTRY IN TABLE
1062 DCA USER+1 /NEW END OF TABLE
1063 JMS IOSR /WRITE THE SEGMENT
1064 CDF 10 /PUT A 7777 AT END OF CURRENT SEG.
1068 JMP I (DONE+1 /NOT DONE YET!!
1071 JMP END2 /AND RESUME THY WORK!!
1076 /PASSN2 IS ENTERED WHEN WE HAVE COLLECTED SOME SORT OF A
1077 /SYMBOL AND IT IS NOT PASS ONE. WE HAVE TO MAKE SURE IT
1078 /IS A USER SYMBOL OR LITERAL. IF IT IS, WE HAVE TO ENTER
1079 /THE SEQUENCE # IN THE AREA SET UP FOR REFERENCES TO THIS
1080 /SYMBOL. ALSO, IF THE REFERENCE IS A DEFINITION, THE SECOND
1081 /LOCATION IN THE REFERENCE AREA IS LOADED WITH THE SEQUENCE
1082 /NO. OF THE LINE WE ARE DOING.
1084 PASSN2, JMS I [SYMCHK
1085 USER /IS IT KNOWN TO US?
1086 JMP I [B /NO..BUT IT MIGHT BE IN A SEGMENT EITHER
1087 /ALREADY DONE OR YET TO BE DONE!!
1088 JMS TSTPRM /TEST FOR A PERMANENT SYMBOL
1089 JMP I [B /PERMANENT SYMBOL
1090 /NOTE:SAVE IS SET UP IN TSTPRM TO CONTAIN THE ADDRESS OF THE
1091 /INDEX WORD. WE USE THIS LATER ON
1094 DCA CDFN /DETERMINE WHAT FIELD THIS SYMBOL HAS ITS
1095 /REFS IN AND FORM A CDF N
1097 TAD MCOMMA /IS THIS A DEFINITION?
1101 IAC /ONE OR OTHER..MARK AS DEFINITION
1104 TAD I SAVE /PICK UP POINTER TO REFERENCE AREA
1108 HLT /I HATED TO DO THIS!!!
1110 SPA CLA /IF THIS IS NEGATIVE, IT MEANS THAT THE
1111 /SEQUENCE NUMBER HAS WRAPPED AROUND, BUT WE HAVE
1112 /ALREADY MADE A 0 ENTRY TO SHOW THAT
1114 TAD CONST /HAS THE SEQUENCE # WRAPPED?
1117 JMS REFENT /YES..MAKE A 0 ENTRY
1121 TAD I SAVE /MARK AS HAVING A 0 ENTRY
1125 TAD SEQNO /NOW MAKE A REAL ENTRY
1128 SNA CLA /SHOULD WE FILL IN THE DEFINITION LOC?
1131 TAD SAVE /YES..POINT TO IT
1135 HLT /THIS IS SLOPPY, BUT SO AM I
1145 /REFENT, MAKES REFERENCES IN THE SYMBOLS AREA AND BUMPS THE
1146 /FIRST LOCATION TO POINT TO THE NEXT LOC.
1149 DCA TEMP1 /SAVE SEQNO
1152 AND [3777 /MASK OFF WRAP AROUND BIT
1154 TAD SAVE /FORM ADDRESS OF THIS REFERENCE
1158 ISZ I SAVE /BUMP POINTER
1162 /TSTPRM TESTS THE SYMBOL WE HAVE FOUND FOR BEING A PERMANENT SYMBOL
1163 /PERMANENT SYMBOLS ARE DISTINGUISHED BY HAVING THE 4000 BIT ON.
1168 DCA SAVE /WE USE THIS ON RETURN!!
1172 SMA CLA /IS IT MINUS?
1176 /GETFLD DETERMINES WHAT FIELD A PARTICULAR SYMBOL HAS ITS
1177 /REFS IN. IT DOES IT BY COMPARING THE CURRENT SYMBOLS NUMBER
1178 /WITH THE ENTRIES IN THE BREAK TABLE.
1183 TAD FLDPTR /GET BREAK TABLE ENTRY
1187 TAD SYMNUM /SYMNUM WAS SET UP WHEN WE FOUND THE SYMBOL
1189 JMP GF2 /FIRST NEG. VALUE GIVE FLDPTR
1190 ISZ FLDPTR /TRY NEXT
1192 GF2, JMS CHDF /FORM THE CDF N
1202 SPACE, 0 /GENERATES AS MANY SPACES AS ARE IN AC
1211 TAD I CHECK /SUBROUTINE TO TEST CHAR
1212 CIA /AGAINST PRESCRIBED LIMITS
1220 SKP CLA /VERY UNESTHETIC..BUT IT WORKS!
1225 DONE, ISZ FINI /SET COMPLETION FLAG
1226 JMS I (IOPEN /SET FOR REREAD
1227 JMS I (PTRSET /PREPARE REFERENCE AREAS
1228 DCA SEQNO /BACK TO BASICS
1230 JMP I (FIRST /READ FIRST RECORDS
1233 /DUMP DOES A LITTLE FORMATTING OF THE OUTPUT, AND DUMPS THE
1234 /CROSS REFERENCING TABLE ONTO THE OUTPUT DEVICE.
1235 /ANY FIDDLING WITH THE BUFFERS OR DEVICE HANDLERS WILL HAVE TO
1244 DCA PASSG1 /FORCES ANOTHER PASS AT ENDPAS
1246 JMP DMP8 /SKIP FIRST-TIME STUFF
1248 ISZ LINES /DIF NO. LINES PER PAGE NOW
1249 JMS I [FORM /FIRST TIME THRU GETS A FORM FEED
1250 DCA DMP7 /FUTURE PASSES DON'T
1253 DCA COUNTR /# SYMBOLS TO PROCESS NOW
1255 DCA BUFFER /FIRST SYMBOL IS HERE
1256 JMP DMP6 /GET NO. LINES RIGHT FIRST TIME
1257 DMP5, JMS I [CRLF /V3C
1258 DMP, ISZ LNPRPG /IS FORM FEED NEEDED?
1262 DCA SYMCNT /2 CHARACTERS PER PASS
1263 DCA CONST /RESET FOR <4096
1268 TAD I BUFFER /PICK UP PACKED WORD
1270 SPA /PERMANENT SYMBOL?
1272 JMS I [DIVIDE /CONVERT 2 CHARS AND PRINT
1276 JMS I [SPACE /GENERATE(AC) SPACES
1278 CLL RTR /GET SYMBOL NUMBER
1285 DCA REFBUF /BASE OF REFS FOR SYMBOL
1287 TAD I REFBUF /IF THIS IS NEGATIVE,
1288 SPA CLA /WE LEFT A REF FOR A 0 ENTRY
1289 TAD M1 /IN THAT CASE,DON'T INCLUDE THAT ONE AS
1290 TAD [-2 /A REAL ENTRY.
1293 AND [3777 /NOW CALCULATE REAL NO. ENTRIES
1300 TAD I REFBUF /SEQUENCE # OF DEF.
1308 TAD I REFBUF /PICK UP A REFERENCE
1309 TAD DEFSEQ /IS THIS THE DEF?
1312 DCA DEFSEQ /ONLY 1 DEF PER LINE
1313 TAD [3 /YES..PRINT # AFTER SEQ #
1314 NODEF, TAD [240 /IF NO, PRINT 2 SPACES
1317 SZA CLA /IF A 0, ALL FOLLOWING REFS ARE >4095
1321 JMP DMP2 /IGNORE ZERO ENTRY!!
1324 JMS I (CVTSEQ /WRITE THE DECIMAL SEQUENCE #
1326 JMS I [OCHAR /EITHER # OR SPACE
1329 ISZ SYMCNT /MORE TO DO?
1330 JMP DMP0 /NO, BUT IS CR/LF REQUIRED?
1331 GETMOR, ISZ COUNTR /EXHAUSTED ALL SYMBOLS?
1333 TAD FINI /YES..ARE WE ALL DONE
1335 JMP I [ENDPAS /NO..READ IN NEXT SEGMENT
1338 DMP0, ISZ LINENO /A CR/LF NEEDED?
1341 DCA LINENO /RESET ENTRIES PER LINE
1343 ISZ LNPRPG /FORM FEED?
1346 TAD M12 /AND INDENT NEXT LINE
1351 TAD [3 /PERMANENT SYMBOL
1353 DCA BUFFER /LOOK AT NEXT
1358 FIRST, JMS I (ASHDLR /RESET INPUT FOR READ
1359 JMS I (RDREC /AND READ SOME RECORDS
1360 JMP I (NXTLIN /START READING TEXT
1365 PASTST, 0 /SR WHICH DETERMINE IF PASS > 1
1367 SPA CLA /IF >0=> PASS >1
1372 /I/O ROUTINES FOR OS/8
1377 DCA OUDWCT /SIZE OF BUFF IN DOUBLEWORDS
1379 DCA OUPTR /INITIALIZE POINTER
1381 DCA OUJMP /RESET 3 WAY SWITCH
1385 AND (377 /CALLED WITH CHARACTER IN AC
1389 OUTSW, KRS /TEST FOR ^C WITH FLAG OR
1390 /JMP I OCHAR IF /P,/U OR PASS 2 /M
1395 JMP I [7600 /SAVE CORE FOR SOME REASON
1396 ISZ OUJMP /BUMP 3 WAY SWITCH
1400 OCHAR3, TAD OUTEMP /PICK UP CHARACTER
1403 AND (7400 /3RD WORD MERGED INTO 2 BUFFER WORDS
1414 DCA OUJMP /RESET FOR NEW SET OF 3 CHARS
1415 ISZ OUPTR /BUMP BUFFER POINTER
1420 JMS OUTDMP /WRITE IT
1421 JMS OUSETP /RESET OUT BUFFER
1424 DCA OUPOLD /FOR LATER
1425 ISZ OUPTR /SECOND WORD GOES HERE
1431 OUTEMP, 0 /TEMP STORE
1432 OUPOLD, 0 /HOLDS OLD POINTER
1439 OOPEN, 0 /OPEN AN OUTPUT FILE;FETCH HANDLER
1441 DCA OUBLK /POINT TO FILE NAME
1443 DCA OUHNDL /LEAVE ROOM FOR 2 PAGE HANDLER
1445 TAD I [7600 /OUTPUT DEVICE #
1448 JMS I USR /ASSIGN,FETCH HANDLER
1450 OUHNDL, HLT /GETS ENTRY POINT OF HANDLER
1451 JMP HIOERR /HANDLER FAILURE
1452 OUENTR, JMS I (P2ADJ
1458 3 /ENTER OUTPUT FILE
1460 OUELEN, 0 /RETURNS WITH LENGTH OF HOLE
1463 TAD OUBLK /STARTING RECORD
1465 JMS OUSETP /SETUP OUTPUT AREA
1467 XOUDEV, 4001 /MAY BE ALTERED
1471 AND (7760 /GET LENGTH PART
1473 JMP ERR3 /YEP..HE LOSES
1475 AND [17 /TRY WITH INDETERMINATE LENGTH
1479 OUTDMP, 0 /WRITE ACTUAL OUTPUT
1481 JMS I (OUNREC /FIGURE # RECS TO WRITE
1483 DCA I (OUCCNT /UPDATE CLOSE LENGTH
1486 TAD OUELEN /ROOM FOR THIS WRITE?
1489 JMS I OUHNDL /NJ WRITE IT
1493 JMP HIOERR /A HANDLER BADNESS
1495 TAD OUREC /UPDATE OUTPUT RECORD #
1506 SZA CLA /IF NOT LAST PASS
1507 JMP NOVERS /NO NEED FOR VERSION NO.
1509 TAD ("V-300^R+VERSN-"0+40
1511 TAD (PATCHL /PATCH NO.-ON PAGE
1517 SNA CLA /IF /M PASS 1
1519 JMS I [OCHAR /NO 232
1521 FILLIP, JMS I [OCHAR /FILL WITH 0'S
1524 SZA CLA /TO BOUNDARY YET?
1525 JMP FILLIP /NO..KEEP FILLING
1528 SNA /FULL WRITE LEFT?
1529 JMP NODUMP /YES..BUT ^Z IS OUT
1530 TAD (4000+OUFLD /FORM WRITE
1557 4 /CLOSE OUTPUT FILE
1558 OFILE /POINTER TO FILE NAME
1559 OUCCNT, 0 /CLOSING LENGTH
1561 /FOR LONG FILES(/M), IT WILL CHAIN TO ITSELF ON FIRST PASS.
1562 /ON SECOND PASS,IT WILL DELETE FILE CREFTM.LS(IF NO E)
1563 ISZ SLSWH /DELETE TEMP FILE SWITCH
1583 OFILE, ZBLOCK 4 /OUTPUT FILE NAME GOES HERE
1585 FORM, 0 /GENERATE 214 IF NOT TTY
1586 JMS I [PASTST /IF PASS>1, NO FORM FEED
1591 TAD LNPRPG /FILL TO END OF PAGE
1592 SNA /IF 0, GENERATE 8 LINE FEEDS
1597 JMP CRLF1 /HA! GENERATE EXTRA LINE FEED!!
1600 TAD ("- /GENERATE ------
1611 DCA LNPRPG /RESET TO TOP OF PAGE
1617 JMP FORM3 /USE [215 TO GENERATE A 214
1619 CRLF, 0 /GENERATE CRRIAGE RET AND LINE FEED
1632 DCA INCHCT /FORCE READ OF NEW FILE
1641 INCHAR, ISZ INJMP /PACKING SWITCH
1642 ISZ INCHCT /BUFFER EXHAUSTED?
1643 INJMPP, JMP INJMP /NOPE
1644 TAD INEOF /WAS LAST AN EOF?
1646 JMP INGBUF /NO..GET NEXT INPUT
1650 SNA CLA /MORE INPUT?
1651 JMP I ICHAR /NO..EOF RETURN
1653 JMS ASHDLR /SET UP STRT RECORD
1654 INGBUF, JMS RDREC /AND READ SOME RECORDS
1656 /THIS IS DONE TO OPTIMIZE THE DECTAPE
1657 /ROCKING. INITIALIZATION DOES THESE
1661 INJMP, JMP . /3 WAY SWITCH
1667 AND (7400 /CONTENTS OF BUFFER
1672 RTR /GETS THIRD WORD FROM 1 AND 2
1673 ISZ INPTR /NEXT BUFFER LOC
1677 DCA INCTLW /TEMP SAVE
1680 INCOMN, AND (177 /PARITY TEST
1681 SNA /IF 200 CODE..IGNORE IT
1684 TAD (-232 /IS IT ^Z?
1686 JMP I ICHAR /YES..NOMMORE!!
1688 ISZ ICHAR /SKIP EOF RETURN
1701 AND (7760 /LENGTH PART OF WORD
1702 SZA /0 IMPLIES .GTE. 256
1707 ISZ INFPTR /BUMP TO NEXT
1708 TAD I INFPTR /GET STARTING RECORD
1714 XINREC, 2 /DEFAULT CONDITIONS
1720 TAD XINRECS /LINK ON IF OVERFLOW AND LAST READ
1722 DCA INCTR /UPDATE IF NO OVERFLOW
1725 CLL CML CMA RTR /CONTROL WORD FROM OVERFLOW
1735 JMP INERRX /FATAL OR EOF
1738 DCA INREC /UPDATE # READ
1745 DCA INCHCT /NEW CHARACTER COUNT
1752 INERRX, ISZ INEOF /FATAL OR EOF
1754 JMP INBREC /EOF..NEXT FILE
1758 TTYPRT, 0 /SIMPLE TTY OUTPUT ROUTINE
1767 HNDERR, "H-300^R+"A-300 /HANDLER FAIL
1774 SYMERR, "S-300^R+"Y-300
1781 LPTERR, "D-300^R+"E-300 /DEV LPT BAD
1788 ENTERR, "E-300^R+"N-300
1795 FULERR, "O-300^R+"U-300
1802 CLSERR, "C-300^R+"L-300
1809 INPERR, "I-300^R+"N-300
1816 REFERR, 2664 /2045 REFS
1823 /LITERAL PROCESSORS. LITERALS ARE HANDLED ACCORDING TO THEIR
1824 /BINARY DEFINITION. A CURRENT PAGE LITERAL AT,SAY, 0377 WILL
1825 /BE CALLED _L0377. A PAGE ZERO LITERAL AT LOCATION 0100 WILL
1827 /IF ASSEMBLED WITH NEW PAL8, LITERAL INCLUDES FIELD
1828 /SO 00377 IS _00377, 10377 IS _10377
1830 LIT2, TAD (2540 /PAGE 0..FIRST NUMBER ALWAYS 0
1831 DCA SYM2 /_L GOES IN SYM1 FOR BOTH
1834 ISZ ISYM /POINT TO SYM3 FOR LAST 2 DIGITS
1835 JMP LIT3 /COMMON CODE
1837 ISZ ISYM /POINT TO SECOND WORD
1838 TAD I XRLIT /FIRST BINARY DIGIT
1841 AND (266 /THIS KNOCKS OFF RELATIVE ADDRESS BIT
1842 JMS I [PACK /GOES INTO RIGHT HALF OF SYM2
1843 LIT3, TAD DSWIT /IF /D, DON'T CREF LITERALS
1845 JMP LITEX /DON'T DO ANYTHING BUT CLEAR COUNTERS
1846 TAD (LITBUF+1 /NOW PICK UP RELATIVE ADD BIT FROM INSTRUCT.
1851 DCA SYM2 /FORMING ADDRESS OF LITERAL!
1855 JMS I [PACK /LOAD UP SYM3
1856 TAD ENDFIX /WILL PRINT FIELD WITH LIT IF NEW PAL8
1859 DCA SYM1 /PUT IN _ (NEGATIVE!)
1862 JMP I XUSSYM /DO THE BOOKKEEPING
1863 LITEX, JMS I (REPACK
1865 XUSSYM, USSYM /WILL BE CHANGED TO PATCH IF /L
1879 JMP CROUT /NEED THIS CR
1881 JMP CROUT /NEED CR AFTER HEADER
1889 CHANNM, FILENAME CREFLS.TM
1890 ENDFIX, 0 /TEMP ALSO
1898 OUNREC, 0 /ESTIMATE # RECS
1902 RTL /ITS NOT AN ESTIMATE, BUT EXACT!!
1910 JMP DIV45D /START UP HERE
1912 DIV45A, ISZ DIV45C /BUMP THE QUOTIENT
1913 DCA DIV45B /NEW DIVIDEND
1915 TAD (-52 /DIVIDE BY 52
1917 JMP DIV45A /STILL +; KEEP LOOPING
1918 TAD (52 /REMAINDER IN AC AFTER ADD
1919 JMS I (DIVE /LETTER OR NUMBER?
1933 \fGETLIN, 0 /GET A LINE OF INPUT AND STORE
1934 TAD MARGIN /IT AT LINBUF
1936 INLINE, JMS I (ICHAR
1938 TAD RLSKIP /IF RALF HEADER,ELIM 2 LF
1940 JMP REGULR /NOT RALF
1941 ISZ RLSKIP /CATCH 2ND LINE
1943 TAD [7776 /ELIM EXTRA CR AFTER HEADER
1945 REGULR, TAD CHAR /LINE FEED TERMINATES THIS ROUTINE
1948 JMP INLINE /IGNORE LF'S ON INPUT
1965 GLIN6, TAD [200 /TEST FOR ^C
1971 JMP I [7605 /FOUND ^C
1976 7617 /CHECK INPUT DEVICE
1981 7600 /CHECK SIZE OF OUTPUT DEV HANDLER
1990 SZL CLL /IF 1 OR 3,IN DEV IS 2 PGS
1997 JMP I ALLOCT /2 2PAGERS IS DEFAULT
1998 TAD (4200 /IF NOT 2 2PAGERS,INBUF AT 4200
2008 CLEAR, 0 /ROUTINE TO CLEAN OUT OLD SYMBOL
2018 /THIS INITIALIZATION CODE IS DESTROYED WHEN DATA IS READ
2019 /INTO THE BUFFER. FOR THAT REASON, CREF IS NOT RESTARTABLE
2026 1423 /DEFAULT EXTENSION IS .LS
2028 TAD I (7617 /IF NO INPUT, RESTART CD
2031 TAD I [7600 /IF NO OUTPUT, GIVE HIM LPT!!
2041 JMP ERRTWO /DEFAULT DEVICE IS BAD
2063 AND (770 /CHECK FOR TTY AS OUTPUT (CAN CLA IF DEBUGGING)
2065 TAD I (TTYSWT /IF LPT IS OUTPUT,
2066 SZA CLA /NO INTERNAL FORM FEEDS GENERATED
2071 /NOW WE MOVE UP THE PERMANENT AND PSEUDO-OP TABLES.
2072 /THE Y WERE ASSEMBLED IN FIELD 0 TO SAVE DECTAPE MOTION
2074 JMS I (FTEST /GET MACHINE SIZE
2077 DCA MAXFLD /- NO.FIELDS
2078 CDF 10 /ASSIGN THE INPUT HANDLER
2087 DCA I (INHAND /SETUP ENTRY POINT
2088 JMS I (ASHDLR /SET UP FIRST READ
2090 DCA USR /SAVE SYMBOL TABLE
2093 TAD [1000 /MARK NOT RESTARTABLE
2094 DCA I (7746 /SAVE CORE BIT
2096 DCA COUNT /INITIAL LOAD PROVIDES PARAMETERS FOR
2097 /THE SYMBOL TABLE. THIS IS # WORDS TO MOVE
2100 SNA CLA /DETERMINE WHICH PSEUDO-OPS
2105 DCA PSEUDO /TABLES INITIALLY HAVE A SHORT HEADER
2106 /WHICH CONTAINS INFORMATION ABOUT THEM
2107 /PSEUDO CONTAINS STARTING # OF FIRST
2112 DCA PSEUDO+1 /LAST ENTRY #
2114 DCA COUNT /# ENTRIES TO MOVE
2116 DCA XRLIT /WHERE THEY GO IN FIELD 1
2118 JMP I (XFIRST /READ FIRST RECORDS
2129 ERRTWO, JMS I [ERROR /THIS IS AN IMPOSSIBLE ERROR
2132 CLL RTL /CHECK FOR /C+/E
2135 JMP I CHANCK //C IS MINIMUM CONDITION
2136 RTR /V3C USE /1 TO MEAN KEEP CREFLS.TM
2138 CMA /-1 IF NO E (I.E. DO ELIMINATE)
2152 AND I (7644 /TEST FOR /X
2160 AND (410 /P OR /U USED?
2168 DCA I (DOLL12 /NO SYMBOL TABLE
2169 TXONLY, TAD KILOUT /YES..DISABLE PASS ONE OUTPUT
2175 AND (300 /IF SABR (Q), SET RSWIT AND DSWIT
2178 AND [200 /CHECK FOR RALF
2183 DCA I (SCAN3 /ENABLE CHECK FOR SABR CHARS
2186 TAD I (7644 /CHECK FOR M- MAMMOTH FILE(HCREF)
2189 JMP I (BLUE0 /NOT LONG FILE
2190 /PUT IN NECESSARY PATCHES
2198 RAR /CHECK IF PASS1 OR 2 FOR /M
2201 RAL CLL /IT'S PASS 2
2202 DCA I (7645 /RESTORE TBL
2205 JMS I (7700 /RESTORE USR
2208 DCA I [OUTSW /NO LIST
2212 DCA I (PATCH1 /ANOTHER PATCH
2215 DCA I (7645 /SET /9 SWITCH
2218 DCA I (HCREF /7777 DURING PASS1
2219 JMS I (CHNSET /LOOKUP CREF.SV
2221 XPATCH, PATCH&177+5200
2223 XDOLL, DOLL13&177+5200
2224 RALFCD, TAD [7776 /FOR 2 EXTRA LINE FEEDS
2227 KILOUT, OCHAR&177+5600 /JMP I OCHAR
2230 /SUBROUTINE TO DETERMINE CORE SIZE
2234 TAD MAXFLD /GET FIELD TO TEST
2240 COR1, CDF /FIELD TO TEST
2252 JMP COREX /NON-EXISTENT FIELD
2263 /THESE ARE THE PERMANENT AND PSEUDO OP TABLES FOR CREF
2264 /RAD IS THE BASE USED TO PACK THE CHARACTERS. FOR SABR IT MAY
2265 /HAVE TO BE MOVED TO 51 RATHER THAN 45.
2271 SYMTAB, -453 /INITIAL ENTRIES
2276 ZBLOCK 4 /DUMMY ENTRY..SYMCHK NEEDS IT
2279 "A-300^RAD+"N-300+4000 /AND
2283 "B-300^RAD+"S-300+4000 /BSW
2287 "C-300^RAD+"A-300+4000 /CAF
2291 "C-300^RAD+"D-300+4000 /CDF
2295 "C-300^RAD+"I-300+4000 /CIA
2299 "C-300^RAD+"I-300+4000 /CIF
2303 "C-300^RAD+"L-300+4000 /CLA
2307 "C-300^RAD+"L-300+4000 /CLL
2311 "C-300^RAD+"M-300+4000 /CMA
2317 "C-300^R+"M-300+4000 /CML
2321 "D-300^R+"C-300+4000 /DCA
2324 \f "G-300^R+"L-300+4000 /GLK
2328 "G-300^R+"T-300+4000 /GTF
2332 "H-300^R+"L-300+4000 /HLT
2336 "I-300^R+"A-300+4000 /IAC
2340 "I-300^R+"O-300+4000 /IOF
2344 "I-300^R+"O-300+4000 /ION
2348 "I-300^R+"O-300+4000 /IOT
2352 "I-300^R+"S-300+4000 /ISZ
2356 "J-300^R+"M-300+4000 /JMP
2360 "J-300^R+"M-300+4000 /JMS
2364 "K-300^R+"C-300+4000 /KCC
2368 "K-300^R+"C-300+4000 /KCF
2372 "K-300^R+"I-300+4000 /KIE
2376 "K-300^R+"R-300+4000 /KRB
2380 "K-300^R+"R-300+4000 /KRS
2384 "K-300^R+"S-300+4000 /KSF
2388 "L-300^R+"A-300+4000 /LAS
2392 "M-300^R+"Q-300+4000 /MQA
2396 "M-300^R+"Q-300+4000 /MQL
2400 "N-300^R+"O-300+4000 /NOP
2404 "O-300^R+"P-300+4000 /OPR
2408 "O-300^R+"S-300+4000 /OSR
2412 "P-300^R+"C-300+4000 /PCE
2416 "P-300^R+"C-300+4000 /PCF
2420 "P-300^R+"L-300+4000 /PLS
2424 "P-300^R+"P-300+4000 /PPC
2428 "P-300^R+"S-300+4000 /PSF
2432 "R-300^R+"A-300+4000 /RAL
2436 "R-300^R+"A-300+4000 /RAR
2440 "R-300^R+"D-300+4000 /RDF
2444 "R-300^R+"F-300+4000 /RFC
2448 "R-300^R+"I-300+4000 /RIB
2452 "R-300^R+"I-300+4000 /RIF
2456 "R-300^R+"M-300+4000 /RMF
2460 "R-300^R+"P-300+4000 /RPE
2464 "R-300^R+"R-300+4000 /RRB
2468 "R-300^R+"S-300+4000 /RSF
2472 "R-300^R+"T-300+4000 /RTF
2476 "R-300^R+"T-300+4000 /RTL
2480 "R-300^R+"T-300+4000 /RTR
2484 "S-300^R+"G-300+4000 /SGT
2488 "S-300^R+"K-300+4000 /SKON
2492 "S-300^R+"K-300+4000 /SKP
2496 "S-300^R+"M-300+4000 /SMA
2500 "S-300^R+"N-300+4000 /SNA
2504 "S-300^R+"N-300+4000 /SNL
2508 "S-300^R+"P-300+4000 /SPA
2512 "S-300^R+"R-300+4000 /SRQ
2516 "S-300^R+"T-300+4000 /STA
2520 "S-300^R+"T-300+4000 /STL
2524 "S-300^R+"W-300+4000 /SWP
2528 "S-300^R+"Z-300+4000 /SZA
2532 "S-300^R+"Z-300+4000 /SZL
2536 "T-300^R+"A-300+4000 /TAD
2540 "T-300^R+"C-300+4000 /TCF
2544 "T-300^R+"F-300+4000 /TFL
2548 "T-300^R+"L-300+4000 /TLS
2552 "T-300^R+"P-300+4000 /TPC
2556 "T-300^R+"S-300+4000 /TSF
2560 "T-300^R+"S-300+4000 /TSK
2569 /PSEUDO OP TABLES. ENTRIES ARE SAME FORMAT AS PAL8
2574 SPSEUD, 1706 /SABR PSEUDOS. BEGINS AT 1706*4
2575 1737 /ENDS AT 1737*4
2576 -150 /150 LOCATIONS LONG
2577 7427 /STARTS LOADING AT 17430
2586 "A-300^R+"B-300 /ABSYM
2591 "A-300^R+"R-300 /ARG
2596 "B-300^R+"L-300 /BLOCK
2601 "C-300^R+"A-300 /CALL
2606 "C-300^R+"O-300 /COMMON
2611 "C-300^R+"P-300 /CPAGE
2616 "D-300^R+"E-300 /DECIM
2621 "D-300^R+"U-300 /DUMMY
2626 "E-300^R+"A-300 /EAP
2631 "E-300^R+"N-300 /END
2634 EPASS, DOLL1 /BECOMES ENDPAS
2636 "E-300^R+"N-300 /ENTRY
2641 "F-300^R+"O-300 /FORTR
2656 "I-300^R+"N-300 /INC
2661 "L-300^R+"A-300 /LAP
2666 "O-300^R+"C-300 /OCTAL
2671 "O-300^R+"P-300 /OPDEF
2676 "P-300^R+"A-300 /PAGE
2681 "P-300^R+"A-300 /PAUSE
2686 "R-300^R+"E-300 /REORG
2691 "R-300^R+"E-300 /RETRN
2696 "S-300^R+"K-300 /SKPDF
2701 "T-300^R+"E-300 /TEXT
2713 /PAL8 PSEUDOS. SAME FORMAT AS OTHERS
2730 "D-300^R+"E-300 /DECIMAL
2735 "D-300^R+"E-300 /DEVICE
2740 "D-300^R+"T-300 /DTORG
2745 "E-300^R+"J-300 /EJECT
2748 NOTBIN /SKIP ANY MORE TEXT
2750 "E-300^R+"N-300 /ENPUNCH
2755 "E-300^R+"X-300 /EXPUNGE
2760 "F-300^R+"I-300 /FIELD
2765 "F-300^R+"I-300 /FILENAME
2770 "F-300^R+"I-300 /FIXMRI
2775 "F-300^R+"I-300 /FIXTAB
2784 "I-300^R+"F-300 /IFDEF
2789 "I-300^R+"F-300 /IFNDEF
2794 "I-300^R+"F-300 /IFNZRO
2799 "I-300^R+"F-300 /IFZERO
2804 "N-300^R+"O-300 /NOPUNCH
2809 "O-300^R+"C-300 /OCTAL
2814 "P-300^R+"A-300 /PAGE
2819 "P-300^R+"A-300 /PAUSE
2824 "R-300^R+"L-300 /RELOC
2829 "T-300^R+"E-300 /TEXT
2834 "X-300^R+"L-300 /XLIST
2843 "Z-300^R+"B-300 /ZBLOCK
2856 /THIS CODE IS EXECUTED DURING PASS ONE ONLY. LATER PASSES
2857 /USE THIS AREA TO BUILD A REFERENCE TABLE.
2860 HEADER, 0 /HEADER SWITCHES FPUT TO JMS I [OCHAR
2862 DCA FPUT /ADDRESS OF PUNCH ROUTINE
2863 JMS I CGTLIN /CALL GETLIN
2864 TAD CSTRIT /RESTORE FPUT
2883 DOLL12, TAD (KRS /BECOMES JMP .+2 IF /M PASS 2 OR /U
2884 DCA I (OUTSW /RE ENABLE OUTPUT
2888 JMP DOLL2 /PAL8 PSEUDOS
2894 DCA I (EPASS /END PSEUDO NOW TO ENDPAS
2910 TAD USER+1 /SKIP LAST ENTRY (7777)
2912 XPUNJ3, DCA BUFFER /POINTER INTO SYMBOLS
2915 TAD (5336 /IS THIS A LITERAL?
2917 JMP XPUNJ1 /YES..NEXT ENTRY
2918 TAD COUNT /NO..NOW PUSH ALL LITERALS UP
2919 CLL RTL /BUT IF COUNT =0, THERE ARE NONE
2923 TAD BUFFER /SETTING UP TO DO TRANSFER. IF COUNT=0
2924 DCA XRSYM1 /ONLY THE 7777 GETS TRANSFERRED
2929 ISZ SAVE /ALL COMPLETED?
2932 IAC /INCLUDE 7777 ENTRY!
2941 XFIRST, JMS I (OOPEN
2945 STL RTL /IF WE HAVE MORE THAN 2 FIELDS,
2946 TAD MAXFLD /WE SHALL LEAVE THE SYMBOL TABLE IN ONE
2947 /PIECE. THAT ALLOWS US TO USE THE UPPER
2948 SZL CLA /CORE PROFITABLY
2952 TAD (4 /CLEARS SYMBOL TABLE
2953 DCA I (LTTBL+1 /FIX PERMANENT LIMIT IN FIELD 1
2954 DCA SYMFLD /AND FAKE THAT FLD 1 HAS NO SYMBOLS
2955 TAD FUDGE /DISABLE RESET OF FIELD 1 LIMIT
2960 CLA IAC /SYS DEV ONLY
2964 STBLK, CREFNM /GET CREF STARTING BLK
2970 CREFNM, FILENAME CREF.SV
2973 FXMR, TAD I XRLINE /SHOULD CONTAIN FIRST CHAR IN INSTR.
2975 JMS I (CHECK /CHECK IT
2978 JMP .+4 /NOPE;A NUMBER MAYBE?
2984 -271 /CHECK FOR DIGIT 0-9
2985 SKP /NOPE. IF THERE IS A SYMBOL, THIS IS TERMINATOR
2992 TAD I (7644 /M RULES FOR FIXMRI TOO
2997 DCA PATCH2 /APPROPRIATE SWITCH
3000 PATCH2, HLT /SPA SZA OR SMA SNL + CLA
3002 FXNTR, JMS I (SYMCHK
3004 JMS I (ENTRY /ENTER AS USER SYMBOL
3007 FXTAB, CLA CMA /DON'T INCLUDE 7777 ENTRY
3010 DCA COUNT /# ENTRIES TO EXAMINE
3016 TAD I SAVE /STOP AS SOON AS LITERAL FOUND
3020 TAD I SAVE /IF ALREADY NEG. ITS A PERM SYMBOL
3022 TAD (4000 /MAKE IT PERMANENT
3030 JMP FXTB9 /LOOP FOR DURATION
3036 DCA T2 /SAVE TBL START
3039 TAD I T2 /HANDLER NUMBER
3043 TAD I (37 /TBL LOCN IN 10037