A large commit.
[pdp8.git] / sw / os8 / v3d / sources / extensions / dectapes / dectape3 / teco.pa
CommitLineData
81e70d48
PH
1/10 OS/8 TECO VERSION 5
2/
3/
4/
5/
6/
7/
8/
9/
10/
11/COPYRIGHT (C) 1974,1975,1976,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\f/BROUGHT TO YOU BY: RUSS HAMM, O.M.S.I., AND RICHARD LARY (IN THAT ORDER)
46/WITH ASSISTANCE FROM MARIO DENOBILI OF THE P?S
47/PATCHES INCORPORATED BY S.R. ON 5-AUGUST-75 FOR OS/8 V3C:
48
49/1. UPDATED VERSION # TO V4
50/2. INCORPORATED PATCHES #S 1 & 2 (V302 AND V303)
51/ PREVENTS \ FROM GOING OUTSIDE OF BUFFER
52/ RESETS CFLAG TO PREVENT ARGUMENT ERROR EVERY 4096 TIMES IN LOOP
53
54/ CHANGES FOR V5: -S.R.-
55
56/3. ADDED OVERLAYS
57/4. EXPANDED ERROR MESSAGES
58/5. DOCUMENTED CORE LAYOUT
59/6. ADDED "T, "S, "F, "U, AND "R
60/7. FIXED EG BUG
61/8. MADE DEFAULT ITERATION COUNT TRULY INFINITE
62/9. ADDED N^T
63/10. ADDED :=
64/11. ADDED SOME SAFETY ERROR MESSAGES
65/ (I) ERROR IF Y HAS A NUMERIC ARGUMENT
66/ (II) ERROR IF TWO ARGUMENTS ARE SPECIFIED TO D
67/12. REMOVE ^R (OBSOLETE COMMAND)
68/13. REMOVE "A AND "B (AFTER AND BEFORE)
69/14. ADDED 13-BIT ARITHMETIC
70/15. MADE = AND \ GIVE SIGNED RESULTS (DECIMAL ONLY)
71/16. ALLOW 13-BIT NUMERIC Q-REGISTERS.
72/ THIS IS ACCOMPLISHED BY RESERVING THE HIGH ORDER BIT
73/ OF THE LENGTH WORD. STRING PORTION OF Q-REGISTER
74/ NOW RESTRICTED TO 2047 CHARACTERS. IT GETS CHECKED BY
75/ ^U AND X. BELL RINGS WITHIN 12 CHARACTERS OF FILLING
76/ UP COMMAND STRING Q-REGISTER.
77/17. STORED LINK AS LOW ORDER BIT IN NLINK IN CASE WE EVER
78/ WANT TO GO TO 24-BIT ARITHMETIC.
79/18. ERROR ON A,B,C
80/19. P DOESN'T CREATE FORM FEEDS
81/20. ALLOW @ MODIFIER WITH ER, EW, EB.
82/21. EK
83/22. ^S FREEZE
84/23. EGTEXT$
85/24. GOT RID OF F_
86/25. F IS ILLEGAL IF NOT FOLLOWED BY S OR N
87/26. W IS NOW AN ILLEGAL COMMAND (EXCEPT ON -12)
88/27. ADDED :G
89/28. Y AND _ GIVE ERRORS IF DATA IS GOING TO BE LOST
90/ (IF OUTPUT FILE IS OPEN AND BUFFER IS NOT EMPTY)
91/29. CASE FLAGGING IMPLEMENTED
92/30. "< AND "> ARE SYNONYMOUS WITH "L AND "G
93/31. ^G<SPACE> AND ^G*
94/32. SCOPE RUBOUTS
95/33. == NOW PRINTS NUMBER IN OCTAL
96/34. EUFLAG AND ETFLAG IMPLEMENTED
97/35. CASE FLAGGING WORKS
98/36. IMAGE MODE (ET BIT 11) APPLIES TO T, ^A, AND N^T
99/ IT DOES NOT APPLY TO :G
100/37. ERROR IF TRY TO DO AN EB TO A .BK FILE (IT DOES AN ER)
101/38. VT AND FF ARE NOW LINE TERMINATORS
102/39. BELL ECHOES AS ^G AS WELL AS RINGING BELL
103/40. ^K IS AN ERROR
104/41. REMOVED ^Z COMMAND
105/42. CHANGED ^V TO EO
106/43. CHANGED ^W TO W
107/44. MEMORY RESIDENT OVERLAYS IF MORE THAN 12K
108/45. LONG FORM ERROR MESSAGES ON 1EH
109/46. ET FLAG 8'S BIT AFFECTS ECHOING OF ^T
110/47. NEGATIVE OR 0 ITERATION SKIPS
111/48. CTRL/N
112/49. CTRL/C TRAP
113
114/KNOWN BUGS
115/1. LARGE T OR X AND ONLY 1 BLOCK LEFT IN OUT DEV
116/2. ^S DOESN'T KEEP SCREEN ON
117/3. FIX BATCH INTERRACTION
118/4. MAKE VT AND FF SIMULATION INDEPENDENT OF TAB
119
120 DECIMAL
121VERSN= 5 / VERSION NUMBER - CHANGE WITH EVERY EDIT
122 OCTAL / LAST EDIT 12-FEB-76
123\fIN= 6200 /INPUT BUFFER AT 06200
124OUT= 5200 /OUTPUT BUFFER AT 05200
125ZMAX= 7640 /MAX 4000[10] CHARACTERS IN TEXT BUFFER
126QMAX= 3720 /MAX 2000[10] Q-REGISTER CHARS IN 8K
127Q12MAX= 5600 /MAX 2944[10] Q-REGISTER CHARS IN 12K
128CHNSTR= 46 /38 CHARACTER STRING PASSED ON CHAIN
129
130TWO= CLA CLL CML RTL
131MTWO= CLA CLL CMA RAL
132MTHREE= CLA CLL CMA RTL
133AC3777= CLL STA RAR
134SCPBIT= 7726
135\f/THINGS WE WOULD LIKE TO ADD:
136
137/:ER
138/:EB
139/NV
140/@^A
141/FR
142/-S
143/::S
144/^EQ
145/M,NS
146/[Q
147/]Q
148/NON-EXACT SEARCH MODE
149/*N
150/ERFILESPEC/S FOR SUPERTECO
151/^N
152/CHECK FOR $ ON NI$
153/CHECK INTO SEARCHES IN ITERATIONS
154/ERR MSG ON EA, EP
155/NV=(1-N)TNT
156/^C TRAP
157/:X
158
159/THINGS FOR -11:
160/^R
161/3EH
162/M,ND
163/ET BIT 15 SHOULD BE LOWER
164/ECHO OF NULL
165\f/*****************************************
166/ TECO ERROR MESSAGES:
167/*****************************************
168
169/ TECO ERROR MESSAGES CONSIST OF A QUESTION MARK AND THREE LETTERS
170/ TYPING "?" IMMEDIATELY AFTER AN ERROR MESSAGE PRINTOUT PRINTS
171/ THE CURRENT COMMAND LINE UP TO THE ERROR CHARACTER.
172
173/1 ?ILL ILLEGAL COMMAND
174/2 ?UTC INCOMPLETE COMMAND (PDL NOT EMPTY AT END OF COMMAND STRING)
175/3 ?IQN NON-ALPHANUMERIC Q-REGISTER NAME
176/4 ?PDO PUSHDOWN OVERFLOW (MACROS & ITERATIONS NESTED TOO DEEPLY)
177/5 ?MEM TEXT BUFFER OVERFLOW
178/6 ?STL SEARCH STRING TOO LARGE ( >31 CHARS)
179/7 ?ARG NUMBER MISSING BEFORE COMMA
180/ OR TWO ARGUMENTS SPECIFIED TO D
181/ OR 3 NUMERIC ARGUMENTS
182/8 ?IFN ILLEGAL FILE NAME IN "ER","EW" OR "EB" COMMAND
183/9 ?SNI SEMICOLON ON COMMAND LEVEL
184/10 ?BNI ITERATION CLOSE (>) WITHOUT MATCHING OPEN (<)
185/11 ?POP ATTEMPT TO MOVE POINTER OUTSIDE OF TEXT BUFFER
186/12 ?QMO Q-REGISTER STORAGE OVERFLOW
187/13 ?UTM INCOMPLETE COMMAND (PDL NOT EMPTY AT END OF MACRO)
188/14 ?OUT OUTPUT FILE TOO BIG OR OUTPUT PARITY ERROR
189/15 ?INP PARITY ERROR ON INPUT FILE
190/16 ?FER FILE ERROR: CAN MEAN EITHER
191/ A) INPUT FILE NOT FOUND ON "ER" COMMAND
192/ B) CANNOT ENTER OUTPUT FILE ON "EW" OR "EB" COMMAND
193/ C) DEVICE SPECIFIED FOR FILE DOES NOT EXIST
194/ D) "EB" COMMAND GIVEN ON NON-FILE-STRUCTURED DEVICE
195/17 ?FUL OUTPUT COMMAND WOULD HAVE OVERFLOWED OUTPUT FILE
196/ [PANIC MODE]
197/18 ?NAY NUMERIC ARGUMENT SPECIFIED WITH Y COMMAND
198/19 ?IEC E FOLLOWED BY AN ILLEGAL CHARACTER
199/20 ?IQC " FOLLOWED BY AN ILLEGAL CHARACTER
200/21 ?NAE NO NUMERIC ARGUMENT TO THE LEFT OF AN =
201/22 ?NAU NO NUMERIC ARGUMENT TO THE LEFT OF A U
202/23 ?NAQ NO NUMERIC ARGUMENT TO THE LEFT OF A "
203/24 ?SRH FAILING SEARCH AT COMMAND LEVEL
204/25 ?NAP NEGATIVE OR ZERO ARGUMENT TO P
205/26 ?NAC NEGATIVE ARGUMENT TO COMMA
206/27 ?NYI CASE SUPPORT NOT IMPL (USE W FOR WATCH)
207/28 ?
208/29 ?NAS NEGATIVE OR ZERO ARGUMENT WITH A SEARCH
209/30 ?WLO WRITE LOCKED SYSTEM DEVICE
210/31 ?IFC F FOLLOWED BY AN ILLEGAL CHARACTER
211/32 ?YCA Y (OR _) COMMAND ABORTED BECAUSE DATA WOULD BE LOST
212/33 ?CCL CCL NOT FOUND OR EG ARGUMENT TOO LONG
213/34 ?XAB EXECUTION ABORTED BY ^C
214/35 ?NYI CASE SUPPORT NOT IMPL (USE EO FOR VERSION)
215/36 ?NFO ATTEMPT TO OUTPUT WITHOUT OPENING AN OUTPUT FILE
216\f/ CORE LAYOUT AND OVERLAY STRUCTURE
217
218/ BUFFER STRUCTURE:
219
220/BUFFER 8K VERSION 12K VERSION
221
222/INPUT BUFFER 06200-07200 25600-27600
223/OUTPUT BUFFER 05200-06200 05200-07200
224/Q-REG STORAGE OVER TEXT BFR 20000-25600
225
226/ HANDLER LOCATIONS:
227
228/HANDLER PDP-8 VERSION PDP-12 VERSION
229
230/INPUT HANDLER 7200-7600 7200-7400
231/OUTPUT HANDLER 4000-4400 7400-7600
232/SIZE OF HNDLR 2-PAGES 1-PAGE
233/DISPLAY CODE NONE 4000-4400
234
235/ OVERLAY STRUCTURE
236
237/ALL OVERLAYS ARE TWO PAGES LONG AND RESIDE IN CORE
238/AT LOCATIONS 3200-3600 WHEN RUNNING. THE I-OVERLAY
239/INITIALLY RESIDES IN THESE LOCATIONS.
240
241/OVERLAY BLOCK INITIAL LOCATION CONTENTS
242
243/ I-OVERLAY 40 3200-3600 ER,EW,EB
244/ Q-OVERLAY 41 5600-6200 ", O, SKPSET
245/ E-OVERLAY 42 6200-6600 ERROR MESSAGE PROCESSOR
246/ X-OVERLAY 43 6600-7200 EX,EC,EG,EK,EF (EA,EI,EN,EP)
247/ F-OVERLAY 44 7200-7600 ED,EH,EO,ES,ET,EU (EV)
248
249 IOVRLC=40
250 QOVRLC=41
251 EOVRLC=42
252 XOVRLC=43
253 FOVRLC=44
254
255 IOVRLY=3200
256 QOVRLY=3201
257 EOVRLY=3202
258 XOVRLY=3203
259 FOVRLY=3204
260
261/EACH OVERLAY IS ASSIGNED A LOCATION AT THE BEGINNING OF PAGE 3200.
262/IF THIS LOCATION IS 0 (AS IT ALWAYS IS), THEN THAT OVERLAY IS NOT
263/IN CORE. IF IT IS NOT 0, THEN THIS LOCATION CONTAINS THE
264/BLOCK NUMBER TO READ IN THAT OVERLAY.
265/THUS EACH OVERLAY HAS POINTERS TO ALL THE OTHER OVERLAYS.
266\f MEMLOC=2000
267
268/IN 16K MACHINES, FIELD 3 IS USED TO HOLD OVERLAYS
269
270/NAME BLOCK MEMORY
271
272/I 40 2000
273/Q 41 2400
274/E 42 3000
275/X 43 3400
276/F 44 4000
277
278
279/INITIAL MEMORY LAYOUT
280
281/0000-3177 TECO
282/3200-3577 OVERLAY AREA (INITIALLY I-OVERLAY)
283/3600-3777 TECO
284/4000-4377 PDP-12 DISPLAY ROUTINE
285/4400-5177 TECO
286/5200-5577 INITIALIZATION CODE
287/5600-6177 Q-OVERLAY CODE
288/6200-6577 E-OVERLAY CODE
289/6600-7177 X-OVERLAY CODE
290/7200-7577 F-OVERLAY CODE
291
292/FIELD 1:
293
294/4400-7377 EXTENDED ERROR MESSAGES
295/ MOVES TO FIELD 3
296\f/** TECO KLUDGES ** /7/27/73
297/ONE OF THE REASONS WHY TECO GETS SO MANY OPERATIONS
298/INTO SUCH A SMALL AMOUNT OF CORE IS THAT IT
299/IS FULL OF *K*L*U*D*G*E*S*. THESE SHOULD BE KEPT IN MIND WHEN
300/MODIFYING THE PROGRAM. SOME OF THEM ARE:
301
302/ THE "SORT" ROUTINE COMPARE LIST MUST END WITH A NEGATIVE NUMBER.
303/ USUALLY A FORTITUOUS JMS OR OPR INSTRUCTION IS USED
304
305/ THE "SORT" JUMP LIST ENTRIES ARE TREATED AS JUMP ADDRESSES
306/ IF THEY ARE POSITIVE AND SUBSTITUTE VALUES IF THEY ARE
307/ NEGATIVE - THEREFORE ALL LOCS JUMPED TO MUST BE BELOW 4000
308/ ANOTHER CONSEQUENCE IS THAT "QUOTST" CANNOT BE CALLED FROM
309/ ABOVE 4000
310
311/ THERE ARE OTHER LOCALIZED KLUDGES - THEY CAN GENERALLY
312/ BE IDENTIFIED BY THE APPEARANCE OF A DOUBLE-ASTERISK IN THE
313/ COMMENTS FIELD ALONG WITH A TERSE DESCRIPTIVE COMMENT
314
315
316
317/ OS/8 EQUIVALENCES:
318
319JSBITS= 7746 /JOB STATUS BITS - IN FIELD 0
320OSHNDT= 7647 /OS/8 DEVICE HANDLER TABLE - IN FIELD 1
321OSDCBT= 7760 /OS/8 DEVICE CONTROL TABLE - IN FIELD 1
322CCLADR= 400 /CCL OVERLAY LOAD ADDRESS
323CCLOVL= 67 /BLOCK OF CCL OVERLAY
324CCLOST= 602 /CCL OVERLAY SECONDARY START ADDRESS
325\f *0
326NAME, ZBLOCK 4 /NAME BUILD BUFFER - MUST BE AT LOCATION 0
327 /LOCS 4,5&6 ARE RESERVED SO WE CAN USE OS/8 ODT
328
329 *10 /CONSTANTS & NON-INDIRECT TEMPS STORED IN AUTO-XRS!
330QUOTE, 33 /QUOTE CHAR - SINGLE WORD SORT LIST
331ERR01,
332SERR, ERR /END OF LIST
333INRSIZ, 2 /4 IF 12K MACHINE
334NUMLNS, 3 /NUMBER OF LINES (+ AND -) TO DISPLAY ON VR12 SCOPE
335DX, 7577 /DISPLAY XR
336SXR, QPUT12-1/XR USED BY SEARCH PROCESSOR
337INXR, ASR33-1 /XR USED TO UNPACK INPUT BUFFER
338XR, ASR35-1 /WORK XR
339
340NMT, 0 /USED AS NUMBER TEMP AND SEARCH FAIL FLAG
341CFLG, 0 /COMMA FLAG
342CLNF, 0 /COLON FLAG
343TFLG, 0 /TRACE FLAG
344NFLG, 0 /NUMBER FLAG
345QFLG, 0 /QUOTED STRING FLAG
346M, 0 /NUMBER ARGS
347N, 0
348NLINK, 0 /LINK AFTER ARITH OPERATIONS - TESTED BY "A AND "B
349CHAR, 0 /CHARACTER BUFFER
350ITRST, 0 /ITERATION FLAG
351ITRCNT, 0 /ITERATION COUNT
352MPDL, 0 /MACRO FLAG
353SCHAR, 0 /LAST CHAR SORTED
354FFFLAG, 0 /FORM FEED FLAG - 7777 IF FORM FEED SEEN ON THIS READ
355REND, 0 /INPUT END-OF-FILE FLAG
356SCANP, 0 /COMMAND LINE EXECUTION POINTER
357OSCANP, 0 /BACKUP FOR SCANP
358PDLP, PDLBEG /PUSH-DOWN-LIST POINTER
359QCMND, 0 /COMM LINE OR MACRO POINTER
360P, 0 /CURRENT PNTR TO TEXT BUFFER
361ZZ, 0 /END OF TEXT BUFFER POINTER
362Q, 0 /EXTRA BUFFER POINTERS
363 IFNZRO .-47 <_ERROR_>
364R, 0
365QP, 0 /Q REGISTER POINTER
366QZ, CHNSTR /END OF Q-REG POINTER
367Z7,
368CTLBEL, 7
369CACR, 15 /CR
370CAHT, 11 /HT
371CAAM, 33 /ALT MODE
372CAFF, 14 /FF: END OF PAGE
373 13 /VT
374CALF, 12 /LF
375ERR07,
376NERR, ERR /END OF LIST
377RADIX, DRAD /RADIX TABLE POINTER - DRAD OR ORAD
378\fMQ, 0
379DVT1, 0
380ODEV, 0 /OUTPUT DEVICE NUMBER
381OUTHND, 0
382INHND, 0
383EBFLG, 0 /EDIT BACKUP FLAG
384QNMBR, 0 /LAST Q-REG REFERENCED
385QBASE, 0 /BASE OF CURRENT COMMAND LINE
386QLENGT, 0 /LENGTH OF CURRENT COMMAND LINE
387QPTR, 0 /POINTER TO Q-REGISTER CONTROL BLOCK
388ICRCNT, 0 /INPUT DOUBLEWORD COUNTER
389OCRCNT, 0 /OUTPUT "
390OPTR2, 0 /OUTPUT BUFFER POINTER
391INRCNT, 0 /NUMBER OF INPUT RECORDS LEFT
392OCMDLN, 0 /LENGTH OF OLD COMMAND LINE
393CDT, 0
394KTYPE, TYPE /*ET SET TO PUTT IF NO CONVERSION
395TEMPT, 0 /TEMP. GET RID OF WHEN FIND ROOM ON PAGE
396MEMSIZ, 0 /HIGHEST MEMORY FIELD IN BITS 9-11
397LASTC, 0 /LAST CHARACTER GOTTEN OUT OF COMMAND LINE
398
399/NFLG: 0'ED BY COMMANDS WHICH EAT ARGUMENTS OR DON'T RETURN
400/ VALUES; SUCH AS C,R,J,L,^A,X,$,',>,'U,G,O AND
401/ NON-COLON MODIFIED SEARCHES
402/ SET TO -1 TO INDICATE THATWWE'VE SEEN A NUMBER
403\f /TECO PSEUDO-OPERATIONS
404
405PUSH= JMS I .; PUSHXX
406POP= JMS I .; POPXX /** MUST BE ONE MORE THAN "PUSH"
407PUSHJ= JMS I .; PUSHJY
408POPJ= JMP I .; POPJXX
409PUSHL= JMS I .; PUSHLX
410POPL= PUSHL /** POPL CALLED WITH POSITIVE AC
411
412ERR= JMS I .;ERROR,ERRXX
413SORT= JMS I .; SORTB
414RESORT= JMP I .; SORTA2
415SCAN= JMS I .; SGET
416LISTEN= JMS I .; TYI
417TYPE= JMS I .; TYPCTV
418OUTPUT= JMS I .;OUTR, ERRXX /** MUST BE ONE MORE THAN "TYPE"
419 /PROBABLY NOT ANY MORE (19-JUN-77)
420CRLF= JMS I .; TYCRLF
421GETQ= JMS I .; GETQX
422SKPSET= JMS I .; SETSKP
423NCHK= ISZ NFLG /USED TO BE A SUBROUTINE CALL
424CTCCHK= JMS I .; CHKCTC
425BZCHK= JMS I .; CHKBZ
426QCHK= JMS I .; CHKQF
427QSKP= JMS I .; QOVER
428QREF= JMS I .; QREFER
429\fQSUM= JMS I .; QSUMR
430QPUT= JMS I .; QPUTS
431QUOTST= JMS I .; QTST
432SETCMD= JMS I .; CMDSET
433GETN= JMS I .; NGET
434ADJQ= JMS I .; QADJ
435MQLDVI= JMS I .; DVIMQL
436UPPERC= JMS I .; CUPPER
437SCANUP= JMS I .; SCUPPR
438TSTSEP= JMS I .; SCHSRT
439DISPLY= JMS I .; DSPLAY
440NOTRCE= JMS I .; SAVTRA
441ENTRCE= JMS I .; RESTRA
442OVRLAY= JMS I .; OVERLY
443GETNUM= JMS I .; NUMGET /GET 13 BIT NUMBER INTO L,AC
444PUTT= JMS I .; TPUT
445 PAGE
446\f/ENTER HERE TO USE AN ASR33 AS THE TELETYPE
447
448TECO, ISZ I SPUT /IF CALLED BY "R" OR "RUN" - CHANGED TO TLS
449TECO1, JMP I COMPAR /IF CALLED VIA "CHAIN" - CHANGED TO "JMP T0A"
450TBEL, JMS COMPAR /HERE ON ^G - 2 ^G'S KILL ENTIRE COMMAND
451
452T0, CRLF
453T0A, TAD (PDLBEG
454 DCA PDLP /INITIALIZE PUSHDOWN LIST
455T1, TAD PDLP
456 TAD (-PDLBEG
457 SZA CLA
458ERR02, ERR /ERROR - PUSHDOWN LIST DID NOT BALANCE
459 TAD (45
460 QREF /SET UP POINTERS TO COMMAND LINE
461 TAD I [QPNTR
462 DCA OCMDLN /SAVE OLD COMMAND LINE LENGTH
463 /** SAVE ONLY IF < 20?
464 ADJQ /REDUCE COMMAND LINE LENGTH TO 0
465 CLL
466 PUSHJ
467 NRET /CLEAR NUMBER AND LAST OPERATOR
468 DCA CFLG
469 DCA MPDL /DELETE MACRO FLAG
470 DCA ITRST /ALSO ITERATION FLAG,
471 DCA CLNF /AND COLON FLAG
472 PUSHJ /KILL QUOTE FLAG
473 ZROSPN /KILL QUOTE AND NUMBER FLAGS AND SCAN POINTER
474 KCC /KILL ^O IF IN KEYBOARD BUFFER
475 DCA I (CHOOPS /KILL FATAL ERROR RETURN
476 TAD [52
477 SKP
478ROCMND, JMS I (BACKUP /BACK UP AND GET LAST CHAR
479 TYPE
480T2M1, DCA CHAR /KILL CHAR TO PREVENT SPURIOUS DOUBLE CHARACTERS
481T2, LISTEN /BUILD COMMAND LINE
482 SORT
483 COMLST
484 COMTAB-COMLST
485T2A, DCA CHAR
486 JMS SPUT /PUT INTO C.L. BUFFER
487 JMP T2 /GO GET ANOTHER
488\fTCTLU, TAD SCHAR
489 TYPE /PRINT "^U"
490TCTLUP, JMS I (BACKUP
491 TAD [-12 /CHECK FOR LF
492 SZA CLA
493 JMP TCTLUP /LOOP UNTIL LF
494 IAC
495 JMP I (TSP9
496
497TCRLF, TAD CACR /CR IN COMM LINE
498 DCA CHAR
499 JMS SPUT /PUT INTO COMM LINE
500 TAD CALF /THEN PUT IN A LF
501 JMP T2A /AND GET SOME MORE
502\f /COMMAND EXECUTION LOOP
503
504TALTM, JMS COMPAR /2ND ALTM STARTS EXECUTION
505 CRLF /START COMM EXECUTION
506CHTECO, TAD (45 /NUMBER OF INPUT COMMAND Q-REGISTER
507 SETCMD /SET UP THE INPUT LINE AS THE CURRENT COMMAND LINE
508T6, SCANUP
509T6A, DCA CHAR /SAVE COMMAND CHAR
510 TAD CHAR
511 TAD (CDSP /ADD BASE OF DISPATCH TABLE
512 DCA T7 /LOOK UP ENTRY IN
513 TAD I T7 /COMMAND DISPATCH TABLE
514 DCA T7 /CALL RECURSIVELY
515 CLL
516 PUSHJ
517T7, 0 /CALL TO ROUTINE
518 CTCCHK /CHECK FOR ^C - ** AC MAY NOT BE 0 HERE **
519 CLA /CTCCHK LEAVES AC NON-ZERO
520 TAD NFLG
521 SPA CLA
522 JMP T6
523 DCA N /IF WE ARE NOT ENTERING A NUMBER
524 DCA NLINK /SET 13-BIT N TO 0
525 JMP T6 /KEEP INTERPRETING
526TQMK, TAD I ERROR
527 SNA CLA /ERROR ROUTINE ENTRY POINT NON-ZERO?
528 RESORT /NO
529 STA /AN ERROR PRINTOUT
530 DCA QLENGT /SET QLENGT BIG SO WE CAN ACCESS ENTIRE LINE
531 NOTRCE /TURN TRACE OFF
532 SCAN
533 TYPE /PRINT OUT THE LINE WHICH CAUSED THE ERROR
534 ISZ I ERROR /UP TO THE ERROR CHAR ITSELF
535 JMP .-3
536 JMP T0 /RE-INITIALIZE
537
538CHUA, POP /^ COMMAND - POP OFF RETURN ADDRESS
539 SCANUP /GET THE NEXT CHARACTER IN UPPER CASE
540 AND [77 /MAKE IT A CONTROL CHARACTER
541 JMP T6A /USE IT INSTEAD OF THE ^
542\fCOMPAR, TCINIT /LOOK FOR DOUBLED COMM LINE CHARS
543 TAD SCHAR /MOST RECENT
544 CIA
545 TAD CHAR /PREVIOUS
546 SZA CLA
547 RESORT /NOT THE SAME
548 JMS SPUT /PUT THE CHAR INTO THE COMMAND LINE AND ECHO IT
549 JMP I COMPAR /SAME-SPECIAL HANDLING
550
551SPUT, JTECO /PUT CHAR INTO COMM LINE
552 TAD QZ
553 DCA QP
554 TAD CHAR
555 QPUT /STORE CHARACTER AWAY
556 TAD I [QPNTR
557 IAC
558 ADJQ /ADJUST COMMAND LINE REGISTER LENGTH
559 DCA I ERROR /CLEAR "ERROR JUST OCCURRED" FLAG
560 TAD CHAR
561 TYPE /TYPE THE INSERTED CHARACTER
562 TAD I [QPNTR
563 TAD CALF /12
564 SPA CLA
565 JMP EMERG /TYPE BELL IF WITHIN 12 CHARACTERS OF 2048
566 CLL
567 TAD QZ
568 TAD QLIMIT
569 SNL CLA /TYPE A BELL IF THE LINE IS
570 JMP I SPUT / WITHIN 12 CHARS OF OVERFLOW
571EMERG, TAD Z7
572 TYPE
573 JMP I SPUT
574QLIMIT, 12-QMAX
575 PAGE
576\f /Q REGISTER PACK AND UNPACK
577 /THE Q-REGISTERS ARE STORED IN THE UPPER 4 BITS OF THE WORDS
578 /WHICH HAVE THE TEXT BUFFER CHARACTERS IN THEIR LOWER 8 BITS.
579 /THEREFORE EACH Q-REGISTER CHARACTER TAKES 2 WORDS.
580
581QPUTS, 0 /STORE THROUGH POINTER "QP" AND BUMP POINTER
582 CLL RTL
583 RTL
584 DCA GETQX /SAVE CHARACTER
585 TAD QP
586 CLL RAL
587 DCA CHKCTC /COMPUTE CORE POINTER = 2*QP
588 CDF 10
589 TAD GETQX
590 JMS ST4BTS /STORE HIGH ORDER 4 BITS
591 ISZ CHKCTC
592 TAD GETQX
593 CLL RTL
594 RTL
595 JMS ST4BTS /STORE LOW ORDER 4 BITS
596 CDF 0
597 ISZ QP /BUMP POINTER
598 JMP I QPUTS
599
600GETQX, 0
601 CLL RAL
602 DCA CHKCTC /COMPUTE CORE POINTER = 2*AC
603 CDF 10
604 TAD I CHKCTC
605 AND [7400 /FETCH HIGH ORDER
606 ISZ CHKCTC
607 DCA QPUTS
608 TAD I CHKCTC
609 AND [7400 /FETCH LOW ORDER
610 CLL RTR
611 RTR
612 TAD QPUTS /COMBINE TO FORM CHARACTER
613 RTR
614 RTR
615 CDF 0
616 JMP I GETQX
617
618ST4BTS, 0
619 AND [7400
620 DCA POPXX
621 TAD I CHKCTC
622 AND [377
623 TAD POPXX
624 DCA I CHKCTC /STORE HIGH ORDER
625 JMP I ST4BTS
626\fCHKCTC, 0 /SUBROUTINE TO CHECK FOR ^C IN KEYBOARD
627 CLA OSR /** AC MAY NOT BE 0 ON ENTRY
628 DCA QPUTS /GET LOCATION FROM SWITCH REGISTER
629 TAD I QPUTS
630 7421 /DISPLAY INDICATED LOCATION IN MQ
631C7600, 7600 /JUST IN CASE THERE IS NO MQ
632 KSF
633 JMP I CHKCTC /NO CHAR IN KEYBOARD BUFFER - EXIT
634 KRS
635 AND [177 /KILL PARITY BIT
636 TAD [-20 /^P OUGHT TO GO AWAY
637 SZA
638 TAD CACR
639 SZA /^C?
640 JMP I CHKCTC /NO - RESUME WITH NON-ZERO AC
641ERR34, ERR /^C, EXECUTION ABORTED
642
643CTLC, TSF
644 JMP CTLC /WAIT FOR TELETYPE TO DIE DOWN
645 JMP I C7600 /RETURN TO OS/8
646
647
648POPJXX, DCA GETQX /POPJ ROUTINE
649 POP
650POPJXY, DCA POPXX
651 TAD GETQX
652 JMP I POPXX
653\f /PUSH DOWN LIST ROUTINES
654
655POPXX, 0 /POP ROUTINE
656 CLA CMA
657 TAD PDLP
658 DCA PDLP
659 TAD I PDLP
660 JMP I POPXX
661
662PUSHXX, 0 /PUSH ROUTINE (DOESN'T AFFECT LINK)
663 DCA I PDLP
664 ISZ PDLP /BUMP PUSHDOWN POINTER
665 TAD PDLP /CHECK FOR EXACTLY FULL - THIS ALLOWS THE
666 TAD (-PDLEND
667 SNA CLA /** ERROR ROUTINE TO DO A PUSHJ
668ERR04, ERR /FULL - REPORT IT
669 JMP I PUSHXX
670
671PUSHJY, 0 /PUSHJ ROUTINE (DOESN'T AFFECT LINK)
672 DCA GETQX
673 IAC /** LINK SHOULD BE PRESERVED ON EXIT
674 TAD PUSHJY
675 PUSH
676 TAD I PUSHJY
677 JMP POPJXY
678
679PUSHLX, 0 /PUSH AND CLEAR A LIST
680 CLL
681 SMA /PUSH LIST IF AC<0, POP IT IF >=0
682 CMA STL
683 DCA PUSHJY /SET COUNTER
684 RAL /** DEPENDS ON FACT THAT POP=PUSH+1 **
685 TAD PUSHYY
686 DCA PUSHYX /STORE EITHER A "PUSH" OR A "POP"
687 POP /SAVE RETURN POINTER
688 DCA CHKCTC
689PUSHLP, TAD I PUSHLX
690 DCA GETQX
691 TAD I GETQX
692PUSHYX, PUSH /PUSH OR POP
693 DCA I GETQX /IF PUSHYX=PUSH, THIS ZEROES THE PUSHED LOCATION
694 ISZ PUSHLX
695 ISZ PUSHJY
696 JMP PUSHLP
697 TAD CHKCTC /RESTORE RETURN POINTER
698PUSHYY, PUSH
699 JMP I PUSHLX
700\fTPUT, 0 /TELETYPE OUTPUT
701 DCA TEMPT
702TPUTX, CTCCHK /CHECK FOR ^C OR ^P
703 TAD (3-17 /INHIBIT PRINTING AS LONG AS THERE
704 SNA /IS A ^O IN THE KEYBOARD BUFFER.
705 JMP I TPUT
706 TAD (17-23 /CHECK FOR ^S
707 SNA CLA
708 JMP TPUTX
709 TSF /WAIT FOR TELETYPE FLAG
710TSFWT, JMP .-1 /WHILE WAITING, DISPLAY TEXT ON SCOPE
711 TAD TEMPT
712 TLS
713 CLA
714 JMP I TPUT
715 PAGE
716\f/POINTER MOVING COMMANDS - C,R,J,L
717
718CHRJ, DCA NFLG /COMMAND J
719 GETNUM /CAUSE NEG ARGUMENT TO GIVE A POP
720 JMP CLOQ
721
722CHRR, GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1
723CHR1, CML CIA /NEGATE 13-BIT NUMBER
724 SKP
725CHRC, GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1
726 TAD P /OFFSET RELATIVE TO .
727/
728/ *** LINK NOT ALWAYS SET RIGHT
729/
730CLOQ, BZCHK /SEE IF IN RANGE B,Z
731 DCA P /IN RANGE
732DNN3, CDF 0
733 POPJ
734
735CHRL, GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1
736CHRL1, CDF 10
737 SZL SNA
738 JMP LNEG
739 CIA
740 DCA CDT
741CHRLP, TAD P
742 CIA
743 TAD ZZ
744 SNA CLA /IF WE ARE AT THE END OF THE BUFFER,
745 JMP DNN3 /RETURN
746 JMS I (CHLCMP /COMPARE CHARACTER AGAINST LINE FEED
747 ISZ P
748 JMP CHRLP /KEEP GOING UNTIL WE GET THERE OR OVERFLOW BUFFER
749LNEG, TAD (-1
750 DCA CDT
751CHRLM, CLA CMA CLL
752 TAD P
753 DCA P /MOVE POINTER BACKWARD 1
754 SNL
755 JMP I (CHRLI /OOPS - PAST THE BEGINNING OF THE BUFFER - RETURN
756 JMS I (CHLCMP /COMPARE CHARACTER AGAINST LINE FEED
757 JMP CHRLM /NOT SATISFIED YET - KEEP LOOPING
758
759NUMGET, 0 /PUT 13-BIT NUMBER IN L,AC
760 TAD NLINK
761 CLL RAR
762 TAD N
763 JMP I NUMGET
764\f/D COMMAND AND PART OF ADJUST ROUTINE
765
766CHRD, ISZ CFLG /WAS THERE A COMMA?
767 SKP /NO
768 JMP NERR /YES, 2 ARGS TO D
769 GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1
770 SNL /SIGN BIT OF 13-BIT NUMBER IS IN LINK
771 JMP PLUSND /+ND
772 CLL CIA
773 DCA CDT /-ND
774 TAD CDT
775 PUSHJ /DO (-)NC(+)ND
776 CHR1
777 TAD CDT
778 JMP PLUSND
779
780ADJ, SNA /ADJUST BUFFER + OR - N CHARS
781 /TEST FOR NOTHING
782 POPJ /GO AWAY
783 STL /MOVE UP N CHARACTERS
784 TAD ZZ /ADD TO MAX CHARACTER
785 DCA R /NEW HIGHEST
786 TAD R /SEE IF TOO HIGH
787 TAD (-ZMAX
788 SNL SZA CLA /TWO PLACES FOR OVERFLOW THERE
789ERR05, ERR
790 TAD ZZ
791 DCA Q
792 TAD R
793 DCA ZZ
794 CDF 10
795UPNL, TAD Q
796 CIA
797 TAD P
798 SNA CLA /FINISHED?
799 JMP DNN3 /YES
800 CMA
801 TAD Q
802 DCA Q
803 CMA
804 TAD R
805 DCA R
806 TAD I Q /GET A CHAR
807L12K1, AND [377 /JMP .+5 IF 12K
808 DCA CHLTMP
809 TAD I R /BE CAREFUL NOT TO
810 AND [7400 /DESTROY THE HIGH-
811 TAD CHLTMP /ORDER 4 BITS
812J12K1= JMP .
813 DCA I R /AND PUT IT IN THE LOW PART OF THE TARGET WORD
814 JMP UPNL
815\f/K COMMAND AND MORE OF ADJUST ROUTINE
816
817CHRK, JMS I (NLINES /CONVERT LINES TO CHARS
818 DCA CDT
819 TAD M /SET POINTER
820 DCA P /LOWER ARG
821 TAD CDT
822PLUSND, SNA
823 POPJ /IGNORE 0D
824ADJ2, CLL
825 TAD P /MOVE DOWN N CHARACTERS
826 SZL
827 CLA CMA /DETECT GROSS OVERFLOWS
828 /** CHECK
829 BZCHK
830 DCA Q /N IN AC
831 TAD P
832 DCA R
833 CDF 10
834DNN1, TAD ZZ
835 CIA
836 TAD Q
837 SNA CLA /FINISHED?
838 JMP DNN2
839 TAD I Q /GET A CHAR
840L12K2, AND [377 /JMP .+5 IF 12K
841 DCA CHLTMP
842 TAD I R /BE CAREFUL NOT TO
843 AND [7400 /DESTROY THE HIGH-
844 TAD CHLTMP /ORDER 4 BITS
845J12K2= JMP .
846 DCA I R /AND PUT IT IN THE LOW PART OF THE TARGET WORD
847 ISZ Q
848 ISZ R
849 JMP DNN1
850DNN2, TAD R
851 DCA ZZ
852 JMP DNN3
853
854CHLTMP, 0
855
856/GO TO ADJ TO MOVE UP TEXT
857/GOTO ADJ2 TO MOVE DOWN TEXT
858/IN EITHER CASE, AC CONTAINS NUMBER OF CHARS TO MOVE (0-4095)
859
860ERR27, ERR /^W
861ERR35, ERR /^V
862 PAGE
863\f/SEARCH SUBROUTINE - CALLED BY N, S, AND _ COMMANDS
864
865SEARCH, 0
866 DCA REPFLG /AC MAY BE NON-0 TO ALLOW A REPLACE
867 GETN
868 SZL SNA
869ERR29, ERR /NEG OR 0 ARG TO SEARCH
870 CIA
871 DCA CSN /GET NUMBER OF OCCURRANCES TO SEARCH FOR
872 QCHK /GET REPLACEMENT FOR ALTMODE, IF ANY
873 TAD (STABLE-1
874 DCA SXR /INITIALIZE XR
875 TAD [-40
876 DCA CSP
877SGTLP, QUOTST /GET A CHARACTER FROM THE SEARCH STRING
878 JMP SCHQUO /OOPS- NO MORE
879 SORT /SEE IF ITS SPECIAL
880 SCHLST
881 SCHTAB-SCHLST
882SSTCHR, DCA I SXR /STORE THE CHAR IN THE SEARCH BUFFER
883 ISZ CSP
884 JMP SGTLP /LOOP
885ERR06, ERR /OOPS - SEARCH BUFFER FULL!
886
887SCHQUO, TAD CSP
888 TAD [40 /A NULL SEARCH STRING MEANS USE THE
889 SZA CLA /PREV CONTENTS OF THE SEARCH BUFFER, ELSE
890 DCA I SXR /STORE TERMINATING 0 AND BEGIN THE SEARCH
891CSST, TAD P
892 DCA CSP
893 JMP CSF1
894SCHINV, TAD CSNCL /^N, INVERT SKIP SENSE
895 DCA CSWT
896
897CSL, TAD I SXR /GET A CHAR FROM THE SEARCH BUFFER
898 SPA SNA
899 JMP SCCOMD /NEGATIVE CHARS AND 0 ARE SPECIAL
900 CIA
901 CDF 10
902 TAD I P
903 AND [377
904CSWT1, CDF 0
905CSWT, SZA CLA
906 JMP CSF /FAIL TO MATCH ON THIS CHARACTER
907 ISZ P
908CSG, TAD CSZCL
909 DCA CSWT /RESTORE SEARCH TEST
910 TAD ZZ
911 CMA
912 TAD P
913CSZCL, SZA CLA /CHECK FOR END OF BUFFER
914 JMP CSL /NO
915 DCA P
916CSZ, DCA NMT
917 JMP I SEARCH
918\f/SEARCH SUBROUTINE - CONTINUED
919
920SCCOMD, DCA .+1 /SPECIAL CHARACTERS ARE JUMPS OR 0
921 HLT /0 FALLS THROUGH INTO TERMINATION CODE
922 ISZ CSN /GET NTH OCCURRENCE
923 JMP CSF /MORE TO GO
924 CMA
925 JMP CSZ /GOT IT
926CSF, ISZ CSP /INDEX P
927CSF1, TAD (STABLE-1
928 DCA SXR /INITIALIZE AUTO - INDEX
929 TAD CSP
930 DCA P
931 JMP CSG
932
933/SEARCH STRING MODIFIERS ^N,^Q,^S, AND ^X
934
935SCHTAB, JMP SCHINV /^N: ANYTHING BUT
936 SCHCTQ /^Q: LITERALLY
937 JMP SCHSEP /^S: ANY SEPARATOR
938 JMP CSWT1 /^X: ANYTHING
939
940SCHCTQ, SCAN /GET THE NEXT CHARACTER
941 JMP SSTCHR /AND STORE IT IN PLACE OF THE ^Q
942
943SCHSEP, CDF 10 /^S, LOOK FOR SEPARATOR
944 TAD I P
945 AND [377
946 TSTSEP /SHARED SORTING ROUTINE
947 SKP
948 CMA /SET AC = -1 IF NON-SEPARATOR
949 JMP CSWT1 /GO CHECK RESULTS
950
951FN, DCA CNXT
952 STA
953 JMP CHRN1
954\f/S,N AND _ COMMANDS (ALSO FS AND FN)
955
956FS, STA /CHANGE S TO FS
957CHRS, JMS SEARCH /S COMMAND - DO A SEARCH
958CHKREP, ISZ REPFLG /WAS THERE A REPLACE SPECIFIED?
959 JMP CHKCLN /NO - CHECK FOR COLON
960 QSKP /COUNT UP STRING 2
961 TAD NMT
962 SMA CLA
963 JMP CHKCLN /FAILED, SET VALUE & EXIT
964 TAD CSP /FIGURE OUT OFFSET TO FAKE OUT "I" ROUTINE
965 CIA /SO THAT WE HAVE THE RIGHT INSERTION COUNT
966 TAD P /BUT THE SIZE OF THE HOLE WE NEED
967 DCA DVT1 /IS DECREASED BY THE LENGTH OF THE SEARCH STRING.
968 TAD CSP /RESET
969 DCA P /TEXT POINTER
970 PUSHJ /INSERT
971 CIL2 /STRING 2
972CHKCLN, DCA REPFLG /CLEAR REPLACE FLAG
973 TAD NMT
974 PUSHJ /FORM NUMBER FROM "NMT"
975 NNEW13 /(APPLYING OPERATOR, IF NECESSARY)
976 ISZ CLNF /WAS THERE A COLON ON THIS SEARCH?
977 SKP /NO
978 JMP I [IREST /YES - GO AWAY REGARDLESS OF RESULTS
979 DCA CLNF /RESET COLON FLAG TO 0
980 ISZ N /DID WE SUCCEED?
981 JMP I (CFSI /NO - SIMULATE A SEMICOLON
982 DCA NFLG /YES - HOWEVER, NO COLON MEANS NO RESULT
983 JMP I [IREST
984
985CHBA, CLA IAC /_ COMMAND
986CHRN, DCA CNXT /N COMMAND - SET OUTPUT FLAG
987CHRN1, JMS SEARCH /DO A SEARCH
988 TAD REND
989 CIA
990 TAD ZZ
991CSNCL, SNA CLA /HAVE WE REACHED END-OF-FILE?
992 JMP CHKREP /YES - STOP AND ASSIGN VALUE
993 TAD NMT
994 SZA CLA /HAVE WE SUCCEEDED?
995 JMP CHKREP /YES - STOP AND ASSIGN VALUE
996 TAD CNXT
997 JMS I [NXTBUF /GET NEXT BUFFER
998 JMP CSST /KEEP SEARCHING - RETURN TO CHRN+2
999CNXT, 0 /OUTPUT FLAG
1000CSP, 0 /TEMP P
1001CSN, 0
1002REPFLG, 0 /REPLACE FLAG (-1 MEANS REPLACE)
1003 PAGE
1004\f/NUMBER PROCESSORS:
1005/COMMANDS B,H,Z,. AND DIGITS
1006
1007
1008NMBR, TAD CHAR /NUMBER FOUND IN COMMAND STRING
1009 TAD [-60
1010NMBR2, DCA NMT
1011 CLL
1012 NCHK /CHECK NUMBER FLAG
1013 JMP NNEW /NOT UP, NEW OPERAND
1014 TAD DOPR
1015 DCA NOPR /USE SAME OPERATOR AS FOR THE PREVIOUS DIGITS
1016 TAD NP /MULTIPLY PREV DIGITS BY 10
1017 CLL RTL
1018NMRBAS, TAD NP /REPLACED BY "NOP" FOR OCTAL
1019 CLL RAL /** COULD CHECK FOR OVERFLOW IN THIS AREA
1020NNEW, TAD NMT
1021NCOM, DCA NP /CURRENT NUMBER
1022/ RAL
1023/ DCA NEWLNK
1024/ TAD NEWLNK /GET NEW LINK
1025/ CLL RAR /INTO LINK
1026NCOM2, TAD NP
1027
1028NOPR, SKP /DISPATCH JUMP FOR OPERATOR
1029 CML CIA
1030 TAD NACC /CURRENT EXPRESSION VALUE
1031 DCA N
1032 RAL
1033 TAD NACCLK /ADD IN OLD LINK
1034 RAR
1035 SKP CLA
1036NRET, DCA N
1037 RAL
1038 DCA NLINK /SAVE LINK FOR POSSIBLE COMPARISON TEST
1039 TAD NOPR
1040 DCA DOPR
1041 TAD NULLOP
1042 DCA NOPR /SET OPERATOR TO NULL OP
1043 STA
1044 JMP DCPOPJ /SET NUMBER FLAG AND EXIT
1045\fCCPR, STL CLA RTL /2
1046 POPL
1047 NOPR
1048 NACC
1049 NACCLK
1050 GETNUM
1051 JMP NCOM /COMBINE OLD NUMBER AND PARENTHESIZED RESULT
1052
1053COPR, MTHREE
1054 PUSHL
1055 NACCLK
1056 NACC
1057 NOPR
1058 DCA N
1059 DCA NLINK
1060 JMP CPLS /CLEAN OUT INSIDE PARENS
1061
1062CDOT, TAD P /COMMAND .
1063/** COULD CAUSE ERROR IF NFLG SET
1064 JMP NCOMCL
1065/NEWLNK, 0
1066\f /COMMANDS &,#,/,*,-,+,(,)
1067
1068CAMP, MTWO /*K* LOGICAL AND **
1069CNBS, TAD (NIOR-NDIV /LOGICAL OR
1070CVIR, TAD (NDIV-NMPY /DIVISION
1071CAST, TAD (NMPY&177+5200-7400 /MULTIPLICATION
1072CMIN, TAD [7400-SKP /SUBTRACTION
1073CPLS, TAD (SKP /ADDITION
1074 DCA NOPR /COMMON TO ALL NUMERIC OPERATORS
1075 TAD N
1076 DCA NACC
1077 TAD NLINK
1078 DCA NACCLK
1079 DCA NP
1080DCPOPJ, DCA NFLG /CLEAR NUMBER FLAG
1081 POPJ
1082
1083NAND, AND NACC /BITWISE AND OF BINARY NUMBERS
1084 JMP NRET /** KEEP THESE TWO OPNS TOGETHER
1085NIOR, CMA /BITWISE OR OF BINARY VALUES
1086 AND NACC
1087 TAD NP
1088NULLOP, JMP NRET
1089
1090NACCLK, 0 /LINK OF EXPRESSION WITHOUT NP
1091NMPY, CIA /*** REALLY OUGHT TO IMPLEMENT 13-BIT MULTIPLY
1092 DCA ND
1093 TAD NACCLK
1094 RAR /SET UP OLD LINK
1095 TAD NACC
1096 ISZ ND
1097 JMP .-2
1098 JMP NRET
1099NACC, 0 /VALUE OF EXPRESSION WITHOUT NP
1100NDIV, DCA ND
1101 TAD NACC
1102 MQLDVI
1103ND, 0
1104 JMP NRET
1105\f/COMMANDS ^F,^^,^Z,^V, Q AND %, ^D, ^O
1106
1107CTLF, CLA OSR SKP /^F COMMAND - VALUE OF CONSOLE SWITCHES
1108CTUA, SCAN /^^ COMMAND - VALUE OF NEXT CHAR IN COMMAND LINE
1109NCOMCL, CLL
1110 JMP NCOM /GO INTO NUMBER PROCESSOR
1111
1112/CTLZ, TAD QZ /COMMAND ^Z
1113/ JMP NCOM /RETURN NUMBER OF CHARACTERS IN ALL Q-REGS.
1114/CTLV, TAD (VERSN /^V COMMAND - RETURNS THE CURRENT VERSION NUMBER
1115/NCOM14, CLL
1116/ JMP NCOM
1117
1118CTLD, TAD [4 /SET RADIX DECIMAL
1119CTLO, TAD (ORAD /SET RADIX OCTAL
1120 DCA RADIX
1121 TAD I RADIX
1122 DCA NMRBAS /EITHER "NOP"(8) OR "TAD NP"(10)
1123 POPJ
1124
1125DOPR, 0 /PREVIOUS OPERATOR
1126NP, 0 /VALUE OF CURRENT NUMBER
1127
1128SCPTAB, BBELL
1129 BCR
1130 BCR /TAB
1131 EASYRO /ALT
1132 BFF
1133 BVT
1134 BLF
1135
1136CTLN, TAD REND
1137 CMA
1138 JMP I (NNEW13
1139
1140CQSM, TAD TFLG
1141 CMA /TRACE FLAG ALTERNATES BETWEEN 0 AND 7777
1142 DCA TFLG
1143 POPJ
1144\fFTAB, FN
1145 FS
1146FLST, 116 /FN
1147 123 /FS
1148
1149CHRF, SCANUP /COMMAND F
1150 SORT
1151 FLST
1152 FTAB-FLST
1153ERR31, ERR /BAD F COMMAND
1154
1155CCLN, STA /: COMMAND - SET VALUE FLAG
1156 DCA CLNF
1157 POPJ /SO NEXT SEARCH WILL HAVE A NUMERIC VALUE
1158 PAGE
1159\f/CURSOR RIGHT IS $C
1160/CURSOR UP IS $A
1161/ERASE LINE IS $K
1162
1163BUGFLG, 0 /-1 MEANS MUST RETYPE LINE ON NEXT RUBOUT
1164
1165BSP, 0
1166 TAD TTY10
1167 PUTT /TYPE BS, SPACE, BS
1168 TAD TTY40
1169 PUTT
1170 TAD TTY10
1171 PUTT
1172 STA
1173 TAD I (COLCT /FIX UP COLUMN COUNTER
1174 DCA I (COLCT
1175 JMP I BSP
1176\fSCOPY, JMS I (BACKUP /BACK UP ONE CHAR IN CMD LINE
1177 TAD [-40 /LOOK AT CHAR WE BACKED OVER
1178 SMA
1179 JMP EASYRO /IT'S EASY TO RUB THIS ONE OUT
1180 TAD [40 /RESTORE CHARACTER
1181 SORT
1182 CTLBEL
1183 SCPTAB-CTLBEL
1184BBELL, CLA
1185 JMS BSP /^X NEEDS TWO RUB OUTS
1186EASYRO, CLA
1187 ISZ BUGFLG /MAYBE WE REALLY SHOULD REPRINT LINE
1188TTY10, SKP /NOT NECESSARY
1189 JMP BCR /NECESSARY (PREVIOUS VERTICAL MOTION MAY
1190 /HAVE SCROLLED OFF TOP OF SCREEN)
1191 JMS BSP /RUB IT OUT
1192SCOPGO, DCA BUGFLG
1193 JMP I (T2M1
1194
1195BCR, JMS BELLSP /REPRINT LINE
1196 JMS I SCAPE
1197 113 /ERASE LINE
1198 JMP SCOPGO
1199
1200BLF, TAD CTLBEL /CURSOR UP 1
1201BFF, TAD (-4 /CURSOR UP 8
1202BVT, TAD (-4 /CURSOR UP 4
1203 DCA BSP
1204 JMS I (ESCAPE
1205 101 /CURSOR UP
1206 ISZ BSP
1207 JMP .-3
1208TTY40, STA
1209 JMP SCOPGO
1210\fTSTAR, DCA BCHAR
1211TSPACE, TAD CHAR /LOOK AT PREVIOUS CHARACTER
1212 TAD (-7
1213 SZA CLA /WAS IT ^G ?
1214 RESORT /NO
1215 STA /YES
1216TSP9, TAD I [QPNTR /REDUCE CMD LINE BY 1 CHAR
1217 ADJQ /I.E. GET RID OF ^G
1218 JMS BELLSP
1219 JMP I (T2M1
1220
1221BELLSP, 0
1222BLSP1, CRLF /TAD CACR
1223BLSP2, NOP /TYPE
1224 TAD MQ
1225 DCA SAVMQ
1226 DCA MQ
1227 TAD QZ /START FROM END OF COMMAND LINE
1228LFBLP, DCA QP /AND SEARCH FOR LF
1229 STA
1230 TAD MQ /COUNT HOW MANY
1231 DCA MQ
1232 STA
1233 TAD QP
1234 SPA
1235 JMP LFSTAR /AT BEGIN OF CMD LINE
1236 GETQ
1237 TAD BCHAR /LOOK FOR LF
1238 SNA CLA /IS IT LF?
1239 JMP LFB /YES
1240 STA /NO
1241 TAD QP /BUMP BACK ONE MORE CHAR
1242 JMP LFBLP
1243
1244LFSTAR, CLA
1245 TAD [52 /PRINT ANOTHER *
1246 TYPE
1247LFB, PUSHJ
1248 COLG4 /REPRINT LINE TO END OF CMD LINE
1249 TAD SAVMQ /RESTORE MQ
1250 DCA MQ
1251BLSP3, NOP /JMS I SCAPE
1252BLSP4, NOP /113
1253 TAD [-12
1254 DCA BCHAR /SET UP FOR NEXT TIME
1255 KCC /CLEAR OUT ^O OR ^S
1256 JMP I BELLSP
1257
1258SAVMQ, 0
1259BCHAR, -12 /CHAR WE'RE SEARCHING BACKWARDS FOR
1260SCAPE, ESCAPE
1261\fSORTB, 0 /SORT AND BRANCH ROUTINE
1262 DCA SCHAR /SAVE SORT CHAR
1263 STA
1264 TAD I SORTB /GET POINTER TO LIST
1265 ISZ SORTB
1266 DCA XR
1267SORTA1, TAD I XR /GET ITEM IN TEST LIST
1268 SPA /END MARKED BY NEG VALUE
1269 JMP SORTA2 /FELL OUT BOTTOM
1270 CIA STL
1271 TAD SCHAR
1272 SZA CLA /COMPARE SORT CHAR
1273 JMP SORTA1 /NOT IT.
1274 TAD XR /GOT IT. NOW MAKE INDEX
1275 TAD I SORTB /TO JUMP TABLE
1276 DCA COUNT /THIS IS TABLE POINTER
1277 TAD I COUNT /GET JUMP ADDRESS FROM TABLE
1278 SPA /IF IT IS NEGATIVE,
1279 JMP SORTA3 /ITS NOT A JUMP ADDRESS - ITS A VALUE
1280 DCA COUNT
1281 CLA CLL
1282 JMP I COUNT
1283SORTA2, CLA CLL /FELL OUT BOTTOM
1284 TAD SCHAR /CARRY CHARACTER BACK TO
1285SORTA3, ISZ SORTB
1286 JMP I SORTB /DO SOMETHING ELSE
1287
1288CSMC, SCANUP /GET NEXT CHARACTER IN UPPER CASE
1289 AND [77 /MAKE IT A CONTROL CHARACTER
1290 DCA SCHAR
1291 JMP SORTA1 /SUBSTITUTE IT FOR THE UPARROW
1292
1293COUNT, 0
1294 PAGE
1295\f /COMMANDS P AND T
1296
1297CHRP, JMS POKE /LOOK AHEAD ONE CHARACTER
1298 UPPERC /BUT IN UPPERCASE
1299 TAD (-127 /SEE IF IT'S "W"
1300 DCA TEMPT /SAVE KNOWLEDGE AS FLAG
1301 TAD TEMPT
1302 SNA CLA
1303 SCAN /PASS UP W
1304 CLA /CLEAR W FROM AC
1305 TAD CFLG
1306 SPA CLA /IS THIS COMMAND M,NP?
1307 JMP CHRW /YES - TREAT LIKE M,NPW
1308 GETN /COMMAND P - GET # OF PAGES
1309 SZL SNA
1310ERR25, ERR /NEG OR 0 ARG TO P
1311 CIA
1312 DCA CPCT
1313CPOA, PUSHJ
1314 CPOC /DO N<HPY>
1315 TAD TEMPT /IS NEXT CHARACTER W?
1316 SNA CLA
1317 JMP NOYANK /YES
1318/ TAD REND /IF WANT P TO CREATE FF'S
1319/ SZA CLA /WHEN NO MORE INPUT FILE
1320 ISZ FFFLAG /NO, SAW FF?
1321 JMP NOFF /NO
1322 TAD CAFF /YES
1323 OUTPUT /OUTPUT FF
1324NOFF, DCA ZZ /FORCE Y COMMAND TO WORK
1325 PUSHJ
1326 CHRY /WHOEVER THOUGHT OF THE PW COMMAND SHOULD BE SHOT
1327YANKY, ISZ CPCT
1328 JMP CPOA
1329 POPJ
1330CPCT, 0
1331
1332POKE, 0 /RETURN NEXT CHARACTER (BY LOOKING AHEAD)
1333 TAD QLENGT
1334 CIA CLL
1335 TAD SCANP
1336 SZL CLA /MAKE SURE WE HAVEN'T RUN OFF END OF COMMAND LINE
1337 JMP I POKE /RETURN 0 IF NO CHAR
1338 TAD SCANP
1339 TAD QBASE
1340 GETQ
1341 JMP I POKE /LEAVE CHAR IN AC
1342
1343NOYANK, TAD CAFF /NPW OUTPUTS FFS
1344 OUTPUT
1345 JMP YANKY
1346\fCPOC, PUSHJ
1347 CHRH
1348CHRW, TAD (OUTPUT
1349CHRT2, DCA CWOUT /W AND T COMMANDS - SAME THING, DIFFERENT DEVICES
1350 JMS NLINES /CONVERT LINES TO CHARS
1351CWOA, CMA
1352 DCA NLINES /SET CHARACTER COUNT
1353 TAD NLINES
1354 CIA
1355 MQLDVI /COMPUTE HOW MANY WORDS THIS OUTPUT WILL USE
1356 6 /(BY TAKING 2/3 OF THE NUMBER OF CHARACTERS,
1357 CLL CML RTL / BU THAT'S SLOW SO WE TAKE 4/6 AND ROUND)
1358 JMS I (FITS /DETERMINE WHETHER THE OUTPUT WILL FIT
1359ERR17, ERR /NO - TELL THE USER
1360 CLA /CLEAR CRAP FROM AC
1361 JMP CWOC
1362CWOB, CDF 10
1363 TAD I M
1364 AND [177
1365 CDF 0
1366CWOUT, 0 /TYPE, OUTPUT, OR QPUT
1367 ISZ M
1368CWOC, ISZ NLINES /DONE?
1369 JMP CWOB /NO
1370 POPJ
1371
1372CHRT, TAD KTYPE
1373 JMP CHRT2
1374\f/X COMMAND AND LINES-TO-CHARACTER CONVERTOR
1375
1376CHRX, QREF /COMMAND X
1377 JMS NLINES /CONVERT LINES TO CHARS
1378 ADJQ /ADJUST Q-REGISTERS AND SET UP NEW LENGTH.
1379 TAD (QPUT
1380 DCA CWOUT /SET OUTPUT ROUTINE TO STORE INTO Q REG
1381 TAD MQ /LOAD THE CHARACTER COUNT
1382 JMP CWOA /GO TO TEXT OUTPUTTER
1383
1384NLINES, 0 /CONVERT + OR - N LINES AROUND . TO CHARS M,N
1385 ISZ CFLG /WAS THERE A COMMA?
1386 SKP /NO
1387 JMP MFROMN /YES - DON'T CONVERT LINES TO CHARS
1388 TAD P
1389 DCA M
1390 DCA CFLG /V3C
1391 PUSHJ /CHRL DOES A "GETN"
1392 CHRL /TO GET THE DEFAULT VALUES OF N
1393 TAD P
1394 DCA N
1395 TAD M
1396 DCA P
1397MFROMN, DCA NFLG /CLEAR NFLG IN CASE COMMA FLAG WAS ON
1398 CLL /M AND N ARE KNOWN TO BE 12-BITS LONG
1399 /AND POSITIVE
1400 TAD N
1401 BZCHK /IS N OK?
1402 CMA CLL /YES - COMPUTE N-M
1403 TAD M /BY COMPUTING M-N-1
1404 CMA /AND COMPLEMENTING IT
1405 SNL /IS M>N?
1406 JMP I NLINES /NO - RETURN N-M
1407 TAD M /N-M+M=N NOW IN AC.
1408 DCA CPCT /INTERCHANGE M AND N
1409 TAD M
1410 DCA N
1411 TAD CPCT
1412 DCA M
1413 JMP MFROMN
1414\f/COMMANDS ; < AND >
1415
1416CFSI, TAD ITRST
1417 SNA CLA
1418ERR24, ERR /FAILING SEARCH NOT IN ITERATION
1419CSEM, OVRLAY
1420 QOVRLY
1421 CSEMO
1422\f/ ^A ROUTINE
1423
1424CTLA, TAD KTYPE
1425CEXP, DCA WHERTO
1426 TAD CHAR
1427 DCA QUOTE /TERMINATING CHAR SAME AS COMMAND CHAR
1428 DCA NFLG /KILL NUMBER IF PRESENT
1429CTLALP, QUOTST
1430 JMP I [IREST
1431WHERTO, 0 /TYPE OR IGNORE THE CHARACTER
1432 CLA
1433 JMP CTLALP
1434 PAGE
1435\f/COMMANDS A AND Y
1436
1437CHRA, NCHK /COMMAND A
1438 JMP CHAA
1439 GETNUM
1440 TAD P
1441 DCA R
1442 SZL
1443 JMP I (ERR11 /ERROR IF POINTER OFF PAGE
1444 CDF 10
1445 TAD R
1446 CMA CLL
1447 TAD ZZ /RETURN 'POP' IF POINTER OUTSIDE RANGE [0,Z-1]
1448 SNL CLA /OTHERWISE VALUE OF CHARACTER AT POINTER POSITION
1449 JMP I (ERR11 /POP
1450 TAD I R
1451 AND [377
1452 CDF 0
1453NCOM14, CLL
1454 JMP I (NCOM
1455\fCHRY, TAD NFLG
1456 SZA CLA
1457ERR18, ERR /NUMERIC ARGUMENT TO Y
1458 TAD OUTR
1459 CIA
1460 TAD ERROR
1461 SZA CLA
1462 TAD ZZ
1463YSKP, SZA CLA /CHANGE TO SKP CLA TO NEVER ABORT Y COMMAND
1464ERR32, ERR /Y COMMAND ABORTED
1465 DCA ZZ
1466 DCA P /WIPE OUT THE BUFFER
1467CHAA, TAD (ZMAX-1
1468 AND REND
1469 CIA CLL
1470 TAD ZZ /IF WE HAVE ALREADY SEEN THE INPUT EOF,
1471 SZL CLA /OR IF WE'RE ALREADY FULL (OR NEARLY SO)
1472 JMP APLF /GET OUT
1473DECGET, ISZ ICRCNT
1474 JMP I2 /NO NEED TO READ
1475 CLL
1476 TAD INRSIZ
1477 TAD INRCNT
1478STECO1, SNL /"SKP!CLA" FOR SUPERTECO
1479 DCA INRCNT /UPDATE RECORD COUNT
1480LFTAB, CLL CML CMA RTR /IF WE OVERFLOWED THE END OF THE FILE, !
1481 RTR /5 ENTRY TABLE: MUST BE - - - + + !
1482 RTR /SHORTEN THE READ BY THE CORRECT AMOUNT !
1483 TAD INCTLW / !
1484 DCA INCTRL /SO THAT WE WILL NOT READ TOO FAR !
1485 JMS I INHND
1486I3,
1487INCTRL, 0400
1488BUFIN, IN /6200 IF 8K, 5600 IF 12K
1489IBLK, 0
1490 SMA CLA
1491 SKP
1492 JMP INER /IGNORE END-OF-FILE ERRORS, WE'LL SEE THE ^Z.
1493 TAD IBLK
1494 TAD INRSIZ /BUMP RECORD NUMBER BY THE MAXIMUM NUMBER
1495 DCA IBLK /(IF WE READ SHORT ITS THE LAST ONE ANYWAY)
1496 CLA CMA
1497 TAD BUFIN
1498 DCA INXR /SET UP INPUT XR
1499 TAD INPCNT
1500 DCA ICRCNT
1501 MTHREE
1502 DCA I3
1503I2, NOP /CDF 20 IF 12K
1504 ISZ I3
1505 JMP I1 /NORMAL CHARACTER
1506 MTHREE /WEIRD CHARACTER-RESET SWITCH
1507 DCA I3
1508 MTWO
1509 TAD INXR
1510 DCA INXR /MOVE INPUT XR BACK TO BEGINNING OF DBLWORD
1511 TAD I INXR
1512 AND [7400
1513 DCA FFFLAG /TEMP
1514 TAD I INXR
1515 AND [7400
1516 CLL RTR
1517 RTR
1518 TAD FFFLAG
1519 CLL RTR
1520 RTR
1521 SKP
1522I1, TAD I INXR
1523IC, NOP /CDF 0 IF 12K
1524 AND [177 /MASK OFF GARBAGE
1525 /INPUT CHARACTER IN AC
1526 SZA
1527 TAD (-177
1528 SNA /IGNORE BLANK TAPE AND RUBOUTS
1529 JMP DECGET
1530 TAD (177-32
1531STECO2, SNA /"SKP" FOR SUPERTECO
1532 JMP APFS /IT'S A ^Z
1533 TAD (16
1534 SNA
1535 JMP APFF /ITS A FORM FEED
1536 TAD CAFF /RESTORE CHAR
1537 CDF 10
1538 DCA MQ /SAVE CHAR
1539 TAD I ZZ /PROTECT HIGH-
1540 AND [7400 /ORDER BITS
1541 TAD MQ /OF TARGET
1542 DCA I ZZ /STORE CHAR IN BUFFER
1543 TAD MQ
1544 CDF 0
1545 ISZ ZZ
1546 TAD [-12
1547 SNA CLA /IF THE CHAR IS A LINE FEED,
1548 TAD (-310 /CHECK THAT THE BUFFER IS NOT NEARLY FULL
1549 JMP CHAA
1550APFS, DCA REND /SIGNAL END OF FILE
1551 SKP
1552APFF, STA
1553APLF, DCA FFFLAG /SET FORM FEED FLAG
1554 POPJ
1555\fINER, DCA REND /INHIBIT FUTURE INPUTS
1556ERR15, ERR
1557
1558INCTLW, 401 /1021 IF 12K MACHINE
1559INPCNT, 6400 /5000 IF 12K MACHINE
1560 PAGE
1561\f/TELETYPE ROUTINES
1562
1563TYPCTV, 0 /TELETYPE STUFFER
1564 SORT
1565 CTLBEL
1566 CTLTAB-CTLBEL
1567 DCA SCHAR /STORE (POSSIBLY TRANSLATED) CHAR
1568OUTCC, TAD SCHAR
1569 ISZ COLCT /BUMP COLUMN COUNTER
1570 AND [7740
1571 SZA CLA /IS THE CHAR A CONTROL CHARACTER?
1572 JMP NOCON /NO
1573 TAD (136
1574 PUTT /OUTPUT "^"
1575 ISZ COLCT
1576 TAD [100
1577OUTLF, TAD SCHAR
1578OUTLF1, PUTT
1579 JMP I TYPCTV
1580\fCOLCT, 0
1581
1582OUTCR, DCA COLCT /RESET CHAR COUNT
1583 JMP OUTLF
1584OUTVT, TAD [4
1585OUTFF, TAD [7770 /FORM FEED IS 8 LINE FEEDS, VERT TAB IS 4
1586 DCA COLCT /*** BUG
1587ASR33, TAD CALF /SIMULATE FORMFEEDS AND VERT TABS WITH LINEFEEDS
1588 JMP OUTCOM /*K* 8 LOCS AT ASR33 OVERLAYED BY ASR35 CODE
1589
1590OUTHT, TAD COLCT /COLUMN COUNTER, MOD 8
1591 AND [7
1592 TAD [7770 /SIMULATE TABS WITH SPACES
1593 DCA COLCT
1594 40 /TAKE UP SPACE SO ASR-35 ROUTINE WILL JUST FIT
1595 TAD .-1 /USE SPACES FOR TABS
1596OUTCOM, PUTT /PUT ONE OUT THE
1597 ISZ COLCT /WINDOW
1598 JMP I (TPUTX /STILL MORE INSIDE
1599 JMP I TYPCTV
1600
1601NOCON, TAD SCHAR
1602 AND [100
1603EU1, SNA CLA /*EU SET TO CLA IF EUFLAG < 0 (NO CASE FLAGGING)
1604 JMP OUTLF /NOT ALPHANUMERIC
1605EU2, NOP /*EU SET TO TAD [40 IF EUFLAG>0 (FLAG UPPER CASE)
1606 TAD SCHAR
1607 AND [40
1608 SNA CLA
1609 JMP OUTLF
1610 TAD SQUO
1611 PUTT
1612 ISZ COLCT
1613 TAD SCHAR
1614 AND [137
1615 JMP OUTLF1 /OUTPUT UPPER CASE VERSION
1616
1617OUTBEL, TAD SCHAR
1618 PUTT
1619 JMP OUTCC
1620\f /ROUTINE TO MANIPULATE Q-REGISTER STORAGE
1621
1622/*** ALLOW : TO MEAN APPEND TO Q-REGISTER
1623/APPLIES TO X AND ^U COMMANDS
1624/MAKE SURE CMD LINE AND ^S ZERO CLNF
1625
1626QADJ, 0
1627 SPA
1628 JMP ERR12 /STRING TOO LONG FOR Q-REGISTER
1629 DCA MQ /SAVE NEW LENGTH OF Q-REGISTER
1630 QSUM /COMPUTE POINTER TO CURRENT Q-REGISTER
1631 AC3777
1632 AND I QPTR
1633 TAD QP
1634 DCA R
1635 AC3777
1636 AND I QPTR /GET ITS CURRENT LENGTH
1637 CIA CLL
1638 TAD MQ /COMPUTE DIFFERENCE
1639 SNL /ADJUST Q-REGS
1640 JMP QDNN /TO HOLD NEW STRING
1641 SNA /CHECK FOR ZERO
1642 JMP QADJDN /NOTHING TO DO
1643 TAD QZ /MOVE Q-REGISTERS UP TO INSERT CHARS
1644 DCA QP /(LINK IS 1 FROM PREVIOUS SNL)
1645 TAD QP
1646 TAD MQMAX /SEE IF OUT OF BOUNDS
1647 SNL CLA /TWO PLACES TO TOGGLE LINK THERE
1648ERR12, ERR /GETTING TOO FULL
1649 TAD QZ
1650 DCA Q
1651 TAD QP
1652 DCA QZ
1653 ISZ QP
1654QUPL, TAD Q
1655 CIA
1656SQUO, TAD R /DOUBLES AS ASCII FOR '
1657 SNA CLA
1658 JMP QADJDN
1659 CMA
1660 TAD Q
1661 DCA Q
1662 MTWO
1663 TAD QP
1664 DCA QP
1665 TAD Q
1666 GETQ
1667 QPUT
1668 JMP QUPL
1669\fQDNN, TAD R /MOVE Q-REGS DOWN TO ABSORB CHARACTERS
1670 DCA QP
1671QDNN1, TAD QZ
1672 CIA
1673 TAD R /-NUMBER OF CHARS TO MOVE
1674 SNA CLA /DONE?
1675 JMP QDNNF /YES
1676 TAD R
1677 GETQ
1678 QPUT
1679 ISZ R
1680 JMP QDNN1 /LOOP AGAIN
1681QDNNF, TAD QP /SET NEW VALUE
1682 DCA QZ /OF HIGHEST CHAR
1683QADJDN, STL CLA RAR /4000
1684 AND I QPTR /SAVE HIGH ORDER PART
1685 TAD MQ
1686 DCA I QPTR /SAVE NEW LENGTH OF Q-REGISTER IN Q-REG TABLE
1687 TAD QCMND /SET UP COMMAND LINE AGAIN
1688 SETCMD /AS IT MAY HAVE BEEN SHUFFLED.
1689 QSUM /RECOMPUTE POINTER TO BEGINNING OF NEW Q-REG
1690 JMP I QADJ
1691
1692MQMAX, -QMAX
1693
1694QOVER, 0 /SUBROUTINE TO SKIP TO END OF STRING
1695 QCHK /GET THE QUOTE CHARACTER (IF ANY)
1696 TAD SCANP
1697 DCA OSCANP /SAVE BACKUP SCAN POINTER
1698QOVERL, QUOTST
1699 JMP I QOVER /FOUND AN ALTM OR EQUIVALENT - RETURN
1700 JMP QOVERL /NOT END - SKIP ANOTHER CHAR
1701 PAGE
1702\f /Q-REGISTER SUBROUTINES
1703
1704QSUMR, 0 /COMPUTE POINTER TO Q-REG
1705 SNA
1706 TAD QNMBR /NORMALLY USES QNMBR, BUT CAN BE OVERRIDDEN BY AC
1707 CIA
1708 DCA QKNT
1709 DCA QP
1710 TAD (QARRAY /BASE ADDR OF Q-REG POINTERS
1711 DCA QPTR
1712 JMP QSUMB
1713QSUML, AC3777
1714 AND I QPTR /ADD # OF CHARS IN LOWER REG
1715 TAD QP
1716 DCA QP
1717 ISZ QPTR /SKIP VALUE WORD
1718 ISZ QPTR /POINT TO NEXT Q-REG
1719QSUMB, ISZ QKNT /REACHED OUR Q-REGISTER YET?
1720 JMP QSUML /NO - ADD IN ANOTHER
1721 JMP I QSUMR
1722QKNT, 0
1723\fSGET, 0 /SCAN COMMAND LINE OR MACRO
1724SGET1, CLA /** CALLED WITH AC NON-ZERO **
1725 TAD QLENGT
1726 CIA CLL
1727 TAD SCANP
1728 SZL CLA /CHECK THAT WE ARE STILL INSIDE THE COMMAND LINE
1729 JMP SGOVFL /NO - COMMAND DONE
1730 TAD SCANP /GET CHARACTER POSITION IN LINE
1731 TAD QBASE /ADD IT TO THE ADDRESS OF THE LINE
1732 GETQ /AND GET THAT CHARACTER.
1733 DCA LASTC
1734 TAD TFLG
1735 AND LASTC /IF THE TRACE FLAG IS ON,
1736 SZA
1737 TYPE /PRINT THE CHAR
1738 TAD LASTC
1739 ISZ SCANP /INCREMENT CHARACTER POINTER AFTER FETCH
1740 JMP I SGET /RETURN
1741SGOVFL, TAD MPDL /"MPDL" IS THE PUSHDOWN POINTER ON ENTRY TO THIS
1742 SNA /MACRO. IF IT IS 0, WE ARE NOT IN A MACRO
1743 JMP I (T1 /SO RETURN TO THE USER
1744 TAD PDLP /CHECK THAT THE ENDING POINTER IS THE SAME
1745 IAC
1746 SZA CLA /AS THE ENTRY ONE - OTHERWISE WE HAVE
1747ERR13, ERR /SCREWED UP SOMEHOW (EG WE ARE
1748 POP / IN THE MIDDLE OF A COMMAND)
1749 DCA SCANP
1750 POP
1751 DCA ITRST
1752 POP /RESTORE THE PREVIOUS VALUES OF
1753 DCA MPDL /MPDL, THE SCAN POINTER AND THE COMMAND LINE
1754 POP /POINTER FROM THE PUSHDOWN LIST
1755 SETCMD
1756 JMP SGET1 /AND FETCH A CHARACTER FROM THE UPPER LEVEL.
1757\fCMDSET, 0 /SUBROUTINE TO SET UP COMMAND LINE POINTERS
1758 DCA QCMND /STORE IN COMMAND LINE NUMBER
1759 TAD QCMND
1760 QSUM
1761 TAD QP /GET FIRST LOCATION IN COMMAND LINE
1762 DCA QBASE /AND STORE IN "QBASE"
1763 AC3777
1764 AND I QPTR
1765 DCA QLENGT /STORE THE LINE LENGTH IN "QLENGT"
1766 JMP I CMDSET /RETURN
1767
1768QREFER, 0 /SET UP POINTERS FOR Q-REG REFERENCE
1769 SZA
1770 JMP QREFEX /AHA - WE ALREADY HAVE THE Q-REGISTER
1771 SCANUP /GET Q-REGISTER IDENTIFIER
1772 DCA QNMBR
1773 TAD QNMBR
1774 TSTSEP /TEST FOR ALPHANUMERIC (LOWER CASE LEGAL)
1775ERR03, ERR /OOPS - BAD Q-REGISTER REFERENCE
1776 TAD QNMBR
1777 TAD [7700
1778 SPA /NUMERIC?
1779 TAD Z7 /YES - FORCE NUMBERS UP TO ABUT LETTERS
1780 TAD CALF /FORCE IDENTIFIER INTO THE RANGE 1-44 (OCTAL)
1781QREFEX, DCA QNMBR /STORE AWAY NUMBER FOR FURTHER REFERENCE
1782 QSUM /COMPUTE QP AND QPTR
1783 JMP I QREFER /RETURN
1784
1785CDBQ, OVRLAY
1786 QOVRLY /READ IN Q-OVERLAY
1787 CDBQO
1788
1789CHRO, OVRLAY /READ IN Q-OVERLAY
1790 QOVRLY
1791 CHROO
1792\fOVERLY, 0
1793 TAD I OVERLY /GET LOCATION TO CHECK
1794 ISZ OVERLY
1795 DCA TMP
1796 TAD I OVERLY
1797 DCA OVERLY /SET RETURN ADDRESS
1798 TAD I TMP /IS OUR OVERLAY IN CORE?
1799 SNA
1800 JMP I OVERLY /YES, BRANCH INTO IT
1801 DCA TMP /NO, SET BLOCK TO READ IN
1802/** THE NEXT 5 WORDS ARE MODIFIED IF WE HAVE MORE THAN 12K
1803OVREAD, JMS I (7607 /CALL SYSTEM HANDLER
1804 0200 /READ 2 PAGES
1805 3200 /INTO 3200
1806TMP, 0 /FROM THIS BLOCK
1807 HLT /ERROR READING OVERLAY
1808 JMP I OVERLY /GO TO NEXT SPOT
1809
1810CTLTAB, OUTBEL /BELL
1811 OUTCR
1812POUTHT, OUTHT
1813 4044 /$ WITH SIGN BIT ON
1814 OUTFF
1815 OUTVT
1816 OUTLF
1817
1818ALTTAB, 4033
1819 4033 /ALTMODE WITH SIGN BIT ON
1820
1821CATS, STA /@ COMMAND - FAKE OUT "IREST"
1822IREST, DCA QFLG /RESET QUOTED STRING FLAG
1823 TAD CAAM
1824 DCA QUOTE /RESET QUOTE CHAR TO ALTMODE
1825POPK, POPJ /RETURN
1826
1827QTST, 0 /SUBROUTINE TO GET A CHAR AND TEST FOR ALTMODE
1828 SCAN
1829 SORT
1830 QUOTE
1831 QTST-QUOTE /RETURN IF QUOTE FOUND
1832 ISZ QTST
1833 JMP I QTST /SKIP-RETURN WITH AC INTACT IF NOT FOUND
1834\f /COMMANDS ^U AND E - ALSO ERROR ROUTINE
1835
1836CTLU, OVRLAY
1837 FOVRLY
1838 CTLUO
1839 PAGE
1840\fERRXX, ERR30+1 /ENTRY POINT ALSO SERVES AS A FLAG FOR "TQMK"
1841 KCC /CLEARS AC
1842 CDF 0 /JUST IN CASE
1843 TAD I ERRXX /GRAB SIGNAL '0' NOW
1844 DCA ERRTMP /BEFORE OVERLAY MIGHT DESTROY IT
1845 OVRLAY /GO TO ERROR OVERLAY
1846 EOVRLY
1847 ERRYY
1848
1849ERRRET, TAD ERRTMP /GET THE LOCATION AFTER THE CALL
1850 SNA CLA /IF IT'S ZERO AND WE WERE CHAINED TO,
1851CHOOPS, NOP /ITS A FATAL ERROR - JMP CTLC
1852FATALJ= JMP I (CTLC
1853CTRLP, TAD SCANP
1854 CIA
1855 DCA ERRXX /SET ERRXX TO CHAR POSITION OF ERROR CHAR.
1856 KCC /ZAP KEYBOARD FLAG
1857 JMP I (T0 /CONTINUE AS NORMAL UNLESS USER TYPES "?"
1858
1859CHRE, SCANUP /COMMAND E
1860 DCA TYI
1861 TAD TYI
1862 SORT
1863 EFLST
1864 EFTAB-EFLST
1865 CLA
1866 OVRLAY
1867 FOVRLY
1868 CHRED
1869ERRTMP, 0 /MUST BE INITIALLY 0
1870\f /COMMANDS I AND <TAB>
1871
1872CHRI, NCHK /I COMMAND
1873 JMP CIL1
1874 TAD N /INSERT CHAR WHOSE VALUE IS N
1875 JMS UPOC
1876/*** CHECK FOR $
1877 POPJ
1878CTLI, DCA QFLG /CANNOT BE QUOTED
1879/ CLA CMA /FOR TAB INSERT
1880/ TAD SCANP
1881/ DCA SCANP /BACK UP SCAN POINTER BY ONE
1882/ /*** THIS IS A BUG
1883 TAD CAHT /TAB
1884 JMS UPOC
1885CIL1, QSKP /COUNT LENGTH OF INSERTION
1886 DCA DVT1 /ZERO FUDGE USED BY FS COMMAND
1887CIL2, TAD OSCANP
1888 TAD QBASE
1889 DCA QP /SET UP POINTER TO INSERTION STRING
1890 TAD SCANP
1891 CIA CLL
1892 TAD OSCANP
1893 DCA MQ /STORE CHAR COUNT TO INSERT (-1)
1894 TAD MQ
1895 TAD DVT1 /ADD FS FUDGE
1896 CMA
1897 SNL /DID WE INSERT MORE THAN WE DELETED?
1898 JMP EXPAND /YES - IGNORE SIGN BIT OF COUNT
1899 CIA
1900 PUSHJ
1901 ADJ2 /COMPRESS OUT EXCESS DELETED STUFF
1902 JMP CIL4
1903CIL3, TAD QP
1904 GETQ /GET A CHAR
1905 DCA TYI
1906 JMS STOREC /STORE A CHARACTER
1907 ISZ QP
1908CIL4, ISZ MQ
1909 JMP CIL3 /OF INSERTION
1910 JMP I [IREST
1911
1912STOREC, 0 /STORE CHAR IN "TYI" INTO TEXT BUFFER AT P
1913 CDF 10
1914 TAD I P
1915 AND [7400
1916 TAD TYI
1917 DCA I P
1918 CDF 0
1919 ISZ P
1920 JMP I STOREC
1921\f/G COMMAND
1922
1923CHRG, QREF /G COMMAND - GET Q-REGISTER NUMBER
1924 DCA NFLG
1925 AC3777
1926 AND I QPTR /GET COUNT OF CHARS IN REGISTER
1927 CMA
1928 DCA MQ /SAVE AS TRANSFER COUNT
1929 ISZ CLNF
1930 SKP
1931 JMP COLG4
1932 DCA CLNF
1933 AC3777
1934 AND I QPTR
1935EXPAND, PUSHJ /COME HERE FROM INSERT LOGIC
1936 ADJ /INCREASE TEXT BUFFER SIZE ( Q-REG LENGTH MAY
1937 JMP CIL4 /BE NEGATIVE) AND GO TRANSFER THE CHARS
1938
1939TYI, 0 /TELETYPE INPUT
1940TYI1, KSF /WAIT FOR THE KEYBOARD FLAG
1941KSFWT, JMP .-1 /WHILE WAITING, DISPLAY TEXT ON SCOPE
1942 CTCCHK /CHECK FOR ^C
1943 KRB /WATCH OUT - AC MAY NOT BE 0!
1944 AND [177
1945 SNA
1946 JMP TYI1 /IGNORE NULL CHARS AND LEADER
1947 SORT
1948 ALTLST
1949 ALTTAB-ALTLST /LOOK FOR NON-STANDARD ALTMODES
1950 AND [177 /IN CASE WE RETURNED A NEGATIVE VALUE
1951 JMP I TYI
1952
1953UPOC, 0 /MOVE TEXT BUFFER UP ONE CHAR
1954 AND [177
1955 DCA TYI
1956 CLA IAC
1957 PUSHJ
1958 ADJ
1959 JMS STOREC /STORE CHAR IN THE HOLE WE MADE
1960 JMP I UPOC
1961
1962CUPPER, 0 /FORCE CHARACTER TO UPPER CASE
1963 TAD [-100
1964 SMA /IF ITS >100
1965 AND (37 /REDUCE IT TO BE <140
1966 TAD [100
1967 JMP I CUPPER /RETURN
1968\fCOLG3, TAD QP
1969 GETQ /GET A CHAR
1970 TYPE
1971 ISZ QP
1972COLG4, ISZ MQ
1973 JMP COLG3
1974 POPJ
1975\fESCAPE, 0
1976 TAD CAAM /TYPE ESCAPE
1977 PUTT
1978 TAD I ESCAPE
1979 PUTT /TYPE ARGUMENT
1980 JMP I ESCAPE /OK TO RETURN TO ARGUMENT
1981 PAGE
1982\fTSAVE, TAD I [QPNTR
1983 SZA CLA /IF WE ARE NOT AT THE BEGINNING OF THE C.L.
1984 RESORT /TREAT THIS LIKE ANY OTHER ^S
1985 MTWO /DROP OFF THE TWO BELLS OR ALTMODES
1986 TAD OCMDLN
1987 ADJQ /SET COMMAND STRING LENGTH TO OLD VALUE
1988 TAD L44
1989 QREF /SET UP POINTERS TO Q-REG Z
1990 ADJQ /KILL CONTENTS OF Q-REG Z
1991 TAD I [QPNTR
1992 DCA I (QPNTR-2
1993 DCA I [QPNTR /DO A QUICK SHUFFLE OF Q-REG LENGTHS
1994 JMP I (TCTLU
1995\fCHRQ, QREF /COMMAND Q
1996 CLL
1997 JMP CQOA
1998
1999CPCS, QREF /COMMAND %
2000 GETN
2001CQOA, ISZ QPTR /POINT TO VALUE WORD
2002 TAD I QPTR /INCREMENT VALUE BY ARGUMENT
2003 DCA I QPTR
2004/ADD LINKS
2005 STA
2006 TAD QPTR /GO BACK ONE
2007 DCA QPTR2 /ALSO COMPL LINK
2008 CML RAR
2009 TAD I QPTR2
2010 DCA I QPTR2
2011 TAD I QPTR2
2012 RAL
2013 CLA
2014 TAD I QPTR
2015 JMP I (NCOM /MAKE A NUMBER
2016
2017TYCRLF, 0 /TYPE A CR AND LF
2018 TAD CACR /CR
2019XTYPE, TYPE
2020 TAD CALF /LF
2021 TYPE
2022 JMP I TYCRLF /RETURN
2023
2024QPTR2, 0
2025
2026CHGT, OVRLAY
2027 QOVRLY
2028 CHGTO
2029CHLT, OVRLAY
2030 QOVRLY
2031 CHLTO
2032\fCCMA, NCHK /COMMAND ,
2033 JMP NERR /NUMBER FLAG NOT SET
2034 TAD NLINK
2035 SZA CLA
2036ERR26, ERR /NEG ARGUMENT TO ,
2037 ISZ CFLG
2038 SKP
2039 JMP NERR /3 NUMERIC ARGUMENTS
2040 TAD N /MOVE N TO M
2041CCMA3, DCA M /ENTERED HERE BY "H" COMMAND
2042 DCA N /AND CLEAR N
2043 STA
2044 DCA CFLG /SET COMMA FLAG
2045 POPJ
2046\f/RETURNS 13-BIT RESULT IN AC,LINK
2047
2048NGET, 0 /SUBROUTINE TO GET LAST NUMBER, WITH
2049NGET1, NCHK /DEFAULT VALUES OF +1 (NO NUMBER),
2050 JMP NGET2 /OR -1 (JUST A MINUS SIGN)
2051 GETNUM
2052 JMP I NGET /DIGITS SEEN - RETURN THEM
2053NGET2, CLA CLL IAC /NO DIGITS SEEN
2054 PUSHJ /MAKE BELIEVE WE SAW THE DIGIT "1"
2055 NCOM /AND CREATE A NUMBER FROM IT (TAKING ANY
2056 JMP NGET1 /OPERATORS INTO ACCOUNT) AND USE IT
2057
2058BACKUP, 0
2059 TAD I [QPNTR /SEE IF ANYTHING TO ERASE
2060 SNA CLA
2061 JMP I (T0 /NO, START ALL OVER
2062 STA
2063 TAD I [QPNTR /THEN THE CHARACTER COUNT
2064 ADJQ /REDUCE THE LENGTH OF THE COMMAND REGISTER BY 1
2065 TAD QZ
2066 GETQ /GET THE CHARACTER WE RUBBED OUT
2067 JMP I BACKUP
2068
2069CHLCMP, 0 /COMPARISON SUBROUTINE
2070 TAD I P /DATA FIELD IS 10
2071 AND [377
2072 CDF 0
2073 SORT
2074 CAFF
2075 LFTAB-CAFF
2076 SPA CLA /LINE TERMINATORS ARE CHANGED TO NEGATIVE NOS.
2077 ISZ CDT /IS COUNT EXHAUSTED?
2078 JMP CHLRET /NO
2079CHRLI, ISZ P
2080L44, 44
2081 CDF 0
2082 POPJ
2083
2084CHRH, PUSHJ /COMMAND H
2085 CCMA3 /SET M=0 AND COMMA FLAG ON AND FALL INTO "Z"
2086 /** COULD CAUSE ERROR ON B AND H IF NFLG SET
2087CHRZ, TAD ZZ /COMMAND Z
2088CTLH, /^H COMMAND - TIME OF DAY - NOT IMPLEMENTED
2089CHRB, JMP I (NCOM14 /COMMAND B
2090
2091CHLRET, CDF 10
2092 JMP I CHLCMP
2093\fEFTAB, IOV
2094 XOV
2095 XOV
2096 XOV
2097 XOV
2098 IOV
2099 IOV
2100 XOV
2101\fXOV, OVRLAY
2102 XOVRLY
2103 CHREX
2104
2105IOV, OVRLAY
2106 IOVRLY
2107 CHRER
2108\f/COMMANDS = AND \ DISPATCHER TO OVERLAY
2109
2110CEQL, OVRLAY
2111 FOVRLY
2112 CEQLO
2113CBSL, OVRLAY
2114 FOVRLY
2115 CBSLO
2116
2117ZROSPN, DCA SCANP /RESET TO BEGINNING OF ITERATION
2118ZRON, DCA NFLG /KILL NUMBER FLAG
2119 JMP I [IREST
2120 PAGE
2121\f/ I/O-OVERLAY
2122
2123/ IOVRLY XOVRLY FOVRLY
2124/ ER EF EU
2125/ EB EC ES
2126/ EW EX ET
2127/ EG EV
2128/ EH
2129/ EO
2130
2131 *3200
2132
2133IOVRLY, 0
2134 QOVRLC
2135 EOVRLC
2136 XOVRLC
2137 FOVRLC
2138
2139 /SUBROUTINE TO DO LOOKUPS AND ENTERS (LINK CRITICAL ON ENTRY)
2140
2141OPEN, 0 /CALLED WITH MONITOR CODE - 2 IN AC
2142 DCA RSTSW /ENTER OR LOOKUP
2143 SZL CLA /IF THIS IS THE OUTPUT SIDE OF AN "EB" COMMAND,
2144 JMP DEVLOD /SKIP THE STATEMENT SCAN
2145 QCHK
2146 TAD DSKNAM /PACKED SIXBIT FOR 'DSK:'
2147 DCA DEVC
2148 TAD (72 /RESTORE :
2149NGOM1, DCA DEVLST+1
2150NGO, DCA NAME /CLEAR NAME
2151 DCA NAME+1
2152 DCA NAME+2
2153 MTWO
2154 DCA PERDSW
2155NAMCM1, DCA NAMCNT
2156\fNAMEC, QUOTST /GET CHAR AND TEST FOR ALTM
2157 JMP DEVQOT /ALTM - END OF NAME
2158 SORT /NO - CHECK SPECIAL CHARS
2159 DEVLST /([,:,., AND SPACE
2160 DEVTAB-DEVLST
2161 TSTSEP /NO, SEE IF ALPHANUMERIC
2162ERR08, ERR /ILLEGAL CHAR
2163 TAD NAMCNT
2164 TAD [-10
2165 SMA CLA /MORE THAN 6 CHARS?
2166 JMP NAMEC /YES, IGNORE
2167 TAD NAMCNT /NO, PACK IT
2168 CLL RAR
2169 DCA TEMP1 /*K* NOTE ASSUMPTION NAME STARTS AT LOC 0!
2170 TAD SCHAR
2171 UPPERC /** "UPPERC" ALWAYS COMPLEMENTS LINK
2172 AND [77
2173 SNL
2174 JMP .+4
2175 CLL RTL
2176 RTL
2177 RTL
2178 TAD I TEMP1
2179 DCA I TEMP1
2180 ISZ NAMCNT
2181 JMP NAMEC
2182
2183PERD, ISZ PERDSW /FOUND A PERIOD
2184 TAD NAME
2185 SNA CLA /ERROR IF WE HAVE
2186 JMP ERR08 /DOUBLE PERIODS OR NO FILE NAME
2187 DCA DEVLST+1 /DEVICE NO LONGER LEGAL
2188 DCA NAME+3 /ZERO EXTENSION OUT
2189 TAD [6 /AND SET POINTER TO 6TH CHARACTER
2190 JMP NAMCM1
2191
2192COLON, TAD NAME+1
2193 SNA /WE MUST PACK THE NAME INTO ONE WORD OURSELVES
2194 JMP .+5 /BECAUSE IF "OPEN" IS CALLED FROM THE OUTPUT
2195 TAD NAME /SIDE OF AN "EB" COMMAND, WE SKIP
2196 SMA CLA /THE NAME COLLECTOR.(WITH GOOD REASON -
2197 CLL CML RAR /THE USR OVERLAYS THE COMMAND LINE).
2198 TAD NAME+1 /SINCE THE OS/8 "ASSIGN" CALL TO THE USR
2199 TAD NAME /REPLACES THE 2ND NAME WORD WITH THE DEVICE
2200 DCA DEVC /NUMBER, ALL NAME INFO MUST BE HELD IN WORD 1.
2201 JMP NGOM1 /DEVICE NAME STORED - RESET FOR FILE NAME
2202
2203DEVLST, 56 /.
2204 72 /:
2205DSKNAM, 5723 /=0423+1300+4000 - SERVES AS LIST TERMINATOR
2206\fDEVQOT, ISZ PERDSW /IF WE NEVER SAW A PERIOD,
2207 DCA NAME+3 /WIPE OUT THE EXTENSION
2208 JMS I (GETUSR /BRING USR INTO CORE
2209
2210DEVLOD, TAD I OPEN /MOVE HANDLER ADDRESS
2211 DCA DEVHND
2212 ISZ OPEN /AND BUMP POINTER
2213 TWO
2214 TAD RSTSW
2215 DCA CODE /ENTER OR LOOKUP
2216 CIF 10 /AND RESET TABLES
2217 JMS I [200
2218 13
2219RSTSW, 0 /DON'T ZAP OPEN FILES ON INPUT
2220 DCA DEVNO /ZERO SECOND NAME WORD
2221 CIF 10
2222 JMS I [200
2223 1 /ASSIGN HANDLER
2224DEVC, 0
2225DEVNO, 0
2226DEVHND, 0
2227 JMP OPNERR /ERROR - KICK USR OUT FIRST
2228 DCA STBLK
2229 TAD RSTSW /GET LOOKUP-ENTER SWITCH
2230 TAD NAME /IF NAME IS NULL AND THIS IS A LOOKUP,
2231 SNA CLA
2232 JMP OPSUCC /IT JUST SUCCEEDED
2233 TAD DEVNO /DEVICE #
2234 CIF 10
2235 JMS I [200
2236CODE, 0 /ENTER OR LOOKUP
2237STBLK, 0 /FILLED WITH STARTING BLOCK
2238TEMP1,
2239FLN, 0 /FILLED WITH -LENGTH
2240/**** CHECK IF AC MUST = 0
2241 JMP OPNERR /ERROR
2242OPSUCC, TAD DEVHND /HANDLER ADDRESS IN AC
2243 JMP I OPEN
2244PERDSW, 7777 /FLIP FLOP FOR EXTENSION
2245NAMCNT, 0 /CHARACTER COUNT
2246\f/*** CHECK FOR : (SEE P.26) RETURN VALUE IF FNF, ALSO IF FOUND
2247OPNERR, TAD RSTSW /WE SHOULD ONLY KILL THE OUTPUT FILE
2248 SNA CLA
2249 JMP .+3 /IF THIS IS AN OUTPUT ERROR
2250EBERR, TAD ERROR
2251 DCA OUTR
2252 PUSHJ
2253PECDSM, ECDISM /DISMISS THE USR
2254ERR16, ERR
2255 0 /*K* TELLS ERR RTN TO EXIT IF WE WERE CHAINED TO
2256
2257 PAGE
2258\fCHRER, TAD I (TYI
2259 SORT
2260 ERLST
2261 ERTAB-ERLST
2262 ERR /CAN'T HAPPEN
2263
2264ERTAB, EBAK /EB
2265 ROPEN /ER
2266 WOPEN /EW
2267
2268ERLST, 102 /EB
2269 122 /ER
2270 127 /EW
2271
2272 /FILE OPEN COMMMANDS:
2273
2274EBAK, CLA CMA CLL /"EDIT BACKUP" COMMAND WITH LINK CLEAR
2275 PUSHJ /USE 'ROPEN' TO SET POINTERS
2276 ROPEN /WITHOUT KICKING OUT THE USR (AC=-1 ON ENTRY)
2277 TAD I (DEVNO /DEVICE #
2278 TAD (OSDCBT-1
2279 DCA R
2280 CDF 10
2281 TAD I R /GET DEVICE CODE FROM DCB TABLE
2282 CDF
2283 SMA CLA /NEGATIVE IF FILE-STRUCTURED
2284 JMP I (EBERR /YOU CAN'T DO THAT!
2285 TAD NAME+3 /EXTENSION
2286 TAD (-213
2287 SNA
2288 JMP I (EBERR /CAN'T EB A .BK FILE
2289 TAD DOTBK /RESTORE EXTENSION
2290 DCA R /SAVE IT
2291 TAD DOTBK /.BK EXTENSION
2292 DCA NAME+3
2293 CIF 10
2294 TAD I (DEVNO /DEVICE #
2295 JMS I [200 /DELETE THE OLD BACKUP
2296 4
2297 NAME
2298 0
2299DOTBK, 213 /WHO CARES IF IT'S NOT THERE?
2300 TAD R /OLD EXTENSION
2301 DCA NAME+3
2302 CLA CLL CML IAC /SET EDIT BACKUP FLAG AND DO AN "ENTER"
2303 /LINK MUST BE SET HERE FOR OPEN
2304WOPEN, DCA EBFLG /LINK NORMALLY 0 WHEN GOTTEN HERE
2305 CLA IAC /OPEN OUTPUT FILE
2306 JMS I (OPEN /ENTER CODE IN AC
2307OUHNDL, 4001 /HANDLER ADDRESS
2308 DCA OUTHND /HANDLER ENTRY
2309 TAD I (DEVNO
2310 DCA ODEV /SAVE DEV #
2311 DCA I (OCNT /CLEAR BLOCK COUNT
2312 TAD I (FLN
2313 DCA I (OMAXLN /MAXIMUM FILE LENGTH
2314 TAD NAME
2315 DCA I (OUNAM
2316 TAD NAME+1
2317 DCA I (OUNAM+1
2318 TAD NAME+2
2319 DCA I (OUNAM+2
2320 TAD NAME+3
2321 DCA I (OUNAM+3
2322 TAD (DECPUT
2323 DCA OUTR /ENABLE CHARACTER OUTPUT ROUTINE
2324 TAD (ECDISM
2325 DCA I (DECPUT /FAKE RETURN FROM CHAR I/O ROUTINE
2326 TAD I (STBLK
2327 JMP I (OSETP /SET UP BLOCK NUMBER AND POINTERS
2328\f/FILE OPEN ROUTINE
2329
2330ROPEN, DCA QPTR /ENTERED WITH AC=-1 IF MONITOR IS TO BE KEPT
2331 /ENTERED WITH LINK=0
2332 JMS I (OPEN /LOOKUP CODE IN AC
2333INHNDL, 7201 /HANDLER ADDRESS
2334 DCA INHND /SAVE HANDLER ENTRY
2335 STA
2336 DCA ICRCNT /POINTER
2337 STA
2338 DCA REND /CLEAR END-OF-FILE FLAG
2339 TAD I (STBLK
2340 DCA I (IBLK /FIRST BLOCK
2341 TAD I (FLN
2342 DCA INRCNT /SET UP INPUT FILE LENGTH
2343 ISZ QPTR /SHOULD WE DISMISS THE MONITOR?
2344 JMP I (ECDISM /YES - KICK THE USR OUT AND POPJ
2345 JMP I [IREST /EXIT
2346
2347DEVTAB, PERD /.
2348 COLON /:
2349 PAGE
2350\fNORMAL, TAD ODEV /CLOSE FILE
2351 CIF 10
2352 JMS I [200
2353 4
2354 OUNAM
2355OCNT, 0 /NUMBER OF BLOCKS
2356 HLT
2357 TAD ERROR /RESET OUTPUT SUBROUTINE POINTER
2358 DCA OUTR /TO ERROR
2359ECDISM, CIF 10 /DISMISS OS/8 USR ROUTINE
2360 JMS I [200
2361 11 /KICK USR OUT
2362 JMP I [IREST
2363
2364/*** REALLY SHOULD BREAK UP INTO 2 ROUTINES
2365
2366SCHSRT, 0 /SORT LETTERS AND NUMBERS
2367 UPPERC /CONVERT TO UPPER CASE TO REDUCE CASES
2368 CLL /THE LINK WILL ALTERNATE EACH TIME
2369 TAD [-60 /WE ADD ONE OF OUR NEGATIVE CONSTANTS.
2370 SMA /THE LINK AT THE END WILL TELL WHETHER
2371 TAD [-12 /THE CHARACTER WAS ALPHANUMERIC
2372 SMA /(I.E. BETWEEN 60-71,101-132 OR 140-172)
2373 TAD M7 /OR A SEPARATOR CHARACTER.
2374 SMA
2375 TAD (-32
2376 SZL CLA /WAS IT ALPHANUMERIC?
2377 ISZ SCHSRT /YES
2378 JMP I SCHSRT /SKIP RETURN IF ALPHANUMERIC
2379
2380RT, 0 /ROUTINE TO PACK THIRD CHAR INTO OUTPUT BUFFER
2381 CLL RTL
2382 RTL
2383 DCA DM /CALLED TWICE - FIRST TIME WITH CHAR IN AC,
2384 TAD DM /SECOND TIME WITH "DM" IN AC
2385 AND [7400
2386 TAD I OPTR2
2387 DCA I OPTR2
2388 ISZ OPTR2
2389 JMP I RT
2390\fDVIMQL, 0 /FAKE MQL DVI
2391 DCA DVT1 /STORE DIVIDEND
2392 DCA MQ /INITIALIZE QUOTIENT
2393DV1, TAD I DVIMQL /GET DIVISOR
2394 CIA
2395 CLL /SET UP TO TAKE IMMEDIATE EXIT ON ZERODIVIDE
2396 TAD DVT1 /SUBTRACT DIVISOR FROM DIVIDEND
2397 SNL /OVERFLOWED YET?
2398 JMP DV7200 /YES
2399 DCA DVT1 /NO - STORE IT BACK
2400 ISZ MQ /BUMP QUOTIENT
2401 JMP DV1 /AND LOOP
2402DV7200, CLA
2403 TAD MQ
2404 ISZ DVIMQL /SKIP PAST DIVISOR
2405 JMP I DVIMQL /RETURN WITH QUOTIENT IN AC
2406
2407/SEARCH STRING MODIFIERS:
2408
2409SCHLST, 16 /^N - ANYTHING BUT
2410 21 /^Q - LITERALLY
2411 23 /^S - ANY SEPARATOR
2412 30 /^X - ANYTHING
2413M7, -7
2414\fDECPUT, 0 /DEVICE INDEPENDENT I/O
2415 TAD [200 /ADD ON PARITY BIT
2416 ISZ O3 /3RD CHAR OF 3?
2417 JMP O2 /NO
2418 JMS RT /YES, SPECIAL HANDLING
2419 TAD DM /TEMP STORAGE
2420 JMS RT
2421SETO3, MTHREE /RESET SWITCH
2422 DCA O3
2423 ISZ OCRCNT /END OF BUFFER?
2424 JMP I DECPUT /NO
2425 JMS FITS /CHECK FOR OUTPUT OVERFLOW
2426 JMP OERR /YUP
2427 DCA OCNT /NO - UPDATE OUTPUT COUNT
2428 JMS I OUTHND /OUTPUT THE BUFFER
2429OUCTRL, 4400
2430BUFOUT, OUT
2431OBLK, 0
2432 JMP OERR
2433 TAD OBLK
2434 TAD INRSIZ /BUMP THE OUTPUT RECORD NUMBER BY THE MAXIMUM
2435OSETP, DCA OBLK /SINCE ALL WRITES EXCEPT THE LAST ARE MAXIMAL
2436 TAD BUFOUT /BUFFER POINTERS
2437 DCA OPTR1
2438 TAD BUFOUT
2439 DCA OPTR2
2440 TAD OUTSIZ
2441 DCA OCRCNT /DOUBLEWORD COUNT (7377 IF 8K, 6777 IF 12K)
2442 JMP SETO3 /SET BYTE COUNTER AND RETURN
2443OERR, CLA
2444 TAD ERROR
2445 DCA OUTR /INHIBIT FUTURE OUTPUT
2446ERR14, ERR
2447O2, DCA I OPTR1 /NORMAL HANDLING
2448 ISZ OPTR1 /BUMP POINTER
2449 JMP I DECPUT
2450OPTR1, 0
2451OMAXLN, 0 /SIZE OF HOLE FOR OUTPUT
2452OUTSIZ, 7377 /6777
2453O3, 0
2454\fFITS, 0 /SUBROUTINE TO CHECK FOR OUTPUT OVERFLOW
2455 TAD OPTR1 /** AC MAY CONTAIN FUDGE ON INPUT **
2456 CIA
2457 TAD BUFOUT /COMPUTE NUMBER OF WORDS IN BUFFER
2458 AND [7400 /ROUND "UP" TO NEXT BUFFERLOAD
2459 CIA /MAKE POSITIVE
2460 CLL CML RAR
2461 DCA OUCTRL /AND SAVE IT AS A BUFFER CONTROL WORD
2462 TAD OUCTRL
2463 CLL RAL
2464 CLL RTL /ISOLATE THE BLOCK COUNT OF THE CONTROL WORD
2465 RTL /IN THE LOW ORDER PART OF THE AC
2466 RAL
2467 TAD OCNT /ADD IT TO THE CURRENT OUTPUT COUNT
2468 CLL CML
2469 TAD OMAXLN /SEE THAT WE DIDN'T OVERFLOW
2470 SNL SZA /THE ASSIGNED OUTPUT AREA
2471 JMP I FITS /OOPS - WE DID - ERROR RETURN
2472 CIA
2473 TAD OMAXLN /SUBTRACT OFF THE LIMIT
2474 CIA /TO ARRIVE AT THE UPDATED BLOCK COUNT
2475 ISZ FITS
2476 JMP I FITS /AND SKIP RETURN
2477OUNAM, ZBLOCK 4 /NAME OF OPEN OUTPUT FILE GOES HERE
2478 PAGE
2479\f/DISPLAY ROUTINE FOR PDP-12 SCOPE
2480
2481WASTE, 0 /** MUST BE AT MULTIPLE OF 2000
2482XPOS, 0 /PDP-12 BETA REGISTER 1
2483BETA2, 0 /PDP-12 BETA REGISTER 2
2484
2485DSPLAY, 0 /TEXT DISPLAY ROUTINE FOR TECO
2486 MTHREE /THIS ROUTINE DEPENDS ON THE FACT THAT THE
2487 TAD DSPLAY /HIGH ORDER BITS OF THE X-COORD ARE IGNORED
2488 DCA DX /BY THE VR12 HARDWARE
2489 TAD I DX /GET THE SKIP
2490 DCA DLPTST /PUT IT IN THE LOOP
2491 TAD P
2492 DCA DX
2493 TAD NUMLNS
2494 STL CIA /LOOK BACKWARD
2495 PUSHJ /FOR BEGINNING OF DISPLAY AREA
2496 CHRL1
2497D360, STA STL /=7360
2498 TAD P
2499 DCA DM
2500 TAD DX
2501 DCA P /RESTORE POSITION
2502 TAD NUMLNS /NOW SCAN FORWARD
2503 CLL IAC
2504 PUSHJ /FOR THE END OF THE DISPLAY AREA
2505 CHRL1
2506 TAD P
2507 CIA
2508 TAD DM
2509 DCA R /*K* THIS NUMBER MUST GO IN R -
2510 TAD DX /THE ^W COMMAND NEEDS IT THERE
2511 DCA P /RESTORE ORIGINAL P
2512DSETUP, TAD P
2513 CIA
2514 TAD DM
2515 DCA DQ /SAVE COUNT OF CHARS TO CURSOR POSITION
2516 TAD DM
2517 DCA DX
2518 TAD R
2519 DCA DR
2520 TAD D360
2521 DCA YPOS
2522DISCR, TAD DISLF
2523SETXPS, DCA XPOS /SET X POSITION/COLUMN COUNTER
2524 JMP DLPTST
2525\f /DISPLAY LOOP
2526
2527DGETCH, CDF 10
2528 TAD I DX
2529 CDF 0 /GET THE CHARACTER FROM FIELD 1
2530 AND [177 /AND OFF THE HIGH ORDER BITS
2531 TAD (-33
2532 SNA /CHANGE ALTMODES
2533 TAD CAHT /TO DOLLAR SIGNS
2534 TAD (-5
2535 SMA SZA /IF NOT A CONTXRACTER
2536 JMP DLOOP /DISPLAY IT AND KEEP GOING
2537 SNA
2538 JMP DBLANK /DO BLANKS FAST
2539 TAD (40-15
2540 SNA /CR?
2541 JMP DISCR /YES - RESET X COORD
2542 STL
2543 TAD [4
2544 SNA /TAB?
2545 JMP DTABB
2546 SNL
2547 JMP DISLF /LINE FEED, VERTICAL TAB, OR FORM FEED
2548 TAD (51 /ORDINARY CONTROL CHAR - RESTORE IT + 40
2549 DCA WASTE /SAVE CHAR
2550 JMS DISCHR /DISPLAY ^
2551 TAD WASTE /NOW DISPLAY ALTERED CHAR
2552DLOOP, JMS DISCHR
2553
2554DLPTST, HLT /EITHER KSF OR TSF OR "ISZ R"
2555 SKP
2556 JMP I DSPLAY /EXIT IMMEDIATELY IF TEST SKIPS
2557 ISZ DQ /ARE WE AT THE CURRENT POINTER POSITION?
2558 JMP TSTEDS /NO
2559 TAD (-5
2560 TAD XPOS
2561 DCA XPOS /BACK UP X POSITION A HALF-CHARACTER
2562 TAD DM20
2563 TAD YPOS
2564 6141 /ENTER LINC MODE
2565DM20, 1760 /DSC I
2566 2000
2567 1760 /DISPLAY A ^
2568 2076
2569 0002 /PDP
2570 MTHREE /AND MOVE X POSITION BACK TO WHERE IT WAS
2571 JMP DBLANK+1
2572TSTEDS, ISZ DR /ARE WE THROUGH?
2573 JMP DGETCH /NO
2574 JMP DSETUP /YES - START OVER
2575\fDTABB, TAD XPOS /DISPLAY TAB
2576 CMA
2577 AND Z7
2578 DCA WASTE /GET NUMBER OF COLUMNS TO GO (-1)
2579 TAD WASTE
2580 CLL RTL
2581 RAL
2582 TAD WASTE /MULTIPLY BY 9
2583DBLANK, TAD CAHT /BUMP ONE MORE COLUMN
2584 TAD XPOS
2585 SZA /OVERFLOW?
2586 JMP SETXPS /NO - SET XPOS AND CONTINUE
2587 JMP LINOFL /YES - GO TO THE NEXT LINE
2588
2589/SUBROUTINE TO DISPLAY A CHARACTER
2590
2591DISCHR, DLPTST /*K* DISCHR MUST CONTAIN "DLPTST" WHEN WE
2592 CLL RAL /ARE EXAMINING CHARACTERS **
2593 TAD (DTABLE-1
2594 DCA BETA2 /STORE ADDRESS OF TABLE ENTRY FOR CHAR -1
2595 TAD YPOS
2596
2597 6141 /ENTER LINC MODE
2598 1762 /DSC I 2
2599 1762 /DSC I 2
2600 0002 /RE-ENTER PDP-8 MODE
2601
2602 CLA
2603 ISZ XPOS /BUMP THE X COORDINATE/COLUMN COUNTER
2604 JMP I DISCHR /RETURN
2605LINOFL, TAD (7054 /INDENT ALL CONTINUATION LINES
2606 DCA XPOS
2607DISLF, RAR /*K* RAR=7010 AC MAY HAVE A SMALL NUMBER
2608 TAD YPOS /IN IT HERE - THATS OK AS LONG AS ITS SMALL,
2609 TAD [-40 /SINCE ONLY THE HIGH 8 BITS OF YPOS COUNT.
2610 DCA YPOS
2611 JMP I DISCHR /*K* THIS ALWAYS RETURNS TO DLPTST **
2612
2613YPOS= NAME /USE SOME FREE PAGE ZERO LOCATIONS
2614DR= NAME+1 /FOR OUR TEMPORARIES
2615DQ= NAME+2
2616DM= NAME+3
2617 PAGE
2618\fDTABLE, 2000;2076; 7500;0000; 7000;0070; 7714;1477
2619 5721;4671; 6661;4333; 5166;0526; 0000;0070
2620 3600;0041; 4100;0036; 2050;0050; 0404;0437
2621 0500;0006; 0404;0404; 0001;0000; 0601;4030
2622 4536;3651; 2101;0177; 4523;2151; 4122;2651
2623 2414;0477; 5172;0651; 1506;4225; 4443;6050
2624 5126;2651; 5122;3651; 2200;0000; 4601;0000
2625 1000;4224; 1212;1212; 2442;0010; 4020;2055
2626 4077;5751; 4477;7744; 5177;2651; 4136;2241
2627 4177;3641; 4577;4145; 4477;4044; 4136;2645
2628 1077;7710; 7741;0041; 4142;4076; 1077;4324
2629 0177;0301; 3077;7730; 3077;7706; 4177;7741
2630 4477;3044; 4276;0376; 4477;3146; 5121;4651
2631 4040;4077; 0177;7701; 0176;7402; 0677;7701
2632 1463;6314; 0770;7007; 4543;6151; 4177;0000
2633 3040;0106; 0000;7741; 2000;2076; 1604;0404
2634\fSTABLE, ZBLOCK 40 /SEARCH BUFFER
2635
2636CTLW, NCHK /^W COMMAND - IF THERE WAS A NUMBER BEFORE
2637 JMP CTLW2 /THE ^W, SET THE NUMBER OF LINES TO DISPLAY
2638 TAD N /EQUAL TO THAT NUMBER.
2639 DCA NUMLNS
2640 /DON'T WORRY ABOUT NEGATIVE N
2641CTLW2, ISZ R /FAKE OUT! (MUST BE BEFORE CALL TO DISPLY)
2642 DISPLY /IN ANY CASE, GO THROUGH ONE DISPLAY CYCLE
2643 POPJ /THEN RETURN
2644
2645SAVTRA, 0 /SAVE TRACE MODE
2646 TAD TFLG
2647 DCA TFGTMP
2648 DCA TFLG
2649 JMP I SAVTRA /EXIT WITH TRACE OFF
2650
2651RESTRA, 0 /RESTORE TRACE MODE
2652 TAD TFGTMP
2653 DCA TFLG
2654 JMP I RESTRA
2655TFGTMP, 0
2656
2657CHKQF, 0 /CHECK FOR EXPLICIT QUOTES
2658 ISZ QFLG /QUOTE FLAG SET?
2659 JMP .+3 /NO
2660 SCAN /GET QUOTING CHAR
2661 DCA QUOTE /PUT INTO SEARCH TABLE
2662 DCA QFLG /ZAP QUOTE FLAG
2663 JMP I CHKQF /RETURN
2664\fNXTBUF, 0
2665 SZA CLA
2666 JMP NOWRIT /READ-ONLY IF AC NOT 0 ON ENTRY
2667 PUSHJ
2668 CPOC /HP
2669 DCA ZZ /FORCE Y TO WORK
2670 ISZ FFFLAG /IF WE DIDN'T SEE A FORM FEED ON INPUT
2671 JMP NOWRIT /DON'T OUTPUT ONE
2672 TAD CAFF
2673 OUTPUT
2674NOWRIT, PUSHJ
2675 CHRY /READ NEW BUFFER
2676 CTCCHK /CHECK FOR ^C AND ^P
2677 CLA /*K* CTCCHK LEAVES AC NON-ZERO!
2678 JMP I NXTBUF
2679
2680GETUSR, 0 /ROUTINE TO LOCK THE USR INTO CORE
2681 CDF 0
2682 TAD ZZ /IF THE TEXT BUFFER IS EMPTY AND
2683 SNA CLA /WE HAVE 12K, SO Q-REGS ARE IN FIELD 2,
2684NWRUSR, NOP /(CHANGED BY INIT CODE TO "TAD [4" IF 12K)
2685 STL RTR /THEN WE SHOULD NOT SAVE CORE ON A USR CALL.
2686 DCA I (JSBITS /THIS STORES A 2000 OR A 2001
2687 CIF 10
2688 JMS I [7700 /OK - NOW LOAD THE USR IN
2689 10
2690 JMP I GETUSR
2691\f/E COMMAND MODIFIERS
2692
2693EFLST, 102 /EB I
2694 103 /EC X
2695 106 /EF X
2696 107 /EG X
2697 113 /EK X
2698 122 /ER I
2699 127 /EW I
2700 130 /EX I
2701
2702CHRU, QREF /COMMAND U
2703 NCHK
2704ERR22, ERR /U MUST BE PRECEDED BY A NUMBER
2705 TAD NLINK
2706 CLL RTR
2707 DCA NLINK
2708 AC3777
2709 AND I QPTR
2710 TAD NLINK
2711 DCA I QPTR
2712 ISZ QPTR
2713 TAD N
2714 DCA I QPTR
2715 POPJ
2716
2717/RADIX TABLES:
2718
2719ORAD, NOP
2720 1000
2721 100
2722 10
2723DRAD, NP&177+1200 /"TAD NP"
2724 1750
2725 144
2726 12
2727\f/DISPATCH TABLE FOR COMMAND INPUT
2728
2729COMTAB, TBEL /^G
2730 TCRLF /CR
2731RUBY, ROCMND /RUBOUT
2732 TCTLU /^U
2733 TALTM /ALTMODE
2734 TQMK /?
2735 TSAVE /^S
2736 TSTAR /*
2737 TSPACE /SPACE
2738
2739EDFLAG, 0 /MUST BE KEPT TOGETHER
2740EHFLAG, 0
2741EOFLAG, VERSN
2742ESFLAG, 0
2743ETFLAG, 0
2744EUFLAG, 0
2745/CXFLAG, 0
2746 PAGE
2747\f/COMMAND M
2748/AND Q-REGISTER STORAGE
2749COMLST, 7 /^G, COMMAND LINE EDIT LIST
2750 15 /CR, INSERT CR & LF
2751 177 /RUBOUT
2752 25 /^U - RUB OUT LINE
2753 33 /^[, ALT MODE
2754 77 /?
2755 23 /^S - SAVE OLD COMMAND LINE IN Q-REG Z
2756 52 /*
2757 40 /SPACE
2758
2759CHRM, QREF /COMMAND M
2760 TAD M4 /4 ITEMS PUSHED TO
2761 PUSHL /SAVE CURRENT MACRO STATE
2762 QCMND
2763 MPDL
2764 ITRST /SO THE "O" COMMAND WILL WORK IN MACROS
2765 SCANP /ZEROED BY "PUSHL"
2766 TAD PDLP /MUST CHECK PDL AT END OF MACRO
2767 CIA
2768 DCA MPDL
2769 TAD QNMBR /Q-REGISTER TO EXECUTE
2770 SETCMD /SET COMMAND LINE TO THIS Q-REG
2771 POPJ /LEAVE NUMBER FLAG ALONE AND EXIT
2772
2773CHKBZ, 0 /SEE THAT B .LE. C(AC) .LE. ZZ
2774 SZL
2775 JMP ERR11 /POP
2776 CIA /ENTERED WITH LINK SET CORRECTLY
2777 TAD ZZ
2778 SNL /13-BIT ARITHMETIC
2779ERR11, ERR /C(AC)>ZZ
2780 CIA
2781 TAD ZZ /RESTORE ORIGINAL AC
2782 JMP I CHKBZ
2783
2784ALTLST, 175 /ALT MODE
2785 176 /ANOTHER ALTMODE
2786M4, -4
2787\fSCUPPR, 0 /SCAN AND CONVERT TO UPPER CASE
2788 SCAN
2789 UPPERC
2790 JMP I SCUPPR /THAT'S ALL?
2791
2792/Q-REGISTER STORAGE - EACH Q-REGISTER TAKES 2 WORDS.
2793/WD 1 CONTAINS THE LENGTH OF THE CHARACTER PART OF THE REGISTER (IF ANY)
2794/WD 2 CONTAINS THE VALUE OF THE NUMERIC PART OF THE REGISTER (IF ANY)
2795
2796QARRAY, ZBLOCK 110 /36 Q-REGISTERS * 2 WORDS/REGISTER = 72 WORDS
2797QPNTR, CHNSTR /FAKE Q-REGISTER FOR INPUT LINE - LENGTH ONLY.
2798\fCTLT, NCHK
2799 JMP CTLT2 /NO ARG
2800 TAD N
2801ET1, TYPE /TYPE CHAR REPRESENTED BY ARGUMENT
2802 POPJ
2803CTLT2, LISTEN /^T COMMAND - VALUE OF NEXT CHAR FROM TTY
2804ET8, TYPE /*ET ECHO THE CHARACTER
2805 TAD SCHAR /GET THE CHARACTER
2806 JMP I (NCOM14 /JUMP INTO NUMBER PROCESSOR
2807
2808CTLE, TAD FFFLAG /^E COMMAND - RETURNS FORM FEED FLAG
2809NNEW13, CLL
2810 SPA
2811 STL /EXTEND SIGN BIT TO LINK
2812 JMP I (NCOM /RETURN -1 IF F.F., 0 OTHERWISE
2813 PAGE
2814\f *5000
2815
2816/COMMAND DISPATCH TABLE ** ALLOW EVEN/ODD FOR NOVICE SUBSET?
2817
2818CDSP, POPK;CTLA;SERR;CTLC;CTLD;CTLE;CTLF;CTLC /0-7
2819 CTLH;CTLI;POPK;SERR;POPK;POPK;CTLN;CTLO /10-17
2820 T0;SERR;SERR;SERR;CTLT;CTLU;ERR35;ERR27 /20-27
2821 SERR;SERR;SERR;ZRON;SERR;SERR;CTUA;SERR /30-37
2822 POPK;CEXP;CDBQ;CNBS;SERR;CPCS;CAMP;ZRON /40-47
2823 COPR;CCPR;CAST;CPLS;CCMA;CMIN;CDOT;CVIR /50-57
2824 NMBR;NMBR;NMBR;NMBR;NMBR;NMBR;NMBR;NMBR /60-67
2825 NMBR;NMBR;CCLN;CSEM;CHLT;CEQL;CHGT;CQSM /70-77
2826 CATS;CHRA;CHRB;CHRC;CHRD;CHRE;CHRF;CHRG /100-107
2827 CHRH;CHRI;CHRJ;CHRK;CHRL;CHRM;CHRN;CHRO /110-117
2828 CHRP;CHRQ;CHRR;CHRS;CHRT;CHRU;SERR;SERR /120-127
2829 CHRX;CHRY;CHRZ;SERR;CBSL;SERR;CHUA;CHBA /130-137
2830 /END OF DISPATCH TABLE
2831
2832PDLBEG, ZBLOCK 11 /BEGINNING OF PUSHDOWN LIST
2833QPUT12, ZBLOCK 16 /ROUTINES INSERTED LATER - USED IN
2834ASR35, ZBLOCK 10 /INITIALIZATION, OVERLAYED BY PUSHDOWN LIST
2835PDLEND, 0 /END OF PUSHDOWN LIST
2836 PAGE
2837\f *5200
2838
2839/ INITIALIZATION SECTION
2840/ ENTER HERE AT 5200 TO MODIFY TECO TO USE A MODEL 35 TELETYPE
2841/ SORRY - NO CURRENT PAGE LITERALS
2842
2843TECO35, ISZ JTECO /IF CALLED VIA "R" OR "RUN"
2844 TAD I XR /MOVE ASR-35 PATCH (WHICH OUTPUTS TABS AND
2845 DCA I INXR / FORM FEEDS) OVER PRINT ROUTINE
2846 ISZ ASRCNT
2847 JMP .-3
2848 TAD YOUTHTX
2849 DCA I YPOUTHT
2850 TAD [TECO
2851 DCA I Y7745 /CHANGE STARTING ADDRESS IN CASE WE'RE RESTARTED
2852 /AND FALL INTO INITIALIZATION ROUTINE
2853
2854TCINIT, TLS /INITIALIZATION ROUTINE - INITIALIZE THE TTY
2855 TAD .-1
2856 DCA I [TECO
2857 TAD YT0A /"JMP T0A"
2858 DCA I PTECO1 /CHANGE THE ENTRY AT 200 SO WE'RE NOT CALLED AGAIN
2859 CLA STL
2860 6141 /ENTER LINC MODE (MAYBE)
2861 4 /ESF - SET SMALL CHARACTERS FOR SCOPE
2862 0261 /ROL I 1 - ROTATE LINK INTO AC11
2863 0002 /BACK TO PDP-8 MODE
2864 SNA CLA /AC NON-ZERO IF WE ARE A PDP-12
2865 JMP NOTA12 /NO, JUST AN ORDINARY 8
2866 TAD YPDP12
2867 JMS CHANGE /TRADE OFF TWO PAGE HANDLERS FOR A SCOPE
2868NOTA12, TAD I Y7777
2869 AND COR70
2870 SZA
2871 JMP SOFCOR
2872COR0, CDF 0 /NEEDED FOR PDP-8L
2873 TAD CORSIZ /GET FIELD TO TEST
2874 RTL
2875 RAL
2876 AND COR70 /MASK USEFUL BITS
2877 TAD COREX
2878 DCA .+1 /SET UP CDF TO FIELD
2879COR1, CDF /N /N IS FIELD TO TEST
2880 TAD I CORLOC /SAVE CURRENT CONTENTS
2881COR2, NOP /HACK FOR PDP-8!
2882 DCA COR1
2883 TAD COR2 /7000 IS A "GOOD" PATTERN
2884 DCA I CORLOC
2885COR70, 70 /HACK FOR PDP-8, NOP
2886 TAD I CORLOC /TRY TO READ BACK 7000
2887CORX, 7400 /HACK FOR PDP-8, NOP
2888 TAD CORX /GUARD AGAINST WRAP-AROUND
2889 TAD CORV /TAD (1400
2890 SZA CLA
2891 JMP COREX /NON-EXISTENT FIELD EXIT
2892 TAD COR1 /RESTORE CONTENTS DESTROYED
2893 DCA I CORLOC
2894 ISZ CORSIZ /TRY NEXT HIGHER FIELD
2895 JMP COR0
2896
2897COREX, CDF 0 /LEAVE WITH DATA FIELD 0
2898 STA
2899 TAD CORSIZ /HIGHEST EXISTING FIELD
2900COR999, DCA MEMSIZ
2901 TAD MEMSIZ
2902 SNA CLA
2903 JMP JTECOM /8K
2904 TAD YM7 /MORE THAN 8K
2905 JMS I YMOVE
2906 CDF 0
2907 QPUT12-1
2908 CDF 0
2909 QPUTS-1
2910 TAD YM7
2911 JMS I YMOVE
2912 CDF 0
2913 QPUT12+7-1
2914 CDF 0
2915 GETQX-1
2916 TAD YTWLVEK
2917 JMS CHANGE /AND CHANGE A WHOLE MESS OF LOCATIONS
2918JTECOM, JMS I YOVINIT /WRITE OUT OVERLAYS
2919 CDF 10
2920 TAD I YSCPBIT
2921 CDF 0
2922 AND [200
2923 SNA CLA
2924 JMP JTECO
2925 TAD YSCOPE
2926 JMS CHANGE
2927JTECO, JMP I .+1 /INCREMENTED IF WE WERE'NT CHAINED TO
2928 CHINIL
2929PTECO1, TECO1
2930
2931CORLOC, CORX /ADDRESS TO TEST IN EACH FIELD
2932CORV, 1400 /7000+7400+1400=0
2933CORSIZ, 1 /CURRENT FIELD TO TEST
2934
2935SOFCOR, CLL RAR
2936 RTR
2937 JMP COR999
2938\f/CHAINED INIT CODE - MOVE 17600 INTO Q-REGISTER SPACE
2939
2940CHINIL, CDF 10
2941 TAD I DX /GET A COMMAND LINE CHAR
2942 CDF 0
2943 QPUT
2944 ISZ INICT
2945 JMP CHINIL
2946 TAD YFATALJ /SET UP THE FATAL ERROR EXIT
2947 DCA I YCHOOPS /IN THE ERROR ROUTINE
2948 JMP I YCHTECO
2949INICT, -CHNSTR
2950
2951ASRCNT,
2952CHANGE, -10 /ROUTINE TO CHANGE SPECIFIC LOCATIONS
2953 DCA XR /STORE TABLE POINTER
2954CHANGL, TAD I XR /GET LOCATION
2955 SNA
2956 JMP I CHANGE /END OF LIST - RETURN
2957 DCA TEMPT
2958 TAD I XR /GET CONTENTS
2959 DCA I TEMPT /ZAP!
2960 JMP CHANGL
2961
2962/CHECK FOR OS/8 SCOPE BIT, IF ON, PATCH TECO
2963/ALSO SEND ESC SEQ TO TERMINAL TO SEE IF VT05 OR VT5X.
2964
2965
2966YOUTHTX, OUTHTX
2967YPOUTHT,POUTHT
2968Y7745, 7745
2969Y7777, 7777
2970YM7, -7
2971YMOVE, MOVE
2972YOVINIT,OVINIT
2973YSCPBIT,SCPBIT
2974YFATALJ,FATALJ
2975YCHOOPS,CHOOPS
2976YCHTECO,CHTECO
2977YPDP12, PDP12-1
2978YTWLVEK,TWLVEK-1
2979YSCOPE, SCOPE-1
2980YT0A, T0A&177+5200
2981/FLOW INTO NEXT PAGE
2982\fSCOPE, RUBY; SCOPY /MAKE SCOPE RUBOUTS WORK
2983 BLSP1; TAD CACR /MAKE BELL SPACE WORK
2984 BLSP2; TYPE /AND MORE RUBOUTS
2985 BLSP3; SCAPE&177+4600 /JMS I (ESCAPE
2986 BLSP4; 113 /MORE BELL SPACE
2987 EUFLAG; -1 /SET EU TO -1
2988 EU1; CLA
2989 EU2; TAD [40
2990 0
2991\f/LOCATIONS TO CHANGE MUST BE CHANGED IN OVERLAY IMAGE
2992/BEFORE OVERLAY IS WRITTEN OUT
2993
2994/LOCATIONS TO CHANGE IF WE HAVE 12K OF CORE
2995
2996TWLVEK, INRSIZ; 4 /INPUT BUFFER GROWS TO 4 BLOCKS LONG
2997 INCTLW; 1021 /AND LIVES IN FIELD 2
2998 INPCNT; 5000
2999 I2; CDF 20
3000 IC; CDF 0 /THIS WAS A NOP TO SPEED UP RTS-8 OPERATION
3001 L12K1; J12K1 /SPEED UP TEXT MOVE ROUTINES,
3002 L12K2; J12K2 /SINCE Q-REGISTERS DON'T SIT ON TOP OF TEXT.
3003 OUTSIZ; 6777 /OUTPUT BUFFER TAKES OVER OLD INPUT BUFFER SPACE
3004 BUFIN; 5600
3005 NWRUSR; TAD [4 /LET USR BE CALLED WITHOUT SAVING CORE
3006 MQMAX; -Q12MAX /ALLOW MORE Q-REGISTER STORAGE
3007 QLIMIT; 12-Q12MAX
3008 0
3009
3010
3011/LOCATIONS TO CHANGE IF WE'RE RUNNING ON A PDP-12
3012
3013PDP12, KSFWT; DISPLY /FIX KEYBOARD AND PRINTER WAITS
3014 TSFWT; DISPLY /SO THEY DISPLAY WHILE WAITING
3015 CDSP+127;CTLW /ENABLE W COMMAND
3016 INHNDL; 7200 /ONE PAGE INPUT HANDLER ONLY
3017 OUHNDL; 7400 /DITTO OUTPUT HANDLER
3018 /VALUE MUST BE 0 INITIALLY TO END LIST
3019OVINIT, 0 /WRITE OUT OVERLAYS
3020/IF MORE THAN 12K, MOVE OVERLAYS TO FIELD 3
3021 MTHREE
3022 TAD MEMSIZ
3023 SPA CLA
3024 JMP L16K /LESS THAN 16K
3025 TAD [-400
3026 JMS MOVE
3027 CDF 0
3028 3200-1
3029 CDF 30
3030 MEMLOC-1
3031 TAD M2000
3032 JMS MOVE
3033 CDF 0
3034 5600-1
3035 CDF 30
3036 MEMLOC+400-1
3037 TAD M5
3038 JMS MOVE
3039 CDF 10
3040 NEWERR-1
3041 CDF 0
3042 OVREAD-1
3043/ TAD (COREAD-COREND-1
3044 TAD M3000
3045 JMS MOVE
3046 CDF 10
3047 4400-1 / COREAD-1
3048 CDF 30
3049 4400-1
3050 JMP G16K
3051L16K, JMS I (7607
3052 4200
3053 3200 /WRITE OUT I/O-OVERLAY
3054 IOVRLC
3055 JMP OVERR /ERROR WRITING OVERLAY
3056M3000, JMS I (7607
3057 5400 /4 OVERLAYS
3058 5600 /WRITE OUT Q-OVERLAY AND E-OVERLAY
3059 QOVRLC
3060 JMP OVERR /ERROR WRITING OUT OVERLAY
3061G16K, DCA I (ERRXX
3062 JMP I OVINIT /RETURN
3063
3064OVERR, TAD [-400 /SWAP IN ERROR OVERLAY FROM CORE AND MAKE SURE
3065 JMS MOVE /WE RETURN TO MONITOR
3066 CDF 0
3067 6200-1
3068 CDF 0
3069 3200-1
3070/ DCA I (ERRTMP /SET FATAL SWITCH
3071 TAD (FATALJ
3072 DCA I (CHOOPS
3073ERR30, JMP I (ERRYY /CALL ERROR MESSAGE PROCESSOR
3074
3075M2000, -2000
3076M5, -5
3077\fMOVE, 0
3078 DCA MQ
3079 TAD I MOVE
3080 DCA MOVEL
3081 ISZ MOVE
3082 TAD I MOVE
3083 DCA INXR
3084 ISZ MOVE
3085 TAD I MOVE
3086 DCA MOVEC
3087 ISZ MOVE
3088 TAD I MOVE
3089 DCA XR
3090 ISZ MOVE
3091MOVEL, HLT
3092 TAD I INXR
3093MOVEC, HLT
3094 DCA I XR
3095 CDF 0
3096 ISZ MQ
3097 JMP MOVEL
3098 JMP I MOVE
3099\f /ROUTINES TO BE (POSSIBLY) SWAPPED INTO TECO
3100
3101 *QPUT12
3102 RELOC QPUTS
3103QPUTS, 0 /12K Q-REGISTER PUT ROUTINE
3104 AND [377
3105 CDF 20
3106 DCA I QP
3107 CDF 0
3108 ISZ QP
3109 JMP I QPUTS
3110
3111 RELOC GETQX
3112GETQX, 0 /12K Q-REGISTER GET ROUTINE
3113 DCA CHKCTC
3114 CDF 20
3115 TAD I CHKCTC
3116 CDF 0
3117 AND [377
3118 JMP I GETQX
3119
3120 RELOC ASR33
3121 JMP OUTCMX / FORM FEED/VERT. TAB - USE 8/4 FILLERS
3122OUTHTX, TAD COLCT /GET COLUMN COUNTER
3123 RTR
3124 RAR
3125 CLA CMA RAL /OUTPUT 2 FILLERS IF MORE THAN 4 CHARS TO TAB
3126 DCA COLCT /OTHERWISE 1 (COLCT IS A MODULO 8 COUNTER)
3127OUTCMX, TAD SCHAR /GET CONTROL CHAR TO TYPE
3128 PUTT /AND TYPE IT - WE WILL NOW FILL WITH NULLS
3129 RELOC
3130 PAGE
3131\f/ Q-OVERLAY
3132
3133 *5600
3134
3135 RELOC 3200
3136
3137 IOVRLC
3138QOVRLY, 0
3139 EOVRLC
3140 XOVRLC
3141 FOVRLC
3142
3143/O COMMAND
3144
3145CHROO, TAD SCANP /O COMMAND
3146 DCA COOQ /SAVE CURRENT SCAN POINTER
3147 DCA NFLG
3148/??? DCA QFLG /QUOTED "O" COMMAND NOT ALLOWED
3149 QSKP /CHECK THAT THERE IS REALLY A STRING HERE
3150 /BECAUSE WE WILL NOT USE "SCAN" TO GET CHARACTERS
3151 /FROM THIS STRING IN THE SEARCH LOOP.
3152 TAD ITRST /"O" ONLY SCANS FROM THE BEGINNING OF THE
3153 DCA SCANP /CURRENT ITERATION LOOP.
3154 /(JUMPS BACKWARD OUT OF ITERATIONS ARE VERBOTEN)
3155 SKPSET
3156CS41, 41 /SEARCH FOR !
3157 TAD CS41
3158 DCA QUOTE /SET QUOTE CHAR TO !
3159 TAD COOQ
3160 TAD QBASE
3161 DCA QP /SET UP PTR TO ACCESS GOTO STRING
3162COOC, TAD QP
3163 GETQ /GET CHAR FROM GOTO STRING
3164 CIA
3165 DCA MQ /SAVE IT
3166 QUOTST /GET CHAR FROM LABEL
3167 JMP COOB /LABEL EXHAUSTED
3168 TAD MQ
3169 SZA CLA /MATCH?
3170 JMP CSMQ /NO - REJOIN SEARCH ROUTINE FOR ANOTHER !
3171 ISZ QP
3172 JMP COOC
3173COOB, TAD MQ
3174 TAD CAAM /IS GOTO STRING EXHAUSTED TOO?
3175 SZA CLA
3176 JMP CSMQ+1 /NO - REJOIN ! SEARCH ROUTINE
3177 ENTRCE /RE-ENABLE TRACE
3178 JMP I [IREST
3179COOQ, 0
3180\f/ROUTINE TO SKIP COMMANDS UP TO A CHARACTER
3181
3182SETSKP, 0 /SET UP TO SKIP COMMANDS
3183 TAD I SETSKP
3184 DCA SKPLST /CHAR TO TRAP ON
3185 NOTRCE /DISABLE TRACE MODE
3186CSML1, DCA BRACKS /INITIALIZE BRACKET LEVEL
3187CSML, SCANUP /GET A COMMAND CHAR
3188 SORT
3189 SKPLST
3190 SKPTAB-SKPLST
3191 JMP CSML /NOTHING SPECIAL - KEEP GOING
3192CSMD, SCAN /CLEAR OUT MODIFIER
3193 JMP CSML
3194
3195CSMU, SCAN /SKIP ^U COMMAND
3196 SKP CLA /GET RID OF Q-REG NUMBER
3197CSMFS, QSKP /FS COMMAND - SKIP FIRST STRING
3198CSMQ, QSKP /SKIP OVER A QUOTED STRING
3199CSMQ1, PUSHJ
3200 IREST /FIX UP QUOTE CHAR
3201 JMP CSML /KEEP GOING
3202
3203CSMY, TAD SCHAR /SKIP ROUTINE FOR ^A AND !
3204 DCA QUOTE /WE MUST SCAN UNTIL WE FIND
3205 JMP CSMQ /A COPY OF THE COMMAND CHARACTER.
3206\f /SORT LIST FOR " COMMAND
3207
3208CNDLST, 103 /C
3209 107 /G
3210 116 /N
3211 114 /L
3212 105 /E
3213 124 /T
3214 123 /S
3215 106 /F
3216 125 /U
3217 122 /R
3218 74 /<
3219 76 />
3220
3221CSME, SCANUP /FOUND E COMMAND
3222 SORT
3223 ESKLST /LOOK FOR ER & EW & EG
3224 ESKTAB-ESKLST /USE CSMQ TO SKIP
3225 JMP CSML /NO STRING
3226
3227CSMF, SCAN /F COMMAND - BETTER BE FOLLOWED BY S,N, OR _
3228 CLA
3229 JMP CSMFS /SCAN OFF TWO STRINGS
3230
3231CSMI, ISZ BRACKS /INCREMENT BRACKET LEVEL
3232 JMP CSML
3233
3234CSMO, STA
3235 TAD BRACKS /DECREMENT BRACKET LEVEL
3236 SPA
3237 JMS I (POPITR /IF WE EXIT <> POP OFF ITERATION VALUES
3238 JMP CSML1
3239
3240SKPRTN, TAD BRACKS /WE HAVE FOUND THE DESIRED CHARACTER
3241 SZA CLA /BUT IF THE BRACKET LEVEL IS NON-ZERO,
3242 JMP I XSORTA1 /WE CANNOT ACCEPT IT - KEEP SORTING
3243 JMP I SETSKP /EVERYTHING IS OK - RETURN
3244
3245BRACKS, 0
3246\f/SORT LIST FOR SKIPPING OVER COMMANDS
3247
3248SKPLST, 0 /TRAP CHAR
3249 41 /!
3250 76 />
3251 74 /<
3252 42 /"
3253 136 /^
3254 100 /@
3255 1 /^A
3256 11 /TAB
3257 25 /^U
3258 36 /^^
3259 105 /E
3260 106 /F
3261 111 /I
3262 116 /N
3263 117 /O
3264 123 /S
3265 137 /_
3266 121 /Q
3267 125 /U
3268 130 /X
3269 107 /G
3270 115 /M
3271 45 /%
3272\f/ SKIP LIST FOR E'S
3273ESKLST, 122 /R
3274 127 /W
3275 102 /B
3276 107 /G
3277
3278CSMA, STA /LIST TERMINATOR
3279 JMP CSMQ1 /FOUND @ - SET QUOTE FLAG AND CONTINUE
3280
3281
3282XSORTA1,SORTA1
3283 PAGE
3284\f/DISPATCH TABLE FOR SKIPPING OVER COMMANDS:
3285
3286SKPTAB, SKPRTN /DESIRED CHARACTER - RETURN
3287 CSMY /!
3288 CSMO />
3289 CSMI /<
3290 CNDI /"
3291 CSMC /^
3292 CSMA /@
3293 CSMY /^A
3294 CSMQ /TAB
3295 CSMU /^U
3296 CSMD /^^
3297 CSME /E
3298 CSMF /F
3299ESKTAB, CSMQ /I OR ER
3300 CSMQ /N OR EW
3301 CSMQ /O OR EB
3302 CSMQ /S OR EG
3303 CSMQ /_
3304 CSMD /Q
3305 CSMD /U
3306 CSMD /X
3307 CSMD /G
3308 CSMD /M
3309 CSMD /%
3310\fSEMO, SKPSET /PLOD THRU
3311 76 /LOOKING FOR >
3312 ENTRCE /IT'S THE RIGHT ONE, TURN TRACE BACK ON
3313 JMP I ZCGSG
3314ZCGSG, CGSG
3315
3316CNDTAB, TSTSEP /LEGAL CONSTITUENT OF SYMBOL FOR ASSEMBLER
3317 SZL SNA CLA /GT 0
3318 SNA CLA /NE 0
3319 SNL CLA /LT 0
3320 SZA CLA /EQ 0
3321 SNL CLA /TRUE
3322 SNL CLA /SUCCESSFUL
3323 SZA CLA /FALSE
3324 SZA CLA /UNSUCCESSFUL
3325 TSTSEP /ALPHANUMERIC
3326 SNL CLA /<
3327 SZL SNA CLA />
3328
3329/THIS TABLE PRESUPPOSES 1000000000000 IS ILLEGAL
3330\f /COMMANDS " AND '
3331
3332CDBQO, NCHK /COMMAND "
3333ERR23, ERR /NO NUMBER TO TEST
3334 SCANUP
3335 SORT
3336 CNDLST
3337 CNDTAB-CNDLST
3338 SMA /CHECK THAT CHAR WAS TRANSLATED
3339ERR20, ERR /NO - NO SUCH TEST
3340 DCA SKIP /STORE TEST INSTRUCTION
3341 GETNUM /PERFORM THE TEST
3342SKIP, HLT /TEST SKIPS IF TRUE
3343 SKP CLA
3344 POPJ /CONDITION SATISFIED
3345 STA /NOT SATISFIED
3346 DCA SKIP /BEGINNING SKIPPING COMMANDS
3347 SKPSET /CALL SKIPPING ROUTINE
3348 47 /FIND A '
3349 ISZ SKIP /FOUND A '
3350 RESORT /NEED ANOTHER: BACK TO CSML
3351 ENTRCE /RE-ENABLE TRACE
3352 JMP I [IREST /COMMAND ' NO ACTION TO TAKE
3353
3354CNDI, SCAN /HIT ANOTHER "
3355 STA /SO SKIP MATCHING '
3356 TAD SKIP
3357 DCA SKIP
3358 RESORT /GO BACK TO CSML
3359\f/COMMANDS ; AND >
3360
3361CSEMO, TAD ITRST /COMMAND ; - ALSO HERE ON FAILING NON-COLON SEARCH
3362 SNA CLA
3363ERR09, ERR /IF NOT IN ITERATION
3364CSEM2, TAD NLINK
3365 SNA CLA
3366 NCHK
3367 JMP I (ZRON /NO NUMBER - IGNORE IT, WE DID IT ALREADY
3368 JMP SEMO /SEARCH FOR >
3369
3370CHGTO, TAD ITRCNT
3371 SNA CLA
3372 JMP CGTC /0 MEANS INFINITY
3373 ISZ ITRCNT /LOOK FOR COUNT EXHAUSTED
3374 JMP CGTC /NO, CONTINUE
3375CGSG, JMS POPITR /POP UP OLD ITERATION PARAMETERS
3376 JMP I [IREST
3377CGTC, TAD ITRST
3378 SNA
3379ERR10, ERR /IF NOT IN ITERATION
3380 JMP I (ZROSPN /BACK TO ROOT
3381
3382POPITR, 0
3383 CLA IAC /** AC NOT NECESSARILY 0 ON ENTRY
3384 POPL
3385 ITRCNT
3386 ITRST
3387 JMP I POPITR
3388\fCHLTO, MTWO /COMMAND <
3389 PUSHL
3390 ITRST
3391 ITRCNT
3392 TAD NFLG
3393 SNA CLA /WAS A NUMBER SPECIFIED?
3394 JMP INF /NO, ASSUME INFINITY
3395 TAD NLINK
3396 SNA CLA
3397 TAD N
3398 SNA
3399 JMP SEMO /0 OR NEGATIVE MEANS SKIP ITERATION
3400 CIA /MAKE NEGATIVE
3401INF, DCA ITRCNT /SET UP TERMINATION
3402 TAD SCANP /SAVE CURRENT SCAN PNTR
3403 DCA ITRST /ALWAYS .GE. 1 IN ITERATION
3404 DCA NFLG /CLEAR NUMBER FLAG
3405 POPJ
3406
3407/SHOULD WE TREAT 0<> SPECIAL?
3408 PAGE
3409 RELOC
3410\f/ ERROR-OVERLAY
3411
3412 *6200
3413
3414 RELOC 3200
3415
3416 IOVRLC
3417 QOVRLC
3418EOVRLY, 0
3419 XOVRLC
3420 FOVRLC
3421
3422ERRYY, DCA N
3423 TAD (ERLIST-1
3424 DCA XR
3425ERLOOP, ISZ N /BUMP ERROR NUMBER
3426 TAD I XR
3427 SZA /END OF LIST?
3428 TAD I (ERRXX /NO - CHECK FOR MATCH
3429Z40, SZA CLA /FOUND WHAT WE WANTED?
3430 JMP ERLOOP /NO - KEEP LOOKING
3431 TAD N
3432 CLL RAL /MULTIPLY BY 2
3433 TAD (ERBASE-2
3434 DCA PTR
3435 TAD I PTR /GET FIRST WORD OF ERR MSG
3436 SPA CLA
3437 JMP CTCT /^C TRAP
3438ERL2, TAD [77
3439 TYPE
3440 TAD I PTR
3441 RTR
3442 RTR
3443 RTR
3444 JMS I (SIXTYP /TYPE LEFT CHARACTER
3445 TAD I PTR
3446 JMS I (SIXTYP /TYPE RIGHT CHARACTER
3447 ISZ PTR
3448 TAD I PTR
3449 RTR
3450 RTR
3451 RTR
3452 JMS I (SIXTYP /TYPE 3RD CHARACTER
3453 CLA IAC
3454 AND I (EHFLAG
3455 SZA CLA
3456 JMP I (ERRRET
3457 MTHREE
3458 TAD MEMSIZ
3459 SPA CLA
3460 JMP I (ERRRET /NO LONG ERROR MESSAGE UNLESS 16K OOR MORE
3461 TAD Z40 /TYPE EXTENDED ERROR MESSAGE
3462 TYPE
3463 TAD Z40
3464 TYPE
3465/ TAD Z40
3466/ TYPE
3467 TAD N
3468 TAD (XERBAS-1
3469 DCA PTR /GET PTR TO PTR TO ERROR MSG
3470 CDF 30
3471 TAD I PTR /GET PTR TO ERROR MESSAGE
3472 DCA PTR
3473XLUP, TAD I PTR
3474 CDF 0
3475 SNA
3476 JMP I (ERRRET
3477 SPA
3478 JMS NEGCHR /NEGATIVE CHAR IS FLAG FOR ERRONEOUS CHARACTER
3479 PUTT
3480 ISZ PTR
3481 CDF 30
3482 JMP XLUP
3483
3484CTCT, KRS /CTRL/C ERROR MESSAGE
3485 AND [177 /ISOLATE ^C OR ^P INTO 7-BIT
3486 TYPE /READ CTRL/C FROM BUFFER
3487 CRLF /ECHO IT AND CR LF
3488 TAD I [QPNTR
3489 SZA CLA
3490 JMP ERL2 /PRINT XAB ERROR MESSAGE
3491/ MTHREE
3492/ TAD CHAR /LOOK AT PREVIOUS CHARACTER
3493/ SZA CLA
3494/ JMP I (ERRRET /ONE ^C DO NOTHING
3495 JMP I (CTLC /TWO ^C'S, ABORT
3496\fNEGCHR, 0
3497 CLA
3498 TAD LASTC
3499 SORT
3500 CACR
3501 ERPTAB-CACR
3502 SPA
3503 DCA LASTC /SAVE $ FOR ALTMODE
3504 CLA
3505 TAD (""
3506 PUTT
3507 TAD LASTC
3508 AND [7740
3509 SNA CLA
3510 JMS WOW /USE CARRET FORM FOR CONTROL CHARS
3511 TAD LASTC /AC MAY BE NON-0
3512 PUTT
3513 TAD (""
3514 JMP I NEGCHR
3515
3516WOW, 0
3517 TAD ("^
3518 PUTT
3519 TAD [100
3520 JMP I WOW
3521
3522SPY, TAD LASTC
3523 TAD (-11+CNVTAB
3524 DCA WOW
3525 TAD ("<
3526 PUTT
3527 TAD I WOW
3528 RTR
3529 RTR
3530 RTR
3531 JMS I (SIXTYP
3532 TAD I WOW
3533 JMS I (SIXTYP
3534 TAD (">
3535 JMP I NEGCHR
3536\fPTR, 0
3537
3538 PAGE
3539\fSIXTYP, 0
3540 AND [137 /IGNORE SIGN BIT OF BYTE
3541 TAD [40
3542 AND [77
3543 TAD [40
3544 PUTT
3545 JMP I SIXTYP
3546\fERLIST, -ERR01-1 /LIST OF POINTERS TO ALL POSSIBLE
3547 -ERR02-1 /CALLS TO THE ERROR ROUTINE.
3548 -ERR03-1
3549 -ERR04-1
3550 -ERR05-1
3551 -ERR06-1
3552 -ERR07-1
3553 -ERR08-1
3554 -ERR09-1
3555 -ERR10-1
3556 -ERR11-1
3557 -ERR12-1
3558 -ERR13-1
3559 -ERR14-1
3560 -ERR15-1
3561 -ERR16-1
3562 -ERR17-1
3563 -ERR18-1
3564 -ERR19-1
3565 -ERR20-1
3566 -ERR21-1
3567 -ERR22-1
3568 -ERR23-1
3569 -ERR24-1
3570 -ERR25-1
3571 -ERR26-1
3572 -ERR27-1
3573ERR28, -ERR28-1
3574 -ERR29-1
3575 -ERR30-1
3576 -ERR31-1
3577 -ERR32-1
3578 -ERR33-1
3579 -ERR34-1
3580 -ERR35-1
3581 0 /ERROR 36 - UNLABELED ERROR - NAMELY "JMS I OUTR"
3582 /** MUST BE LAST ERROR MESSAGE
3583\fERBASE, TEXT /ILL/ /1 ILLEGAL COMMAND
3584 TEXT /UTC/ /2 UNTERMINATED COMMAND
3585 TEXT /IQN/ /3 ILLEGAL Q-REGISTER NAME
3586 TEXT /PDO/ /4 INTERNAL PUSH DOWN OVERFLOW (RECURSION)
3587 TEXT /MEM/ /5 MEMORY OVERFLOW
3588 TEXT /STL/ /6 SEARCH STRING TOO LONG
3589 TEXT /ARG/ /7 ARGUMENT ERROR
3590 TEXT /IFN/ /8 ILLEGAL FILE NAME
3591 TEXT /SNI/ /9 SEMICOLON NOT IN ITERATION
3592 TEXT /BNI/ /10 CLOSE BRACKET NOT IN ITERATION
3593 TEXT /POP/ /11 POINTER OFF PAGE
3594 TEXT /QMO/ /12 Q-REGISTER MEMORY OVERFLOW
3595 TEXT /UTM/ /13 UNTERMINATED MACRO
3596 TEXT /OUT/ /14 OUTPUT ERROR
3597 TEXT /INP/ /15 INPUT ERROR
3598 TEXT /FER/ /16 FILE ERROR
3599 TEXT /FUL/ /17 OUTPUT COMMAND WOULD HAVE OVERFLOWED
3600 TEXT /NAY/ /18 NEGATIVE ARGUMENT TO Y
3601 TEXT /IEC/ /19 ILLEGAL E CHARACTER
3602 TEXT /IQC/ /20 ILLEGAL " CHARACTER
3603 TEXT /NAE/ /21 NO ARGUMENT BEFORE =
3604 TEXT /NAU/ /22 NO ARGUMENT BEFORE U
3605 TEXT /NAQ/ /23 NO ARGUMENT BEFORE "
3606 TEXT /SRH/ /24 FAILING SEARCH
3607 TEXT /NAP/ /25. NEGATIVE OR 0 ARGUMENT TO P
3608 TEXT /NAC/ /26. NEGATIVE ARGUMENT TO ,
3609 TEXT /NYI/ /27. ^W NOT IMPLEMENTED
3610 TEXT /DMY/ /28. NOT USED
3611 TEXT /NAS/ /29. NEGATIVE OR 0 COUNT TO SEARCH
3612 TEXT /WLO/ /30. CAN'T WRITE OUT ERROR MESSAGE OVERLAY
3613 TEXT /IFC/ /31. ILLEGAL F CHARACTER
3614 TEXT /YCA/ /32. Y COMMAND ABORTED
3615 TEXT /CCL/ /33. CCL NOT FOUND OR EG TOO BIG
3616/ TEXT /XAB/ /34. EXECUTION ABORTED BY ^C
3617 7001;0200
3618 TEXT /NYI/ /35. ^V NOT IMPLEMENTED
3619 TEXT /NFO/ /36. NO FILE FOR OUTPUT
3620\fCNVTAB, TEXT /HTLFVTFFCR/
3621 *.-1
3622ERPTAB, SPY /CR
3623 SPY /HT
3624 4044 /$
3625 SPY /FF
3626 SPY /VT
3627 SPY /LF
3628 PAGE
3629 RELOC
3630\f/ X-OVERLAY
3631
3632 *6600
3633
3634 RELOC 3200
3635
3636 IOVRLC
3637 QOVRLC
3638 EOVRLC
3639XOVRLY, 0
3640 FOVRLC
3641
3642CHREX, TAD I (TYI
3643 SORT
3644 XLIS
3645 XTAB-XLIS
3646 ERR /CAN'T HAPPEN
3647
3648XLIS, 103 /EC
3649 106 /EF
3650 107 /EG
3651 113 /EK
3652 130 /EX
3653
3654 /"EX" AND "EC" COMMANDS
3655EXIT, PUSHJ /"EX" COMMAND
3656 EXITC /CLOSE OUT THE FILES
3657 JMP I (CTLC /AND GO AWAY
3658
3659EXITC, TAD OUTR /"EC" COMMAND
3660 CIA /CHECK FOR OPEN OUTPUT FILE
3661 TAD ERROR
3662 SNA CLA
3663 POPJ /NOPE, EXIT ALREADY
3664EXLOOP, JMS I [NXTBUF /GET NEXT BUFFER
3665 TAD REND
3666 CIA
3667 TAD ZZ /CHECK FOR END-OF-FILE AND
3668 SZA CLA /TEXT BUFFER EMPTY
3669 JMP EXLOOP /NOT YET
3670 /ENDFILE PROCESSOR
3671ENDFIL, TAD OCRCNT
3672 CMA /REDUCE THE OUTPUT DOUBLEWORD COUNT
3673 AND [177 /TO REFLECT ONLY THOSE WORDS REMAINING
3674 CMA /UNTIL THE NEXT BLOCK BOUNDARY
3675 DCA OCRCNT
3676 TAD (7200 /USED TO BE 'DV7200'
3677 DCA MQ /SET COUNTER FOR ONE BLOCK WORTH OF STUFF
3678 TAD (32 /^Z END-OF-FILE
3679 OUTPUT
3680 ISZ MQ
3681 JMP .-2 /FILL AT LEAST THE CURRENT BUFFER AND OUTPUT IT
3682 TAD ODEV /MAKE SURE THE USR KNOWS THE HANDLER
3683 TAD (OSHNDT-1 /*K* - POINTER INTO
3684 DCA TY / OS/8 DEVICE RESIDENCY TABLE
3685 CDF 10
3686 TAD OUTHND
3687 DCA I TY /MARK THE HANDLER AS IN CORE
3688 JMS I (GETUSR /LOCK THE USR INTO CORE
3689 TAD EBFLG /IS THIS AN EDIT BACKUP?
3690 SNA CLA
3691 JMP I (NORMAL /NO, JUST CLOSE FILE
3692 TAD I (OCNT-1 /YES, LOOKUP OLD FILE TO CHANGE NAME
3693 DCA TY-1
3694 CIF 10
3695 TAD ODEV /INPUT AND OUTPUT ARE ON SAME DEVICE
3696 JMS I [200
3697 2
3698 OUNAM
3699TY, 0 /USELESS LENGTH--USE IT FOR TEMPORARY
3700 JMP I (NORMAL /ERROR-JUST CLOSE FILE AND DON'T TELL ANYBODY
3701 CDF 10 /ALL THAT WAS JUST TO GET THE DIRECTORY IN CORE
3702 STA /SO WE COULD FIDDLE WITH IT
3703 TAD I (17 /FORM POINTER TO DIRECTORY ENTRY
3704 TAD I (1404
3705 DCA TY
3706 TAD (213 /CHANGE EXTENSION TO .BK
3707 DCA I TY
3708 TAD I Z7 /DIRECTORY BLOCK IT CAME FROM
3709 AND Z7
3710 DCA ACI
3711 CDF 0
3712 JMS I OUTHND
3713 4210 /WRITE IT BACK OUT
3714 1400
3715ACI, 0
3716 JMP .-4 /ERROR! KEEP TRYING-THIS CAN BLOW A DIRECTORY
3717 JMP I (NORMAL
3718\fXTAB, EXITC /EC
3719 ENDFIL /EF
3720 EXITGO /EG
3721 EKILL /EK
3722 EXIT /EX
3723\fEKILL, TAD ERROR
3724 DCA OUTR
3725 POPJ
3726 PAGE
3727\fEXITGO, PUSHJ /DO AN EC TO CLOSE OUT FILE
3728 EXITC
3729 QCHK /ALLOW @
3730 DCA STOCD /MAKE REUSABLE IN CASE .START
3731 TAD (7600
3732 DCA CDPTR
3733 TAD (-47 /47 ENTRIES IN CD TABLE
3734 DCA EGCNT
3735EG1, QUOTST
3736 JMP EG2
3737 TAD [200 /TURN ON PARITY BIT FOR OS/8
3738 JMS STOCD
3739 JMP EG1
3740
3741STOCD, 0
3742 ISZ EGCNT
3743 SKP
3744ERR33, ERR /EG ARG TOO BIG
3745 CDF 10
3746 DCA I CDPTR
3747 CDF 0
3748 ISZ CDPTR
3749 JMP I STOCD
3750
3751CDPTR, 7600
3752EGCNT, -41
3753
3754EG2, TAD STOCD
3755 SNA CLA /ANYTHING IS ARG
3756 JMP REGEG /NO
3757 JMS STOCD /STORE 0 AT END
3758 JMS I (GETUSR
3759 TAD (CCLNAM
3760 DCA ARG1 /JUST IN CASE PREVIOUS EG FAILED
3761 CLA IAC /SYS
3762 CIF 10
3763 JMS I [200
3764 2 /LOOKUP
3765ARG1, CCLNAM
3766 0
3767 JMP CCLERR
3768 TAD (2001
3769 DCA I (JSBITS /KEEP USR IN CORE
3770 TAD ARG1
3771 DCA CHNBLK
3772 CIF 10
3773 JMS I [200
3774 6 /CHAIN
3775CHNBLK, 0
3776\fCCLERR, PUSHJ
3777 ECDISM
3778 JMP ERR33
3779
3780CCLNAM, FILENAME CCL.SV
3781\fREGEG, /EDIT AND GO - A CCL SPECIAL
3782 JMS I (7607 /CALL THE OS/8 SYSTEM HANDLER
3783 0200 /TO READ IN THE CCL OVERLAY
3784 CCLADR
3785 CCLOVL
3786 JMP ERR33 /ERROR ON SYSTEM DEVICE!
3787 JMP I .+1 /GO TO THE OVERLAY
3788 CCLOST /AT OUR "SPECIAL" LOCATION
3789 RELOC
3790\f/ F-OVERLAY
3791
3792 *7200
3793
3794 RELOC 3200
3795
3796 IOVRLC
3797 QOVRLC
3798 EOVRLC
3799 XOVRLC
3800FOVRLY, 0
3801
3802CHRED, TAD I (TYI
3803 SORT
3804 DLIS
3805 DTAB2-DLIS /CHECK FOR LEGALITY
3806ERR19, ERR /BAD CHAR AFTER E
3807DTOK, TAD I (TYI
3808 SORT
3809 DLIS
3810 DTAB-DLIS
3811 DCA XXFLAG
3812 NCHK /ANY ARGUMENT?
3813 JMP XXNO /NO, RETURN VALUE
3814 TAD N /YES
3815 DCA I XXFLAG /SET NEW VALUE
3816 TAD XXFLAG
3817 TAD (-EDFLAG+XXSUBS
3818 DCA XXSUB
3819 TAD I XXSUB
3820 DCA XXSUB
3821 JMS I XXSUB /CALL IT
3822 POPJ /RETURN
3823XXNO, TAD I XXFLAG /GET VALUE
3824 JMP I (NNEW13 /MAKE NEW 13-BIT VALUE
3825
3826DLIS, 104 /ED
3827 110 /EH
3828 117 /EO
3829 123 /ES
3830 124 /ET
3831 125 /EU
3832DTAB, EDFLAG /MUST BE NEGATIVE
3833 EHFLAG /TO CAUSE SUBSTITUTION
3834 EOFLAG
3835 ESFLAG
3836 ETFLAG
3837 EUFLAG
3838\fXXFLAG, 0 /POINTS TO FLAG IN MEMORY ABOVE 4000
3839
3840DTAB2, DTOK
3841 DTOK
3842 DTOK
3843 DTOK
3844 DTOK
3845 DTOK
3846
3847XXSUB, 0
3848\f/ MASK;SKIP;LOC;VALUE IF SKIPS;VALUE IF NO SKIP
3849
3850EUSUB, 0
3851 JMS FIXUP
3852 7777; SMA CLA; EU1; CLA; SNA CLA
3853 7777; SPA SNA CLA; EU2; TAD [40;NOP
3854 0
3855 JMP I EUSUB
3856
3857ETSUB, 0
3858 JMS FIXUP
3859 1; SNA CLA; KTYPE; PUTT; TYPE
3860 1; SNA CLA; ET1; PUTT; TYPE
3861 10; SNA CLA; ET8; CLA; TYPE
3862 0
3863 JMP I ETSUB
3864
3865\fLOC, 0
3866MASK, 0
3867
3868FIXUP, 0
3869FIXLUP, TAD I FIXUP
3870 SNA
3871 JMP I FIXUP /DONE, RETURN TO 0
3872 DCA MASK /SAVE MASK
3873 ISZ FIXUP
3874 TAD I FIXUP
3875 DCA SKIPY /SAVE SKIP CONDITION
3876 ISZ FIXUP
3877 TAD I FIXUP
3878 DCA LOC /SAVE LOC TO CHANGE
3879 ISZ FIXUP
3880 TAD I XXFLAG /LOOK AT FLAG
3881 AND MASK /'AND' WITH MASK
3882SKIPY, HLT
3883 JMP SKPF
3884 TAD I FIXUP
3885 DCA I LOC
3886 ISZ FIXUP
3887SKPT, ISZ FIXUP
3888 JMP FIXLUP
3889SKPF, ISZ FIXUP
3890 TAD I FIXUP
3891 DCA I LOC
3892 JMP SKPT
3893\fCTLUO, QREF /COMMAND ^U
3894 QSKP /COUNT UP STRING
3895 TAD OSCANP
3896 CMA
3897 TAD SCANP /LENGTH OF STRING
3898/
3899/ *** PROHIBIT STRING > 2047 CHARS
3900/
3901 ADJQ /ADJUST Q-REGISTERS AND SET NEW LENGTH
3902 TAD OSCANP /RESET SCAN POINTER
3903 DCA SCANP
3904 DCA NFLG
3905 NOTRCE
3906CCUB, QUOTST
3907 JMP CTLUND
3908 QPUT
3909 JMP CCUB
3910CTLUND, ENTRCE
3911 JMP I [IREST
3912 PAGE
3913\f/NUMERICAL OUTPUT ROUTINE
3914
3915ZEROD, 0
3916 DCA ZERFLG /INITIALIZE "LEADING ZEROS" FLAG
3917 TAD I ZEROD
3918 ISZ ZEROD
3919 DCA OUTDEV /SAVE OUTPUT ROUTINE ADDRESS
3920 TAD NLINK /POS OR NEGATIVE?
3921 SNA CLA
3922 JMP ZER2 /POSITIVE
3923 TAD RADIX
3924 TAD (-ORAD
3925 SNA CLA
3926 JMP PUTSGN /OCTAL
3927 TAD N /DECIMAL
3928 CIA
3929 DCA N /NEGATE
3930 SKP
3931PUTSGN, TAD ["1-"-
3932 TAD ("-
3933 JMS I OUTDEV /OUTPUT MINUS SIGN
3934ZER2, MTHREE
3935 DCA ZCOUNT /ITERATION COUNT
3936 TAD RADIX
3937 DCA RXR
3938ZDIGIT, ISZ RXR
3939 TAD I RXR
3940 DCA DIV1 /GET DIVISOR
3941 TAD N
3942 MQLDVI /DIVIDE BY A POWER OF THE BASE
3943DIV1, 0
3944 TAD ZERFLG
3945 SNA
3946 JMP LZ /IGNORE LEADING ZEROS
3947 TAD (60
3948 JMS I OUTDEV
3949 STL RAR
3950 DCA ZERFLG /SET LEADING ZEROS FLAG
3951LZ, TAD DVT1 /GET REMAINDER
3952 DCA N
3953 ISZ ZCOUNT /GO AROUND AGAIN?
3954 JMP ZDIGIT /WHY NOT?
3955 TAD N
3956 TAD (60
3957 JMS I OUTDEV /OUTPUT LAST DIGIT NO MATTER WHAT
3958 JMP I ZEROD
3959
3960OUTDEV, 0 /WHERE WE'RE SENDING THE DIGITS
3961ZERFLG, 0
3962ZCOUNT, 0
3963RXR, 0
3964\f/COMMANDS = AND \
3965
3966/COMMANDS = AND \ - NUMERICAL OUTPUT
3967
3968CEQLO, NCHK /COMMAND =
3969ERR21, ERR /NO NUMBER
3970 TAD RADIX
3971 DCA RADTMP
3972 JMS I (POKE /LOOK AHEAD ONE CHARACTER
3973 TAD (-75 /CHECK FOR = SIGN
3974 SZA CLA
3975 JMP SETRAD /SINGLE =
3976 SCAN /DOUBLE = (PASS UP SECOND ONE)
3977 SKP CLA /CLEAR AC
3978SETRAD, TAD [4
3979 TAD (ORAD
3980 DCA RADIX /SET OCTAL RADIX TEMPORARILY
3981 JMS ZEROD
3982 TPUT
3983 TAD RADTMP
3984 DCA RADIX /RESTORE ORIGINAL RADIX
3985 ISZ CLNF /: SEEN?
3986 CRLF /NO, END WITH CRLF
3987 DCA CLNF
3988 POPJ
3989
3990CBSLO, NCHK /COMMAND \
3991 JMP CBSN
3992 JMS ZEROD
3993 UPOC
3994 POPJ
3995
3996RADTMP, 0
3997\fCBSN, PUSHJ
3998 NMBR2 /INITIALIZE RESULT TO 0
3999 JMS PTCH
4000 TAD I P
4001 AND [377 /GET CURRENT CHARACTER
4002 CDF 0
4003 TAD (-55 /CHECK FOR MINUS SIGN
4004 SZA
4005 JMP .+3 /NOT MINUS
4006 PUSHJ
4007 CMIN /RECORD MINUS SIGN
4008 CIA
4009 CLL RTR
4010 SNA CLA /CHECK FOR PLUS SIGN
4011CBSNP, ISZ P /BUMP POINTER PAST SIGN
4012 JMS PTCH
4013 TAD I P /GET A CHAR
4014 AND [377
4015 CDF 0
4016 TAD (-72
4017 CLL
4018 TAD CALF
4019 SNL /IS IT A DIGIT?
4020 POPJ /NO
4021 PUSHJ
4022 NMBR2 /YES - ACCUMULATE IT
4023 JMP CBSNP /AND LOOP
4024\fPTCH, 0
4025 TAD P /V3C
4026 STL CIA /CHECK FOR END OF BUFFER
4027 TAD ZZ
4028 SZL SNA CLA
4029 POPJ
4030 CDF 10
4031 JMP I PTCH
4032
4033XXSUBS, EDSUB
4034 EHSUB
4035 EOSUB
4036 ESSUB
4037 ETSUB
4038 EUSUB
4039/ CXSUB
4040
4041/CXSUB,
4042EDSUB,
4043EHSUB,
4044ESSUB,
4045EOSUB, 0
4046 JMP I EOSUB
4047 PAGE
4048 RELOC
4049\f FIELD 1
4050
4051 *4400
4052
4053XERBAS, XER1
4054 XER2
4055 XER3
4056 XER4
4057 XER5
4058 XER6
4059 XER7
4060 XER8
4061 XER9
4062 XER10
4063 XER11
4064 XER12
4065 XER13
4066 XER14
4067 XER15
4068 XER16
4069 XER17
4070 XER18
4071 XER19
4072 XER20
4073 XER21
4074 XER22
4075 XER23
4076 XER24
4077 XER25
4078 XER26
4079 XER27
4080 XER28
4081 XER29
4082 XER30
4083 XER31
4084 XER32
4085 XER33
4086 XER34
4087 XER35
4088 XER36
4089\fXER1,
4090"I;"l;"l;"e;"g;"a;"l;" ;"C;"o;"m;"m;"a;"n;"d;" ;4000;0
4091XER2,
4092"U;"n;"t;"e;"r;"m;"i;"n;"a;"t;"e;"d;" ;"C;"o;"m;"m;"a;"n;"d;0
4093XER3,
4094"I;"l;"l;"e;"g;"a;"l;" ;"Q;"-;"r;"e;"g;"i;"s;"t;"e;"r;" ;"N;"a;"m;"e;" ;4000;0
4095XER4,
4096"I;"n;"t;"e;"r;"n;"a;"l;" ;"P;"u;"s;"h;" ;"D;"o;"w;"n;" ;"O;"v;"e;"r
4097"f;"l;"o;"w;0
4098XER5,
4099"S;"t;"o;"r;"a;"g;"e;" ;"C;"a;"p;"a;"c;"i;"t;"y;" ;"E;"x;"c;"e;"e;"d;"e;"d;0
4100XER6,
4101"S;"e;"a;"r;"c;"h;" ;"S;"t;"r;"i;"n;"g;" ;"t;"o;"o;" ;"L;"o;"n;"g;0
4102XER7,
4103"I;"m;"p;"r;"o;"p;"e;"r;" ;"A;"r;"g;"u;"m;"e;"n;"t;"s;0
4104XER8,
4105"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
4106" ;"i;"n;" ;"F;"i;"l;"e;"n;"a;"m;"e;0
4107XER9,
4108";;" ;"n;"o;"t;" ;"i;"n;" ;"a;"n;" ;"I;"t;"e;"r;"a;"t;"i;"o;"n;0
4109XER10,
4110">;" ;"n;"o;"t;" ;"i;"n;" ;"a;"n;" ;"I;"t;"e;"r;"a;"t;"i;"o;"n;0
4111XER11,
4112"A;"t;"t;"e;"m;"p;"t;" ;"t;"o;" ;"M;"o;"v;"e;" ;"P;"o;"i;"n;"t;"e;"r
4113" ;"O;"f;"f;" ;"P;"a;"g;"e;0
4114XER12,
4115"Q;"-;"r;"e;"g;"i;"s;"t;"e;"r;" ;"M;"e;"m;"o;"r;"y;" ;"O;"v;"e;"r;"f;"l;"o;"w;0
4116XER13,
4117"U;"n;"t;"e;"r;"m;"i;"n;"a;"t;"e;"d;" ;"M;"a;"c;"r;"o;0
4118XER14,
4119"O;"u;"t;"p;"u;"t;" ;"E;"r;"r;"o;"r;0
4120XER15,
4121"I;"n;"p;"u;"t;" ;"E;"r;"r;"o;"r;0
4122XER16,
4123"F;"i;"l;"e;" ;"E;"r;"r;"o;"r;0
4124XER17,
4125"O;"u;"t;"p;"u;"t;" ;"C;"o;"m;"m;"a;"n;"d;" ;"w;"o;"u;"l;"d;" ;"h;"a;"v;"e
4126" ;"O;"v;"e;"r;"f;"l;"o;"w;"e;"d;0
4127XER18,
4128"N;"u;"m;"e;"r;"i;"c;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"Y;0
4129XER19,
4130"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
4131" ;"a;"f;"t;"e;"r;" ;"E;0
4132XER20,
4133"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
4134" ;"a;"f;"t;"e;"r;" ;"";0
4135XER21,
4136"N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"=;0
4137XER22,
4138"N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"U;0
4139XER23,
4140"N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"q;"u;"o;"t;"e;0
4141XER24,
4142"S;"e;"a;"r;"c;"h;" ;"f;"a;"i;"l;"e;"d;0
4143XER25,
4144"N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o
4145" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"P;0
4146XER26,
4147"N;"e;"g;"a;"t;"i;"v;"e;" ;"a;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;",;0
4148XER27,
4149"C;"a;"s;"e;" ;"S;"u;"p;"p;"o;"r;"t;" ;"n;"o;"t
4150" ;"I;"m;"p;"l;"e;"m;"e;"n;"t;"e;"d;215;212;211;177;177
4151"[;"u;"s;"e;" ;"W;" ;"f;"o;"r;" ;"W;"a;"t;"c;"h;" ;"C;"o;"m;"m;"a;"n;"d;"];0
4152/XER28,
4153/"N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o;"
4154/"I;"t;"e;"r;"a;"t;"i;"o;"n;" ;"C;"o;"u;"n;"t;0
4155XER28,
41560
4157XER29,
4158"N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o;"
4159"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"S;0
4160XER30,
4161"C;"a;"n;"n;"o;"t;" ;"W;"r;"i;"t;"e;" ;"O;"u;"t;" ;"E;"r;"r;"o;"r
4162" ;"M;"e;"s;"s;"a;"g;"e;" ;"O;"v;"e;"r;"l;"a;"y;0
4163XER31,
4164"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000
4165" ;"a;"f;"t;"e;"r;" ;"F;0
4166XER32,
4167"Y;" ;"C;"o;"m;"m;"a;"n;"d;" ;"A;"b;"o;"r;"t;"e;"d;0
4168XER33,
4169"C;"C;"L;".;"S;"V;" ;"n;"o;"t;" ;"f;"o;"u;"n;"d;" ;"o;"r;"
4170"E;"G;" ;"a;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;"o;" ;"b;"i;"g;0
4171XER34,
4172"E;"x;"e;"c;"u;"t;"i;"o;"n;" ;"a;"b;"o;"r;"t;"e;"d;0
4173XER35,
4174"C;"a;"s;"e;" ;"S;"u;"p;"p;"o;"r;"t;" ;"n;"o;"t;"
4175"I;"m;"p;"l;"e;"m;"e;"n;"t;"e;"d;215;212;211;177;177
4176"[;"u;"s;"e;" ;"E;"O;" ;"f;"o;"r
4177" ;"V;"e;"r;"s;"i;"o;"n;" ;"n;"u;"m;"b;"e;"r;"];0
4178XER36,
4179"N;"o;" ;"F;"i;"l;"e;" ;"f;"o;"r;" ;"O;"u;"t;"p;"u;"t;0
4180 PAGE
4181\fCOREAD, 0
4182 ISZ COREAD
4183 TAD I COREAD /GET BLOCK #
4184 AND CO7
4185 CLL RTR
4186 RTR
4187 RAR /MULTIPLY BY 400
4188 TAD KMEM
4189 DCA FLO
4190 TAD M400
4191 DCA FLCNT
4192 TAD K3200
4193 DCA FTO
4194FLOO, CDF 30
4195 TAD I FLO
4196 CDF 0
4197 DCA I FTO
4198 ISZ FLO
4199 ISZ FTO
4200 ISZ FLCNT
4201 JMP FLOO
4202 ISZ COREAD
4203 CIF CDF 0
4204 JMP I COREAD
4205
4206FLCNT, 0
4207CO7, 7
4208M400, -400
4209K3200, 3200
4210KMEM, MEMLOC
4211FLO, 0
4212FTO, 0
4213COREND=.
4214\fNEWERR, RELOC OVREAD
4215 CIF 30 /NEW CODE TO READ OVERLAY
4216 JMS I .+1 /MUST BE 5 LOCS LONG
4217 COREAD
4218TMP, 0 /BLOCK #
4219 NOP
4220 RELOC
4221 PAGE
4222\f