software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape1 / CREF.PA
1 /2 PDP-8 OS/8 CROSS REFERENCE
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /COPYRIGHT (C) 1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION
12 /
13 /
14 /
15 /
16 /
17 /
18 /
19 /
20 /
21 /
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.
26 /
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.
31 /
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
34 /DIGITAL.
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45
46 \f/CREF IS A CROSS REFERENCING PROGRAM FOR THE OS/8 ASSEMBLERS,
47 /PAL8 AND SABR. THE PURPOSE OF CREF IS:
48
49 / 1) PROVIDE A SEQUENCE NUMBERED (DECIMAL) OUTPUT LISTING
50
51 / 2) PROVIDE A LIST OF ALL USER DEFINED SYMBOLS AND LITERALS
52 / AND THE SEQUENCE NUMBER OF THE LINES IN WHICH THEY OCCUR
53
54 /FIXES FOR MAINTENANCE RELEASE:
55
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
60
61 /FIXES FOR V3D:
62
63 /INSTALLED ALL PUBLISHED PATCHES
64 \f
65 /DETAILS OF CREF.
66
67 /CORE UTILIZED
68 /FIELD 0
69
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
78
79 /FIELD 1
80
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
84
85 /SYSTEM SCRATCH USED.
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.
89
90
91 /MAJOR ROUTINES AND CODE SECTIONS
92
93 /MAIN-START OF TEXT PROCESSING.CHECKS FOR VALID LINE.READS AND WRITES
94 /TEXT LINES
95 /CVTSEQ CONVERTS SEQUENCE NUMBERS FROM OCTAL TO DECIMAL AND
96 / WRITES THEM INTO THE OUTPUT BUFFER
97
98 /GETLIN- GET A LINE OF INPUT INTO LINE BUFFER
99
100 /WRTLIN- WRITE A LINE OF TEXT INTO OUTPUT BUFFER
101
102 /ANALYZ- LINE SCANNING BEGINS.ALL SYMBOLS COLLECTED HERE
103
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
107
108 /SYMCHK- BINARY SYMBOL TABLE SEARCH
109
110 /ENTRY- MAKES ENTRIES IN USER SYMBOL TABLE
111
112 /BUMP- BUMPS REFERENCE COUNTER OF SYMBOLS IN PASS 1
113
114 /ENDPAS- TERMINATES A PASS THROUGH INPUT
115
116 /PASSN2- FILLS IN REFERENCE STORAGE ARE DURING PASSES
117 / AFTER PASS ONE
118
119 /DUMP- DUMPS CREF TABLE TO OUT BUFFER
120
121
122 /SWITCHES IN CREF:
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
130 \f DECIMAL
131
132 PAGLEN=66 /V3C MOST PAPER HAS 66 LINES PER PAGE
133
134 OCTAL
135
136 PAGLEN=PAGLEN-6 /HEADINGS
137
138
139 VERSN="5
140 PATCHL="A
141 /PAGE ZERO FOR CREF
142
143 *10
144 /AUTO INDEX REGISTERS
145
146 XRLINE, SYMTAB-1 /USED TO MOVE UP SYMBOL TABLE
147 XRLIT, -1 /DITTO
148 XRSYM1, 0
149 XRSYM2, 0 /THESE ARE USED IN SEARCHING SYMBOLS
150 OUSAVX, 7611 /USED TO SAVE ARGS FOR /M
151
152 *20
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.
158 SAVE, 0
159 TEMP, 0
160 TEMP1, 0 /THESE THREE ARE TEMPORARY STORAGE
161 DSWIT, 0
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
167 SYM1, 0
168 SYM2, 0
169 SYM3, 0 /COLLECT SYMBOLS HERE
170 USER, 0 /USER MUST FOLLOW SYM3!
171 110 /INITIAL SYMBOL TABLE ENTRIES
172 PSEUDO, 0
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
180 DOLLAR, DOLL1
181 SYMFLD, 2 /FIELDS WITH SYMBOLS: BITS 5-11
182 MASKF, 0 /MASK FOR ABOVE WORD
183
184 /THESE ARE THE DEFAULT PARAMETERS FOR THE I/O ROUTINES
185 /AJUSTED ACCORDING TO REQUIREMENTS OF DEVICES REQUESTED
186
187 OUCTL=4200
188 OUBUF=7200
189 OUDEVH=4000 /VARIABLE-MAY ALSO BE 3600
190 OUFLD=OUCTL&70
191
192 INCTL=0400
193 INBUF=4600 /ALSO 4200
194 INDEVH=3400
195 INRECS=2 /ALSO 3
196 INFLD=INCTL&70
197 /(SUBJECT TO CHANGE WITHOUT NOTICE!)
198
199 SYMADD, 0 /CONTAINS SYMBOL ADDRESS
200 SYMNUM, 0 /ABOVE MOD 4
201 K0=USER
202 BUFFER, 0 /POINTER FOR UNPACKING
203 R=52
204 RAD=52 /RADIX FOR CONVERTING SYMBOLS
205
206 ADDER, 0
207 SYSM, 0
208 BASE, 0 /THESE ARE USED TO END A PASS
209 SYMLIM, 0 /UPPER LIMIT FOR SYMBOL REF TABLE
210 FINI, 0
211
212 IOSR, 0
213 JMS I [7607
214 CNTROL, 4010 /THIS IS ON PAGE ZERO MAINLY
215 CTPTR, 4 /BECAUSE CTPTR IS USED A LOT
216 SCRATCH=27
217 SCRATCH /SYSTEM SCRATCH FOR OVERFLOW
218 SKP /ERROR ON SYS!!!
219 JMP I IOSR
220 HIOERR, JMS I [ERROR
221 HNDERR
222 LNPRPG, -PAGLEN /# LINES OF TEXT PER PAGE
223 LINES, -PAGLEN /V3C MASTER COPY
224 THOUS, 6030 /CONVERSION TABLE..OCTAL-DECIMAL
225 7634
226 7766
227 7777
228
229 FPUT, STORIT /INITIALLY POINTS TO DCA I XRLINE
230
231 M12=THOUS+2
232 M1=THOUS+3
233
234 DPAT, 0
235 DCA I (NOFIRM
236 DCA I (NOFORM
237 JMP I DPAT
238 \f
239 *200
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
248 /FIELD 0.
249 ERROR, 0
250 CLA
251 CDF 0
252 TAD I ERROR
253 DCA BUFFER
254 TAD [-6
255 DCA SYMCNT /12 CHARACTER MESSAGES
256 TAD TTY /POINT TO TTY OUT ROUTINE
257 DCA [OCHAR
258
259 TAD I BUFFER
260 JMS I [DIVIDE /CONVERT AND PRINT MESSAGE
261 ISZ SYMCNT
262 JMP .-3
263 JMP I [7605
264 TTY, TTYPRT
265
266
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.
270
271 LINBUF=.
272 LITBUF=.+6
273 VERTST=.+4
274
275
276 *251
277 FILEXT, 0
278 CDF 10
279 TAD I (7604
280 CDF 0
281 SNA
282 TAD (1423
283 CDF 10
284 DCA I (7604
285 CDF 0
286 JMP I FILEXT
287 P2ADJ, 0
288 TAD I (PASS2
289 SNA
290 JMP I P2ADJ
291 DCA I (OUBLK /LAST BLOCK WRITTEN TO
292 CDF 10
293 TAD I OUSAVX
294 CDF 0
295 DCA I (OUELEN /SIZE OF HOLE
296 CDF 10
297 TAD I OUSAVX
298 DCA LNPRPG /NO. LINES IN LAST BLK WRITTEN
299 TAD I OUSAVX /NO. BLKS WRITTEN SO FAR
300 CDF 0
301 JMP I (MP2 /NO ENTER
302 MORCOR, 0
303 CLA CLL IAC
304 DCA MAXFLD /IN CASE NOT DEFINED
305 TAD I (7777
306 AND (70
307 SNA
308 JMP I MORCOR /USE OLD WAY TO DETERMINE
309 CLL RTR
310 RAR /NEED IT HI 3
311 DCA MAXFLD
312 JMP I (DONCOR
313
314 OTYPE, 0
315 CDF 10
316 TAD I [7600 /DETERMINE WHAT TYPE OF DEVICE
317 AND [17
318 DCB=7760
319 TAD (DCB-1
320 DCA Q
321 TAD I Q /CHECK DEVICE CONTROL BLOCK
322 CDF 0
323 JMP I OTYPE
324 Q, 0
325 \f *400
326
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.
332
333 MAIN, JMS I [FORM /FORM FEED (CR/LF)
334 JMS I [HEADER /SKIP HEADER
335 JMS I (GETLIN /AND ONE CR/LF
336 NOTBIN, JMS WRTLIN
337 NXTLIN, JMS I (GETLIN
338 TAD I XRLINE
339 DCA CHAR
340 JMS I [CHECK /CHECK FOR ALPHA LINE
341 301
342 -336
343 JMP NOALPH
344 NOFIRM, ISZ LNPRPG /NEED A FORM FEED YET?
345 JMP NOTBIN /NOT YET
346 JMS I [FORM /NOW!!!
347 JMP NOTBIN
348 NOALPH, TAD CHAR
349 TAD MCTLD /IF RUB OUT, USED /D
350 SNA
351 JMP I [ENDPAS /CAN'T OUTPUT SYM TABLE
352 TAD (163 /CHECK FOR FORM FEED
353 SNA
354 JMP MAIN /YES..
355 TAD (-41 /IF ------, HE USED /T(DUMMY!)
356 SNA CLA
357 JMP MAIN /GIVE HIM A FORM FEED
358 NOFORM, ISZ LNPRPG /=0 AFTER PASS1 NEW PAGE?
359 SKP /SKIP A FORM FEED
360 JMS I [FORM
361 ISZ SEQNO /BUMP SEQUENCE
362 JMP MAIN2
363 TAD [140
364 DCA CONST
365 MAIN2, JMS I [PASTST /STILL PASS ONE?
366 JMP MAIN3
367 TAD SEQNO
368 JMS CVTSEQ
369 TAD [-3 /3 SPACES
370 JMS I [SPACE
371 MAIN3, TAD CHAR
372 TAD [-215
373 SNA CLA
374 JMP NOTBIN
375 JMP I [ANALYZ
376 MCTLD, -377 /RUB OUT
377
378 /THIS ROUTINE CONVERTS SEQUENCE NUMBERS TO DECIMAL NUMBERS AND
379 /PUTS THEM INTO THE OUTPUT BUFFER. IT IS USED WHEN PRINTING
380 /THE CREF TABLE ALSO
381 /THE CALLING SEQUENCE IS: AC=OCTAL NUMBER TO BE CONVERTED.
382 /THE OUTPUT IS AUTOMATICALLY 4 DIGITS.
383
384
385 POSPT=TEMP1
386 DIGPT=MASKF
387
388 CVTSEQ, 0
389 TAD CONST
390 DCA SAVE /TEMP STORE
391 TAD CONST
392 SZA CLA
393 TAD [4
394 DCA DIGIT1
395 DCA DIGIT1+1
396 DCA DIGIT1+2
397 DCA DIGIT1+3 /ZERO CONVERSION AREA
398 TAD [-4
399 DCA COUNT
400 TAD SAVE
401 CLL /SEE IF SEQUENCE IS ABOVE 8000(10)
402 TAD CONST /EITHER 0 OR 140(8)
403 SNL
404 JMP CVT2 /O.K.
405 DCA SAVE /CORRECTED NUMBER
406 TAD [10
407 DCA DIGIT1 /PUT AN 8 INTO THERE FOR PRINTING
408 CVT2, CLA
409 TAD (DIGIT1
410 DCA DIGPT
411 TAD (THOUS
412 DCA POSPT
413 TAD SAVE
414 RPEAT, CLL
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
419 JMP RPEAT
420
421 ADDUP, CIA /RESTORE THE LAST ONE
422 TAD I POSPT
423 CIA
424 ISZ POSPT
425 ISZ DIGPT
426 ISZ COUNT /DONE ALL 4?
427 JMP RPEAT
428 TAD [-4 /YES..OUTPUT THE CONVERTED NUMBERS
429 DCA COUNT
430 TAD (DIGIT1
431 DCA DIGPT
432 SPCLUP, TAD I DIGPT
433 TAD ZSPRES /LEADING ZERO SUPPRESSION
434 DCA ZSPRES
435 TAD ZSPRES
436 SNA CLA /ZSPRES IS 0 UNTIL A VALID # IS FOUND
437 TAD (-20
438 TAD I DIGPT
439 TAD [260
440 JMS I [OCHAR
441 ISZ DIGPT
442 ISZ COUNT
443 JMP SPCLUP
444 DCA ZSPRES
445 JMP I CVTSEQ
446
447 DIGIT1, 0
448 0
449 0
450 0
451 ZSPRES, 0
452 \f /WRTLIN TRANSFERS INPUT LINE TO OUTPUT BUFFER
453
454 WRTLIN, 0
455 TAD MARGIN
456 DCA XRLINE /RESET MARGIN TO LEFT
457 OLINE, TAD I XRLINE /PICK UP TEXT CHARACTER
458 DCA CHAR
459 TAD CHAR
460 SNA /IF NULL,WAS PREMATURE TERMINATOR
461 JMP FLUSH /YES. READ AND WRITE THE REST
462 JMS I [OCHAR /OUTPUT THE CHARACTER
463 TAD CHAR
464 TAD MLF /WAS THIS END OF LINE?
465 SZA CLA
466 JMP OLINE /NO..LOOP AGAIN
467 JMP I WRTLIN
468
469 FLUSH, JMS I [HEADER
470 JMP I WRTLIN /OVERFLOW NOT IN BUFFER
471 \f
472 *600
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,
477 /OR BOTH.
478
479 ANALYZ, TAD SEMISV /IF #0, LAST WAS SEMICOLON
480 SNA
481 TAD TXTBEG /IF=0, START NORMALLY
482 DCA XRLINE
483
484 SCAN, TAD I XRLINE
485 DCA CHAR
486 JMS I [CHECK /ALPHANUMERIC CHECK
487 301
488 -332
489 SKP /NONE..TEST FOR SPECIAL CHARS
490 JMP PAKIT /FOUND A LETTER PACK AWAY
491 JMS I [CHECK /TEST FOR 0-9
492 260
493 -271
494 SKP /NOPE..COULD BE SABR
495 JMP SCAN1
496 SCAN3, JMP TSTIT /IF SABR, THIS LOC IS AND 0
497 JMS I [CHECK /TEST FOR [,],\,AND ^
498 333
499 -336
500 SKP
501 JMP PAKIT /VALID SABR CHARACTERS
502
503 TSTIT, JMS REPACK
504 TAD CHAR /IS THIS A ;?
505 TAD (-273 /IF SO, SAVE PLACE ON LINE
506 SZA CLA
507 JMP .+3 /IF ; SAVE PLACE ON LINE
508 TAD XRLINE
509 DCA SEMISV
510 TAD SYM1 /IS THERE A LEGAL SYMBOL?
511 SNA CLA
512 JMP TSTEND /NO..LOOK FOR A LINE FEED
513 TAD CHAR
514 TAD (-257
515 SNA CLA /A COMMENT?
516 IAC /YES..NEED SPECIAL RETURN
517 DCA SLSWIT
518
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
524 TAD SYMADD
525 TAD [3
526 DCA SAVE /SYMCHK RETURNS ADDRESS OF SYMBOL IN SYMADD
527 CDF 10
528 TAD I SAVE
529 DCA SAVE
530 CDF 0
531 JMS I (CLEAR /WIPE OUT PSEUDO OP
532 JMP I SAVE /PERFORM THE NECESSARY OP FOR PSEUDO
533 PATCH, TAD SYM1
534 RTL
535 PATCH1, CLA SZL SPA /LG-LH SPLIT
536 JMP B
537
538 USSYM, JMS I [PASTST
539 JMP I PASN2
540 JMS I [SYMCHK
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
547
548 NTER, JMS I [ENTRY /ENTER THE SYMBOL BY PUSHING DOWN ALL
549 /THE ONES BELOW IT
550 BMPIT, JMS I [BUMP /AND INCREASE THE REFERENCE COUNT
551 B, JMS I (CLEAR /SETUP FOR NEXT
552 TAD SLSWIT /WAS LAST A /?
553 SZA CLA
554 JMP I (NOTBIN
555 JMP SCANER
556
557 TSTEND, TAD CHAR
558 TAD MLF /ARE WE DONE WITH THIS LINE?
559 SZA CLA
560 JMP .+3 /IF LF, CLEAR OUT SEMICOLON
561 CLRSEM, DCA SEMISV
562 JMP I (NOTBIN
563 TAD CHAR
564 TAD (-257
565 SNA /COMMENT LINE?
566 JMP CLRSEM
567 TAD (15 /A "?
568 SNA
569 ISZ XRLINE /YES..SKIP NEXT LETTER
570 TAD [-2 /A $?
571 SNA
572 JMP I DOLLAR
573 TAD [-4
574 SNA /TEST FOR (
575 JMP I (LIT1
576 TAD (-63
577 SZA CLA /TEST FOR [
578 JMP SCANER /NONE OF THEM KEEP GOING
579 JMP I (LIT2
580
581 SCAN1, TAD SYM1 /IF WE DON'T HAVE A SYMBOL
582 SNA CLA /DON'T PACK THIS CHARACTER
583 JMP SCAN
584 PAKIT, TAD CHAR
585 JMS I [PACK /PACK A CHARACTER
586 JMP SCAN
587
588 REPACK, 0 /RESET SYMBOL AREA
589 TAD [-6
590 DCA SYMCNT /SYMBOL COUNTER..6 CHARS
591 TAD (SYM1
592 DCA ISYM
593 DCA PSWCH
594 JMP I REPACK
595
596 SEMISV, 0
597 SLSWIT, 0
598
599 SCANER, TAD CHAR /IF LAST WAS ; READ IN OVERLAY
600 TAD (-273
601 SNA CLA
602 JMP I (NOTBIN
603 JMP SCAN
604
605 SUB3, 0 /SUBTRACTS 3 FROM CTPTR
606 TAD [-3
607 TAD CTPTR
608 DCA CTPTR
609 JMP I SUB3
610 *1000
611
612
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.
616
617 PACK, 0
618 DCA BLAH
619 TAD SYMCNT
620 SMA CLA /OVERFLOW PROTECT
621 JMP I PACK
622 TAD BLAH
623 AND [77 /STRIP IT
624 TAD (-37 /INCLUDE VALID SABR CHARS
625 SMA SZA
626 TAD (-20 /NUMBERS GET MAPPED: 40-51
627 TAD (37 /LETTERS ARE MAPPED:01-37
628 ISZ PSWCH /WHICH HALF?
629 JMP LEFT
630 TAD I ISYM
631 DCA I ISYM
632 ISZ ISYM
633 JMP PCKOUT
634 LEFT, CLL RAL /*2
635 DCA TLOW
636 TAD TLOW
637 CLL RTL
638 DCA SAVE /*10
639 TAD SAVE
640 CLL RTL /*40
641 TAD SAVE
642 TAD TLOW /*52!!
643 DCA I ISYM
644 CLA CMA /RESET FLIP FLOP
645 DCA PSWCH
646 PCKOUT, ISZ SYMCNT
647 NOP
648 JMP I PACK
649 BLAH, 0
650
651
652
653 \f
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.
663
664 /CALLING SYMCHK:
665 / JMS SYMCHK
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
671 /FOR THE SYMBOL.
672
673 SYMCHK, 0
674 TAD I SYMCHK
675 DCA THI
676 DCA LAST
677 TAD I THI /GET LIMITS OF TABLE
678 DCA TLOW /LOW LIMIT
679 ISZ THI
680 TAD I THI
681 DCA THI /HIGH LIMIT
682
683 COMP, TAD TLOW
684 CIA
685 TAD THI
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!
693
694 S1, CLL
695 CDF 10
696 TAD I XRSYM2 /SYMBOL TABLE ENTRY
697 CDF 0
698 AND [3777 /MASK PERMANENT SYMBOL BIT
699 CMA /USE ONE'S COMPLEMENT
700 TAD I XRSYM1 /OUR COLLECTED SYMBOL
701 CMA /0 AC IF EQUAL
702 SZA CLA /WATCH THE LINK!!
703 JMP COMPR /NOW TEST FOR HI OR LOW COMPARISON
704 ISZ COUNT
705 JMP S1
706 ISZ SYMCHK /TAKE FOUND ENTRY
707 JMP OUT1
708
709
710 COMPR, TAD LAST /LAST GASP?
711 SZA CLA
712 JMP OUT2 /YEP
713 TAD SYMNUM /LINK TELLS THE TALE!
714 SNL
715 JMP COMP-1 /ADJUST HIGH LIMIT
716 DCA TLOW
717 JMP COMP
718
719
720 OUT2, TAD SYMNUM
721 SZL
722 IAC
723 DCA SYMNUM
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
727 JMP .+3
728 ISZ SYMNUM
729 JMP OUT1
730 CLL RTL /FORM SYMADD FROM SYMNUM
731 DCA SYMADD /CORE ADDRESS OF THE SYMBOL
732 ISZ SYMCHK
733 JMP I SYMCHK
734
735 THI, 0
736 TLOW, 0
737
738 LAST, 0
739
740
741
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
745 /EACH FIELD
746
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
751 7574 /CORE ADDRESSES
752 7574
753 7574
754 7574
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
759 4
760 4
761 4
762 4
763
764 DIVE, 0
765 SNA /IF 0, PRODUCE A SPACE
766 JMP DIVSPC
767 TAD (-37
768 SMA SZA
769 TAD [-60
770 TAD [77
771 DIVSPC, TAD [240
772 JMP I DIVE
773
774 SETXR, 0 /SETUP INDEX REGS FOR SEARC,ENTRY
775 TAD SYMNUM /SETUP WHEN FOUND SYMBOL
776 CLL RTL /CORE ADDRESS OF SYMBOL
777 TAD M1
778 DCA XRSYM2
779 TAD [SYM1-1
780 DCA XRSYM1
781 TAD [-4
782 DCA COUNT
783 JMP I SETXR
784 \f
785 *1200
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.
793
794 ENTRY, 0
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
798 TAD PSEUDO
799 SPA SNA CLA
800 JMP NMOR /BAD!OVERFLOW HAS OCCURRED
801 ISZ USER+1 /OK..BUMP SYMBOL COUNT
802 TAD USER+1
803 CLL RTL /CORE ADDRESS OF ENTRY
804 DCA TEMP1
805 TAD TEMP1
806 TAD [-4 /GIVES BOTTOM OF TABLE NOW
807 DCA SAVE
808 TAD SAVE /TEST FOR AN 'ADD-ON' ENTRY
809 CMA
810 TAD SYMADD
811 DCA COUNT /-# OF WORDS TO MOVE
812
813 CDF 10
814 NTR1, TAD I SAVE
815 DCA I TEMP1 /THE BAD LOOP!
816 CMA
817 TAD SAVE
818 DCA SAVE /I WISH WE HAD A DSZ!(DECREMENT &SKIP ON 0
819 CMA
820 TAD TEMP1
821 DCA TEMP1
822 ISZ COUNT /DONE?
823 JMP NTR1 /UNFORTUNATELY NOT
824
825 CDF 0
826 ENTER, CLA /NOW PUT IN OUR ENTRY
827 TAD [-4
828 DCA COUNT /THE 4TH IS A 0 WORD (USER FOLLOWS SYM3)
829 NTR2, TAD I XRSYM1
830 CDF 10
831 DCA I XRSYM2
832 CDF 0
833 ISZ COUNT
834 JMP NTR2
835 JMP I ENTRY
836
837 NMOR, JMS I [ERROR /SYMBOL OVERFLOW
838 SYMERR
839 \f
840
841 TXT, JMS GETC
842 TAD (-240 /IGNORE SPACES
843 SNA CLA
844 JMP TXT
845 TAD CHAR
846 CIA /STRING DELIMITER
847 DCA DELMIT
848 TXT2, JMS GETC
849 TAD DELMIT /REACHED END OF STRING?
850 SNA CLA
851 JMP I [B /YES
852 TAD CHAR /NO..END OF LINE?
853 TAD [-215
854 SNA CLA
855 JMP I [B
856 JMP TXT2
857
858 GETC, 0
859 TAD I XRLINE
860 DCA CHAR
861 TAD CHAR
862 JMP I GETC /GET A CHAR;STORE IT, RETURN IN AC
863 DELMIT, 0
864
865 \f
866
867
868 BUMP, 0 /ROUTINE TO BUMP REFERENCE COUNTERS
869 TAD SYMADD
870 TAD [3
871 DCA SAVE /ADDRESS OF REFERENCE COUNTER
872 CDF 10
873 TAD I SAVE
874 SPA CLA /IF 4000 BIT ON, AN EXTRA ENTRY HAS
875 /ALREADY BEEN MADE FOR THIS SYMBOL
876 JMP ONEISZ
877 TAD CONST
878 SNA CLA /IS SEQNO >4095?
879 JMP ONEISZ /NOT YET
880 TAD [4000
881 TAD I SAVE
882 DCA I SAVE /MARK IT AS BEING NOTED
883 CMA
884 ONEISZ, TAD M1 /EITHER -1 OR -2
885 DCA COUNT
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!!
891 SPA CLA
892 JMP ERR7
893 ISZ COUNT
894 JMP BUMP2
895 CDF 0
896 JMP I BUMP
897
898 ERR7, CDF 0
899 JMS I [ERROR
900 REFERR
901
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
906 CLA CMA
907 TAD USER+1 /AND A 0 LOCATION TO HOLD THE DEFINITION
908 CIA /SEQUENCE NO.
909 DCA COUNT
910 PTRST1, TAD [4 /START PICKING UP POINTERS
911 TAD BUFFER
912 DCA BUFFER
913 ISZ SYMNUM /CORRESPONDING SYMBOL NUMBER
914 JMS I (GETFLD /FORM CDF N FOR REFERENCE AREA
915 DCA CDTFLD
916 CDF 10
917 TAD I BUFFER /IF PERMANENT SYMBOL, THIS LOC=0
918 SNA /IF SO, SKIP IT
919 JMP PTRST2
920 TAD M1
921 DCA SAVE
922 CDTFLD, HLT
923 DCA I SAVE
924 ISZ SAVE /POINT TO INDEX WORD
925 TAD [2
926 DCA I SAVE
927 PTRST2, CDF 0
928 ISZ COUNT
929 JMP PTRST1
930 JMP I PTRSET
931 \f
932 *1400
933 /ENDPAS IS ARRIVED AT WHEN A PASS THROUGH THE INPUT HAS BEEN
934 /COMPLETED.SOME COMPLICATED DIDDLING GOES ON HERE.
935
936 ENDPAS, ISZ PASSG1
937 JMP I (DUMP /DUMP WHAT WE HAVE
938 JMS I (ENDFIX
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
944 DCA CNTROL
945 TAD [4 /READ SYMBOLS INTO F1 AT LOC.4
946 DCA CTPTR
947 JMS IOSR /DO THE READ
948 NDPS1, DCA FLDPTR /INITIALLY AT FIELD 0
949 TAD [6034
950 DCA I [OUTSW
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
957 /TABLE ONTO SYS.
958 TAD (BASTBL
959 TAD FLDPTR
960 DCA TEMP1 /INITIAL BASE OF REFS
961 TAD I TEMP1
962 DCA BASE
963 TAD FLDPTR /NOW GET MASK FOR QUESTION..
964 CMA /DOES THIS FIELD HAVE SYMBOLS?
965 DCA COUNT
966 CLL CML
967 RAL
968 ISZ COUNT
969 JMP .-2
970 DCA MASKF
971 TAD FLDPTR /GET ADDRESS OF UPPER LIMIT
972 TAD (LTTBL /FOR LATER
973 DCA SYMLIM
974 TAD FLDPTR /SET NEW LIMIT IN FIELD 1
975 TAD [BREAK
976 DCA NUSER /THE NEW LIMIT FOR REFS IS
977 DCA I NUSER /ZERO SYMBOL IN CURRENT FIELD LOC.
978 TAD I SYMLIM
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
982 /SYMBOL TABLE
983 DCA LIMIT
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
988 AND [1777
989 DCA COUNT /SAVE FOR LATER
990 TAD ADDER
991 CIA
992 TAD BASE /NEXT REFERENCE AREA
993 DCA SAVE /IF IT FITS IN THIS AREA
994 /USED WHEN WE MAKE ACTUAL REF ENTRIES
995 CDF 10
996 TAD I CTPTR /# REFS FOR THIS SYMBOL
997 DCA TEMP
998 TAD [3
999 TAD CTPTR
1000 DCA CTPTR
1001 TAD TEMP
1002 SPA CLA /PERMANENT SYMBOL
1003 JMP PRMSYM /YES
1004 TAD I CTPTR
1005 AND [3777 /MASK GT 4095 BIT
1006 TAD ADDER
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
1010 TAD I CTPTR
1011 AND [3777
1012 CDF 0
1013 CLL
1014 TAD LIMIT /IF LINK GOES ON, REFS WON'T FIT
1015 SZL
1016 JMP CUTSYM
1017 CMA CLL /WHEN UPPER MEETS LOWER,QUIT
1018 TAD SAVE
1019 SNL CLA
1020 JMP CUTSYM /OK..QUIT!
1021 CDF 10
1022 TAD SAVE /FITS..PUT IN BASE WHERE THIS SYMBOL'S
1023 /REFS BEGIN
1024 DCA I CTPTR
1025 ISZ ADDER
1026 ISZ ADDER /2 EXTRA FOR BOOKKEEPING
1027 PRMSYM, CDF 0
1028 TAD COUNT /SYMBOL NUMBER..REMEMBER?
1029 DCA I NUSER
1030 TAD SYMFLD /BUT..IF THIS FIELD HAS SYMBOLS,
1031 AND MASKF /LET'S REDUCE HIS AVAILABLE SPACE
1032 SNA CLA
1033 JMP .+4 /NO SYMBOLS
1034 TAD [4
1035 TAD LIMIT
1036 DCA LIMIT
1037 TAD COUNT /SEE IF WE ARE DONE
1038 CMA
1039 TAD USER+1
1040 SNA
1041 JMP I (DONE /YES!! PROBABLY FORGOT SOMETHING
1042 DCA SYSM /BECOMES # SYMBOLS TO WRITE OUT IN CASE
1043 /WE RUN OUT OF ROOM
1044 ISZ CTPTR
1045 JMP NDPS2 /CYCLE FOR NEXT SYMBOL
1046 \f
1047 CUTSYM, CLA
1048 ISZ FLDPTR /GO TO ANOTHER FIELD
1049 TAD FLDPTR /DOES IT EXIST?
1050 CLL
1051 TAD MAXFLD
1052 SNL CLA
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
1057 TAD [4110
1058 DCA CNTROL
1059 JMS I (SUB3 /RESET CTPTR
1060 TAD I NUSER
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.
1065 CLA CMA
1066 DCA I CTPTR
1067 CDF 0
1068 JMP I (DONE+1 /NOT DONE YET!!
1069
1070 END3, JMS I (SUB3
1071 JMP END2 /AND RESUME THY WORK!!
1072 NUSER, 0
1073 LIMIT, 0
1074 \f\f *1600
1075
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.
1083
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
1092
1093 JMS GETFLD
1094 DCA CDFN /DETERMINE WHAT FIELD THIS SYMBOL HAS ITS
1095 /REFS IN AND FORM A CDF N
1096 TAD CHAR
1097 TAD MCOMMA /IS THIS A DEFINITION?
1098 SZA
1099 TAD MEQ /AN= MAYBE?
1100 SNA CLA
1101 IAC /ONE OR OTHER..MARK AS DEFINITION
1102 DCA DEF
1103 CDF 10
1104 TAD I SAVE /PICK UP POINTER TO REFERENCE AREA
1105 DCA SAVE
1106 TAD CDFN
1107 DCA .+1
1108 HLT /I HATED TO DO THIS!!!
1109 TAD I SAVE
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
1113 JMP P2
1114 TAD CONST /HAS THE SEQUENCE # WRAPPED?
1115 SNA CLA
1116 JMP P2 /NOT YET
1117 JMS REFENT /YES..MAKE A 0 ENTRY
1118 TAD CDFN
1119 DCA .+1
1120 HLT
1121 TAD I SAVE /MARK AS HAVING A 0 ENTRY
1122 TAD [4000
1123 DCA I SAVE
1124 P2, CDF 0
1125 TAD SEQNO /NOW MAKE A REAL ENTRY
1126 JMS REFENT
1127 TAD DEF
1128 SNA CLA /SHOULD WE FILL IN THE DEFINITION LOC?
1129 JMP I [B /NO
1130 CLA CMA
1131 TAD SAVE /YES..POINT TO IT
1132 DCA SAVE
1133 TAD CDFN
1134 DCA .+1
1135 HLT /THIS IS SLOPPY, BUT SO AM I
1136 TAD SEQNO
1137 CIA
1138 DCA I SAVE
1139 CDFZ, CDF 0
1140 JMP I [B
1141 DEF, 0
1142 MEQ, -21
1143 MCOMMA, -254
1144 \f
1145 /REFENT, MAKES REFERENCES IN THE SYMBOLS AREA AND BUMPS THE
1146 /FIRST LOCATION TO POINT TO THE NEXT LOC.
1147
1148 REFENT, 0
1149 DCA TEMP1 /SAVE SEQNO
1150 CDFN, HLT
1151 TAD I SAVE
1152 AND [3777 /MASK OFF WRAP AROUND BIT
1153 CIA
1154 TAD SAVE /FORM ADDRESS OF THIS REFERENCE
1155 DCA TEMP
1156 TAD TEMP1
1157 DCA I TEMP
1158 ISZ I SAVE /BUMP POINTER
1159 CDF 0
1160 JMP I REFENT
1161
1162 /TSTPRM TESTS THE SYMBOL WE HAVE FOUND FOR BEING A PERMANENT SYMBOL
1163 /PERMANENT SYMBOLS ARE DISTINGUISHED BY HAVING THE 4000 BIT ON.
1164
1165 TSTPRM, 0
1166 TAD SYMADD
1167 TAD [3
1168 DCA SAVE /WE USE THIS ON RETURN!!
1169 CDF 10
1170 TAD I SYMADD
1171 CDF 0
1172 SMA CLA /IS IT MINUS?
1173 ISZ TSTPRM
1174 JMP I TSTPRM
1175
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.
1179
1180 GETFLD, 0
1181 DCA FLDPTR
1182 GF1, TAD [BREAK
1183 TAD FLDPTR /GET BREAK TABLE ENTRY
1184 DCA TEMP
1185 TAD I TEMP
1186 CIA
1187 TAD SYMNUM /SYMNUM WAS SET UP WHEN WE FOUND THE SYMBOL
1188 SPA SNA CLA
1189 JMP GF2 /FIRST NEG. VALUE GIVE FLDPTR
1190 ISZ FLDPTR /TRY NEXT
1191 JMP GF1
1192 GF2, JMS CHDF /FORM THE CDF N
1193 JMP I GETFLD
1194
1195 CHDF, 0
1196 TAD FLDPTR
1197 CLL RTL
1198 RAL
1199 TAD CDFZ
1200 JMP I CHDF
1201
1202 SPACE, 0 /GENERATES AS MANY SPACES AS ARE IN AC
1203 DCA CHDF
1204 TAD [240
1205 JMS I [OCHAR
1206 ISZ CHDF
1207 JMP SPACE+2
1208 JMP I SPACE
1209
1210 CHECK, 0
1211 TAD I CHECK /SUBROUTINE TO TEST CHAR
1212 CIA /AGAINST PRESCRIBED LIMITS
1213 TAD CHAR
1214 CLL
1215 TAD I CHECK
1216 ISZ CHECK
1217 TAD I CHECK
1218 ISZ CHECK
1219 SNL
1220 SKP CLA /VERY UNESTHETIC..BUT IT WORKS!
1221 SNA CLA
1222 ISZ CHECK
1223 JMP I CHECK
1224
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
1229 DCA CONST
1230 JMP I (FIRST /READ FIRST RECORDS
1231 \f
1232 *2000
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
1236 /BE DONE IN DUMP
1237
1238
1239 COUNTR=BASE
1240 REFBUF=IOSR
1241 SCHAR=ADDER
1242
1243 DUMP, CLA CMA
1244 DCA PASSG1 /FORCES ANOTHER PASS AT ENDPAS
1245 DMP7, SKP /V3C
1246 JMP DMP8 /SKIP FIRST-TIME STUFF
1247 ISZ LINES /V3C
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
1251 DMP8, TAD USER+1
1252 CIA
1253 DCA COUNTR /# SYMBOLS TO PROCESS NOW
1254 TAD [3
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?
1259 SKP /NOT YET
1260 JMS I [FORM
1261 DMP6, TAD [-3
1262 DCA SYMCNT /2 CHARACTERS PER PASS
1263 DCA CONST /RESET FOR <4096
1264 TAD M12
1265 DCA LINENO
1266 NXTDV, ISZ BUFFER
1267 CDF 10
1268 TAD I BUFFER /PICK UP PACKED WORD
1269 CDF 0
1270 SPA /PERMANENT SYMBOL?
1271 JMP DPERM /YES
1272 JMS I [DIVIDE /CONVERT 2 CHARS AND PRINT
1273 ISZ SYMCNT
1274 JMP NXTDV+1
1275 TAD [-4
1276 JMS I [SPACE /GENERATE(AC) SPACES
1277 TAD BUFFER
1278 CLL RTR /GET SYMBOL NUMBER
1279 AND [1777
1280 DCA SYMNUM
1281 JMS I (GETFLD
1282 DCA CDFNA /CDF N
1283 CDF 10
1284 TAD I BUFFER
1285 DCA REFBUF /BASE OF REFS FOR SYMBOL
1286 CDFNA, HLT
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.
1291 DCA SYMCNT
1292 TAD I REFBUF
1293 AND [3777 /NOW CALCULATE REAL NO. ENTRIES
1294 TAD SYMCNT
1295 CIA
1296 DCA SYMCNT
1297 CLA CMA
1298 TAD REFBUF
1299 DCA REFBUF
1300 TAD I REFBUF /SEQUENCE # OF DEF.
1301 DCA DEFSEQ
1302 DMP2, CLA CMA
1303 TAD REFBUF
1304 DCA REFBUF
1305 TAD CDFNA
1306 DCA .+1
1307 HLT
1308 TAD I REFBUF /PICK UP A REFERENCE
1309 TAD DEFSEQ /IS THIS THE DEF?
1310 SZA CLA
1311 JMP NODEF
1312 DCA DEFSEQ /ONLY 1 DEF PER LINE
1313 TAD [3 /YES..PRINT # AFTER SEQ #
1314 NODEF, TAD [240 /IF NO, PRINT 2 SPACES
1315 DCA SCHAR
1316 TAD I REFBUF
1317 SZA CLA /IF A 0, ALL FOLLOWING REFS ARE >4095
1318 JMP .+4
1319 TAD [140
1320 DCA CONST
1321 JMP DMP2 /IGNORE ZERO ENTRY!!
1322 TAD I REFBUF
1323 CDF 0
1324 JMS I (CVTSEQ /WRITE THE DECIMAL SEQUENCE #
1325 TAD SCHAR
1326 JMS I [OCHAR /EITHER # OR SPACE
1327 CLA CMA
1328 JMS I [SPACE
1329 ISZ SYMCNT /MORE TO DO?
1330 JMP DMP0 /NO, BUT IS CR/LF REQUIRED?
1331 GETMOR, ISZ COUNTR /EXHAUSTED ALL SYMBOLS?
1332 JMP DMP5
1333 TAD FINI /YES..ARE WE ALL DONE
1334 SNA CLA
1335 JMP I [ENDPAS /NO..READ IN NEXT SEGMENT
1336 JMP I (OCLOSE
1337
1338 DMP0, ISZ LINENO /A CR/LF NEEDED?
1339 JMP DMP2
1340 TAD M12
1341 DCA LINENO /RESET ENTRIES PER LINE
1342 JMS I [CRLF /V3C
1343 ISZ LNPRPG /FORM FEED?
1344 SKP
1345 JMS I [FORM
1346 TAD M12 /AND INDENT NEXT LINE
1347 JMS I [SPACE
1348 JMP DMP2
1349
1350 DPERM, CLA
1351 TAD [3 /PERMANENT SYMBOL
1352 TAD BUFFER
1353 DCA BUFFER /LOOK AT NEXT
1354 ISZ COUNTR
1355 JMP NXTDV
1356 JMP GETMOR+2
1357
1358 FIRST, JMS I (ASHDLR /RESET INPUT FOR READ
1359 JMS I (RDREC /AND READ SOME RECORDS
1360 JMP I (NXTLIN /START READING TEXT
1361
1362
1363 DEFSEQ, 0
1364 LINENO, -12
1365 PASTST, 0 /SR WHICH DETERMINE IF PASS > 1
1366 TAD PASSG1
1367 SPA CLA /IF >0=> PASS >1
1368 ISZ PASTST
1369 JMP I PASTST
1370 \f *2200
1371
1372 /I/O ROUTINES FOR OS/8
1373
1374 OUSETP, 0
1375 TAD (OUCTL&3700
1376 CIA
1377 DCA OUDWCT /SIZE OF BUFF IN DOUBLEWORDS
1378 TAD XOUBUF
1379 DCA OUPTR /INITIALIZE POINTER
1380 TAD OUJMPE
1381 DCA OUJMP /RESET 3 WAY SWITCH
1382 JMP I OUSETP
1383
1384 OCHAR, 0
1385 AND (377 /CALLED WITH CHARACTER IN AC
1386 DCA OUTEMP
1387 JMS I [PASTST
1388 JMP I OCHAR
1389 OUTSW, KRS /TEST FOR ^C WITH FLAG OR
1390 /JMP I OCHAR IF /P,/U OR PASS 2 /M
1391 TAD (-203
1392 SNA CLA
1393 KSF
1394 JMP .+2
1395 JMP I [7600 /SAVE CORE FOR SOME REASON
1396 ISZ OUJMP /BUMP 3 WAY SWITCH
1397 OUJMP, HLT
1398 JMP OCHAR1
1399 JMP OCHAR2
1400 OCHAR3, TAD OUTEMP /PICK UP CHARACTER
1401 CLL RTL
1402 RTL
1403 AND (7400 /3RD WORD MERGED INTO 2 BUFFER WORDS
1404 TAD I OUPOLD
1405 DCA I OUPOLD
1406 TAD OUTEMP
1407 CLL RTR
1408 RTR
1409 RAR
1410 AND (7400
1411 TAD I OUPTR
1412 DCA I OUPTR
1413 TAD OUJMPE
1414 DCA OUJMP /RESET FOR NEW SET OF 3 CHARS
1415 ISZ OUPTR /BUMP BUFFER POINTER
1416
1417 ISZ OUDWCT
1418 JMP OUCOMN
1419 TAD OUCT /YEP
1420 JMS OUTDMP /WRITE IT
1421 JMS OUSETP /RESET OUT BUFFER
1422 JMP I OCHAR
1423 OCHAR2, TAD OUPTR
1424 DCA OUPOLD /FOR LATER
1425 ISZ OUPTR /SECOND WORD GOES HERE
1426 OCHAR1, TAD OUTEMP
1427 DCA I OUPTR
1428 OUCOMN, JMP I OCHAR
1429
1430
1431 OUTEMP, 0 /TEMP STORE
1432 OUPOLD, 0 /HOLDS OLD POINTER
1433 OUPTR, 0
1434 OUJMPE, JMP OUJMP
1435 OUDWCT, 0
1436 OUCT, OUCTL
1437 \f
1438
1439 OOPEN, 0 /OPEN AN OUTPUT FILE;FETCH HANDLER
1440 TAD (OFILE
1441 DCA OUBLK /POINT TO FILE NAME
1442 TAD XOUDEV
1443 DCA OUHNDL /LEAVE ROOM FOR 2 PAGE HANDLER
1444 CDF 10
1445 TAD I [7600 /OUTPUT DEVICE #
1446 CDF 0
1447 CIF 10
1448 JMS I USR /ASSIGN,FETCH HANDLER
1449 1
1450 OUHNDL, HLT /GETS ENTRY POINT OF HANDLER
1451 JMP HIOERR /HANDLER FAILURE
1452 OUENTR, JMS I (P2ADJ
1453 CDF 10
1454 TAD I [7600
1455 CDF 0
1456 CIF 10
1457 JMS I USR
1458 3 /ENTER OUTPUT FILE
1459 OUBLK, OFILE
1460 OUELEN, 0 /RETURNS WITH LENGTH OF HOLE
1461 JMP OEFAIL
1462 MP2, DCA I (OUCCNT
1463 TAD OUBLK /STARTING RECORD
1464 DCA OUREC
1465 JMS OUSETP /SETUP OUTPUT AREA
1466 JMP I OOPEN
1467 XOUDEV, 4001 /MAY BE ALTERED
1468
1469 OEFAIL, CDF 10
1470 TAD I [7600
1471 AND (7760 /GET LENGTH PART
1472 SNA CLA /WAS IT 0?
1473 JMP ERR3 /YEP..HE LOSES
1474 TAD I [7600
1475 AND [17 /TRY WITH INDETERMINATE LENGTH
1476 DCA I [7600
1477 JMP OUENTR
1478
1479 OUTDMP, 0 /WRITE ACTUAL OUTPUT
1480 DCA OUCTLW
1481 JMS I (OUNREC /FIGURE # RECS TO WRITE
1482 TAD I (OUCCNT
1483 DCA I (OUCCNT /UPDATE CLOSE LENGTH
1484 TAD I (OUCCNT
1485 CLL CML
1486 TAD OUELEN /ROOM FOR THIS WRITE?
1487 SNL CLA
1488 JMP ERR4 /HE LOSES
1489 JMS I OUHNDL /NJ WRITE IT
1490 OUCTLW, 0
1491 XOUBUF, OUBUF
1492 OUREC, 0
1493 JMP HIOERR /A HANDLER BADNESS
1494 JMS I (OUNREC
1495 TAD OUREC /UPDATE OUTPUT RECORD #
1496 DCA OUREC
1497 JMP I OUTDMP
1498
1499 ERR4, JMS I [ERROR
1500 FULERR
1501 ERR3, JMS I [ERROR
1502 ENTERR
1503 \f
1504 *2400
1505 OCLOSE, TAD HCREF
1506 SZA CLA /IF NOT LAST PASS
1507 JMP NOVERS /NO NEED FOR VERSION NO.
1508 JMS CRLF
1509 TAD ("V-300^R+VERSN-"0+40
1510 JMS I [DIVIDE
1511 TAD (PATCHL /PATCH NO.-ON PAGE
1512 JMS I [OCHAR
1513 JMS CRLF
1514 JMS FORM /V3C
1515 NOVERS,
1516 TAD HCREF
1517 SNA CLA /IF /M PASS 1
1518 TAD (232
1519 JMS I [OCHAR /NO 232
1520 JMS I [OCHAR
1521 FILLIP, JMS I [OCHAR /FILL WITH 0'S
1522 TAD (177
1523 AND I (OUDWCT
1524 SZA CLA /TO BOUNDARY YET?
1525 JMP FILLIP /NO..KEEP FILLING
1526 TAD I (OUDWCT
1527 TAD (OUCTL&3700
1528 SNA /FULL WRITE LEFT?
1529 JMP NODUMP /YES..BUT ^Z IS OUT
1530 TAD (4000+OUFLD /FORM WRITE
1531 JMS I (OUTDMP
1532 NODUMP, CIF 10
1533 JMS I USR
1534 10 /LOCK IN MONITOR
1535 TAD I (OUREC
1536 CDF 10
1537 DCA I OUSAVX
1538 CDF 0
1539 TAD I (OUELEN
1540 CDF 10
1541 DCA I OUSAVX
1542 TAD LNPRPG
1543 DCA I OUSAVX
1544 TAD OUCCNT
1545 DCA I OUSAVX
1546 TAD I [7600
1547 CDF 0
1548 ISZ HCREF
1549 JMP NOD1
1550 CIF 10
1551 JMS I [200
1552 6
1553 BLK, 0
1554 0
1555 NOD1, CIF 10
1556 JMS I [200
1557 4 /CLOSE OUTPUT FILE
1558 OFILE /POINTER TO FILE NAME
1559 OUCCNT, 0 /CLOSING LENGTH
1560 JMP ERR5 /SORRY
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
1564 JMP ALDONE
1565 CLA IAC /SYS
1566 CDF 0
1567 CIF 10
1568 JMS I [200
1569 4 /DELETE CREFLS.TM
1570 CHANNM
1571 0
1572 CLA
1573 ALDONE, JMP I [7605
1574 HCREF, 0
1575 SLSWH, 0
1576
1577 ERR5, JMS I [ERROR
1578 CLSERR
1579 ERR6, JMS I [ERROR
1580 INPERR
1581
1582
1583 OFILE, ZBLOCK 4 /OUTPUT FILE NAME GOES HERE
1584
1585 FORM, 0 /GENERATE 214 IF NOT TTY
1586 JMS I [PASTST /IF PASS>1, NO FORM FEED
1587 JMP I FORM
1588 TAD TTYSWT
1589 SZA CLA
1590 JMP FORM2
1591 TAD LNPRPG /FILL TO END OF PAGE
1592 SNA /IF 0, GENERATE 8 LINE FEEDS
1593 TAD [-4
1594 DCA COUNT
1595 JMS CRLF
1596 ISZ COUNT
1597 JMP CRLF1 /HA! GENERATE EXTRA LINE FEED!!
1598 TAD [-6
1599 DCA COUNT
1600 TAD ("- /GENERATE ------
1601 JMS I [OCHAR
1602 ISZ COUNT
1603 JMP .-3
1604 TAD [-4
1605 DCA COUNT
1606 FORM3, JMS CRLF
1607 ISZ COUNT
1608 JMP CRLF1
1609 TAD LINES /V3C
1610 NOP
1611 DCA LNPRPG /RESET TO TOP OF PAGE
1612 JMP I FORM
1613
1614 FORM2, CLA CMA
1615 DCA COUNT
1616 CMA
1617 JMP FORM3 /USE [215 TO GENERATE A 214
1618
1619 CRLF, 0 /GENERATE CRRIAGE RET AND LINE FEED
1620 TAD [215
1621 JMS I [OCHAR
1622 CRLF1, TAD [212
1623 JMS I [OCHAR
1624 JMP I CRLF
1625
1626 TTYSWT, 0
1627
1628 \f
1629 *2600
1630 IOPEN, 0
1631 CLA CMA
1632 DCA INCHCT /FORCE READ OF NEW FILE
1633 ISZ INEOF
1634 TAD (7617
1635 DCA INFPTR
1636 JMP I IOPEN
1637
1638 INPTR, INBUF
1639
1640 ICHAR, 0
1641 INCHAR, ISZ INJMP /PACKING SWITCH
1642 ISZ INCHCT /BUFFER EXHAUSTED?
1643 INJMPP, JMP INJMP /NOPE
1644 TAD INEOF /WAS LAST AN EOF?
1645 SNA CLA
1646 JMP INGBUF /NO..GET NEXT INPUT
1647 CDF 10
1648 TAD I INFPTR
1649 CDF 0
1650 SNA CLA /MORE INPUT?
1651 JMP I ICHAR /NO..EOF RETURN
1652
1653 JMS ASHDLR /SET UP STRT RECORD
1654 INGBUF, JMS RDREC /AND READ SOME RECORDS
1655 JMP INCHAR
1656 /THIS IS DONE TO OPTIMIZE THE DECTAPE
1657 /ROCKING. INITIALIZATION DOES THESE
1658 /THE FIRST TIME.
1659
1660
1661 INJMP, JMP . /3 WAY SWITCH
1662 JMP ICHAR1
1663 JMP ICHAR2
1664 ICHAR3, TAD INJMPP
1665 DCA INJMP
1666 TAD I INPTR
1667 AND (7400 /CONTENTS OF BUFFER
1668 CLL RTR
1669 RTR
1670 TAD INCTLW
1671 RTR
1672 RTR /GETS THIRD WORD FROM 1 AND 2
1673 ISZ INPTR /NEXT BUFFER LOC
1674 JMP INCOMN
1675 ICHAR2, TAD I INPTR
1676 AND (7400
1677 DCA INCTLW /TEMP SAVE
1678 ISZ INPTR
1679 ICHAR1, TAD I INPTR
1680 INCOMN, AND (177 /PARITY TEST
1681 SNA /IF 200 CODE..IGNORE IT
1682 JMP INCHAR
1683 TAD [200
1684 TAD (-232 /IS IT ^Z?
1685 SNA
1686 JMP I ICHAR /YES..NOMMORE!!
1687 TAD (232
1688 ISZ ICHAR /SKIP EOF RETURN
1689 DCA CHAR
1690 JMP I ICHAR
1691 INCHCT, 0
1692 INFPTR, 7617
1693 INEOF, 0
1694 INCTR, 0
1695 INHAND, 0
1696
1697 ASHDLR, 0
1698
1699 CDF 10
1700 TAD I INFPTR
1701 AND (7760 /LENGTH PART OF WORD
1702 SZA /0 IMPLIES .GTE. 256
1703 TAD [17
1704 CLL CML RTR
1705 RTR
1706 DCA INCTR
1707 ISZ INFPTR /BUMP TO NEXT
1708 TAD I INFPTR /GET STARTING RECORD
1709 DCA INREC
1710 ISZ INFPTR
1711 DCA INEOF
1712 CDF 0
1713 JMP I ASHDLR
1714 XINREC, 2 /DEFAULT CONDITIONS
1715 XINCL1, 401
1716
1717 RDREC, 0
1718 TAD INCTR
1719 CLL
1720 TAD XINRECS /LINK ON IF OVERFLOW AND LAST READ
1721 SNL
1722 DCA INCTR /UPDATE IF NO OVERFLOW
1723 SZL
1724 ISZ INEOF
1725 CLL CML CMA RTR /CONTROL WORD FROM OVERFLOW
1726 RTR
1727 RTR
1728 TAD XINCL1
1729 DCA INCTLW
1730 CDF 0
1731 JMS I INHAND
1732 INCTLW, 0
1733 INBUFP, INBUF
1734 INREC, 0
1735 JMP INERRX /FATAL OR EOF
1736 INBREC, TAD INREC
1737 TAD XINREC
1738 DCA INREC /UPDATE # READ
1739 TAD INCTLW
1740 AND [7600
1741 CLL RAL
1742 TAD INCTLW
1743 AND [7600
1744 CMA
1745 DCA INCHCT /NEW CHARACTER COUNT
1746 TAD INJMPP
1747 DCA INJMP
1748 TAD INBUFP
1749 DCA INPTR
1750 JMP I RDREC
1751
1752 INERRX, ISZ INEOF /FATAL OR EOF
1753 SMA CLA
1754 JMP INBREC /EOF..NEXT FILE
1755 JMS I [ERROR
1756 INPERR
1757
1758 TTYPRT, 0 /SIMPLE TTY OUTPUT ROUTINE
1759 TLS
1760 TSF
1761 JMP .-1
1762 CLA
1763 JMP I TTYPRT
1764
1765
1766 *3000
1767 HNDERR, "H-300^R+"A-300 /HANDLER FAIL
1768 "N-300^R+"D-300
1769 "L-300^R+"E-300
1770 "R-300^R
1771 "F-300^R+"A-300
1772 "I-300^R+"L-300
1773
1774 SYMERR, "S-300^R+"Y-300
1775 "M-300^R
1776 "O-300^R+"V-300
1777 "E-300^R+"R-300
1778 "F-300^R+"L-300
1779 "O-300^R+"W-300
1780
1781 LPTERR, "D-300^R+"E-300 /DEV LPT BAD
1782 "V-300^R
1783 "L-300^R+"P-300
1784 "T-300^R
1785 "B-300^R+"A-300
1786 "D-300^R
1787
1788 ENTERR, "E-300^R+"N-300
1789 "T-300^R+"E-300
1790 "R-300^R
1791 "F-300^R+"A-300
1792 "I-300^R+"L-300
1793 "E-300^R+"D-300
1794
1795 FULERR, "O-300^R+"U-300
1796 "T-300^R
1797 "D-300^R+"E-300
1798 "V-300^R
1799 "F-300^R+"U-300
1800 "L-300^R+"L-300
1801
1802 CLSERR, "C-300^R+"L-300
1803 "O-300^R+"S-300
1804 "E-300^R
1805 "F-300^R+"A-300
1806 "I-300^R+"L-300
1807 "E-300^R+"D-300
1808
1809 INPERR, "I-300^R+"N-300
1810 "P-300^R+"U-300
1811 "T-300^R
1812 "E-300^R+"R-300
1813 "R-300^R+"O-300
1814 "R-300^R
1815
1816 REFERR, 2664 /2045 REFS
1817 3015
1818 "R-300
1819 "E-300^R+"F-300
1820 "S-300^R
1821 0
1822
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
1826 /BE CALLED _L0100
1827 /IF ASSEMBLED WITH NEW PAL8, LITERAL INCLUDES FIELD
1828 /SO 00377 IS _00377, 10377 IS _10377
1829
1830 LIT2, TAD (2540 /PAGE 0..FIRST NUMBER ALWAYS 0
1831 DCA SYM2 /_L GOES IN SYM1 FOR BOTH
1832 JMS LCHK
1833 ISZ ISYM
1834 ISZ ISYM /POINT TO SYM3 FOR LAST 2 DIGITS
1835 JMP LIT3 /COMMON CODE
1836 LIT1, JMS LCHK
1837 ISZ ISYM /POINT TO SECOND WORD
1838 TAD I XRLIT /FIRST BINARY DIGIT
1839 JMS I [PACK
1840 TAD I XRLIT
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
1844 SZA CLA
1845 JMP LITEX /DON'T DO ANYTHING BUT CLEAR COUNTERS
1846 TAD (LITBUF+1 /NOW PICK UP RELATIVE ADD BIT FROM INSTRUCT.
1847 DCA XRLIT
1848 TAD I XRLIT
1849 AND (1
1850 TAD SYM2
1851 DCA SYM2 /FORMING ADDRESS OF LITERAL!
1852 TAD I XRLIT
1853 JMS I [PACK
1854 TAD I XRLIT
1855 JMS I [PACK /LOAD UP SYM3
1856 TAD ENDFIX /WILL PRINT FIELD WITH LIT IF NEW PAL8
1857 AND (57
1858 TAD [2426
1859 DCA SYM1 /PUT IN _ (NEGATIVE!)
1860 JMS I (REPACK
1861
1862 JMP I XUSSYM /DO THE BOOKKEEPING
1863 LITEX, JMS I (REPACK
1864 JMP I [B
1865 XUSSYM, USSYM /WILL BE CHANGED TO PATCH IF /L
1866 LCHK, 0
1867 TAD MARGIN
1868 DCA XRLIT
1869 TAD I XRLIT
1870 DCA ENDFIX
1871 TAD ENDFIX
1872 TAD (-240
1873 SNA CLA
1874 JMP LITEX
1875 JMP I LCHK
1876
1877 GLIN5, TAD CRCNT
1878 SNA CLA
1879 JMP CROUT /NEED THIS CR
1880 ISZ CRCNT
1881 JMP CROUT /NEED CR AFTER HEADER
1882 JMP I (GETLIN
1883 CROUT, TAD [212
1884 JMS I FPUT
1885 TAD MARGIN
1886 DCA XRLINE
1887 JMP I (GLIN6
1888 CRCNT, 0
1889 CHANNM, FILENAME CREFLS.TM
1890 ENDFIX, 0 /TEMP ALSO
1891 JMS I (DOLOT2
1892 DCA .-1 /ONCE ONLY
1893 TAD SYSM
1894 SNA
1895 JMP I (NDPS1
1896 JMP I ENDFIX
1897 \f *3200
1898 OUNREC, 0 /ESTIMATE # RECS
1899 TAD I XOCTLW
1900 CLL RTL
1901 RTL
1902 RTL /ITS NOT AN ESTIMATE, BUT EXACT!!
1903 AND [17
1904 JMP I OUNREC
1905 XOCTLW, OUCTLW
1906
1907 DIVIDE, 0
1908 DCA DIV45B
1909 DCA DIV45C
1910 JMP DIV45D /START UP HERE
1911
1912 DIV45A, ISZ DIV45C /BUMP THE QUOTIENT
1913 DCA DIV45B /NEW DIVIDEND
1914 DIV45D, TAD DIV45B
1915 TAD (-52 /DIVIDE BY 52
1916 SMA
1917 JMP DIV45A /STILL +; KEEP LOOPING
1918 TAD (52 /REMAINDER IN AC AFTER ADD
1919 JMS I (DIVE /LETTER OR NUMBER?
1920 DCA DIV45B
1921 TAD DIV45C
1922 JMS I (DIVE
1923 JMS I [OCHAR
1924 TAD DIV45B
1925 JMS I [OCHAR
1926 ISZ BUFFER
1927 JMP I DIVIDE
1928
1929
1930 DIV45B, 0
1931 DIV45C, 0
1932
1933 \fGETLIN, 0 /GET A LINE OF INPUT AND STORE
1934 TAD MARGIN /IT AT LINBUF
1935 DCA XRLINE
1936 INLINE, JMS I (ICHAR
1937 JMP EN
1938 TAD RLSKIP /IF RALF HEADER,ELIM 2 LF
1939 SNA CLA
1940 JMP REGULR /NOT RALF
1941 ISZ RLSKIP /CATCH 2ND LINE
1942 JMP INLINE
1943 TAD [7776 /ELIM EXTRA CR AFTER HEADER
1944 DCA I (CRCNT
1945 REGULR, TAD CHAR /LINE FEED TERMINATES THIS ROUTINE
1946 TAD MLF
1947 SNA
1948 JMP INLINE /IGNORE LF'S ON INPUT
1949 TAD [212-215 /LF-CR
1950 SNA CLA
1951 JMP GLIN3
1952 TAD XRLINE
1953 TAD (-375
1954 SMA CLA
1955 JMP .+3
1956 TAD CHAR
1957 JMS I FPUT
1958 TAD CHAR
1959 TAD [-214
1960 SZA CLA
1961 JMP INLINE
1962 GLIN3, TAD [215
1963 JMS I FPUT
1964 GLIN4, JMP I (GLIN5
1965 GLIN6, TAD [200 /TEST FOR ^C
1966 KRS
1967 TAD (-203
1968 SNA CLA
1969 KSF
1970 JMP I GETLIN
1971 JMP I [7605 /FOUND ^C
1972 RLSKIP, 0
1973
1974 ALLOCT, 0
1975 JMS I (DEVCHK
1976 7617 /CHECK INPUT DEVICE
1977 SPA CLA
1978 IAC /2 PAGE HANDLER
1979 DCA BUFCNT
1980 JMS I (DEVCHK
1981 7600 /CHECK SIZE OF OUTPUT DEV HANDLER
1982 SPA CLA
1983 TAD [2 /2 PAGES
1984 TAD BUFCNT
1985 DCA BUFCNT
1986 CLL
1987 TAD BUFCNT
1988 RAR
1989 CLA
1990 SZL CLL /IF 1 OR 3,IN DEV IS 2 PGS
1991 TAD [200
1992 TAD (3601
1993 DCA I (XOUDEV
1994 TAD [-2
1995 TAD BUFCNT
1996 SMA SZA CLA
1997 JMP I ALLOCT /2 2PAGERS IS DEFAULT
1998 TAD (4200 /IF NOT 2 2PAGERS,INBUF AT 4200
1999 DCA I (INBUFP
2000 TAD I (INBUFP
2001 DCA I (INPTR
2002 TAD [3
2003 DCA I (XINREC
2004 TAD (601
2005 DCA I (XINCL1
2006 JMP I ALLOCT
2007 BUFCNT, 0
2008 CLEAR, 0 /ROUTINE TO CLEAN OUT OLD SYMBOL
2009 DCA SYM1
2010 DCA SYM2
2011 DCA SYM3
2012 JMP I CLEAR
2013
2014 EN, JMS DPAT /V3D
2015 JMP I [ENDPAS
2016 \f
2017
2018 /THIS INITIALIZATION CODE IS DESTROYED WHEN DATA IS READ
2019 /INTO THE BUFFER. FOR THAT REASON, CREF IS NOT RESTARTABLE
2020
2021 *4200
2022 ST1, CDF 0
2023 KLUD, CIF 10
2024 JMS I USR
2025 5
2026 1423 /DEFAULT EXTENSION IS .LS
2027 CHAIN, CDF 10
2028 TAD I (7617 /IF NO INPUT, RESTART CD
2029 SNA CLA
2030 JMP ST1
2031 TAD I [7600 /IF NO OUTPUT, GIVE HIM LPT!!
2032 SZA CLA
2033 JMP ST2
2034 CDF 0
2035 CIF 10
2036 JMS I [200
2037 12 /ASSIGN-NO FETCH
2038 1420
2039 DEVS, 2400
2040 0
2041 JMP ERRTWO /DEFAULT DEVICE IS BAD
2042 TAD DEVS
2043 CDF 10
2044 DCA I [7600
2045 ST2, CDF 0
2046 JMS I (SWITCH
2047 CDF 10
2048 TAD I OUSAVX
2049 CDF 0
2050 DCA PASS2
2051 BLUE0, TAD [-4
2052 DCA COUNT
2053 BLUE, CDF 10
2054 TAD I XNAME
2055 CDF 0
2056 DCA I (OFILE
2057 ISZ XNAME
2058 ISZ (OFILE
2059 ISZ COUNT
2060 JMP BLUE
2061 JMS I (ALLOCT
2062 JMS I (OTYPE
2063 AND (770 /CHECK FOR TTY AS OUTPUT (CAN CLA IF DEBUGGING)
2064 DCA I (TTYSWT
2065 TAD I (TTYSWT /IF LPT IS OUTPUT,
2066 SZA CLA /NO INTERNAL FORM FEEDS GENERATED
2067 DCA I (NOFORM
2068
2069
2070
2071 /NOW WE MOVE UP THE PERMANENT AND PSEUDO-OP TABLES.
2072 /THE Y WERE ASSEMBLED IN FIELD 0 TO SAVE DECTAPE MOTION
2073 /WHEN LOADING.
2074 JMS I (FTEST /GET MACHINE SIZE
2075 TAD MAXFLD
2076 CIA
2077 DCA MAXFLD /- NO.FIELDS
2078 CDF 10 /ASSIGN THE INPUT HANDLER
2079 TAD I (7617
2080 CDF 0
2081 CIF 10
2082 JMS I USR
2083 1
2084 INHNDL, INDEVH+1
2085 HLT /YECH!!!
2086 TAD INHNDL
2087 DCA I (INHAND /SETUP ENTRY POINT
2088 JMS I (ASHDLR /SET UP FIRST READ
2089 TAD (7700
2090 DCA USR /SAVE SYMBOL TABLE
2091 TAD I (7746
2092 AND KLUD
2093 TAD [1000 /MARK NOT RESTARTABLE
2094 DCA I (7746 /SAVE CORE BIT
2095 TAD I XRLINE
2096 DCA COUNT /INITIAL LOAD PROVIDES PARAMETERS FOR
2097 /THE SYMBOL TABLE. THIS IS # WORDS TO MOVE
2098 JMS MOVEM
2099 TAD RSWIT
2100 SNA CLA /DETERMINE WHICH PSEUDO-OPS
2101 TAD (PPSEUD-SPSEUD
2102 TAD (SPSEUD-1
2103 DCA XRLINE
2104 TAD I XRLINE
2105 DCA PSEUDO /TABLES INITIALLY HAVE A SHORT HEADER
2106 /WHICH CONTAINS INFORMATION ABOUT THEM
2107 /PSEUDO CONTAINS STARTING # OF FIRST
2108
2109 \f
2110
2111 TAD I XRLINE
2112 DCA PSEUDO+1 /LAST ENTRY #
2113 TAD I XRLINE
2114 DCA COUNT /# ENTRIES TO MOVE
2115 TAD I XRLINE
2116 DCA XRLIT /WHERE THEY GO IN FIELD 1
2117 JMS MOVEM
2118 JMP I (XFIRST /READ FIRST RECORDS
2119
2120
2121 MOVEM, 0
2122 TAD I XRLINE
2123 CDF 10
2124 DCA I XRLIT
2125 CDF 0
2126 ISZ COUNT
2127 JMP .-5
2128 JMP I MOVEM
2129 ERRTWO, JMS I [ERROR /THIS IS AN IMPOSSIBLE ERROR
2130 LPTERR
2131 CHANCK, 0
2132 CLL RTL /CHECK FOR /C+/E
2133 RAL
2134 SNL
2135 JMP I CHANCK //C IS MINIMUM CONDITION
2136 RTR /V3C USE /1 TO MEAN KEEP CREFLS.TM
2137 SNL CLA
2138 CMA /-1 IF NO E (I.E. DO ELIMINATE)
2139 DCA I (SLSWH
2140 JMP I CHANCK
2141 XNAME, 7601
2142 PASS2, 0
2143
2144 PATCHA, TAD (35
2145 DCA USER+1
2146 JMP BLUE0
2147 \f *4400
2148 SWITCH, 0
2149 JMS I (FILEXT
2150 CLA IAC
2151 CDF 10
2152 AND I (7644 /TEST FOR /X
2153 DCA DSWIT
2154 TAD I (7643
2155 CDF 0
2156 JMS I (CHANCK
2157 CDF 10
2158 CLA CLL
2159 TAD I (7644
2160 AND (410 /P OR /U USED?
2161 SNA
2162 JMP ST3
2163 CDF 0
2164 AND [10
2165 SNA CLA
2166 JMP TXONLY /JUST /P
2167 TAD XDOLL
2168 DCA I (DOLL12 /NO SYMBOL TABLE
2169 TXONLY, TAD KILOUT /YES..DISABLE PASS ONE OUTPUT
2170 DCA I [OUTSW
2171 ST3, CLA
2172 CDF 10
2173 TAD I (7644
2174 CDF 0
2175 AND (300 /IF SABR (Q), SET RSWIT AND DSWIT
2176 SNA
2177 JMP HCR1 /PAL8
2178 AND [200 /CHECK FOR RALF
2179 SNA CLA
2180 JMP RALFCD /Y
2181 ISZ RSWIT
2182 ISZ DSWIT
2183 DCA I (SCAN3 /ENABLE CHECK FOR SABR CHARS
2184 HCR1, CLA
2185 CDF 10
2186 TAD I (7644 /CHECK FOR M- MAMMOTH FILE(HCREF)
2187 CDF 0
2188 SMA CLA
2189 JMP I (BLUE0 /NOT LONG FILE
2190 /PUT IN NECESSARY PATCHES
2191 CLL
2192 TAD XPATCH
2193 DCA I (HC1
2194 TAD XPTCH1
2195 DCA I (XUSSYM
2196 CDF 10
2197 TAD I (7645
2198 RAR /CHECK IF PASS1 OR 2 FOR /M
2199 SNL
2200 JMP CHNPS1 /PASS 1
2201 RAL CLL /IT'S PASS 2
2202 DCA I (7645 /RESTORE TBL
2203 CDF 0
2204 CIF 10
2205 JMS I (7700 /RESTORE USR
2206 10
2207 TAD KILOUT
2208 DCA I [OUTSW /NO LIST
2209 TAD XDOLL
2210 DCA I (DOLL12
2211 TAD [7720
2212 DCA I (PATCH1 /ANOTHER PATCH
2213 JMP I SWITCH
2214 CHNPS1, CLL CML RAL
2215 DCA I (7645 /SET /9 SWITCH
2216 CDF 0
2217 CLA CMA
2218 DCA I (HCREF /7777 DURING PASS1
2219 JMS I (CHNSET /LOOKUP CREF.SV
2220 JMP I (PATCHA
2221 XPATCH, PATCH&177+5200
2222 XPTCH1, PATCH
2223 XDOLL, DOLL13&177+5200
2224 RALFCD, TAD [7776 /FOR 2 EXTRA LINE FEEDS
2225 DCA I (RLSKIP
2226 JMP HCR1
2227 KILOUT, OCHAR&177+5600 /JMP I OCHAR
2228
2229
2230 /SUBROUTINE TO DETERMINE CORE SIZE
2231 FTEST, 0
2232 JMS I (MORCOR
2233 COR0, CDF 0
2234 TAD MAXFLD /GET FIELD TO TEST
2235 RTL
2236 RAL
2237 AND COR70
2238 TAD COREX
2239 DCA .+1
2240 COR1, CDF /FIELD TO TEST
2241 TAD I CORLOC
2242 COR2, NOP
2243 DCA COR1
2244 TAD COR2
2245 DCA I CORLOC
2246 COR70, 70
2247 TAD I CORLOC
2248 CORX, 7400
2249 TAD CORX
2250 TAD CORV
2251 SZA CLA
2252 JMP COREX /NON-EXISTENT FIELD
2253 TAD COR1
2254 DCA I CORLOC
2255 ISZ MAXFLD
2256 JMP COR0
2257 COREX, CDF 0
2258 DONCOR, JMP I FTEST
2259 CORLOC, CORX
2260 CORV, 1400
2261 \f\f\f\f
2262 FIELD 0
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.
2266
2267 RAD=52
2268
2269 *4600
2270
2271 SYMTAB, -453 /INITIAL ENTRIES
2272
2273 NOPUNCH
2274 *0
2275 ENPUNCH
2276 ZBLOCK 4 /DUMMY ENTRY..SYMCHK NEEDS IT
2277
2278
2279 "A-300^RAD+"N-300+4000 /AND
2280 "D-300^RAD
2281 ZBLOCK 2
2282
2283 "B-300^RAD+"S-300+4000 /BSW
2284 "W-300^RAD
2285 ZBLOCK 2
2286
2287 "C-300^RAD+"A-300+4000 /CAF
2288 "F-300^RAD
2289 ZBLOCK 2
2290
2291 "C-300^RAD+"D-300+4000 /CDF
2292 "F-300^RAD
2293 ZBLOCK 2
2294
2295 "C-300^RAD+"I-300+4000 /CIA
2296 "A-300^RAD
2297 ZBLOCK 2
2298
2299 "C-300^RAD+"I-300+4000 /CIF
2300 "F-300^RAD
2301 ZBLOCK 2
2302
2303 "C-300^RAD+"L-300+4000 /CLA
2304 "A-300^RAD
2305 ZBLOCK 2
2306
2307 "C-300^RAD+"L-300+4000 /CLL
2308 "L-300^RAD
2309 ZBLOCK 2
2310
2311 "C-300^RAD+"M-300+4000 /CMA
2312 "A-300^RAD
2313 ZBLOCK 2
2314
2315 R=52
2316
2317 "C-300^R+"M-300+4000 /CML
2318 "L-300^R
2319 ZBLOCK 2
2320
2321 "D-300^R+"C-300+4000 /DCA
2322 "A-300^R
2323 ZBLOCK 2
2324 \f "G-300^R+"L-300+4000 /GLK
2325 "K-300^R
2326 ZBLOCK 2
2327
2328 "G-300^R+"T-300+4000 /GTF
2329 "F-300^R
2330 ZBLOCK 2
2331
2332 "H-300^R+"L-300+4000 /HLT
2333 "T-300^R
2334 ZBLOCK 2
2335
2336 "I-300^R+"A-300+4000 /IAC
2337 "C-300^R
2338 ZBLOCK 2
2339
2340 "I-300^R+"O-300+4000 /IOF
2341 "F-300^R
2342 ZBLOCK 2
2343
2344 "I-300^R+"O-300+4000 /ION
2345 "N-300^R
2346 ZBLOCK 2
2347
2348 "I-300^R+"O-300+4000 /IOT
2349 "T-300^R
2350 ZBLOCK 2
2351
2352 "I-300^R+"S-300+4000 /ISZ
2353 "Z-300^R
2354 ZBLOCK 2
2355
2356 "J-300^R+"M-300+4000 /JMP
2357 "P-300^R
2358 ZBLOCK 2
2359
2360 "J-300^R+"M-300+4000 /JMS
2361 "S-300^R
2362 ZBLOCK 2
2363
2364 "K-300^R+"C-300+4000 /KCC
2365 "C-300^R
2366 ZBLOCK 2
2367
2368 "K-300^R+"C-300+4000 /KCF
2369 "F-300^R
2370 ZBLOCK 2
2371
2372 "K-300^R+"I-300+4000 /KIE
2373 "E-300^R
2374 ZBLOCK 2
2375
2376 "K-300^R+"R-300+4000 /KRB
2377 "B-300^R
2378 ZBLOCK 2
2379
2380 "K-300^R+"R-300+4000 /KRS
2381 "S-300^R
2382 ZBLOCK 2
2383
2384 "K-300^R+"S-300+4000 /KSF
2385 "F-300^R
2386 ZBLOCK 2
2387
2388 "L-300^R+"A-300+4000 /LAS
2389 "S-300^R
2390 ZBLOCK 2
2391
2392 "M-300^R+"Q-300+4000 /MQA
2393 "A-300^R
2394 ZBLOCK 2
2395
2396 "M-300^R+"Q-300+4000 /MQL
2397 "L-300^R
2398 ZBLOCK 2
2399
2400 "N-300^R+"O-300+4000 /NOP
2401 "P-300^R
2402 ZBLOCK 2
2403
2404 "O-300^R+"P-300+4000 /OPR
2405 "R-300^R
2406 ZBLOCK 2
2407
2408 "O-300^R+"S-300+4000 /OSR
2409 "R-300^R
2410 ZBLOCK 2
2411
2412 "P-300^R+"C-300+4000 /PCE
2413 "E-300^R
2414 ZBLOCK 2
2415
2416 "P-300^R+"C-300+4000 /PCF
2417 "F-300^R
2418 ZBLOCK 2
2419
2420 "P-300^R+"L-300+4000 /PLS
2421 "S-300^R
2422 ZBLOCK 2
2423
2424 "P-300^R+"P-300+4000 /PPC
2425 "C-300^R
2426 ZBLOCK 2
2427
2428 "P-300^R+"S-300+4000 /PSF
2429 "F-300^R
2430 ZBLOCK 2
2431
2432 "R-300^R+"A-300+4000 /RAL
2433 "L-300^R
2434 ZBLOCK 2
2435
2436 "R-300^R+"A-300+4000 /RAR
2437 "R-300^R
2438 ZBLOCK 2
2439
2440 "R-300^R+"D-300+4000 /RDF
2441 "F-300^R
2442 ZBLOCK 2
2443
2444 "R-300^R+"F-300+4000 /RFC
2445 "C-300^R
2446 ZBLOCK 2
2447
2448 "R-300^R+"I-300+4000 /RIB
2449 "B-300^R
2450 ZBLOCK 2
2451
2452 "R-300^R+"I-300+4000 /RIF
2453 "F-300^R
2454 ZBLOCK 2
2455
2456 "R-300^R+"M-300+4000 /RMF
2457 "F-300^R
2458 ZBLOCK 2
2459
2460 "R-300^R+"P-300+4000 /RPE
2461 "E-300^R
2462 ZBLOCK 2
2463
2464 "R-300^R+"R-300+4000 /RRB
2465 "B-300^R
2466 ZBLOCK 2
2467
2468 "R-300^R+"S-300+4000 /RSF
2469 "F-300^R
2470 ZBLOCK 2
2471
2472 "R-300^R+"T-300+4000 /RTF
2473 "F-300^R
2474 ZBLOCK 2
2475
2476 "R-300^R+"T-300+4000 /RTL
2477 "L-300^R
2478 ZBLOCK 2
2479
2480 "R-300^R+"T-300+4000 /RTR
2481 "R-300^R
2482 ZBLOCK 2
2483
2484 "S-300^R+"G-300+4000 /SGT
2485 "T-300^R
2486 ZBLOCK 2
2487
2488 "S-300^R+"K-300+4000 /SKON
2489 "O-300^R+"N-300
2490 ZBLOCK 2
2491
2492 "S-300^R+"K-300+4000 /SKP
2493 "P-300^R
2494 ZBLOCK 2
2495
2496 "S-300^R+"M-300+4000 /SMA
2497 "A-300^R
2498 ZBLOCK 2
2499
2500 "S-300^R+"N-300+4000 /SNA
2501 "A-300^R
2502 ZBLOCK 2
2503
2504 "S-300^R+"N-300+4000 /SNL
2505 "L-300^R
2506 ZBLOCK 2
2507
2508 "S-300^R+"P-300+4000 /SPA
2509 "A-300^R
2510 ZBLOCK 2
2511
2512 "S-300^R+"R-300+4000 /SRQ
2513 "Q-300^R
2514 ZBLOCK 2
2515
2516 "S-300^R+"T-300+4000 /STA
2517 "A-300^R
2518 ZBLOCK 2
2519
2520 "S-300^R+"T-300+4000 /STL
2521 "L-300^R
2522 ZBLOCK 2
2523
2524 "S-300^R+"W-300+4000 /SWP
2525 "P-300^R
2526 ZBLOCK 2
2527 \f
2528 "S-300^R+"Z-300+4000 /SZA
2529 "A-300^R
2530 ZBLOCK 2
2531
2532 "S-300^R+"Z-300+4000 /SZL
2533 "L-300^R
2534 ZBLOCK 2
2535
2536 "T-300^R+"A-300+4000 /TAD
2537 "D-300^R
2538 ZBLOCK 2
2539
2540 "T-300^R+"C-300+4000 /TCF
2541 "F-300^R
2542 ZBLOCK 2
2543
2544 "T-300^R+"F-300+4000 /TFL
2545 "L-300^R
2546 ZBLOCK 2
2547
2548 "T-300^R+"L-300+4000 /TLS
2549 "S-300^R
2550 ZBLOCK 2
2551
2552 "T-300^R+"P-300+4000 /TPC
2553 "C-300^R
2554 ZBLOCK 2
2555
2556 "T-300^R+"S-300+4000 /TSF
2557 "F-300^R
2558 ZBLOCK 2
2559
2560 "T-300^R+"S-300+4000 /TSK
2561 "K-300^R
2562 ZBLOCK 2
2563 -1
2564 -1
2565 -1
2566 -1 /DUMMY LOW ENTRY
2567
2568 \f
2569 /PSEUDO OP TABLES. ENTRIES ARE SAME FORMAT AS PAL8
2570 /SYMBOLS.
2571
2572 *.+SYMTAB
2573
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
2578
2579 NOPUNCH
2580 *7430
2581 ENPUNCH
2582
2583 ZBLOCK 4
2584
2585
2586 "A-300^R+"B-300 /ABSYM
2587 "S-300^R+"Y-300
2588 "M-300^R
2589 B /RETURN POINT
2590
2591 "A-300^R+"R-300 /ARG
2592 "G-300^R
2593 0
2594 B
2595
2596 "B-300^R+"L-300 /BLOCK
2597 "O-300^R+"C-300
2598 "K-300^R
2599 B
2600
2601 "C-300^R+"A-300 /CALL
2602 "L-300^R+"L-300
2603 0
2604 B
2605
2606 "C-300^R+"O-300 /COMMON
2607 "M-300^R+"M-300
2608 "O-300^R+"N-300
2609 B
2610
2611 "C-300^R+"P-300 /CPAGE
2612 "A-300^R+"G-300
2613 "E-300^R
2614 B
2615
2616 "D-300^R+"E-300 /DECIM
2617 "C-300^R+"I-300
2618 "M-300^R
2619 B
2620
2621 "D-300^R+"U-300 /DUMMY
2622 "M-300^R+"M-300
2623 "Y-300^R
2624 B
2625
2626 "E-300^R+"A-300 /EAP
2627 "P-300^R
2628 0
2629 B
2630
2631 "E-300^R+"N-300 /END
2632 "D-300^R
2633 0
2634 EPASS, DOLL1 /BECOMES ENDPAS
2635
2636 "E-300^R+"N-300 /ENTRY
2637 "T-300^R+"R-300
2638 "Y-300^R
2639 B
2640
2641 "F-300^R+"O-300 /FORTR
2642 "R-300^R+"T-300
2643 "R-300^R
2644 B
2645
2646 "I-300^R
2647 0
2648 0
2649 B /I
2650
2651 "I-300^R+"F-300 /IF
2652 0
2653 0
2654 B
2655
2656 "I-300^R+"N-300 /INC
2657 "C-300^R
2658 0
2659 B
2660
2661 "L-300^R+"A-300 /LAP
2662 "P-300^R
2663 0
2664 B
2665
2666 "O-300^R+"C-300 /OCTAL
2667 "T-300^R+"A-300
2668 "L-300^R
2669 B
2670
2671 "O-300^R+"P-300 /OPDEF
2672 "D-300^R+"E-300
2673 "F-300^R
2674 FXR2, FXMR
2675
2676 "P-300^R+"A-300 /PAGE
2677 "G-300^R+"E-300
2678 0
2679 B
2680
2681 "P-300^R+"A-300 /PAUSE
2682 "U-300^R+"S-300
2683 "E-300^R
2684 B
2685
2686 "R-300^R+"E-300 /REORG
2687 "O-300^R+"R-300
2688 "G-300^R
2689 B
2690
2691 "R-300^R+"E-300 /RETRN
2692 "T-300^R+"R-300
2693 "N-300^R
2694 B
2695
2696 "S-300^R+"K-300 /SKPDF
2697 "P-300^R+"D-300
2698 "F-300^R
2699 FXR3, FXMR
2700
2701 "T-300^R+"E-300 /TEXT
2702 "X-300^R+"T-300
2703 0
2704 TXT
2705
2706 -1
2707 -1
2708 -1
2709 -1
2710
2711 \f
2712
2713 /PAL8 PSEUDOS. SAME FORMAT AS OTHERS
2714
2715 *5424
2716 ENPUNCH
2717
2718 PPSEUD, 1706
2719 1737
2720 -150
2721 7427
2722
2723 NOPUNCH
2724 *7430
2725 ENPUNCH
2726
2727 ZBLOCK 4
2728
2729
2730 "D-300^R+"E-300 /DECIMAL
2731 "C-300^R+"I-300
2732 "M-300^R+"A-300
2733 B
2734
2735 "D-300^R+"E-300 /DEVICE
2736 "V-300^R+"I-300
2737 "C-300^R+"E-300
2738 B
2739
2740 "D-300^R+"T-300 /DTORG
2741 "O-300^R+"R-300
2742 "G-300^R
2743 B
2744
2745 "E-300^R+"J-300 /EJECT
2746 "E-300^R+"C-300
2747 "T-300^R
2748 NOTBIN /SKIP ANY MORE TEXT
2749
2750 "E-300^R+"N-300 /ENPUNCH
2751 "P-300^R+"U-300
2752 "N-300^R+"C-300
2753 B
2754
2755 "E-300^R+"X-300 /EXPUNGE
2756 "P-300^R+"U-300
2757 "N-300^R+"G-300
2758 XPJ, XPUNJ
2759
2760 "F-300^R+"I-300 /FIELD
2761 "E-300^R+"L-300
2762 "D-300^R
2763 B
2764
2765 "F-300^R+"I-300 /FILENAME
2766 "L-300^R+"E-300
2767 "N-300^R+"A-300
2768 B
2769
2770 "F-300^R+"I-300 /FIXMRI
2771 "X-300^R+"M-300
2772 "R-300^R+"I-300
2773 FXR, FXMR
2774
2775 "F-300^R+"I-300 /FIXTAB
2776 "X-300^R+"T-300
2777 "A-300^R+"B-300
2778 FXT, FXTAB
2779
2780 "I-300^R /I
2781 ZBLOCK 2
2782 B
2783
2784 "I-300^R+"F-300 /IFDEF
2785 "D-300^R+"E-300
2786 "F-300^R
2787 B
2788
2789 "I-300^R+"F-300 /IFNDEF
2790 "N-300^R+"D-300
2791 "E-300^R+"F-300
2792 B
2793
2794 "I-300^R+"F-300 /IFNZRO
2795 "N-300^R+"Z-300
2796 "R-300^R+"O-300
2797 B
2798
2799 "I-300^R+"F-300 /IFZERO
2800 "Z-300^R+"E-300
2801 "R-300^R+"O-300
2802 B
2803
2804 "N-300^R+"O-300 /NOPUNCH
2805 "P-300^R+"U-300
2806 "N-300^R+"C-300
2807 B
2808
2809 "O-300^R+"C-300 /OCTAL
2810 "T-300^R+"A-300
2811 "L-300^R
2812 B
2813
2814 "P-300^R+"A-300 /PAGE
2815 "G-300^R+"E-300
2816 0
2817 B
2818
2819 "P-300^R+"A-300 /PAUSE
2820 "U-300^R+"S-300
2821 "E-300^R
2822 B
2823
2824 "R-300^R+"L-300 /RELOC
2825 "L-300^R+"O-300
2826 "C-300^R
2827 B
2828
2829 "T-300^R+"E-300 /TEXT
2830 "X-300^R+"T-300
2831 0
2832 TXT
2833
2834 "X-300^R+"L-300 /XLIST
2835 "I-300^R+"S-300
2836 "T-300^R
2837 B
2838
2839 "Z-300^R /Z
2840 ZBLOCK 2
2841 B
2842
2843 "Z-300^R+"B-300 /ZBLOCK
2844 "L-300^R+"O-300
2845 "C-300^R+"K-300
2846 B
2847
2848 -1
2849 -1
2850 -1
2851 -1
2852
2853
2854
2855 \f *5600
2856 /THIS CODE IS EXECUTED DURING PASS ONE ONLY. LATER PASSES
2857 /USE THIS AREA TO BUILD A REFERENCE TABLE.
2858
2859
2860 HEADER, 0 /HEADER SWITCHES FPUT TO JMS I [OCHAR
2861 TAD CPCHIT
2862 DCA FPUT /ADDRESS OF PUNCH ROUTINE
2863 JMS I CGTLIN /CALL GETLIN
2864 TAD CSTRIT /RESTORE FPUT
2865 DCA FPUT
2866 JMP I HEADER
2867 CPCHIT, PNCHIT
2868 CGTLIN, GETLIN
2869 CSTRIT, STORIT
2870
2871 PNCHIT, 0
2872 JMS I COCHAR
2873 JMP I PNCHIT
2874
2875 STORIT, 0
2876 DCA I XRLINE
2877 JMP I STORIT
2878 COCHAR, OCHAR
2879
2880 DOLL1, TAD (ENDPAS
2881 DCA DOLLAR
2882 JMS DPAT
2883 DOLL12, TAD (KRS /BECOMES JMP .+2 IF /M PASS 2 OR /U
2884 DCA I (OUTSW /RE ENABLE OUTPUT
2885 DOLL13, CDF 10
2886 TAD RSWIT
2887 SNA CLA
2888 JMP DOLL2 /PAL8 PSEUDOS
2889 TAD (B
2890 DCA I (FXR2
2891 TAD (B
2892 DCA I (FXR3
2893 TAD (ENDPAS
2894 DCA I (EPASS /END PSEUDO NOW TO ENDPAS
2895 JMP DOLOUT
2896 DOLL2, TAD (B
2897 DCA I (XPJ
2898 TAD (B
2899 DCA I (FXR
2900 TAD (B
2901 DCA I (FXT
2902 DOLOUT, CDF 0
2903 JMS DOLOT2
2904 JMP I (NOTBIN
2905 FUDGE, NOP
2906
2907
2908 XPUNJ, DCA COUNT
2909 CLA CMA
2910 TAD USER+1 /SKIP LAST ENTRY (7777)
2911 CLL RTL
2912 XPUNJ3, DCA BUFFER /POINTER INTO SYMBOLS
2913 CDF 10
2914 TAD I BUFFER
2915 TAD (5336 /IS THIS A LITERAL?
2916 SNA CLA
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
2920 CMA
2921 DCA SAVE
2922 TAD (3
2923 TAD BUFFER /SETTING UP TO DO TRANSFER. IF COUNT=0
2924 DCA XRSYM1 /ONLY THE 7777 GETS TRANSFERRED
2925 TAD (3
2926 DCA XRSYM2
2927 TAD I XRSYM1
2928 DCA I XRSYM2
2929 ISZ SAVE /ALL COMPLETED?
2930 JMP .-3
2931 TAD COUNT
2932 IAC /INCLUDE 7777 ENTRY!
2933 DCA USER+1
2934 CDF 0
2935 JMP I (B
2936 XPUNJ1, TAD (-4
2937 TAD BUFFER
2938 ISZ COUNT
2939 JMP XPUNJ3
2940
2941 XFIRST, JMS I (OOPEN
2942 JMP I (FIRST+1
2943
2944 DOLOT2, 0
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
2949 JMP I DOLOT2
2950 TAD USER+1
2951 CLL RTL
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
2956 DCA I (FUJ1
2957 JMP I DOLOT2
2958
2959 CHNSET, 0
2960 CLA IAC /SYS DEV ONLY
2961 CIF 10
2962 JMS I (200
2963 2 /LOOKUP
2964 STBLK, CREFNM /GET CREF STARTING BLK
2965 0
2966 JMP I (ERR6
2967 TAD STBLK
2968 DCA I (BLK
2969 JMP I CHNSET
2970 CREFNM, FILENAME CREF.SV
2971 \f PAGE
2972
2973 FXMR, TAD I XRLINE /SHOULD CONTAIN FIRST CHAR IN INSTR.
2974 DCA CHAR
2975 JMS I (CHECK /CHECK IT
2976 301
2977 -332
2978 JMP .+4 /NOPE;A NUMBER MAYBE?
2979 FX2, TAD CHAR
2980 JMS I (PACK
2981 JMP FXMR
2982 JMS I (CHECK
2983 260
2984 -271 /CHECK FOR DIGIT 0-9
2985 SKP /NOPE. IF THERE IS A SYMBOL, THIS IS TERMINATOR
2986 JMP FX2
2987 JMS I (REPACK
2988 TAD SYM1
2989 SNA CLA
2990 JMP FXMR
2991 CDF 10
2992 TAD I (7644 /M RULES FOR FIXMRI TOO
2993 CDF 0
2994 SMA CLA
2995 JMP FXNTR /NO M
2996 TAD I (PATCH1
2997 DCA PATCH2 /APPROPRIATE SWITCH
2998 TAD SYM1
2999 RTL
3000 PATCH2, HLT /SPA SZA OR SMA SNL + CLA
3001 JMP I (B
3002 FXNTR, JMS I (SYMCHK
3003 USER
3004 JMS I (ENTRY /ENTER AS USER SYMBOL
3005 JMS I (BUMP
3006 JMP I (B
3007 FXTAB, CLA CMA /DON'T INCLUDE 7777 ENTRY
3008 TAD USER+1
3009 CIA
3010 DCA COUNT /# ENTRIES TO EXAMINE
3011 DCA SAVE
3012 FXTB2, TAD (4
3013 TAD SAVE
3014 DCA SAVE
3015 FXTB9, CDF 10
3016 TAD I SAVE /STOP AS SOON AS LITERAL FOUND
3017 TAD (5336
3018 SNA CLA
3019 JMP FXTB3
3020 TAD I SAVE /IF ALREADY NEG. ITS A PERM SYMBOL
3021 SMA
3022 TAD (4000 /MAKE IT PERMANENT
3023 DCA I SAVE
3024 ISZ COUNT
3025 TAD (3
3026 TAD SAVE
3027 DCA SAVE
3028 DCA I SAVE
3029 ISZ SAVE
3030 JMP FXTB9 /LOOP FOR DURATION
3031 FXTB3, CDF 0
3032 JMP I (B
3033
3034 DEVCHK, 0
3035 TAD I DEVCHK
3036 DCA T2 /SAVE TBL START
3037 ISZ DEVCHK
3038 CDF 10
3039 TAD I T2 /HANDLER NUMBER
3040 AND (17
3041 DCA T2
3042 CLA CMA
3043 TAD I (37 /TBL LOCN IN 10037
3044 TAD T2
3045 DCA T2
3046 TAD I T2
3047 CDF 0
3048 JMP I DEVCHK
3049 T2, 0
3050 /THAT'S ALL FOLKS!!
3051 $$$$$$$$$$$$$$$$$$
3052 \f