software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape6 / MCPIP.PA
1 /7 OS/8 MCPIP MAGTAPE AND CASSETTE PIP
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /COPYRIGHT (C) 1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION
12 /
13 /
14 /
15 /
16 /
17 /
18 /
19 /
20 /
21 /
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
26 /
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
31 /
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
34 /DIGITAL.
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 \f
46 / S.R.
47
48 / REVISED FEB. 11, 1974
49 / SECOND REVISION: 7-AUG-75
50
51
52 /1. INSTALLED PATCH SEQ #1 , SEPT. 1974 DSN
53 / (NOW TRANSFERS LAST 2 BYTES CORRECTLY IN IMAGE MODE)
54 /2. BUMPED VERSION NUMBER TO V5
55 /3. FIXED /L BUG IF DEVICE NOT MAGTAPE OR CASSETTE
56
57 KCLR=6700 /CLEAR ALL
58 /CLEAR STATUS A AND B REGISTERS.
59 KSDR=6701 /SKIP ON DATA FLAG
60 KSEN=6702 /SKIP ON ERROR
61 KSBF=6703 /SKIP ON READY FLAG
62 KLSA=6704 /LOAD STATUS A FROM AC 4-11
63 /CLEAR AC, THEN
64 /LOAD 8 BIT COMPLEMENT OF STATUS A
65 /BACK INTO AC
66 KSAF=6705 /SKIP ON ANY FLAG OR ERROR
67 KGOA=6706 /ASSERT THE CONTENTS OF STATUS A,
68 /TRANSFER DATA IF READ OR WRITE
69 KRSB=6707 /READ STATUS B INTO AC 4-11
70
71
72 FIXMRI CALL=4400
73 FIXMRI EXIT=5400
74 FIXMRI INCR=2000
75
76 /CORE ALLOCATION
77
78 /00000-01777 COMMAND DECODER
79 /02000-02377 OUTPUT HANDLER
80 /02400-02777 INPUT HANDLER
81 /03000-03777 CASSETTE OUTPUT BUFFER
82 /04000-04777 CASSETTE INPUT BUFFER
83 /05000-05577 STAND ALONE CASSETTE HANDLER
84 /05600-07577 LOOKUP, ENTER, CLOSE
85 /07600-07777 OS/8
86
87 /10000-11777 USR
88 /12000-14577 PIPC
89 /14600-17577 OS/8 INPUT/OUTPUT BUFFER
90 /17600-17777 OS/8
91 \f/USR HAS THE FOLLOWING FREE LOCATIONS:
92 /0-6
93 /10-17 (BUT GET DESTROYED)
94 /20-37
95
96 TEMP=20
97 TEMP1=21
98 TEMP2=22
99 TEMP3=23
100
101 / STARTING ADDRESS = 12000
102 / JOB STATUS WORD = 6003
103
104 INHAND=2400
105 OUTHAND=2000
106 COBUF=3000
107 CIBUF=4000
108
109 PIPVERSION=6
110 PATCHLEV=77&"A
111
112 SPCODE=6
113 CLCODE=0
114 REWCOD=1
115 FICODE=3
116 EOCODE=5
117 RECCOD=2
118 \f/V3 CHANGES:
119
120 /1. SHRUNK 0S/8 BUFFER TO 3000 WORDS
121 /2. ADDED VERSION NUMBER (/V)
122 /3. MADE INDEPENDENT OF MAGIC LOCATIONS IN CASSETTE HANDLER
123 /4. ADDED MAGTAPE SUPPORT OF CASSETTE FILE STRUCTURE
124 /5. ALTMODE MEANS RETURN TO KBM
125 /6. ^C DOESN'T CLOSE CASSETTES UNLESS WE ALREADY WROTE ON IT
126 /7. FIXED BUG THAT CSA2 THRU CSA7 DIDN'T WORK
127 /8. CR ALONE TO CD GIVES NO ERROR MESSAGE
128 /9. ADDED ^O AND ^C SUPPORT TO MESSAGE PRINTOUT
129 /10. GIVE ERRORS ON ILLEGAL * OR ? IN NAME
130 /11. USES TTY: AS DEFAULT OUTPUT DEVICE ON /L
131
132 /PROPOSED:
133 /8. ALLOW *.* FOR CASSETTE INPUT
134 /9. SUPPORT OF UNLABELED MAGTAPE STANDARD
135 /10. /7 OR /9 SPECIFIES CHANNEL
136
137 /FIXES SINCE FIELD TEST :
138
139 /1. ^C ALWAYS BRINGS YOU BACK TO KBM
140 /2. FIXED BUG RE CHECK FOR FILE FULL
141 /3. MADE COMPATIBLE WITH NEW TM8E HANDLER
142 /4. TIME-OUT ON CASSETTE READ
143 /5. BE NICE-GUY IF OS/8 LOOKUP FAILURE
144 \f/THIS ROUTINE LEAVES WITH INTERRUPTS OFF AND DEVICE SELECTED
145 /AND READY.
146 /THE NEW UNIT NUMBER (0-7) IS IN THE AC.
147 /THE UNIT NUMBER IS IN BITS 8-11 OF THE AC.
148 /RETURN 1 IS MADE IF THE UNIT IS NOT READY.
149 /CINUSE IS SET TO 1.
150 /THE HANDLER MUST NOT ALREADY BE IN USE.
151 /THE DATA FIELD IS INTERROGATED
152 /AND A RETURN CIF CDF IS BUILT
153 /AND STORED IN LOCATION RETCIF
154
155 \f *5000
156
157 FIXDVC, 0
158 DCA DVC
159 RDF
160 TAD (CIF CDF
161 CDF 0
162 DCA TMP
163 TAD I FIXDVC
164 DCA ERRET
165 ISZ FIXDVC
166 TAD TMP
167 DCA I ERRET
168 TAD DVC
169 SNA
170 JMP CHECKR
171 RAR /MOVE UNIT TO LINK; DEVICE TO AC
172 AND (3 /MASK OFF DEVICE CODE
173 DCA DVC /SAVE DEVICE CODE
174 SZL
175 TAD (100
176 DCA I (ABUNIT /SET UNIT IN BIT 5
177 TAD DVC
178 CLL RTL
179 RAL /UGLY
180 DCA DVC /MOVE TO BITS 6-8
181 TAD (IOTBL
182 DCA IOTPTR
183 IOTLOOP,TAD I IOTPTR
184 SNA /END OF TABLE?
185 JMP CHECKR /YES
186 DCA TMP
187 TAD I TMP
188 AND (7707 /MASK OUT OLD DVC
189 TAD DVC /INSERT NEW ONE
190 DCA I TMP /REPLACE
191 ISZ IOTPTR /POINT TO NEXT ONE
192 JMP IOTLOOP
193
194 TMP, 0
195 DVC, 0 /DEVICE CODE
196 IOTPTR, 0
197 \fCHECKR, JMS I (CLEAR
198 TAD (200
199 JMS I (LOADA /SELECT DRIVE
200 JMS I (CHECKB
201 AND (7735 /IGNORE EOT/BOT FLAG
202 /AND WLO
203 TAD (-1
204 SZA CLA
205 JMP I ERRET /NOT READY
206 ISZ I (CINUSE
207 JMP I FIXDVC
208
209 ERRET, 0 /ERROR RETURN LOCATION
210 \fFIDDLE, 0
211 CIF 10
212 JMS I (FID2 /NEED ROOM
213 TAD (CIBUF+11
214 DCA 10
215 TAD FAST
216 SZA CLA
217 JMP DIREOL
218 TAD (40
219 DCA I 10
220 TAD I (CIBUF+20
221 DCA I 10
222 TAD I (CIBUF+20
223 AND (177
224 SZA
225 TAD (-40
226 SZA CLA
227 TAD ("/-40
228 TAD (40
229 DCA SLSH
230 TAD I (CIBUF+21
231 DCA I 10
232 TAD SLSH
233 DCA I 10
234 INCR 10
235 INCR 10
236 TAD SLSH
237 DCA I 10
238 TAD I (CIBUF+22
239 DCA I 10
240 TAD I (CIBUF+23
241 DCA I 10
242 DIREOL, TAD (15
243 DCA I 10
244 TAD (12
245 DCA I 10
246 TAD (32
247 DCA I 10
248 FIDLV, EXIT FIDDLE
249
250 /0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25
251 /F I L E N A M E S D D M M Y Y
252 /F I L E N A . M E S M M / D D / Y Y CR LF ^Z
253
254 FAST, 0 /0 MEANS F NOT SPECIFIED
255 \fSLSH, "/
256
257 IOTBL, IOT0
258 IOT1
259 IOT4
260 IOT5
261 IOT6
262 IOT6C
263 IOT7
264 0
265 PAGE
266 \fUTIL, 0
267 DCA TEMPU
268 DCA REWSW /ZERO REWIND SWITCH
269 TAD I UTIL
270 TAD (-10
271 SNA
272 ISZ REWSW
273 ISZ UTIL
274 TAD (210
275 DCA TEMPFN
276 TAD TEMPU
277 JMS I (FIXDVC /FIX DEVICE CODE
278 UTEND /UNIT NOT READY
279 TAD (UT
280 DCA CRET /SET RETURN ADDRESS
281 STA
282 DCA I (RW /NOTE FACT THAT OP AINT READ
283 TAD TEMPFN
284 JMS I (LOADA
285 JMS GO /INITIATE UTIL
286 JMP CRET+1
287 ISZ UTIL
288 UTEND, HLT
289 JMP I UTIL
290 UT, JMS CHECKB /LOOK AT STATUS B
291 AND (50 /CHECK FOR CL, EMPTY, OR WLO
292 /GIVE NO ERROR ON WLO ************
293 /BAD FOR WRGAP
294 SNA
295 JMP OK /NO ERRORS
296 TAD (-40
297 SZA CLA
298 JMP NOTOK /ERROR NOT CL
299 TAD REWSW
300 SNA CLA /CL OK IF DID REWIND
301 NOTOK, STA
302 OK, JMS CLEAR
303 TAD CINUSE
304 SMA CLA
305 JMP UTEND-1
306 TAD BSTATE /ERROR
307 JMP UTEND
308
309 TEMPU, 0
310 TEMPFN, 0
311 REWSW, 0 /1 MEANS OPERATION IS REWIND
312 \fCHECKB, 0
313 IOT7, KRSB /READ STATUS B INTO AC 4-11
314 DCA BSTATE /SAVE STATUS B
315 TAD BSTATE
316 JMP I CHECKB
317
318 CLEAR, 0
319 DCA CINUSE /LEAVE STATUS CONDITION IN AC; -1 MEANS ERROR
320 IOT0, KCLR /CLEAR STATUS A AND B
321 JMP I CLEAR
322
323 GO, 0
324 IOT6, KGOA /ASSERT CONTENTS OF STATUS A
325 CLA
326 JMP I GO
327
328 CHK, 0
329 JMS I (CHECKB
330 AND (374
331 IOT1, KSDR
332 SKP /DATA FLAG NOT UP -
333 JMP I CHK
334 TAD (-20
335 SNA CLA /IS IT END OF FILE?
336 JMP I (ERRR /YES, ERROR - BUT DON'T RETRY
337 TAD BSTATE
338 JMP I CHK
339
340 CINUSE, 0 /1 MEANS HANDLER IN USE
341 BSTATE, 0 /STATUS OF REGISTER B ON ERROR
342 \fDTEM, 0
343
344 DOPTION,JMS I (CONVRT
345 7601
346 DCA DTEM
347 TAD I (OUNIT
348 JMS I (LOOKUP
349 JMP I (XER4
350 JMP MBNF /NOT FOUND
351 INCR DTEM
352 JMS I (DELET
353 JMP I (XER77 /OUTPUT ERROR
354 MBNF, TAD DTEM
355 SNA CLA /ANYTHING DELETED?
356 JMP I (XER24 /NO
357 JMS UTIL
358 REWIND
359 CLA
360 CIF CDF 10 /YES
361 JMP I (DECODE
362 \fCRET, 0
363 CDF 0
364 TAD (-200 /COUNT OF HOW LONG TO WAIT
365 DCA I (OUTER
366 IOL, JMS I (CTRLC
367 JMS I (TIMEOUT
368 IOT5, KSAF
369 JMP IOL
370 EXIT CRET
371 PAGE
372 \fHANDLER,0
373 DCA TUN
374 TAD I HANDLER /GET FUNCTION CONTROL WORD
375 AND L70 /ISOLATE FIELD OF BUFFER
376 TAD LCDF
377 DCA WCDF
378 TAD I HANDLER /RETRIEVE FUNCTION CONTROL WORD
379 RAL /READ/WRITE BIT TO LINK
380 CLA RAL
381 DCA RW /RW=1 IF WRITE
382 ISZ HANDLER /POINT TO BUFFER ADDRESS
383 TAD I HANDLER /GET BUFFER ADDRESS
384 DCA BUFFER /SAVE IT
385 ISZ HANDLER /POINT TO ERROR RETURN
386 TAD TUN
387 JMS I (FIXDVC
388 LV /NOT READY
389 TAD WCDF
390 DCA BFIELD
391 TAD WCDF
392 DCA BFLD
393 STA CLL RTL /TAD (-3
394 DCA ERKNT
395 JMS SETUP /SET UP READ OR WRITE
396 JMP I (CRET+1
397 ISZ HANDLER /POINT TO GOOD RETURN
398 LV, HLT
399 JMP I HANDLER
400 RW, 0 /1 IF WRITE (-1 IF UTIL)
401 ERKNT, -3
402 \fSETUP, 0
403 TAD RW
404 TAD (WRITEX
405 DCA I (CRET /SET RETURN ADDRESS
406 TAD BUFFER
407 DCA BPTR
408 TAD BSIZE
409 CMA /WANT TO READ ONE MORE
410 TAD RW
411 DCA BKNT
412 TAD RW
413 DCA OUTSW
414 TAD RW
415 CLL RTL
416 RTL /WRITE FN CODE=20
417 TAD (200 /SELECT AND INTERRUPT ENABLE
418 JMS I (LOADA
419 WCDF, HLT
420 TAD RW
421 SZA CLA
422 TAD I BPTR
423 LCDF, CDF 0
424 JMS I (GO
425 JMP I SETUP
426
427 \fREADX, JMS I (CHK
428 AND L374
429 SZA
430 JMP ERRX
431 IOT6C, KGOA /GET CHAR JUST READ
432 DCA BYTE
433 ISZ BKNT
434 SKP
435 JMP RWCRC
436 BMODE, TAD BYTE
437 TUN,
438 BFLD, HLT
439 DCA I BPTR
440 ISZ BPTR
441 L374, 374
442 JMP I (CRET+1 /CRET ALREADY SET UP
443
444 BSIZE, 200
445 OUTSW, 0 /1 MEANS WE BEGAN TO WRITE
446 \fRWCRC, TAD (260 /ENABLE, ENABLE INTER, READ CRC
447 JMS I (LOADA
448 JMS I (GO
449 JMS I (CRET
450 JMS I (CHK
451 CRCMN, JMS I (GO
452 JMS I (CRET
453 JMS I (CHECKB
454 AND (7775 /IGNORE WLO
455 TAD (-1
456 ERRX, SNA CLA /ERRORS?
457 JMP ERRR+1 /NO - CLEAN BILL OF HEALTH
458 ISZ ERKNT /TRY 3 TIMES
459 JMP I (ERRCOV /RETRY
460 ERRR, STA /ERROR WHILE READING CRC
461 JMS I (CLEAR
462 TAD I (CINUSE
463 SMA CLA
464 JMP LV-1
465 TAD I (BSTATE
466 JMP LV
467 \fWRITEX, JMP READX
468 JMS I (CHK
469 SZA
470 JMP ERRX
471 ISZ BKNT
472 SKP
473 JMP WCRC
474 BFIELD, HLT
475 ISZ BPTR
476 L70, 70
477 TAD I BPTR
478 JMS I (GO
479 JMP I (CRET+1
480
481
482 WCRC, TAD (260
483 JMS I (LOADA
484 JMP CRCMN
485 BKNT, 0 /NUMBER OF CHARS EXPECTED
486 BPTR, 0 /NEXT LOCATION IN BUFFER TO STORE INTO
487 BYTE, 0 /TEMPORARILY HOLDS BYTE FOUND
488 BUFFER, 0
489 PAGE
490 \f/ LOOKUP, ETC.
491
492 F1=10
493 READ=0
494 WRITE=4000
495
496 REWIND=10
497 BACKFIL=30
498 WRGAP=40
499 BACKBLOCK=50
500 SKPFIL=70
501
502 HSIZE=40
503 OBUFFER=4600 /LOCATION OF OS/8 I/O BUFFER
504 BINBUF=OBUFFER
505 OBUFLEN=3000
506 HOBUFLEN=OBUFLEN%2
507 MAXBLK=OBUFLEN%400
508
509 FILNUM, 0
510 / ENTER
511
512 / TAD UNIT
513 / JMS I (ENTER
514 / <ERROR RETURN>
515 / <NORMAL RETURN>
516
517 / ENTER FILENAME AS SPECIFIED IN SINCH
518 / USER MUST SET SINCH BUT ONLY FIRST 25 (OCTAL) LOCATIONS.
519
520 ENTER, 0
521 JMS I (LOOKUP
522 JMP ERET /ERROR WHILE READING
523 JMP NTF
524 JMS I (DELET
525 JMP ERET /ERROR WHILE DELETING
526 NTF, JMS BACK
527 JMP ERET /ERROR BACKING UP
528 JMS I QH1 /WRITE NEW HEADER
529 WRITE
530 SINCH
531 JMP ERET /CASSETTE NOT READY
532 TAD I (RECSIZ
533 DCA I (BSIZE
534 INCR ENTER
535 ERET, EXIT ENTER
536
537 RDOR, 0
538 AND (374 /CASSETTE ONLY
539 TAD (-200
540 SZA CLA /WAS ERROR JUST CRC?
541 EXIT BACK /NO
542 EXIT RDOR /YES, OK CONTINUE
543 \fBACK, 0
544 BK4, JMS I QU1
545 BK2, BACKFIL /GO BACK TO FILE GAP
546 EXIT BACK
547 BK3, JMS I QU1
548 BACKBLOCK /BACK TO LAST RECORD
549 JMP BKERR
550 TAD I (RECSIZ
551 DCA I (BSIZE
552 JMS I QH1 /READ LAST RECORD OF PREV FILE
553 READ+F1 /DON'T STORE IN BUFFER
554 BINBUF
555 JMS RDOR /^*******
556 /ERROR READING LAST BLOCK
557 NEWGAP, JMS I QU1
558 WRGAP /WRITE A NEW GAP
559 EXIT BACK
560 BK9, TAD (HSIZE
561 DCA I (BSIZE
562 INCR BACK
563 EXIT BACK
564
565 BKERR, AND (3775 /CASSETTES ONLY
566 TAD (-41
567 SZA CLA /WAS ERROR CLEAR LEADER?
568 EXIT BACK
569 JMP NEWGAP
570
571 BK1, JMP BK9
572
573 /FOR MAGTAPES:
574
575 /BK2_BACKBLOCK
576 /BK3_BK1
577 \fCLOSE, 0
578 JMS I QU1
579 WRGAP
580 JMP CLRET /ERROR WHILE WRITING GAP
581 TAD (HSIZE
582 DCA I (BSIZE
583 JMS I QH1
584 WRITE /WRITE SENTINEL
585 ZER
586 JMP CLRET
587 JMS I QU1
588 REWIND
589 JMP CLRET
590 INCR CLOSE /SKIP ERROR RETURN
591 CLRET, EXIT CLOSE
592 \fCRED, 0
593 TAD I (INRECSZ
594 DCA I (BSIZE
595 TAD I (IUNIT
596 JMS I QH1
597 READ
598 CIBUF
599 JMP INER
600 TAD (CIBUF
601 DCA I (CIPTR
602 TAD I (INRECSZ
603 CIA
604 DCA I (CIKNT
605 / CLA IAC
606 / DCA DATAFLG
607 EXIT CRED
608 INER, AND EOFBIT
609 SZA CLA /REAL ERROR?
610 JMP I (XER4 /YES
611 / TAD DATAFLG
612 / SNA CLA /READ ANY DATA?
613 / JMP INTO /NO REWIND
614 / DCA DATAFLG /YES, COULD CLOSE OUTPUT AND OPEN NEXT INPUT
615 INTO, CLA
616 TAD I (IUNIT
617 JMS I QU1
618 REWIND
619 CLA
620 TAD I (BIPTR
621 CIF CDF 10 /NO, MERELY END-OF-FILE
622 TAD (-OBUFFER+377
623 CLL RTL
624 RTL
625 RAL
626 AND (17
627 DCA I (INTEN /NUMBER OF BLOCKS GOT
628 JMP I (XFIN
629
630 LOADA, 0
631 TAD ABUNIT
632 IOT4, KLSA
633 CLA
634 JMP I LOADA
635
636 EOFBIT, 254 /CHANGED TO 3673 FOR MAGTAPE
637 /DATAFLG,0 /1 MEANS READ DATA
638 \fQU1, UTIL
639 QH1, HANDLER
640 ABUNIT, 0
641 PAGE
642 \f
643 / LOOKUP
644
645 / TAD UNIT
646 / JMS I (LOOKUP
647 / I/O ERROR RETURN
648 / <NOT FOUND RETURN>
649 / <FOUND RETURN>
650 / ALWAYS LOOKS FOR THING SPECIFIED IN SINCH
651
652 LOOKUP, 0
653 DCA P1
654 CDF 10
655 TAD I (7644
656 CDF 0
657 AND (10 /IS /U SPECIFIED?
658 SZA CLA
659 JMP GOODRT /YES, DO NOTHING
660 TAD P1
661 JMS I QU2
662 REWIND
663 JMP ERRIT
664 TAD (HSIZE /SET LENGTH OF RECORD HEADER
665 DCA I (BSIZE
666 DCA I (FILNUM
667 FL1, JMP FL2 /ZERO THIS LOCATION FOR MAGTAPES
668 FLOOP, JMS I QU2
669 SKPFIL
670 JMP ERRIT
671 FL2, INCR I (FILNUM
672 JMS I QH2
673 READ
674 INCH
675 JMP ERRIT
676 TAD (INCH
677 DCA P1
678 TAD I P1
679 SNA CLA /SENTINEL FILE?
680 JMP NFNDRET /YES, NOT FOUND
681 TAD (SINCH /NO, IS THIS THE ONE WANTED?
682 DCA P2
683 TAD (-10
684 DCA SCNT
685 \fSLOOP, TAD I P1
686 CIA
687 TAD I P2
688 AND (177 /ONLY LAST 7 BITS NEED MATCH
689 SZA CLA
690 JMP FLOOP /FILE KEY NOT ONE DESIRED
691 INCR P1
692 INCR P2
693 ISZ SCNT
694 JMP SLOOP
695 GOODRT, INCR LOOKUP /SKIP NOT FOUND RETURN
696 NFNDRET,INCR LOOKUP /SKIP ERROR RETURN
697 ERRIT, CLA
698 TAD I (RECSIZ
699 DCA I (BSIZE /BE NICE TO USER
700 LRET, EXIT LOOKUP /BYE-BYE
701
702 ERRT, AND EOTBIT /REAL ERROR?
703 SZA CLA
704 JMP ERRIT /YES
705 JMP NFNDRET /NO, MERELY END-OF CASSETTE
706
707 /END OF CASSETTD IS SIGNALLED BY
708
709 /A SENTINEL FILE
710 /B DOUBLE FILE GAP
711 /C EOT
712
713 EOTBIT, 314 /CHANGE TO 3663 FOR MAGTAPE
714 \fP1, 0
715 P2, 0
716 SCNT, 0
717 DELET, 0
718 JMS I (BACK
719 EXIT DELET
720 JMS I QH2 /WRITE EMPTY HEADER
721 WRITE+10
722 EMPTINCH
723 EXIT DELET /ERROR WHILE DELETING
724 CLL STA RAL /-2
725 TAD LOOKUP
726 DCA LOOKUP
727 JMP FLOOP /JUMP INTO LOOKUP TO CONTINUE
728 ZER, 0
729
730 QH2, HANDLER
731 QU2, UTIL
732 FL3, JMP FL2
733 \fERRCOV, JMS I (CLEAR
734 JMS I (CTRLC
735 TAD (250
736 JMS I (LOADA
737 JMS I (GO /BACKSPACE BLOCK
738 JMS I (CRET /WAIT
739 JMS I (CHECKB
740 AND (374 /KILL WRITE-LOCK BIT
741 SZA CLA
742 JMP I (ERRR
743 JMS I (SETUP /RE-SET UP OPERATION
744 JMP I (CRET+1 /GO AWAY
745 \fTIMEOUT,0
746 ISZ INNER
747 JMP I TIMEOUT
748 ISZ OUTER
749 JMP I TIMEOUT
750 TAD I (RW / I/O HAS TAKEN A LOT OF TIME
751 SZA CLA /IS IT A READ OP?
752 JMP I TIMEOUT /NO, RETURN
753 JMP I (ERRR /YES, ERROR
754
755 INNER, 0
756 OUTER, -200
757 PAGE
758 \f/SEND CONTENTS OF OS/8 BUFFER TO CASSETTE
759 /VIA CASSETTE OUTPUT BUFFER
760
761 CWRITE, 0
762 TAD (OBUFFER
763 DCA BUPTR /PT TO BEGIN OF BUFFER
764 CDF 10
765 TAD I (INTEN /GET NO. OF BLOCKS READ
766 SNA
767 JMP CWLV
768 CDF 0
769 CLL RTR
770 RTR
771 RAR /CONVERT TO WORDS
772 IAC
773 AND (7776 /ROUND UP TO EVEN NO.
774 CLL RAR /DIVIDE BY TWO
775 CIA /USE AS COUNT OF DOUBLE-WORDS
776 DCA BUKNT /2000 TWO-WORD ENTRIES
777 CWLOOP, CDF 10
778 TAD I BUPTR
779 JMS CWR /SENT TO CASSETTE OUTPUT BUFFER
780 CDF 10
781 TAD I BUPTR
782 AND (7400
783 DCA TEMP1
784 INCR BUPTR /PT TO 2ND HALF
785 TAD I BUPTR
786 JMS CWR
787 CDF 10
788 TAD I BUPTR
789 AND (7400
790 CLL RTR
791 RTR
792 TAD TEMP1
793 RTR
794 RTR
795 JMS CWR
796 INCR BUPTR /PT TO NEXT DOUBLE-WORD
797 ISZ BUKNT /AT END OF BUFFER?
798 JMP CWLOOP /NO
799 CWLV, CIF CDF 10
800 EXIT CWRITE /YES, RETURN
801 BUPTR, 0 /PTS INTO OBUUFER
802 BUKNT, 0
803 \f/INSERT CHAR IN CASSETTE OUTPUT BUFFER
804 /AND OUTPUT BUFFER IF BUFFER FULL
805
806 CWR, 0
807 AND (377
808 CDF 0
809 DCA CWTMP
810 TAD LDRFLG
811 SZA CLA
812 JMS I (LDRTST
813 CDF 10
814 TAD I (7643
815 RTL /PUT /B OPTION IN LINK
816 CDF 0
817 SNL CLA
818 JMP GOK
819 TAD CWTMP
820 TAD M200
821 SNA CLA
822 JMP I (PREFIN
823 GOK, TAD CWTMP2
824 JMS CWR2
825 TAD CWTMP1
826 DCA CWTMP2
827 TAD CWTMP
828 DCA CWTMP1
829 CWREX, EXIT CWR
830
831 CWR2, 0
832 SPA
833 JMP CWRIGN /IGNORE -1
834 CDF 0
835 DCA I COPTR /INSERT CHAR IN COBUF
836 INCR COPTR
837 ISZ COKNT /COBUF FULL?
838 EXIT CWR2 /NO, SO RETURN
839 JMS CWRI
840 M200,
841 CWRIGN, 7600 /CLA
842 EXIT CWR2
843 \fCWRI, 0
844 TAD COKNT
845 TAD RECSIZ
846 SNA CLA
847 EXIT CWRI /DO NOTHING IF BUFFER EMPTY
848 TAD RECSIZ
849 DCA I (BSIZE
850 TAD I (OUNIT
851 JMS I QH3 /YES, WRITE OUT BUFFER
852 WRITE /WRITE FROM FIELD 0
853 PCOBUF, COBUF /LOCATION COBUF
854 JMP XER7 /OUTPUT ERROR
855 TAD PCOBUF
856 DCA COPTR /BUFFER IS NOW EMPTY
857 TAD RECSIZ
858 CIA
859 DCA COKNT
860 EXIT CWRI
861
862 RECSIZ, 0 /RECORD SIZE ON OUTPUT
863 COPTR, COBUF /PTS TO NEXT FREE LOCATION IN COBUF
864 COKNT, -1000 /NUMBER OF EMPTY SLOTS LEFT IN COBUF
865
866 XER7, CIF CDF 10
867 AND (40
868 SZA CLA /CLEAR LEADER?
869 JMP I (ER5 /YES, DEVICE FULL
870 JMP I (ER7 /OUTPUT ERROR
871 XER4, CIF CDF 10
872 JMP I (ER4
873 XER8, CIF CDF 10
874 JMP I (ER8
875
876 LDRFLG, 0 /NON-ZERO IF IGNORING LEADER
877 CWTMP1, -1
878 CWTMP2, -1
879 CWTMP, 0
880 QH3, HANDLER
881 PAGE
882 \fPREFIN, TAD (200
883 JMS I (CWR2 /WRITE OUT TRAILER
884 JMP CFIN2 /BUT NO CHECKSUM
885 CFIN, TAD I (CWTMP2 /V3C
886 JMS I (CWR2
887 TAD I (CWTMP1 /V3C
888 JMS I (CWR2
889 CFIN2, JMS I (CWRI
890 TAD I (OUNIT
891 XCLOSE, JMS I (CLOSE
892 JMP I (XER8
893 XLV, CIF CDF 10
894 JMP I (DECODE
895 \fCTRTEM,
896 CREAD, 0
897 TAD (OBUFFER
898 DCA BIPTR
899 TAD (-OBUFLEN
900 DCA BIKNT
901 ZRLUP, CDF 10
902 DCA I BIPTR /ZERO BUFFER
903 CLA IAC
904 AND I (7643
905 SZA CLA
906 TAD (DCRE-CRE /GOT L OPTION
907 TAD (CRE
908 CDF 0
909 DCA XCRE /PT TO INPUT SUBR
910 INCR BIPTR
911 ISZ BIKNT
912 JMP ZRLUP
913 TAD (OBUFFER
914 DCA BIPTR
915 TAD (-HOBUFLEN
916 DCA BIKNT /# OF DOUBLE-WORDS
917 CRLOOP, JMS I XCRE
918 CDF 10
919 DCA I BIPTR
920 JMS I XCRE
921 DCA TEMP2
922 JMS I XCRE
923 DCA TEMP3
924 CDF 10
925 TAD TEMP3
926 RTL
927 RTL
928 AND (7400
929 TAD I BIPTR
930 DCA I BIPTR
931 INCR BIPTR
932 TAD TEMP3
933 RTR
934 RTR
935 RAR
936 AND (7400
937 TAD TEMP2
938 DCA I BIPTR
939 INCR BIPTR
940 ISZ BIKNT
941 JMP CRLOOP /REITERATE
942 CIF CDF 10
943 TAD (MAXBLK
944 DCA I (INTEN /READ 10 BLOCKS
945 EXIT CREAD /ALL DONE
946 \fBIPTR, 0 /PTS INTO OBUFFER
947 BIKNT, 0
948 XCRE, CRE
949
950 CTRLC, 0
951 KSF
952 EXIT CTRLC
953 TAD (7600
954 KRS
955 TAD (-7603
956 SZA CLA
957 EXIT CTRLC
958 JMS I (CLEAR
959 TAD I (OUNIT
960 SPA CLA
961 JMP I (7600
962 TAD I (OUNIT
963 DCA CTRTEM
964 STA
965 DCA I (OUNIT
966 TAD CTRTEM
967 JMS I (CLOSE
968 JMP I (XER8
969 JMP I (7600
970 \fLOPTION,TAD I (IUNIT
971 JMS I QU3
972 REWIND
973 JMP I (INER
974 CLA IAC
975 DCA I (CIBUF
976 LM1, JMP LM2 /ZERO FOR MAGTAPE
977 JMS I QU3
978 SKPFIL
979 JMP I (INER
980 LM2, CIF CDF 10
981 JMP I (CHLOOP
982 LM3, JMP LM2
983 QU3, UTIL
984 PAGE
985 \fCIKNT, -1 /ONE'S COMPLEMENT OF # OF BYTES LEFT IN CIBUF
986 CIPTR, CIBUF /PTS TO NEXT BYTE IN CIBUF TO BE READ
987
988 CRE, 0
989 CDF 0
990 TAD FTFLG /FIRST TIME THROUGH?
991 SZA CLA
992 JMP FT /YES
993 TAD TLRFLG
994 SNA CLA
995 JMP EPI /TRAILER
996 ISZ CIKNT
997 SKP
998 JMS I (CRED
999 TAD I CIPTR
1000 JMS CHKSUM
1001 JMS CHKTLR
1002 TAD I CIPTR
1003 INCR CIPTR
1004 / AND (377
1005 EXIT CRE
1006
1007
1008 /READ DIRECTORY
1009 DCRE, 0
1010 CDF 0
1011 ISZ CIKNT
1012 SKP
1013 JMS DCRED
1014 TAD I CIPTR
1015 TAD (-32
1016 SNA
1017 JMP DCRE+1 /ALLOW '32' TO SHORTEN BUFFER
1018 TAD (32
1019 SNA
1020 TAD (232
1021 INCR CIPTR
1022 EXIT DCRE
1023 \fFT, DCA FTFLG
1024 TAD (200 /SEND LEADER
1025 EXIT CRE
1026
1027 CHKSUM, 0
1028 DCA CHTEM
1029 TAD CHTEM
1030 AND (200
1031 SNA CLA
1032 TAD CHTEM
1033 TAD CHECKSUM
1034 DCA CHECKSUM
1035 EXIT CHKSUM
1036 CHTEM, 0
1037 CHECKSUM,0
1038 FTFLG, 1 /1 IF FIRST TIME HERE
1039 CHKPTR, CHKTBL
1040 TLRFLG, 0
1041
1042 CHKTBL, 0 /CHECKSUM LEFT PART
1043 0 /CHECKSUM RIGHT PART
1044 200 /TRAILER
1045 32 /CTRL/Z
1046 -1 /TABLE END
1047
1048 CHKTLR, 0
1049 CDF 10
1050 TAD I (7643
1051 CDF 0
1052 RTL /B SWITCH TO LINK
1053 SNL CLA
1054 EXIT CHKTLR
1055 TAD I CIPTR
1056 TAD (-200
1057 SZA CLA
1058 EXIT CHKTLR
1059 DCA TLRFLG
1060 TAD (CHKTBL
1061 DCA CHKPTR
1062 TAD CHECKSUM
1063 RTR
1064 RTR
1065 RTR
1066 AND (77
1067 DCA CHKTBL
1068 TAD CHECKSUM
1069 AND (77
1070 DCA CHKTBL+1
1071 EPI, TAD I CHKPTR
1072 SPA
1073 JMP I (INTO
1074 INCR CHKPTR
1075 EXIT CRE
1076 \fDCRED, 0
1077 TAD (40
1078 DCA I (BSIZE
1079 TAD I PCIBUF
1080 SNA CLA
1081 JMP I (INTO
1082 TAD I (IUNIT
1083 JMS I QH4
1084 READ
1085 PCIBUF, CIBUF
1086 JMP I (INER
1087 TAD PCIBUF
1088 DCA CIPTR
1089 TAD I CIPTR
1090 SZA CLA
1091 TAD (-23
1092 TAD (-2
1093 DCA CIKNT
1094 JMS I (FIDDLE
1095 TAD I CIPTR
1096 SNA CLA
1097 EXIT DCRED
1098 JMS I QU4
1099 SKPFIL
1100 JMP I (INER
1101 EXIT DCRED
1102
1103 QH4, HANDLER
1104 QU4, UTIL
1105 /THIS WAS VERY UNOPTIMAL ADDING IN MAGTAPE SUPPORT
1106 /AFTER THE PROGRAM WAS ALL DONE AND BURIED.
1107 /IT COULD HAVE BEEN DONE IN A MUCH BETTER METHOD
1108 /IF IT WAS DESIGNED IN BEFORE THE PROGRAM WAS WRITTEN.
1109 PAGE
1110 \f/FIRST ARG: PTS TO OS/8 FILENAME IN FIELD 1
1111
1112 CONVRT, 0
1113 STA
1114 TAD I CONVRT
1115 DCA ONPTR
1116 INCR CONVRT
1117 TAD (SINCH
1118 DCA CNPTR
1119 TAD (-4
1120 DCA CKNT
1121 CONLUP, CDF 10
1122 INCR ONPTR
1123 TAD I ONPTR
1124 CDF 0
1125 RTR
1126 RTR
1127 RTR
1128 JMS CNV
1129 DCA I CNPTR
1130 INCR CNPTR
1131 CDF 10
1132 TAD I ONPTR
1133 CDF 0
1134 JMS CNV
1135 DCA I CNPTR
1136 INCR CNPTR
1137 ISZ CKNT
1138 JMP CONLUP
1139 TAD (40
1140 DCA I CNPTR
1141 CDF 10
1142 TAD I (7643
1143 CDF 0
1144 RTL
1145 SNL CLA
1146 EXIT CONVRT / NOT /B
1147 CDF 10
1148 TAD I (7643
1149 RAL
1150 CLA
1151 TAD I ONPTR
1152 CDF 0
1153 SZA CLA
1154 EXIT CONVRT /EXTENSION SPECIFIED
1155 SZL
1156 EXIT CONVRT / /A
1157 CLL STA RAL
1158 TAD CNPTR
1159 DCA CNPTR
1160 TAD ("B /SET EXTENSION TO .BIN
1161 DCA I CNPTR
1162 INCR CNPTR
1163 TAD ("I
1164 DCA I CNPTR
1165 INCR CNPTR
1166 TAD ("N
1167 DCA I CNPTR
1168 EXIT CONVRT
1169 \fCNV, 0
1170 AND (77
1171 SZA /CHANGE 0 TO BLANK
1172 TAD (40
1173 AND (77
1174 TAD (40
1175 EXIT CNV
1176
1177 ONPTR, 0
1178 CNPTR, 0
1179 CKNT, 0
1180
1181 LOOK4ME,JMS CONVRT
1182 7606
1183 TAD IUNIT
1184 JMS I (LOOKUP
1185 JMP I (XER4
1186 JMP XER24
1187 TAD I (INCH+12 /GET H.O. INPUT RECORD SIZE
1188 CLL RTR
1189 RTR
1190 RAR
1191 TAD I (INCH+13
1192 DCA INRECSZ
1193 TAD INRECSZ
1194 SNA
1195 JMP XER40 /RECORD SIZE 0
1196 CLL
1197 TAD (-1001
1198 SZL CLA
1199 JMP XER10
1200 CIF CDF 10
1201 JMP I (CHLOOP
1202
1203 XER24, CIF CDF 10
1204 JMP I (ER24
1205 XER25, CIF CDF 10
1206 JMP I (ER3
1207 \fOUNIT, 0
1208 IUNIT, 0
1209 /IN CASE OF CASSETTES, CONTAINS UNIT (AS CHAR)
1210 /IN CASE OF MAGTAPE, CONTAINS HANDLER ENTRY ADDRESS
1211 /OUNIT IS -1 DURING A ^C CLOSE
1212 /-1 MEANS DON'T CLOSE ON ERROR
1213 INRECSZ,200 /RECORD SIZE ON INPUT
1214 XER40, CIF CDF 10
1215 JMP I (ER40
1216 XER10, CIF CDF 10
1217 JMP I (ER10
1218 F1CTRLC,0
1219 JMS I (CTRLC
1220 CIF CDF 10
1221 EXIT F1CTRLC
1222 PAGE
1223 \fSINCH, ZBLOCK 16
1224 40;40;40;40;40;40
1225 ZBLOCK 14
1226 INCH, ZBLOCK 40
1227
1228 LDRTST, 0
1229 TAD I (CWTMP
1230 TAD (-200
1231 SNA CLA /LEADER?
1232 JMP I (CWREX /YES, EXIT CWR
1233 DCA I (LDRFLG /NO
1234 EXIT LDRTST
1235 \fENTERO, TAD (COBUF
1236 DCA I (COPTR
1237 JMS I (CONVRT
1238 7601
1239 JMS I (MAKDAT
1240 TAD I (RECSIZ
1241 CLL RTL
1242 RTL
1243 RAL
1244 AND (17
1245 DCA I (SINCH+12
1246 TAD I (RECSIZ
1247 AND (377
1248 DCA I (SINCH+13
1249 CDF 10
1250 TAD I (FILTYP
1251 CDF 0
1252 DCA I (SINCH+11
1253 DCA I (SINCH+14
1254 DCA I (SINCH+15
1255 CDF 10
1256 TAD I (VRSNO
1257 CDF 0
1258 DCA I (SINCH+24
1259 TAD I (OUNIT
1260 JMS I (ENTER
1261 JMP I (XER25
1262 CIF CDF 10
1263 DCA I (OSWITCH
1264 JMP I (CONT1
1265 PAGE
1266 \fZOPTION,TAD I (OUNIT
1267 JMS I QU5
1268 REWIND
1269 JMP XER77 /OUTPUT ERROR
1270 CDF 10
1271 TAD I (7601
1272 CDF 0
1273 SNA CLA
1274 JMP NOFILE
1275 JMS I (CONVRT
1276 7601
1277 JMS I (LOOKUP
1278 JMP I (XER4
1279 JMP I (XER24
1280 JMS I QU5
1281 SKPFIL
1282 JMP I (XER24
1283 TAD (40
1284 DCA I (BSIZE
1285 JMS I QH5
1286 READ
1287 INCH
1288 JMP XER77
1289 CLO3, JMS I (BACK
1290 JMP XER77
1291 JMS I QH5
1292 WRITE
1293 ZER
1294 JMP XER77
1295 NOFILE, JMP I (XCLOSE
1296 \fMAKDAT, 0
1297 CDF 10
1298 TAD I (DATE
1299 CDF 0
1300 SNA
1301 JMP SETOBL
1302 DCA SKNT
1303 TAD (SINCH+16
1304 DCA SPTR
1305 TAD SKNT
1306 RTR
1307 RAR
1308 AND (37
1309 JMS TWO /INSERT DAY
1310 TAD SKNT
1311 RTL
1312 RTL
1313 RAL
1314 AND (17
1315 JMS TWO /INSERT MONTH
1316 TAD SKNT
1317 AND (7
1318 TAD (106
1319 JMS TWO /INSERT YEAR
1320 EXIT MAKDAT
1321
1322 SETOBL, TAD (-6 /SET DATE TO BLANKS
1323 DCA SKNT
1324 TAD (SINCH+16
1325 DCA SPTR
1326 SELOOP, TAD (40
1327 DCA I SPTR
1328 INCR SPTR
1329 ISZ SKNT
1330 JMP SELOOP
1331 EXIT MAKDAT
1332
1333 SPTR, 0
1334 SKNT, 0
1335 TEM2, 0
1336 TENS, 0
1337 \fTWO, 0
1338 DCA TEM2
1339 TAD (60
1340 DCA TENS
1341 TAD TEM2
1342 TWOLUP, TAD (-12
1343 SPA
1344 JMP NEG
1345 INCR TENS
1346 JMP TWOLUP
1347 NEG, TAD (72
1348 DCA TEM2
1349 TAD TENS
1350 DCA I SPTR
1351 INCR SPTR
1352 TAD TEM2
1353 DCA I SPTR
1354 INCR SPTR
1355 EXIT TWO
1356
1357 XER77, CIF CDF 10
1358 JMP I (ER7 /OUTPUT ERROR
1359
1360 QU5, UTIL
1361 QH5, HANDLER
1362 \fMHANDLER,0 /AC CONTAINS HANDLER ENTRY ADDRESS
1363 CIF 10
1364 JMP I (MHAN /KLUDGEY LINK TO FIELD 1
1365
1366 MUTIL, 0 /AC CONTAINS ETC.
1367 CIF 10
1368 JMP I (MUT
1369 PAGE
1370 \f FIELD 1
1371
1372 XR=10
1373
1374 *2000
1375
1376 START, JMP DEC2 /NORMAL STARTING ADDRESS
1377 CHAIN, JMP NODEC /CHAIN STARTING ADDRESS
1378 DECODE, STL CLA RAR
1379 AND I (7642
1380 SZA CLA
1381 JMP KBM /RETURN TO KBM ON $
1382 / WOULD BE NICE HERE TO TELL CD/BATCH NOT TO SPOOL
1383 DEC2, CALL (200
1384 5 /COMMAND DECODE
1385 5200 /USING SPECIAL MODE
1386 NODEC, TAD (OUTHAND+1
1387 DCA ENTR /RESET PTR TO HANDLER LOCATION
1388 STA
1389 DCA I (OSWITCH
1390 JMS I (CHKSW /CHECK FOR SWITCH OPTIONS
1391 CDF 0
1392 DCA I (OUTSW
1393 STA
1394 DCA I (OUNIT
1395 CDF 10
1396 TAD I (7666
1397 DCA I (DATE
1398 FET, TAD I (7600 /GET DEVICE NUMBER OF OUTPUT FILE
1399 SNA /WAS ONE SPECIFIED?
1400 JMP NOF /NO - NO OUTPUT FILE
1401 CALL (200
1402 1 /FETCH HANDLER
1403 ENTR, OUTHAND+1 /INTO PAGES 2400 AND 2600
1404 /REPLACED BY HANDLER STARTING ADDRESS
1405 JMP I (ER6 /OUTPUT DEVICE DOESN'T EXIST
1406 TAD I (7644
1407 AND (1000
1408 SZA CLA
1409 JMP I (FOXOUT /O SPECIFIED
1410 STL CLA RTR
1411 AND I (7645
1412 TAD I (7601
1413 SNA CLA
1414 JMP NOCAS /NO OUTPUT NAME
1415 TAD (7600
1416 JMS I (CHKNAM
1417 JMP I (STARER /*.*
1418 TAD I (7600
1419 JMS I (TCAS /CASSETTE?
1420 JMP I (FIXOUT /YES
1421 JMP I (FXMOUT /MAGTAPE
1422 NOCAS, TAD (7601 /NO
1423 DCA OBLK /GET PTR TO OUTPUT FILE NAME
1424 TAD ENTR
1425 DCA I (OENTRY /STORE AWAY OUTPUT HANDLER ENTRY PT
1426 TAD (OWRITE
1427 DCA PWRITE
1428 TAD (FINIO
1429 DCA I (XFINIO
1430 TAD I (7643
1431 RTL
1432 SNL CLA
1433 JMP NOB
1434 TAD I (7604 /GET EXT
1435 SZA CLA
1436 JMP NOB
1437 TAD (216 /SET TO .BN
1438 DCA I (7604
1439 NOB, TAD I (7600 /GET DEVICE NUMBER AGAIN
1440 CALL (200
1441 3 /OPEN OUTPUT FILE
1442 OBLK, 7601 /PTS TO OUTPUT FILE NAME
1443 /REPLACED BY STARTING BLOCK NUMBER
1444 LEN, 0 /REPLACED BY NEGATIVE OF LENGTH OF OUT AREA
1445 JMP I (ER3 /FILE OPEN ERROR
1446 DCA I (REALEN /ZERO REAL LENGTH
1447 TAD OBLK
1448 DCA I (OBLOCK /SET STARTING BLOCK NUMBER
1449 CONT1, JMS I (GETIN
1450 / INITIALIZE INPUT STUFF
1451 CHLOOP, CIF CDF 0
1452 JMS I (F1CTRLC
1453 CALL PREAD
1454 CIF CDF 0
1455 JMS I (F1CTRLC
1456 CALL PWRITE
1457 JMP CHLOOP
1458 \fPREAD, OREAD
1459 PWRITE, OWRITE
1460 NOF, STL CLA RTR
1461 AND I (7645
1462 SNA CLA
1463 JMP I (ER1
1464 JMP I (FOXOUT /Z IMPLIES O
1465
1466 KBM, CIF CDF 0
1467 JMP I (7605
1468 PAGE
1469 \fUDIG, 0
1470
1471 GETSWDIG,0
1472 DCA UDIG
1473 TAD I (7645
1474 AND (1774
1475 SNA
1476 EXIT GETSWDIG /NO UNIT
1477 INCR GETSWDIG
1478 RTL
1479 RAL
1480 LUDIG, SZL
1481 JMP GOTUD
1482 INCR UDIG
1483 RAL
1484 JMP LUDIG
1485 G7600,
1486 GOTUD, 7600
1487 TAD UDIG
1488 TAD (60
1489 EXIT GETSWDIG
1490 \fFOXOUT, JMS GETSWDIG
1491 JMP I (ER1 /NO OUTPUT UNIT
1492 JMP GOTOU
1493 FIXOUT, TAD I (ENTR
1494 JMS I (GETDVC
1495 GOTOU, CDF 0
1496 DCA I (OUNIT
1497 CDF 10
1498 JMS I (SETCAS
1499 YAHAOU, TAD I (7643
1500 AND (400
1501 SZA CLA
1502 JMP DOPT
1503 STL CLA RTR
1504 AND I (7645
1505 SZA CLA
1506 JMP ZOPT
1507 TAD I G7600
1508 RTR
1509 RTR
1510 AND (377 /ISOLATE FILE TYPE
1511 DCA FILTYP /SAVE IT
1512 JMS I (GETLEN
1513 TAD (CW
1514 DCA I (PWRITE
1515 TAD (CFINIO
1516 DCA I (XFINIO
1517 TAD I (7643
1518 RTL /B TO LINK
1519 SZL CLA
1520 CLA IAC
1521 CIF CDF 0
1522 DCA I (LDRFLG
1523 STA
1524 DCA I (CWTMP1
1525 STA
1526 DCA I (CWTMP2
1527 DCA I (CHECKSUM
1528 JMP I (ENTERO
1529 / RETURN TO CONT1
1530
1531 FXMOUT, TAD I (ENTR
1532 CDF 0
1533 DCA I (OUNIT
1534 CDF 10
1535 JMS I (SETMAG
1536 TAD I (ENTR /GET LOCATION OF MAGTAPE HANDLER
1537 JMS SETDEN
1538 JMP YAHAOU
1539 \fSETDEN, 0
1540 AND G7600
1541 DCA MTA
1542 TAD I (7644
1543 AND (10
1544 SZA CLA /IS /U SPECIFIED?
1545 IAC /YES, USE DENSITY 3
1546 TAD (2 /NO, USE DENSITY 2
1547 DCA DEN
1548 CDF 0
1549 TAD PARITY
1550 CLL RAR /LINK ON IF PARITY SPECIFIED
1551 SZL
1552 TAD PAR
1553 SNL
1554 TAD I MTA /GET RELATIVE LOC 0
1555 AND (400 /ISOLATE PARITY
1556 TAD DEN /FORCE CORE DUMP MODE
1557 DCA I MTA /STORE BACK DENSITY AND PARITY
1558 CDF 10
1559 JMP I SETDEN
1560 \fFILTYP, 0
1561 BINTYP, 0 /SET BINARY TYPE - DON'T TOUCH LINK
1562 IAC
1563 IAC
1564 DCA FILTYP
1565 EXIT BINTYP
1566
1567 DOPT, CIF CDF 0
1568 JMP I (DOPTION
1569
1570 ZOPT, CIF CDF 0
1571 JMP I (ZOPTION
1572
1573 MTA, 0 /FIRST LOC OF MAGTAPE HANDLER
1574 PARITY, 0 /0 MENAS NOT SPECIFIED, 1 MEANS SPECIFIED PARITY
1575 PAR, 0 /0 OR 400 SPECIFYING PARITY
1576 DEN, 2 /DENSITY
1577 PAGE
1578 \fFID2, 0
1579 TAD I (CIBUF
1580 AND (177 /DF=0
1581 TAD (-52
1582 SNA CLA
1583 JMS EMPTY
1584 TAD I (CIBUF+10
1585 DCA I (CIBUF+11
1586 TAD I (CIBUF+7
1587 DCA I (CIBUF+10
1588 TAD I (CIBUF+6
1589 DCA I (CIBUF+7
1590 TAD (".
1591 DCA I (CIBUF+6
1592 CIF 0
1593 JMP I FID2
1594
1595 EMPTY, 0
1596 TAD I (FAST
1597 SNA CLA
1598 JMP I EMPTY
1599 STA
1600 DCA I (CIKNT
1601 TAD (32
1602 DCA I (CIBUF
1603 CIF 0
1604 JMP I (FIDLV
1605 \fGETLEN, 0
1606 CLL STA RAR /3777
1607 AND I (7642 /GET H.O. OPTION
1608 DCA VRSNO
1609 TAD I (7646 /GET = OPTION (L.O. 12 BITS)
1610 CLL
1611 TAD (-1001
1612 SZL CLA /LESS THAN 1001?
1613 JMP I (ER10 /NO, ERROR
1614 TAD I (7646 /YES
1615 SNA
1616 TAD (200 /200 IS DEFAULT RECORD SIZE
1617 CDF 0
1618 DCA I (RECSIZ
1619 TAD I (RECSIZ
1620 CIA
1621 DCA I (COKNT
1622 CDF 10
1623 EXIT GETLEN
1624
1625 FINIO, JMS I (OWRITE
1626 TAD I (7600 /GET OUTPUT DEVICE NUMBER
1627 CALL (200
1628 4 /CLOSE
1629 7601 /PTR TO FILE NAME
1630 REALEN, 0 /LENGTH OF NEW OUTPUT FILE
1631 JMP ER8 /CLOSE ERROR
1632 JMP I (DECODE
1633 ER8, JMS I (PRINT
1634 TEXT /?CLOSE ERROR/
1635 ER5, JMS I (PRINT
1636 TEXT /?OUTPUT DEVICE FULL/
1637 \fER30, JMS I (PRINT
1638 TEXT /?OUT=IN/
1639 VRSNO, 0
1640
1641 ER6, JMS I (PRINT
1642 TEXT /?FETCH ERROR/
1643 ER24, STA
1644 DCA I (SPSWTCH /RETURN FROM PRINT
1645 JMS I (PRINT
1646 TEXT /?FILE NOT FOUND/
1647 ISZ I (FUDSW /FIXUP CASSETTE
1648 JMP I (CLO
1649 PAGE
1650 \fOREAD, 0
1651 TAD (MAXBLK
1652 DCA INTEN /TRY TO READ 10 BLOCKS
1653 TAD (MAXBLK^200+10
1654 DCA READSZ
1655 TAD I (7605
1656 AND (17
1657 TAD (7757
1658 DCA TEMP /GET DCB ADDR
1659 TAD I TEMP /GET DCB
1660 AND (1000
1661 SZA CLA
1662 JMP ER4 /INPUT DEVICE IS WRITE-ONLY
1663 TAD I TEMP
1664 SMA CLA
1665 JMP YES /NOT FILE-STRUCTURED
1666 TAD I (INLEN
1667 TAD (MAXBLK
1668 SMA SZA CLA /CAN I READ IN 10 BLOCKS?
1669 JMS SHORT /NO
1670 YES, CIF 0 /YES
1671 JMS I IENTRY /CALL INPUT HANDLER
1672 READSZ, 2010 /READ 20 PAGES INTO FIELD 1
1673 OBUFFER /LOCATION 4000
1674 IBLOCK, 0 /INPUT BLOCK NUMBER
1675 JMP QER4 /INPUT ERROR
1676 TAD IBLOCK
1677 TAD INTEN
1678 DCA IBLOCK /UPDATE BLOCK NUMBER
1679 TAD I (INLEN
1680 TAD INTEN
1681 DCA I (INLEN /UPDATE LENGTH LEFT
1682 TAD INTEN
1683 TAD (-MAXBLK
1684 SZA CLA
1685 JMP XFIN
1686 EXIT OREAD /RETURN
1687 INTEN, 10 /NUMBER OF BLOCKS JUST READ
1688 XFINIO, FINIO
1689
1690 SHORT, 0
1691 TAD I (INLEN /HOW MANY BLOCKS LEFT?
1692 CIA /MAKE POSITIVE
1693 DCA INTEN /THAT'S AS MUCH AS WE CAN READ
1694 TAD INTEN
1695 SNA
1696 XFIN, JMP I XFINIO /NO MORE
1697 CLL RTR
1698 RTR
1699 RTR /CONVERT TO PAGES IN BITS 1-5
1700 TAD (10 /ADD IN FIELD 1 BIT
1701 DCA READSZ
1702 EXIT SHORT /RETURN
1703 \fIENTRY, 0 /PTS TO INPUT HANDLER ENTRY POINT
1704 QER4, SMA CLA
1705 JMP SFIN /NON-FATAL END-OF FILE
1706 ER4, JMS I (PRINT
1707 TEXT /?INPUT ERROR/
1708 ER26, JMS I (PRINT
1709 TEXT /?TOO MANY FILES/
1710 SFIN, TAD (7600
1711 DCA TPTR
1712 SLUP, STA
1713 TAD TPTR
1714 DCA TPTR
1715 TAD I TPTR
1716 SNA CLA
1717 JMP SLUP
1718 TAD TPTR
1719 TAD (-OBUFFER+1
1720 SNA
1721 JMP ALLZ
1722 TAD (377 /CHANGED FROM PIPC'S 376
1723 CLL RTL
1724 RTL
1725 RAL
1726 AND (17
1727 DCA INTEN
1728 JMP XFIN
1729 ALLZ, CLA IAC
1730 JMP .-3
1731 TPTR, 0
1732 \fER3, JMS I (PRINT
1733 TEXT /?ENTER ERROR/
1734 PAGE
1735 \fGETIN, 0 /OPEN INPUT FILE
1736 DCA DATE
1737 TAD I (7605 /ANY MORE FILES SPECIFIED?
1738 SNA CLA
1739 JMP NOIN /NO
1740 TAD I (7612
1741 SZA CLA
1742 JMP I (ER26 /2ND INPUT FILE IS BAD
1743 TAD (7605
1744 JMS I (CHKNAM
1745 JMP I (STARER /*.*
1746 TAD (7606
1747 DCA IN /SET PTR TO FILE NAME
1748 TAD (INHAND+1
1749 DCA IN3
1750 TAD I (7605 /GET DEVICE NUMBER
1751 CALL (200
1752 1 /FETCH NEW DEVICE HANDLER
1753 IN3, INHAND+1 /INTO PAGES 3200 AND 3400
1754 /REPLACED BY ENTRY PT TO INPUT HANDLER
1755 JMP I (ER6 /FETCH ERROR
1756 TAD I (7643
1757 AND (10
1758 SZA CLA
1759 JMP I (FOXIN /I SPECIFIED
1760 CLA IAC /V3C
1761 AND I (7643 /LOOK AT /L OPTION
1762 TAD I (7606
1763 SNA CLA
1764 JMP NOCAS2
1765 /IF NO NAME IS GIVEN AND /L IS NOT SPECIFIED, THEN USE
1766 /MAGTAPE OR CASSETTE HANDLER AS IS, I.E. AS
1767 /A NON-FILE-STRUCTURED OS/8 DRIVER.
1768 TAD I (7605
1769 JMS I (TCAS /CASSETTE?
1770 JMP I (FIXIN /YES
1771 JMP I (FIXMIN /MAGTAPE
1772 NOCAS2, CLA IAC
1773 AND I (7643
1774 SZA CLA
1775 JMP ER11 /V3C /L SPECIFIED WHEN DEVICE WAS NOT MAGTAPE OR CASSETTE
1776 TAD (OREAD
1777 DCA I (PREAD
1778 TAD IN3 /GET NEW HANDLER ENTRY PT
1779 DCA I (IENTRY /STORE AWAY
1780 TAD I (7605 /GET DEVICE NUMBER AGAIN
1781 CALL (200
1782 2 /PERFORM A LOOKUP
1783 IN, 0 /PTR TO FILE NAME
1784 /REPLACED BY INPUT BLOCK NUMBER
1785 IN2, 0 /REPLACED BY NEGATIVE OF INPUT FILE LENGTH
1786 JMP LKERR /LOOKUP ERROR
1787 TAD IN /GET NEW INPUT BLOCK
1788 DCA I (IBLOCK /STORE AWAY
1789 TAD IN2 /GET NEW INPUT FILE LENGTH
1790 DCA INLEN
1791 TAD I (1404 /GET # OF ADDITIONAL WORDS
1792 SNA
1793 JMP NONE
1794 TAD 17
1795 DCA POINTER
1796 TAD I POINTER /GET FILE CREATION DATE
1797 SNA
1798 JMP NONE
1799 SETDAT, DCA DATE
1800 EXIT GETIN
1801 NONE, TAD I (7666 /USE TODAY'S DATE
1802 JMP SETDAT
1803 LKERR, CLA
1804 TAD I (7611
1805 SZA CLA
1806 JMP I (ER24 /FILE NOT FOUND
1807 TAD I (7643 /TRY .BN
1808 RTL
1809 SNL CLA
1810 JMP I (ER24 / NOT /B
1811 TAD (216
1812 DCA I (7611
1813 JMP GETIN+1
1814
1815 INLEN, 0
1816 DATE, 0 /OS8 DATE OF INPUT FILE
1817 POINTER,0
1818
1819 NOIN, CLA IAC
1820 AND I (7643
1821 SNA CLA
1822 JMP I (ER21
1823 JMP I (FOXIN / /L SPECIFIED
1824 \fER11, JMS I (PRINT /V3C
1825 TEXT /?L OPTION OUT OF CONTEXT/
1826 PAGE
1827 \f/ENTER WITH INTEN BLOCKS TO WRITE
1828 OWRITE, 0
1829 TAD I (INTEN /HOW MUCH IS THERE TO WRITE?
1830 SNA
1831 EXIT OWRITE /NOTHING
1832 DCA OUTEN /SAVE NUMBER OF BLOCKS TO WRITE
1833 TAD I (7600
1834 AND (17
1835 TAD (7757
1836 DCA TEMP
1837 STL CLA RTR
1838 AND I TEMP
1839 SZA CLA
1840 JMP I (ER7 /OUTPUT DEVICE IS READ-ONLY
1841 TAD OUTEN
1842 CLL RTR
1843 RTR
1844 RTR /CONVERT TO PAGES
1845 TAD (4010 /FIELD 1 (WRITE DIRECTLY FROM INPUT BUFFER)
1846 DCA WRSIZ
1847 TAD I (LEN
1848 SNA CLA
1849 JMP NFS /NON-FILE STRUCTURED
1850 TAD I (REALEN
1851 TAD OUTEN
1852 STL
1853 TAD I (LEN
1854 SNL SZA CLA
1855 JMP I (ER5
1856 NFS, CIF 0
1857 JMS I OENTRY /CALL OUTPUT HANDLER
1858 WRSIZ, 6010 /WRITE 20 PAGES FROM FIELD 1
1859 OBUFFER /LOCATION 4000
1860 OBLOCK, 0 /OUTPUT BLOCK NUMBER
1861 JMP I (ER7 /OUTPUT ERROR
1862 TAD OBLOCK
1863 TAD OUTEN
1864 DCA OBLOCK /UPDATE OUTPUT BLOCK NUMBER
1865 TAD I (REALEN
1866 TAD OUTEN
1867 DCA I (REALEN /UPDATE LENGTH WROTE
1868 EXIT OWRITE
1869
1870 OENTRY, 0
1871 OUTEN, 0
1872 \fFOXIN, JMS I (GETSWDIG
1873 JMP I (ER21
1874 JMP GOTIU
1875 FIXIN, TAD I (IN3 /GET INPUT HANDLER ADDRESS
1876 JMS I (GETDVC
1877 GOTIU, CDF 0
1878 DCA I (IUNIT
1879 CDF 10
1880 JMS I (SETCAS
1881 YAHAIN, CDF 0
1882 TAD I (OUNIT
1883 CIA
1884 TAD I (IUNIT
1885 SNA CLA
1886 JMP I (ER30
1887 STA
1888 DCA I (CIKNT
1889 DCA I (CHECKSUM
1890 CLA IAC
1891 DCA I (TLRFLG
1892 CDF 10
1893 TAD (CR
1894 DCA I (PREAD
1895 TAD I (7643
1896 RTL
1897 CLA RAL
1898 CDF 0
1899 DCA I (FTFLG
1900 CDF 10
1901 JMS I (GETLEN
1902 TAD I (7643
1903 AND (100 / F OPTION?
1904 CDF 0
1905 DCA I (FAST
1906 CDF 10
1907 CLA IAC
1908 AND I (7643
1909 CIF CDF 0
1910 SZA CLA
1911 JMP I (LOPTION
1912 JMP I (LOOK4ME
1913 /RETURN TO CHLOOP
1914 \fFIXMIN, TAD I (IN3
1915 CDF 0
1916 DCA I (IUNIT
1917 CDF 10
1918 JMS I (SETMAG
1919 TAD I (IN3
1920 JMS I (SETDEN
1921 JMP YAHAIN
1922 PAGE
1923 \fPRINT, 0
1924 CLA
1925 CDF 10
1926 DCA CTOFLG /ALLOW ECHOING
1927 JMS CRLF
1928 PRLUP, TAD I PRINT
1929 RTR
1930 RTR
1931 RTR
1932 JMS PRIN
1933 TAD I PRINT
1934 JMS PRIN
1935 INCR PRINT
1936 JMP PRLUP
1937
1938 PRIN, 0
1939 AND (77
1940 SNA
1941 JMP PRFIN
1942 TAD (240
1943 AND (77
1944 TAD (240
1945 DCA TM
1946 KSF
1947 JMP NOBOTH
1948 TAD (200
1949 KRS
1950 TAD (-203
1951 SNA
1952 JMP KBM2
1953 TAD (203-217
1954 SZA CLA
1955 JMP NOBOTH
1956 TAD ("^
1957 JMS TYPE
1958 TAD ("O
1959 JMS TYPE
1960 JMS CRLF
1961 ISZ CTOFLG
1962 NOBOTH, TAD TM
1963 JMS TYPE
1964 EXIT PRIN
1965 PRFIN, JMS CRLF
1966 DCA FUDSW
1967 TAD I (SPSWTCH
1968 SNA CLA
1969 JMP CLO
1970 DCA I (SPSWTCH /SWITCH NON-ZERO MEANS RETURN
1971 INCR PRINT /POINT TO RETURN
1972 JMP I PRINT
1973 \f/DO A CLOSE IF OUTPUT CASSETTE OPEN
1974 CLO, CDF 0
1975 TAD I (OUNIT
1976 CDF 10
1977 SPA CLA
1978 JMP I (DECODE
1979 TAD OSWITCH
1980 SZA CLA
1981 JMP I (DECODE
1982 CDF 0
1983 TAD I (OUTSW
1984 CDF 10
1985 SNA CLA /DID WE WRITE ON OUTPUT CASSETTE?
1986 JMP I (DECODE /NO
1987 CIF CDF 0
1988 TAD I (OUNIT
1989 DCA TEMP
1990 STA
1991 DCA I (OUNIT
1992 TAD FUDSW
1993 SZA CLA
1994 JMP I (CLO3
1995 TAD TEMP
1996 JMP I (XCLOSE
1997 OSWITCH,-1 /0 MEANS OUTPUT CASSETTE OPEN
1998
1999 KBM2, CIF CDF 0
2000 JMP I L7600 /RETURN TO OS/8
2001
2002 FUDSW, 0 /1 MEANS GOT OS/8 LOOKUP FAILURE
2003 \fTYPE, 0
2004 DCA TM
2005 TAD CTOFLG
2006 SZA CLA
2007 EXIT TYPE /NOT ECHOING
2008 TAD TM
2009 TLS
2010 TSF
2011 JMP .-1
2012 L7600, 7600
2013 EXIT TYPE
2014
2015 CRLF, 0
2016 TAD (215
2017 JMS TYPE
2018 TAD (212
2019 JMS TYPE
2020 EXIT CRLF
2021
2022 CTOFLG, 0 /1 MEANS DON'T ECHO
2023 TM, 0
2024
2025 ER7, JMS PRINT
2026 TEXT /?OUTPUT ERROR/
2027
2028 CFINIO, CIF CDF 0
2029 JMS I (CWRITE
2030 CIF CDF 0
2031 JMP I (CFIN /FINISH OUTPUT AND WRITE SENTINEL
2032 /RETURN TO DECODE
2033 PAGE
2034 \fER10, JMS I (PRINT
2035 TEXT /?RECORD SIZE TOO BIG/
2036 /ENTRY POINT REL 1: UNIT 1
2037 /ENTRY POINT REL 7: UNIT 0
2038
2039 GETDVC, 0
2040 IAC
2041 DCA TEMP
2042 STL CLA RTL /2
2043 AND TEMP
2044 RAR
2045 DCA UNIT /DETERMINE IF UNIT 0 OR 1
2046 TAD TEMP
2047 AND (7600
2048 DCA TEMP
2049 CDF 0
2050 LOOKIO, ISZ TEMP
2051 TAD I TEMP /SEARCH HANDLER FOR ANY IOT
2052 AND (7700
2053 TAD (-6700
2054 SZA CLA
2055 JMP LOOKIO
2056 TAD I TEMP /GET CASSETETE IOT
2057 CDF 10
2058 AND (30 /V3 BUG FIX FROM V2
2059 CLL RTR
2060 TAD UNIT
2061 TAD (60
2062 EXIT GETDVC /LEAVE IT IN AC
2063
2064 UNIT, 0
2065 \fCHKNAM, 0 /DON'T ALLOW *'S OR ?'S
2066 DCA XR /IN OUTPUT OR INPUT NAME
2067 TAD I XR
2068 TAD (-5200
2069 SNA
2070 JMP STARNM /ENTIRE NAME IS *
2071 TAD (5200
2072 JMS CHKSTR
2073 TAD I XR
2074 JMS CHKSTR
2075 TAD I XR
2076 JMS CHKSTR
2077 TAD I XR
2078 JMS CHKSTR
2079 ISZ CHKNAM
2080 JMP I CHKNAM /NAME GOOD, RETURN 2
2081
2082 CHKSTR, 0
2083 DCA TEM
2084 TAD TEM
2085 CLL RTR
2086 RTR
2087 RTR
2088 JMS CHC
2089 TAD TEM
2090 JMS CHC
2091 JMP I CHKSTR
2092 \fCHC, 0
2093 AND (77
2094 TAD (-52
2095 SNA
2096 JMP STARER /* IN NAME
2097 TAD (52-77
2098 SZA CLA
2099 JMP I CHC /OKAY
2100 STARER, JMS I (PRINT
2101 TEXT /?ILLEGAL * OR ?/
2102
2103 STARNM, ISZ XR
2104 ISZ XR
2105 TAD I XR
2106 TAD (-5200
2107 SZA CLA
2108 JMP STARER /NOT *.*
2109 JMP I CHKNAM /TAKE SPECIAL RETURN ON *.*
2110
2111 TEM, 0
2112 \fCHKSW, 0 /CHECK SWITCHES
2113 TAD I (7644
2114 AND (4 /CHECK FOR /V
2115 SZA CLA
2116 JMS I (VERSN /PRINT MCPIP VERSION #
2117 TAD I (7644
2118 AND (400 /CHECK FOR /P
2119 /NOTE /P = 400 SAME AS ODD PARITY CODE
2120 SZA
2121 JMP ODDPAR
2122 TAD I (7643
2123 AND (200 /CHECK FOR /E
2124 SZA CLA
2125 JMP EVPAR
2126 GOTP, NOP
2127 JMP I CHKSW
2128
2129 ODDPAR, /400 IN AC
2130 EVPAR, DCA I (PAR
2131 CLA IAC
2132 DCA I (PARITY
2133 JMP GOTP
2134 PAGE
2135 \fSPSWTCH,0 /NON-ZERO MEANS RETURN FROM PRINT
2136
2137 /RET 1: CASSETTE
2138 /RET 2: MAGTAPE
2139 /RET 3: NEITHER
2140
2141 TCAS, 0
2142 AND (17 /ISOLATE
2143 TAD (7757 /ADD IN BASE OF DCB TABLE
2144 DCA TEMP /TO GET DCB ADDRESS
2145 TAD I TEMP /GET DCB
2146 AND (770 /ISOLATE UNIT TYPE
2147 TAD (-270 /CASSETTE HANDLER TYPE IS 27
2148 SNA
2149 JMP ITSCAS
2150 TAD (270-200
2151 SZA CLA
2152 INCR TCAS /NOTHING SPECIAL
2153 INCR TCAS /MAGTAPE
2154 ITSCAS, EXIT TCAS
2155 \fVERSN, 0
2156 STA
2157 DCA SPSWTCH /RETURN FROM PRINT
2158 JMS I (PRINT
2159 TEXT \OS/8 MCPIP V\
2160 *.-1
2161 PIPVERSION+60^100+PATCHLEV
2162 0
2163 JMP I VERSN
2164
2165 ER1, TAD I (7605
2166 SNA CLA
2167 JMP I (DECODE /NO OUT AND NO IN
2168 CLA IAC
2169 AND I (7643 /WAS /L SPECIFIED?
2170 SZA CLA
2171 JMP SETTY /YES
2172 JMS I (PRINT
2173 TEXT /?NO OUTPUT FILE/
2174 ER40, JMS I (PRINT
2175 TEXT /?CANNOT HANDLE VARIABLE-LENGTH RECORDS/
2176 \fSETTY, TAD (3100
2177 DCA Y
2178 JMS I (200
2179 12 /INQUIRE
2180 TT, 2424
2181 Y, 3100 /DEVICE TTY
2182 0
2183 JMP ER99
2184 TAD Y /GET DEVICE NO. OF TTY:
2185 DCA I (7600
2186 JMP I (FET
2187
2188 ER99, JMS I (PRINT
2189 TEXT /?TTY DOES NOT EXIST/
2190 ER21, JMS I (PRINT
2191 TEXT /?NO INPUT FILE/
2192 \fCW, 0
2193 CIF CDF 0
2194 JMS I (CWRITE
2195 EXIT CW
2196
2197 CR, 0
2198 CIF CDF 0
2199 JMS I (CREAD
2200 EXIT CR
2201 PAGE
2202 \fSETCAS, 0
2203 TAD (UTIL
2204 JMS SETU
2205 TAD (HANDLER
2206 JMS SETH
2207 CDF 0
2208 TAD (BACKFIL
2209 DCA I (BK2
2210 TAD I (BK4
2211 DCA I (BK3
2212 TAD (254
2213 DCA I (EOFBIT
2214 TAD I (FL3
2215 DCA I (FL1
2216 TAD (314
2217 DCA I (EOTBIT
2218 TAD I (LM3
2219 DCA I (LM1
2220 CDF 10
2221 JMP I SETCAS
2222
2223 SETMAG, 0
2224 TAD (MUTIL
2225 JMS SETU
2226 TAD (MHANDLER
2227 JMS SETH
2228 CDF 0
2229 TAD (BACKBLOCK
2230 DCA I (BK2
2231 TAD I (BK1
2232 DCA I (BK3
2233 TAD (3673
2234 DCA I (EOFBIT
2235 DCA I (FL1
2236 TAD (3663
2237 DCA I (EOTBIT
2238 DCA I (LM1
2239 CDF 10
2240 JMP I SETMAG
2241 \fSETU, 0
2242 DCA SETH
2243 CDF 0
2244 TAD SETH
2245 DCA I (QU1
2246 TAD SETH
2247 DCA I (QU2
2248 TAD SETH
2249 DCA I (QU3
2250 TAD SETH
2251 DCA I (QU4
2252 TAD SETH
2253 DCA I (QU5
2254 CDF 10
2255 JMP I SETU
2256 \fSETH, 0
2257 DCA SETU
2258 CDF 0
2259 TAD SETU
2260 DCA I (QH1
2261 TAD SETU
2262 DCA I (QH2
2263 TAD SETU
2264 DCA I (QH3
2265 TAD SETU
2266 DCA I (QH4
2267 TAD SETU
2268 DCA I (QH5
2269 CDF 10
2270 JMP I SETH
2271 PAGE
2272 \fMH, 0
2273
2274 MHAN, SZA
2275 DCA MENTRY
2276 TAD I (MHANDLER
2277 DCA MH /PICK UP ARGS VIA MH
2278 TAD I MH /GET FN WORD
2279 TAD (SPCODE /ADD SPECIAL CODE
2280 DCA MARG1
2281 ISZ MH
2282 TAD I MH /GET CORE LOC
2283 DCA MARG2
2284 ISZ MH /PT TO ERROR RETURN
2285 TAD I (BSIZE /GET BLOCKSIZE
2286 CIA
2287 DCA MARG3 /STORE NEG
2288 CDF 10
2289 CIF 0
2290 JMS I MENTRY /CALL MAGTAPE HANDLER
2291 MARG1, HLT
2292 MARG2, HLT
2293 MARG3, HLT
2294 SKP /TAKE ERROR RETURN
2295 ISZ MH /NORMAL RETURN
2296 CIF CDF 0
2297 JMP I MH /GO BACK TO FIELD 0
2298
2299 MENTRY, 0
2300 \fMU, 0
2301
2302 MUT, SZA
2303 DCA MENTRY /DF=0
2304 TAD I (MUTIL /PICK UP ARGS
2305 DCA MU /VIA 'MU'
2306 TAD I MU /GET UTILITY FUNCTION
2307 ISZ MU
2308 CDF 10
2309 TAD (-REWIND
2310 SNA
2311 JMP REWT
2312 TAD (REWIND-BACKFIL
2313 SNA
2314 JMP BAKFT
2315 TAD (BACKFIL-WRGAP
2316 SNA
2317 JMP WRGT
2318 TAD (WRGAP-BACKBLOCK
2319 SNA
2320 JMP BAKBT
2321 TAD (BACKBLOCK-SKPFIL
2322 SZA CLA
2323 HLT /IMPOSSIBLE
2324 SKPFT, STL CLA RAR /4000=WRITE
2325 BAKFT, TAD (WRITE+FICODE-REWCOD
2326 REWT, TAD (REWCOD-EOCODE
2327 WRGT, TAD (EOCODE-RECCOD-WRITE
2328 BAKBT, TAD (RECCOD+WRITE
2329 DCA MRG1
2330 CIF 0
2331 JMS I MENTRY
2332 MRG1, HLT
2333 MCA, HLT /IRRELEVANT
2334 MWC, -1
2335 SKP /ERROR RETURN
2336 ISZ MU
2337 CIF CDF 0
2338 JMP I MU /RETURN
2339 \fEMPTINCH,52;105;115;120;124;131;40;40;40;14
2340 0;0;0;0;40;40;40;40;40;40
2341 ZBLOCK 14
2342 PAGE
2343 \f *2000
2344 $