1 /7 OS/8 MCPIP MAGTAPE AND CASSETTE PIP
11 /COPYRIGHT (C) 1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
48 / REVISED FEB. 11, 1974
49 / SECOND REVISION: 7-AUG-75
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
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
64 /LOAD 8 BIT COMPLEMENT OF STATUS A
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
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
89 /14600-17577 OS/8 INPUT/OUTPUT BUFFER
91 \f/USR HAS THE FOLLOWING FREE LOCATIONS:
93 /10-17 (BUT GET DESTROYED)
101 / STARTING ADDRESS = 12000
102 / JOB STATUS WORD = 6003
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
133 /8. ALLOW *.* FOR CASSETTE INPUT
134 /9. SUPPORT OF UNLABELED MAGTAPE STANDARD
135 /10. /7 OR /9 SPECIFIES CHANNEL
137 /FIXES SINCE FIELD TEST :
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
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.
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
171 RAR /MOVE UNIT TO LINK; DEVICE TO AC
172 AND (3 /MASK OFF DEVICE CODE
173 DCA DVC /SAVE DEVICE CODE
176 DCA I (ABUNIT /SET UNIT IN BIT 5
180 DCA DVC /MOVE TO BITS 6-8
188 AND (7707 /MASK OUT OLD DVC
189 TAD DVC /INSERT NEW ONE
191 ISZ IOTPTR /POINT TO NEXT ONE
197 \fCHECKR, JMS I (CLEAR
199 JMS I (LOADA /SELECT DRIVE
201 AND (7735 /IGNORE EOT/BOT FLAG
205 JMP I ERRET /NOT READY
209 ERRET, 0 /ERROR RETURN LOCATION
212 JMS I (FID2 /NEED ROOM
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
254 FAST, 0 /0 MEANS F NOT SPECIFIED
268 DCA REWSW /ZERO REWIND SWITCH
277 JMS I (FIXDVC /FIX DEVICE CODE
278 UTEND /UNIT NOT READY
280 DCA CRET /SET RETURN ADDRESS
282 DCA I (RW /NOTE FACT THAT OP AINT READ
285 JMS GO /INITIATE UTIL
290 UT, JMS CHECKB /LOOK AT STATUS B
291 AND (50 /CHECK FOR CL, EMPTY, OR WLO
292 /GIVE NO ERROR ON WLO ************
298 JMP NOTOK /ERROR NOT CL
300 SNA CLA /CL OK IF DID REWIND
311 REWSW, 0 /1 MEANS OPERATION IS REWIND
313 IOT7, KRSB /READ STATUS B INTO AC 4-11
314 DCA BSTATE /SAVE STATUS B
319 DCA CINUSE /LEAVE STATUS CONDITION IN AC; -1 MEANS ERROR
320 IOT0, KCLR /CLEAR STATUS A AND B
324 IOT6, KGOA /ASSERT CONTENTS OF STATUS A
332 SKP /DATA FLAG NOT UP -
335 SNA CLA /IS IT END OF FILE?
336 JMP I (ERRR /YES, ERROR - BUT DON'T RETRY
340 CINUSE, 0 /1 MEANS HANDLER IN USE
341 BSTATE, 0 /STATUS OF REGISTER B ON ERROR
344 DOPTION,JMS I (CONVRT
353 JMP I (XER77 /OUTPUT ERROR
355 SNA CLA /ANYTHING DELETED?
364 TAD (-200 /COUNT OF HOW LONG TO WAIT
374 TAD I HANDLER /GET FUNCTION CONTROL WORD
375 AND L70 /ISOLATE FIELD OF BUFFER
378 TAD I HANDLER /RETRIEVE FUNCTION CONTROL WORD
379 RAL /READ/WRITE BIT TO LINK
381 DCA RW /RW=1 IF WRITE
382 ISZ HANDLER /POINT TO BUFFER ADDRESS
383 TAD I HANDLER /GET BUFFER ADDRESS
385 ISZ HANDLER /POINT TO ERROR RETURN
395 JMS SETUP /SET UP READ OR WRITE
397 ISZ HANDLER /POINT TO GOOD RETURN
400 RW, 0 /1 IF WRITE (-1 IF UTIL)
405 DCA I (CRET /SET RETURN ADDRESS
409 CMA /WANT TO READ ONE MORE
416 RTL /WRITE FN CODE=20
417 TAD (200 /SELECT AND INTERRUPT ENABLE
431 IOT6C, KGOA /GET CHAR JUST READ
442 JMP I (CRET+1 /CRET ALREADY SET UP
445 OUTSW, 0 /1 MEANS WE BEGAN TO WRITE
446 \fRWCRC, TAD (260 /ENABLE, ENABLE INTER, READ CRC
454 AND (7775 /IGNORE WLO
456 ERRX, SNA CLA /ERRORS?
457 JMP ERRR+1 /NO - CLEAN BILL OF HEALTH
458 ISZ ERKNT /TRY 3 TIMES
460 ERRR, STA /ERROR WHILE READING CRC
485 BKNT, 0 /NUMBER OF CHARS EXPECTED
486 BPTR, 0 /NEXT LOCATION IN BUFFER TO STORE INTO
487 BYTE, 0 /TEMPORARILY HOLDS BYTE FOUND
503 OBUFFER=4600 /LOCATION OF OS/8 I/O BUFFER
517 / ENTER FILENAME AS SPECIFIED IN SINCH
518 / USER MUST SET SINCH BUT ONLY FIRST 25 (OCTAL) LOCATIONS.
522 JMP ERET /ERROR WHILE READING
525 JMP ERET /ERROR WHILE DELETING
527 JMP ERET /ERROR BACKING UP
528 JMS I QH1 /WRITE NEW HEADER
531 JMP ERET /CASSETTE NOT READY
538 AND (374 /CASSETTE ONLY
540 SZA CLA /WAS ERROR JUST CRC?
542 EXIT RDOR /YES, OK CONTINUE
545 BK2, BACKFIL /GO BACK TO FILE GAP
548 BACKBLOCK /BACK TO LAST RECORD
552 JMS I QH1 /READ LAST RECORD OF PREV FILE
553 READ+F1 /DON'T STORE IN BUFFER
556 /ERROR READING LAST BLOCK
558 WRGAP /WRITE A NEW GAP
565 BKERR, AND (3775 /CASSETTES ONLY
567 SZA CLA /WAS ERROR CLEAR LEADER?
580 JMP CLRET /ERROR WHILE WRITING GAP
584 WRITE /WRITE SENTINEL
590 INCR CLOSE /SKIP ERROR RETURN
612 / SNA CLA /READ ANY DATA?
613 / JMP INTO /NO REWIND
614 / DCA DATAFLG /YES, COULD CLOSE OUTPUT AND OPEN NEXT INPUT
621 CIF CDF 10 /NO, MERELY END-OF-FILE
627 DCA I (INTEN /NUMBER OF BLOCKS GOT
636 EOFBIT, 254 /CHANGED TO 3673 FOR MAGTAPE
637 /DATAFLG,0 /1 MEANS READ DATA
650 / ALWAYS LOOKS FOR THING SPECIFIED IN SINCH
657 AND (10 /IS /U SPECIFIED?
659 JMP GOODRT /YES, DO NOTHING
664 TAD (HSIZE /SET LENGTH OF RECORD HEADER
667 FL1, JMP FL2 /ZERO THIS LOCATION FOR MAGTAPES
679 SNA CLA /SENTINEL FILE?
680 JMP NFNDRET /YES, NOT FOUND
681 TAD (SINCH /NO, IS THIS THE ONE WANTED?
688 AND (177 /ONLY LAST 7 BITS NEED MATCH
690 JMP FLOOP /FILE KEY NOT ONE DESIRED
695 GOODRT, INCR LOOKUP /SKIP NOT FOUND RETURN
696 NFNDRET,INCR LOOKUP /SKIP ERROR RETURN
699 DCA I (BSIZE /BE NICE TO USER
700 LRET, EXIT LOOKUP /BYE-BYE
702 ERRT, AND EOTBIT /REAL ERROR?
705 JMP NFNDRET /NO, MERELY END-OF CASSETTE
707 /END OF CASSETTD IS SIGNALLED BY
713 EOTBIT, 314 /CHANGE TO 3663 FOR MAGTAPE
720 JMS I QH2 /WRITE EMPTY HEADER
723 EXIT DELET /ERROR WHILE DELETING
727 JMP FLOOP /JUMP INTO LOOKUP TO CONTINUE
733 \fERRCOV, JMS I (CLEAR
737 JMS I (GO /BACKSPACE BLOCK
740 AND (374 /KILL WRITE-LOCK BIT
743 JMS I (SETUP /RE-SET UP OPERATION
744 JMP I (CRET+1 /GO AWAY
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
758 \f/SEND CONTENTS OF OS/8 BUFFER TO CASSETTE
759 /VIA CASSETTE OUTPUT BUFFER
763 DCA BUPTR /PT TO BEGIN OF BUFFER
765 TAD I (INTEN /GET NO. OF BLOCKS READ
771 RAR /CONVERT TO WORDS
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
779 JMS CWR /SENT TO CASSETTE OUTPUT BUFFER
784 INCR BUPTR /PT TO 2ND HALF
796 INCR BUPTR /PT TO NEXT DOUBLE-WORD
797 ISZ BUKNT /AT END OF BUFFER?
800 EXIT CWRITE /YES, RETURN
801 BUPTR, 0 /PTS INTO OBUUFER
803 \f/INSERT CHAR IN CASSETTE OUTPUT BUFFER
804 /AND OUTPUT BUFFER IF BUFFER FULL
815 RTL /PUT /B OPTION IN LINK
833 JMP CWRIGN /IGNORE -1
835 DCA I COPTR /INSERT CHAR IN COBUF
837 ISZ COKNT /COBUF FULL?
838 EXIT CWR2 /NO, SO RETURN
847 EXIT CWRI /DO NOTHING IF BUFFER EMPTY
851 JMS I QH3 /YES, WRITE OUT BUFFER
852 WRITE /WRITE FROM FIELD 0
853 PCOBUF, COBUF /LOCATION COBUF
854 JMP XER7 /OUTPUT ERROR
856 DCA COPTR /BUFFER IS NOW EMPTY
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
868 SZA CLA /CLEAR LEADER?
869 JMP I (ER5 /YES, DEVICE FULL
870 JMP I (ER7 /OUTPUT ERROR
876 LDRFLG, 0 /NON-ZERO IF IGNORING LEADER
883 JMS I (CWR2 /WRITE OUT TRAILER
884 JMP CFIN2 /BUT NO CHECKSUM
885 CFIN, TAD I (CWTMP2 /V3C
902 DCA I BIPTR /ZERO BUFFER
906 TAD (DCRE-CRE /GOT L OPTION
909 DCA XCRE /PT TO INPUT SUBR
916 DCA BIKNT /# OF DOUBLE-WORDS
941 JMP CRLOOP /REITERATE
944 DCA I (INTEN /READ 10 BLOCKS
946 \fBIPTR, 0 /PTS INTO OBUFFER
970 \fLOPTION,TAD I (IUNIT
976 LM1, JMP LM2 /ZERO FOR MAGTAPE
985 \fCIKNT, -1 /ONE'S COMPLEMENT OF # OF BYTES LEFT IN CIBUF
986 CIPTR, CIBUF /PTS TO NEXT BYTE IN CIBUF TO BE READ
990 TAD FTFLG /FIRST TIME THROUGH?
1017 JMP DCRE+1 /ALLOW '32' TO SHORTEN BUFFER
1024 TAD (200 /SEND LEADER
1038 FTFLG, 1 /1 IF FIRST TIME HERE
1042 CHKTBL, 0 /CHECKSUM LEFT PART
1043 0 /CHECKSUM RIGHT PART
1052 RTL /B SWITCH TO LINK
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.
1110 \f/FIRST ARG: PTS TO OS/8 FILENAME IN FIELD 1
1146 EXIT CONVRT / NOT /B
1154 EXIT CONVRT /EXTENSION SPECIFIED
1160 TAD ("B /SET EXTENSION TO .BIN
1171 SZA /CHANGE 0 TO BLANK
1187 TAD I (INCH+12 /GET H.O. INPUT RECORD SIZE
1195 JMP XER40 /RECORD SIZE 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
1232 JMP I (CWREX /YES, EXIT CWR
1235 \fENTERO, TAD (COBUF
1266 \fZOPTION,TAD I (OUNIT
1269 JMP XER77 /OUTPUT ERROR
1295 NOFILE, JMP I (XCLOSE
1315 JMS TWO /INSERT MONTH
1319 JMS TWO /INSERT YEAR
1322 SETOBL, TAD (-6 /SET DATE TO BLANKS
1358 JMP I (ER7 /OUTPUT ERROR
1362 \fMHANDLER,0 /AC CONTAINS HANDLER ENTRY ADDRESS
1364 JMP I (MHAN /KLUDGEY LINK TO FIELD 1
1366 MUTIL, 0 /AC CONTAINS ETC.
1376 START, JMP DEC2 /NORMAL STARTING ADDRESS
1377 CHAIN, JMP NODEC /CHAIN STARTING ADDRESS
1381 JMP KBM /RETURN TO KBM ON $
1382 / WOULD BE NICE HERE TO TELL CD/BATCH NOT TO SPOOL
1385 5200 /USING SPECIAL MODE
1386 NODEC, TAD (OUTHAND+1
1387 DCA ENTR /RESET PTR TO HANDLER LOCATION
1390 JMS I (CHKSW /CHECK FOR SWITCH OPTIONS
1398 FET, TAD I (7600 /GET DEVICE NUMBER OF OUTPUT FILE
1399 SNA /WAS ONE SPECIFIED?
1400 JMP NOF /NO - NO OUTPUT FILE
1403 ENTR, OUTHAND+1 /INTO PAGES 2400 AND 2600
1404 /REPLACED BY HANDLER STARTING ADDRESS
1405 JMP I (ER6 /OUTPUT DEVICE DOESN'T EXIST
1409 JMP I (FOXOUT /O SPECIFIED
1414 JMP NOCAS /NO OUTPUT NAME
1419 JMS I (TCAS /CASSETTE?
1421 JMP I (FXMOUT /MAGTAPE
1422 NOCAS, TAD (7601 /NO
1423 DCA OBLK /GET PTR TO OUTPUT FILE NAME
1425 DCA I (OENTRY /STORE AWAY OUTPUT HANDLER ENTRY PT
1434 TAD I (7604 /GET EXT
1437 TAD (216 /SET TO .BN
1439 NOB, TAD I (7600 /GET DEVICE NUMBER AGAIN
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
1448 DCA I (OBLOCK /SET STARTING BLOCK NUMBER
1450 / INITIALIZE INPUT STUFF
1464 JMP I (FOXOUT /Z IMPLIES O
1476 EXIT GETSWDIG /NO UNIT
1490 \fFOXOUT, JMS GETSWDIG
1491 JMP I (ER1 /NO OUTPUT UNIT
1510 AND (377 /ISOLATE FILE TYPE
1536 TAD I (ENTR /GET LOCATION OF MAGTAPE HANDLER
1544 SZA CLA /IS /U SPECIFIED?
1545 IAC /YES, USE DENSITY 3
1546 TAD (2 /NO, USE DENSITY 2
1550 CLL RAR /LINK ON IF PARITY SPECIFIED
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
1561 BINTYP, 0 /SET BINARY TYPE - DON'T TOUCH LINK
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
1607 AND I (7642 /GET H.O. OPTION
1609 TAD I (7646 /GET = OPTION (L.O. 12 BITS)
1612 SZL CLA /LESS THAN 1001?
1613 JMP I (ER10 /NO, ERROR
1616 TAD (200 /200 IS DEFAULT RECORD SIZE
1625 FINIO, JMS I (OWRITE
1626 TAD I (7600 /GET OUTPUT DEVICE NUMBER
1629 7601 /PTR TO FILE NAME
1630 REALEN, 0 /LENGTH OF NEW OUTPUT FILE
1631 JMP ER8 /CLOSE ERROR
1636 TEXT /?OUTPUT DEVICE FULL/
1637 \fER30, JMS I (PRINT
1644 DCA I (SPSWTCH /RETURN FROM PRINT
1646 TEXT /?FILE NOT FOUND/
1647 ISZ I (FUDSW /FIXUP CASSETTE
1652 DCA INTEN /TRY TO READ 10 BLOCKS
1658 DCA TEMP /GET DCB ADDR
1662 JMP ER4 /INPUT DEVICE IS WRITE-ONLY
1665 JMP YES /NOT FILE-STRUCTURED
1668 SMA SZA CLA /CAN I READ IN 10 BLOCKS?
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
1678 DCA IBLOCK /UPDATE BLOCK NUMBER
1681 DCA I (INLEN /UPDATE LENGTH LEFT
1687 INTEN, 10 /NUMBER OF BLOCKS JUST READ
1691 TAD I (INLEN /HOW MANY BLOCKS LEFT?
1693 DCA INTEN /THAT'S AS MUCH AS WE CAN READ
1696 XFIN, JMP I XFINIO /NO MORE
1699 RTR /CONVERT TO PAGES IN BITS 1-5
1700 TAD (10 /ADD IN FIELD 1 BIT
1703 \fIENTRY, 0 /PTS TO INPUT HANDLER ENTRY POINT
1705 JMP SFIN /NON-FATAL END-OF FILE
1709 TEXT /?TOO MANY FILES/
1722 TAD (377 /CHANGED FROM PIPC'S 376
1735 \fGETIN, 0 /OPEN INPUT FILE
1737 TAD I (7605 /ANY MORE FILES SPECIFIED?
1742 JMP I (ER26 /2ND INPUT FILE IS BAD
1747 DCA IN /SET PTR TO FILE NAME
1750 TAD I (7605 /GET DEVICE NUMBER
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
1759 JMP I (FOXIN /I SPECIFIED
1761 AND I (7643 /LOOK AT /L OPTION
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.
1769 JMS I (TCAS /CASSETTE?
1771 JMP I (FIXMIN /MAGTAPE
1775 JMP ER11 /V3C /L SPECIFIED WHEN DEVICE WAS NOT MAGTAPE OR CASSETTE
1778 TAD IN3 /GET NEW HANDLER ENTRY PT
1779 DCA I (IENTRY /STORE AWAY
1780 TAD I (7605 /GET DEVICE NUMBER AGAIN
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
1791 TAD I (1404 /GET # OF ADDITIONAL WORDS
1796 TAD I POINTER /GET FILE CREATION DATE
1801 NONE, TAD I (7666 /USE TODAY'S DATE
1806 JMP I (ER24 /FILE NOT FOUND
1807 TAD I (7643 /TRY .BN
1810 JMP I (ER24 / NOT /B
1816 DATE, 0 /OS8 DATE OF INPUT FILE
1823 JMP I (FOXIN / /L SPECIFIED
1824 \fER11, JMS I (PRINT /V3C
1825 TEXT /?L OPTION OUT OF CONTEXT/
1827 \f/ENTER WITH INTEN BLOCKS TO WRITE
1829 TAD I (INTEN /HOW MUCH IS THERE TO WRITE?
1831 EXIT OWRITE /NOTHING
1832 DCA OUTEN /SAVE NUMBER OF BLOCKS TO WRITE
1840 JMP I (ER7 /OUTPUT DEVICE IS READ-ONLY
1844 RTR /CONVERT TO PAGES
1845 TAD (4010 /FIELD 1 (WRITE DIRECTLY FROM INPUT BUFFER)
1849 JMP NFS /NON-FILE STRUCTURED
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
1864 DCA OBLOCK /UPDATE OUTPUT BLOCK NUMBER
1867 DCA I (REALEN /UPDATE LENGTH WROTE
1872 \fFOXIN, JMS I (GETSWDIG
1875 FIXIN, TAD I (IN3 /GET INPUT HANDLER ADDRESS
1903 AND (100 / F OPTION?
1914 \fFIXMIN, TAD I (IN3
1926 DCA CTOFLG /ALLOW ECHOING
1970 DCA I (SPSWTCH /SWITCH NON-ZERO MEANS RETURN
1971 INCR PRINT /POINT TO RETURN
1973 \f/DO A CLOSE IF OUTPUT CASSETTE OPEN
1985 SNA CLA /DID WE WRITE ON OUTPUT CASSETTE?
1997 OSWITCH,-1 /0 MEANS OUTPUT CASSETTE OPEN
2000 JMP I L7600 /RETURN TO OS/8
2002 FUDSW, 0 /1 MEANS GOT OS/8 LOOKUP FAILURE
2007 EXIT TYPE /NOT ECHOING
2022 CTOFLG, 0 /1 MEANS DON'T ECHO
2026 TEXT /?OUTPUT ERROR/
2031 JMP I (CFIN /FINISH OUTPUT AND WRITE SENTINEL
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
2045 DCA UNIT /DETERMINE IF UNIT 0 OR 1
2051 TAD I TEMP /SEARCH HANDLER FOR ANY IOT
2056 TAD I TEMP /GET CASSETETE IOT
2058 AND (30 /V3 BUG FIX FROM V2
2062 EXIT GETDVC /LEAVE IT IN AC
2065 \fCHKNAM, 0 /DON'T ALLOW *'S OR ?'S
2066 DCA XR /IN OUTPUT OR INPUT NAME
2070 JMP STARNM /ENTIRE NAME IS *
2080 JMP I CHKNAM /NAME GOOD, RETURN 2
2096 JMP STARER /* IN NAME
2100 STARER, JMS I (PRINT
2101 TEXT /?ILLEGAL * OR ?/
2109 JMP I CHKNAM /TAKE SPECIAL RETURN ON *.*
2112 \fCHKSW, 0 /CHECK SWITCHES
2114 AND (4 /CHECK FOR /V
2116 JMS I (VERSN /PRINT MCPIP VERSION #
2118 AND (400 /CHECK FOR /P
2119 /NOTE /P = 400 SAME AS ODD PARITY CODE
2123 AND (200 /CHECK FOR /E
2135 \fSPSWTCH,0 /NON-ZERO MEANS RETURN FROM PRINT
2143 TAD (7757 /ADD IN BASE OF DCB TABLE
2144 DCA TEMP /TO GET DCB ADDRESS
2146 AND (770 /ISOLATE UNIT TYPE
2147 TAD (-270 /CASSETTE HANDLER TYPE IS 27
2152 INCR TCAS /NOTHING SPECIAL
2157 DCA SPSWTCH /RETURN FROM PRINT
2161 PIPVERSION+60^100+PATCHLEV
2167 JMP I (DECODE /NO OUT AND NO IN
2169 AND I (7643 /WAS /L SPECIFIED?
2173 TEXT /?NO OUTPUT FILE/
2175 TEXT /?CANNOT HANDLE VARIABLE-LENGTH RECORDS/
2184 TAD Y /GET DEVICE NO. OF TTY:
2189 TEXT /?TTY DOES NOT EXIST/
2191 TEXT /?NO INPUT FILE/
2277 DCA MH /PICK UP ARGS VIA MH
2278 TAD I MH /GET FN WORD
2279 TAD (SPCODE /ADD SPECIAL CODE
2282 TAD I MH /GET CORE LOC
2284 ISZ MH /PT TO ERROR RETURN
2285 TAD I (BSIZE /GET BLOCKSIZE
2287 DCA MARG3 /STORE NEG
2290 JMS I MENTRY /CALL MAGTAPE HANDLER
2294 SKP /TAKE ERROR RETURN
2295 ISZ MH /NORMAL RETURN
2297 JMP I MH /GO BACK TO FIELD 0
2304 TAD I (MUTIL /PICK UP ARGS
2306 TAD I MU /GET UTILITY FUNCTION
2318 TAD (WRGAP-BACKBLOCK
2321 TAD (BACKBLOCK-SKPFIL
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
2333 MCA, HLT /IRRELEVANT
2339 \fEMPTINCH,52;105;115;120;124;131;40;40;40;14
2340 0;0;0;0;40;40;40;40;40;40