home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / pdp8 / os278-src.tar.Z / os278-src.tar / pip.pa < prev    next >
Text File  |  1992-09-18  |  58KB  |  2,833 lines

  1. /PIP.PA FOR OS278
  2.  
  3. /PREVIOUS SOURCE:
  4. /3 PIP.PA FOR OS/8 MONITOR
  5. /
  6. /
  7. /
  8. /
  9. /
  10. /
  11. /
  12. /
  13. /
  14. /COPYRIGHT  (C)  1970,1971,1972,1973,1974,1975,1977,1982
  15. /         BY DIGITAL EQUIPMENT CORPORATION
  16. /
  17. /
  18. /
  19. /
  20. /
  21. /
  22. /
  23. /
  24. /
  25. /
  26. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  27. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  28. /CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  29. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  30. /
  31. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  32. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  33. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  34. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  35. /
  36. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  37. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  38. /DIGITAL.
  39. /
  40. /
  41. /
  42. /
  43. /
  44. /
  45. /
  46. /
  47. /
  48. /
  49. /    4-MAY-1977    FILE: PIP.PA    OS/8 VERSION 14A
  50.  
  51. /ABSTRACT----
  52. /PIP (PERIPHERAL INTERCHANGE PROGRAM) IS A GENERAL FILE
  53. /MANIPULATION PROGRAM FOR THE OS/8 PROGRAMMING SYSTEM.
  54. /PIP ACCOMPLISHES DATA TRANSFERS BETWEEN ANY DEVICES IN THE OS/8
  55. /CONFIGURATION.
  56.  
  57. /VB5 05-JAN-83 ADDED LOWER CASE SUPPORT FOR SQUISH RESPONSE
  58. /VB1-VB4 CHANGES ON VB0 TO REFLECT CHANGES IN DMII
  59. /VERSION B0 MODIFICATIONS:
  60.  
  61. /CHANGED THE /Y SWITCH TO TRANSFER THE FIRMWARE ON AN RX50
  62. /ADDED /X SWITCH FOR FIRMWARE TRANSFER ONLY
  63.  
  64. /VERSION 4 MODIFICATIONS:
  65.  
  66. /1.    ADDED RL02 SIZE TO DEVLEN TABLE
  67. /2.    CHANGED DIRMSG TO: USE CCL 'DIRECT' FOR OS/78 ASSEMBLIES
  68. /3.    VERSION NUMBER IS NOW 78A TO CONFORM WITH V4 RELEASE STANDARDS
  69.  
  70.  
  71.  
  72. /VERSION 3 MODS:
  73.  
  74. /FIXED PROBLEM WITH ONE-PAGE WRITE
  75. /IN /S OR /Z, =OPTION IS TAKEN MODULO 100 (OCTAL)
  76. /    WITH 100, 200, ETC. MEANING USE 0 ADDITIONAL WDS.
  77. /DATES STILL DON'T LINE UP
  78. /'0 FREE BLOCKS'
  79. /ALLOW FILLING UP DEVICE TO VERY LAST BLOCK
  80. /ALLOW 7-BIT ^C
  81. /ALTMODE ON CD LINE RETURNS TO MONITOR WHEN DONE
  82. /NO HALT ON /L IF NO TTY HANDLER (ACTS AS NOP)
  83. / /V PRINTS VERSION NUMBER FIRST TIME CALLED
  84. / /O AFFIRMS /Y ON ZERO SYS OR ARE YOU SURE
  85. /=NNNN ON /I OPTION SPECIFIES LENGTH TO CLOSE FILE
  86.  
  87.  
  88. /MAINTENANCE RELEASE CHANGES:
  89.  
  90. /1.    FIXED LENGTH OF ALL VARIETIES OF RF08
  91. /2.    ADDED RX01 TO INTERNAL LENGTH TABLES
  92. /3.    CHANGED VERSION NUMBER TO V10
  93. /4.    ADDED CHECK FOR 7-BIT CTRL/Z TO ASCII HANDLER
  94.  
  95. /    DISABLED /E,/F,/L
  96. /    FIXED /Y OPTION PER SPR
  97.  
  98. /    DEVICE UPGRADE KIT CHANGES(V12C):
  99. /    1.ADDED RX02 SUPPORT
  100. /    2.ADDED /Y OPTION CHANGES TO SUPPORT NEW MONITOR
  101.  
  102. /DETAILS OF PIP:
  103.  
  104. /PIP RUNS WITH THE USR (USER SERVICE ROUTINES) ALWAYS IN CORE.
  105. /THIS ELIMINATES SWAPPING THE MONITOR. IF ANY CHANGES ARE MADE
  106. /TO PIP, CARE SHOULD BE TAKEN IN USING PAGE ZERO LOCATIONS, AS
  107. /THEY MUST NOT DESTROY ANY MONITOR LOCATIONS.
  108.  
  109. /SAVE ARGUMENTS:  .SAVE SYS PIP;13000=6400  (STARTING ADDRESS: 13000,
  110. /                                     JSW INCLUDES BATCH OPTIMIZATION)
  111.  
  112. /CORE USED:
  113. /FIELD 0
  114.  
  115. /00000-02777-    OUTPUT BUFFER
  116. /03000-06377-    INPUT BUFFER
  117. /06400-06577-    USED FOR /Y COMMAND ONLY
  118. /06600-07177-    INPUT HANDLER
  119. /07200-07577-    OUTPUT HANDLER
  120.  
  121. /FIELD 1
  122.  
  123. /10000-11777-    OS/8 I/O MONITOR
  124. /12000-16577-    EXECUTABLE CODE
  125. /16600-17177-    HOLDS NEW DIRECTORY SEGMENT FOR /S OPTION
  126. /17200-17577-    HOLDS OLD DIRECTORY SEGMENT IN /S OPTION
  127.  
  128. /FIELD 2
  129.  
  130. /20000-20777-    RX50 FIRMWARE TRANSFER ROUTINE
  131.  
  132. /FIELD 3
  133.  
  134. /30000-37777-    BUFFER AREA FOR FIRMWARE TRANSFER ROUTINE
  135.  
  136. /MAJOR PIECES OF CODE AND THEIR FUNCTION (BRIEFLY).
  137. /THIS IS A LIST OF ROUTINES AS THEY APPEAR PHYSICALLY, AND
  138. /NOT AS THEY ARE LOGICALLY CONNECTED.
  139.  
  140. /ICHAR-        GENERAL CHARACTER INPUT ROUTINE. ASSIGNS NEW
  141. /        DEVICE HANDLERS AS NEEDED.
  142.  
  143. /OOPEN-        ENTERS A FILE ON A SPECIFIED DEVICE.
  144.  
  145. /OUTDMP-    WRITES OUTPUT BUFFER TO OUTPUT DEVICE.
  146.  
  147. /OCLOSE-    CLOSES FILE CREATED BY OOPEN
  148.  
  149. /OCHAR-        CHARACTER OUTPUT ROUTINE. WRITES CHARACTERS
  150. /        TO OUTPUT BUFFER, CALLING OUTDMP WHEN FULL.
  151.  
  152. /OTYPE-    USES DEVICE NUMBER IN OUTPUT AREA OF CD TO
  153. /        INSPECT THE DEVICE CONTROL BLOCK WORD. THIS
  154. /        GIVES A CODE FOR THE TYPE OF DEVICE.
  155.  
  156. /SLASHG-    HANDLES I/O ERRORS. IF /G IS SET, HARD I/O
  157. /        ERRORS ARE IGNORED. IF /S AND /G ARE ON, A
  158. /        SPECIAL RETURN IS TAKEN.
  159.  
  160. /IMAGE-        IMAGE MODE PROCESSOR FOR PIP.
  161.  
  162. /SQTRA-        MAIN SUBROUTINE OF IMAGE MODE, AND /S OPTION.
  163.  
  164. /PIP, PIP+1-    MAIN ENTRANCES TO PIP. THE CODE ON THIS PAGE
  165. /        INSPECTS CD OPTION WORDS AND BRANCHES TO PROPER
  166. /        ROUTINES.
  167.  
  168. /ASCII-        THE DEFAULT TRANSFER MODE IN PIP IS ASCII.
  169.  
  170. /DELETE-    DELETES FILES ON OUTPUT SIDE OF CD LIST.
  171.  
  172. /DZERO-        ZEROES DIRECTORY OF FIRST OUTPUT DEVICE.
  173.  
  174. /PIPERR-    ERROR ROUTINR FOR PIP.
  175.  
  176. /DIRPRE-    DIRECTORY PRINTING ROUTINE.
  177.  
  178. /BINARY-    BINARY MODE PROCESSOR. HANDLES ABSOLUTE AND
  179. /        RELOCATABLE BINARY FILES.
  180.  
  181. /ERPRNT-    ERROR PRINTOUT.
  182.  
  183. /SQUISH-    FILE COMPRESSION PROCESSOR. ELIMINATES 'HOLES'
  184. /        IN DIRECTORY OF INPUT DEVICE.
  185.  
  186. /SYSCOP-    SYSTEM COPY PROCESSOR. ALLOWS TRANSFER OF THE
  187. /        OS/8 SYSTEM AREA.
  188.  
  189.  
  190. AC0001=CLL CLA IAC
  191. AC0002=CLL CLA CML RTL
  192. AC0006=CLL CLA CML IAC RTL
  193. AC4000=CLL CLA CML RAR
  194. AC3777=CLL CLA CMA RAR
  195. AC7775=CLL CLA CMA RTL
  196.  
  197. SEL=6750    /SELECT DRIVE PAIR
  198. LCD=6751    /LOAD COMMAND
  199. XDR=6752    /TRANSFER DATA
  200. STR=6753    /SKIP IF READY TO TRANSFER
  201. SER=6754    /SKIP ON ERROR
  202. SDN=6755    /SKIP ON DONE
  203.  
  204. BOOTYP=7623    /MAGIC LOCATION IN RX SYSTEM HANDLER
  205.  
  206. /OPTIONS AVAILABLE IN PIP:
  207.  
  208. /A-    ASCII TRANSFER; DEFAULT MODE
  209. /B-    BINARY MODE TANSFER
  210. /C-    DELETE TRAILING BLANKS. (ASCII MODE)
  211. /D-    DELETE FIRST OUTPUT FILE BEFORE PROCEEDING
  212. /E-    LIST INPUT DIRECTORY INCLUDING EMPTY FILES
  213. /F-    LIST INPUT DIRECTORY; ONLY FILE NAMES
  214. /G-    IGNORE ERRORS WHILE TRANSFERING
  215. /I-    IMAGE MODE TRANSFER
  216. /L-    LIST INPUT DIRECTORY; EXCLUDE EMPTY FILES
  217. /O-    OK TO PERFORM A SQUISH OR ZERO WITHOUT ASKING
  218. /S-    COMPRESS INPUT DEVICE ONTO OUTPUT DEVICE. ELIMINATES
  219. /    'HOLES' ON INPUT DEVICE.
  220. /T-    PROVIDE SIMPLE TTY FORMATTING. (ASCII ONLY)
  221. /Y-    COPY OS/8 SYSTEM AREA
  222. /Z-    ZERO OUTPUT DEVICE DIRECTORY BEFORE PROCEEDING
  223. /=N-    LEAVE N WORDS EXTRA PER DIRECTORY ENTR. VALID
  224. /    ONLY WITH /S OR /Z.
  225. /=N-    WITH /I OPTION CLOSES OUTPUT FILE WITH THIS LENGTH
  226. /V    PRINTS VERSION # (FIRST TIME ONLY)
  227.  
  228. /COMMENTS ON THE PROGRAM:
  229.  
  230.     /SINCE PIP RUNS WITH USR IN CORE, NO PAGE ZERO LITERALS
  231.     /CAN BE USED. THE LOCATIONS CURRENTLY USED IN
  232.     /FIELD 1 ON PAGE ZERO ARE:
  233.  
  234.     OUTXR=10
  235.     INXR=11
  236.     TEMP1=12
  237.     IHNDLR=24    /HOLDS INPUT HANDLER ADDRESS
  238.     OHNDLR=25    /OUTPUT HANDLER ADDRESS
  239.     SQFLAG=26    /'SQUISH INDICATOR
  240.     OUWAST=27    /# WASTE WORDS ON OUTPUT
  241.     OUTBLK=30
  242.     OUDLEN=31
  243.     SAME=32
  244.     INBLK=33
  245.     RECCNT=34
  246.  
  247. /CONSTANTS USED BY THE DIRECTORY PRINTOUT ROUTINE (OVERLAPPING) ARE:
  248.  
  249.     FLENGT=24
  250.     BLOKNO=25
  251.     DTYPE=27
  252.     DCOUNT=30
  253.     DLINK=31
  254.     WASTE=32
  255.     DDATE=33
  256.     ECOUNT=35
  257.     /PIP FOR OS/8 MONITOR
  258.     /EQUIVALENCES FOR GENERAL CHARACTER I/O ROUTINES
  259.  
  260.     OUBUF=0    /MUST BE LOWER THAN INBUF
  261.     OUCTL=5400    /OUTPUT BUFFER OF 3000 WORDS
  262.     OUDEVH=7200    /PROVIDE ROOM FOR TWO-PAGE HANDLERS
  263.     INBUF=3000
  264.     INCTL=1600    /INPUT BUFFER OF 3400 WORDS
  265.     INRECS=7
  266.     INDEVH=6600
  267.  
  268.             /PAGE 6400 IS FREE, EXCEPT DURING /Y COMMAND
  269.  
  270.     /EQUIVALENCES NECESSARY TO INTERFACE WITH MONITOR
  271.     DCB=7760
  272.     MPARAM=7643    /CD PARAMETER AREA
  273.     OLDDIR=7        /POINTER TO MONITOR VARIABLE "OLDT9"
  274.     MTEMP=27    /MONITOR SCRATCH AREA ON "SYS" - ***VOLATILE***
  275.     PTP=20    /INTERNAL TYPE CODE FOR PAPER TAPE PUNCH
  276.     XR=10
  277.     TEMP=20
  278.     CHAR=21
  279.     INFPTR=22
  280.     INEOF=23
  281.  
  282.     ABUF=6601    /LINE BUFFER - 150 CHARACTERS LONG
  283.     SQBUF1=6600    /DIRECTORY BUFFER FOR "SQUISH" OPTION
  284.     SQBUF2=7200    /""
  285.  
  286.     FIELD 1
  287.  
  288. /TO ENABLE /E,/F,/L SET
  289. /OS78=0
  290.  
  291. /TO DISABLE /E,/F,/L
  292. IFNDEF OS78 <OS78=1>
  293.  
  294.     /GENERAL CHARACTER I/O ROUTINES FOR BLEEP
  295.     /CALLED AS FOLLOWS:
  296.  
  297.     /JMS I (IOPEN        INITIALIZES THE INPUT ROUTINE
  298.  
  299.     /JMS I (ICHAR        READS A CHARACTER
  300.     /ERROR RETURN        /AC>0 IF END OF FILE, AC<0 IF READ ERROR
  301.  
  302.     /JMS I (OOPEN        INITIALIZES THE OUTPUT ROUTINE
  303.     /ERROR RETURN        AC>0 IF NO OUTPUT DEVICE/FILE, AC<0 IF ERROR
  304.  
  305.     /JMS I (OCHAR        OUTPUTS A CHARACTER
  306.     /ERROR RETURN        OUTPUT ERROR OR TOO MUCH OUTPUT
  307.  
  308.     /JMS I (OCLOSE        CLOSES THE OUTPUT FILE
  309.     /ERROR RETURN        FILE TOO LARGE TO BE CLOSED OR OUTPUT ERROR
  310.  
  311.     /JMS I (OTYPE        RETURNS DCB WORD OF OUTPUT DEVICE IN AC
  312.  
  313.  
  314.  
  315.     /PARAMETERS NEEDED:
  316.  
  317.     /INBUF=        ADDRESS OF INPUT BUFFER
  318.     /INCTL=        INPUT BUFFER CONTROL WORD
  319.     /OUBUF=        ADDRESS OF OUTPUT BUFFER
  320.     /OUCTL=        OUTPUT BUFFER CONTROL WORD (MUST BE NEGATIVE)
  321.     /INRECS=    [INCTL/256]
  322.     /INDEVH=    ADDRESS OF PAGE FOR INPUT HANDLER
  323.     /OUDEVH=    ADDRESS OF PAGE FOR OUTPUT HANDLER
  324.  
  325.     /ASSUMES I/O MONITOR IS RESIDENT IN CORE.
  326.     /CAN BE CALLED FROM ANY FIELD WITH BUFFERS IN ANY FIELD.
  327.     INFLD=INCTL&70    /GET FIELD OF INPUT BUFFER
  328.     OUFLD=OUCTL&70    /DITTO OUTPUT BUFFER
  329.  
  330.     *2000
  331.  
  332. IN7400,    7400
  333. IOPEN,    0
  334.     CLA CMA
  335.     DCA INCHCT    /SET INCHCT TO FORCE A READ
  336.     ISZ INEOF    /SET END-OF-FILE FLAG TO FORCE A NEW FILE
  337.     TAD (7617
  338.     DCA INFPTR    /RESET FILE POINTER
  339.     RDF
  340.     TAD INCDIF
  341.     DCA .+1
  342. INPTR,    HLT        /RESTORE CALLING FIELDS
  343.     JMP I IOPEN
  344.  
  345. ICHAR,    0
  346. IN7600,    7600
  347.     RDF
  348.     TAD INCDIF
  349.     DCA INRTRN    /SAVE CALLING FIELDS
  350. INCHAR,    CDF INFLD
  351.     ISZ INJMP    /BUMP THREE-WAY UNPACK SWITCH
  352.     ISZ INCHCT
  353. INJMPP,    JMP INJMP
  354.     TAD INEOF
  355.     SNA CLA        /DID LAST READ YIELD END-OF-FILE?
  356.     JMP INGBUF    /NO - DO ANOTHER
  357. GETNEW,    JMS INNEWF    /OPEN A NEW INPUT FILE
  358.     JMP EOFERR    /NO FILE TO OPEN
  359. INGBUF,    TAD INCTR
  360.     CLL
  361.     TAD (INRECS
  362.     SNL
  363.     DCA INCTR    /RESTORE INCTR IF IT HASN'T OVERFLOWED
  364.     SZL        /IS THIS THE LAST READ?
  365.     ISZ INEOF    /YES - SET END-OF-FILE FLAG
  366.             /NOT END-OF-FILE IF INPUT DEVICE
  367.             /IS NON-FILE STRUCTURED!
  368.     CLL CML CMA RTR    /CONSTRUCT A CONTROL WORD FOR THE READ
  369.     RTR        /FROM THE AMOUNT OF THE OVERFLOW
  370.     RTR        /(IF ANY) AND THE STANDARD CONTROL WORD
  371.     TAD (INCTL+1
  372.     DCA INCTLW
  373. INCDIF,    CDF CIF 0
  374.     CDF 10
  375.     JMS I INHNDL    /CALL THE DEVICE HANDLER
  376. INCTLW,    0
  377. INBUFP,    INBUF
  378. INREC,    0
  379.     JMS I (SLASHG    /A HANDLER ERROR - SHOULD WE IGNORE?
  380.     INERRX-.    /ADDRESS IF NOT
  381. INBREC,    TAD INREC
  382.     TAD (INRECS
  383.     DCA INREC    /UPDATE THE RECORD NUMBER
  384.     TAD INCTLW
  385.     AND IN7600
  386.     CLL RAL
  387.     TAD INCTLW
  388.     AND IN7600
  389.     CMA
  390.     DCA INCHCT    /COMPUTE THE NEW CHARACTER COUNT
  391.     TAD INJMPP
  392.     DCA INJMP    /RESET THE CHARACTER SWITCH
  393.     TAD INBUFP
  394.     DCA INPTR    /AND THE WORD POINTER
  395.     JMP INCHAR    /GO BACK AND MAKE BELIEVE THIS NEVER HAPPENED
  396. INERRX,    ISZ INEOF    /EITHER AN END-OF-FILE OR A BADDIE
  397.     SMA CLA        /WHICH TYPE WAS IT?
  398.     JMP INBREC    /END OF FILE - RESUME THY PROCESSING
  399. INERR,    CLA CLL CML RAR    /BADDIE - GIVE ERROR RETURN WITH NEGATIVE AC
  400. EOFERR,    JMP INRTRN
  401. INJMP,    HLT        /THIS IS THE THREE - WAY CHARACTER SWITCH
  402.     JMP ICHAR1
  403.     JMP ICHAR2
  404. ICHAR3,    TAD INJMPP
  405.     DCA INJMP
  406.     TAD I INPTR
  407. IN200,    AND IN7400
  408.     CLL RTR
  409.     RTR        /COMBINE THE HIGH-ORDER FOUR BITS OF
  410.     TAD INCTLW
  411.     RTR        /THE TWO WORD TO FORM THE THIRD CHARACTER
  412.     RTR
  413.     ISZ INPTR
  414.     JMP INCOMN
  415. ICHAR2,    TAD I INPTR
  416.     AND IN7400
  417.     DCA INCTLW    /SAVE THE HIGH-ORDER BITS FOR THE THIRD CHAR
  418.     ISZ INPTR    /BUMP THE WORD POINTER
  419. ICHAR1,    TAD I INPTR
  420. INCOMN,    AND (377
  421.     TAD (-232
  422. INCTZF,    SNA        /IS THE CHARACTER A ^Z?
  423.     JMP GETNEW    /YES - GET A NEW FILE
  424.     TAD (232    /RESTORE THE CHARACTER
  425.     ISZ ICHAR    /BUMP RETURN TO NORMAL RETURN
  426. INRTRN,    0        /RESTORE CALLING FIELDS
  427.     JMP I ICHAR    /AND RETURN
  428.             /IOPEN IS UNNECESSARY.
  429. INNEWF,    -1        /ROUTINE TO OPEN NEW INPUT FILE
  430.     INCHCT=INNEWF
  431.     CDF 10
  432.     TAD (INDEVH+1
  433.     DCA INHNDL    /INITIALIZE HANDLER ADDRESS
  434.     TAD I INFPTR    /GET NEXT CD INPUT FILE ENTRY
  435.     SNA        /ANY MORE?
  436.     JMP I INNEWF    /NO - OUT OF INPUT
  437.     JMS I IN200
  438.     1        /ASSIGN, FETCH HANDLER
  439. INHNDL,    0
  440.     HLT        /HUH?
  441.     TAD I INFPTR
  442.     AND (7760    /GET LENGTH PART OF WORD
  443.     SZA        /LENGTH OF 0 MEANS LENGTH >=256
  444.     TAD (17        /ADD HIGH-ORDER BITS
  445.     CLL CML RTR
  446.     RTR
  447.     DCA INCTR    /STORE LENGTH OF FILE
  448.     ISZ INFPTR
  449.     TAD I INFPTR
  450.     DCA INREC    /STORE STARTING RECORD NUMBER OF FILE
  451.     ISZ INFPTR
  452.     DCA INEOF    /ZERO END-OF-FILE FLAG
  453.     ISZ INNEWF
  454.     JMP I INNEWF
  455.     INCTR=IOPEN
  456.     PAGE
  457. OOPEN,    0        /OPEN OUTPUT FILE
  458. OU7600,    7600
  459. /    RDF
  460. /    TAD OUCDIF
  461. /    DCA OORETN
  462.     TAD OU7601
  463.     DCA OUBLK
  464.     TAD (OUDEVH+1
  465.     DCA OUHNDL
  466.     CDF 10
  467.     TAD I OU7600    /GET DEVICE NUMBER WORD OF OUTPUT FILE ENTRY
  468.     AND (17        /STRIP OFF ANY LENGTH INFO
  469.     SNA        /IS THERE AN OUTPUT DEVICE?
  470.     JMP ONOFIL    /NO - INHIBIT OUTPUT
  471.     JMS I (200
  472.     1        /ASSIGN, FETCH HANDLER
  473. OUHNDL,    0        /OUTPUT DEVICE HANDLER ENTRY
  474.     HLT        /HUH?
  475. OUENTR,    TAD I OU7600
  476.     JMS I (200
  477.     3        /ENTER OUTPUT FILE
  478. OUBLK,    7601        /REPLACED WITH STARTING BLOCK
  479. OUELEN,    0        /REPLACED WITH LENGTH OF HOLE
  480.     JMP OEFAIL    /FAILED - MAYBE WE ASKED TOO MUCH
  481.     DCA OUCCNT
  482.     DCA I (OUTINH    /ZERO OUTPUT INHIBIT FLAG
  483.     JMS I (OUSETP
  484.     ISZ OOPEN
  485. OORETN,    CDF CIF 10    /RESTORE CALLING FIELDS
  486.     JMP I OOPEN
  487. OEFAIL,    TAD I OU7600
  488.     AND (7760    /GET REQUESTED LENGTH
  489.     SNA CLA        /WAS IT AN INDEFINITE REQUEST
  490.     JMP ONTERR    /YES - CANNOT ENTER THE FILE
  491.     TAD I OU7600
  492.     AND (17        /MAKE THE REQUESTED LENGTH ZERO
  493.     DCA I OU7600
  494.     JMP OUENTR    /TRY, TRY AGAIN
  495. ONTERR,    CLA CLL CML RAR
  496.     JMP OORETN    /TAKE THE ERROR RETURN WITH AC<0
  497. ONOFIL,    ISZ I (OUTINH
  498.     JMP OORETN    /TAKE THE ERROR RETURN WITH AC=0
  499. OUTDMP,    0
  500.     DCA OUCTLW    /STORE THE CONTROL WORD
  501.     CDF 10
  502.     TAD I (OUTINH
  503.     SZA CLA
  504.     JMP OUNOWR
  505.     TAD OUCCNT
  506.     SNA
  507.     ISZ OUCTLW
  508.     TAD OUBLK
  509.     DCA OUREC    /COMPUTE THE STARTING BLOCK NUMBER OF THIS TRANSFER
  510.     TAD OUCTLW
  511.     CLL RTL
  512.     RTL
  513.     RTL
  514.     AND (17        /COMPUTE THE NUMBER OF RECORDS
  515.     TAD OUCCNT    /UPDATE THE NUMBER OF BLOCKS IN THE FILE
  516.     DCA OUCCNT
  517.     TAD OUCCNT
  518.     CLL CML
  519.     TAD OUELEN
  520.     SNL SZA CLA    /DOES THE LENGTH EXCEED THE GIVEN LENGTH?
  521.     JMP I OUTDMP    /YES - SIGNAL OUTPUT ERROR
  522. OUCDIF,    CDF CIF 0
  523.     CDF 10
  524.     JMS I OUHNDL
  525. OUCTLW,    0
  526.     OUBUF
  527. OUREC,    0
  528.     JMS I (SLASHG
  529.     .+2-.
  530. OUNOWR,    ISZ OUTDMP    /BUMP OUTDMP TO NORMAL RETURN
  531.     JMP I OUTDMP
  532. OCLOSE,    0
  533.     CDF 10
  534.     TAD I (OUTINH
  535.     SZA CLA        /IS OUTPUT INHIBITED?
  536.     JMP OCISZ    /YES - CLOSE IS A NOP
  537.     JMS I (OTYPE
  538.     AND (770
  539.     TAD (-PTP    /CHECK FOR PAPER TAPE PUNCH OUTPUT
  540.     SZA CLA        /AND SKIP ^Z OUTPUT IF TRUE
  541.     TAD (232    /OUTPUT A ^Z
  542.     JMS I (OCHAR
  543.     JMP OCRET
  544.     JMS I (OCHAR
  545.     JMP OCRET
  546. FILLLP,    JMS I (OCHAR
  547.     JMP OCRET
  548.     JMS I (OTYPE    /GET TYPE OF OUTPUT DEVICE
  549.     SPA CLA
  550.     TAD (100    /IF ITS A DIRECTORY DEVICE FORCE A RECORD
  551.     TAD (77        /BOUNDARY - OTHERWISE A HALF-RECORD
  552.     AND I (OUDWCT
  553.     SZA CLA        /UP TO THE BOUNDARY YET?
  554.     JMP FILLLP    /NO - FILL WITH ZEROS
  555.     TAD I (OUDWCT    /GET DOUBLEWORD COUNT LEFT
  556.     TAD (OUCTL&3700
  557.     SNA        /A FULL WRITE LEFT?
  558.     JMP NODUMP    /YES - DON'T DO IT - THE ^Z IS ALREADY OUT
  559.     TAD (4000+OUFLD    /PUT IN THE FIELD BITS AND THE WRITE BIT
  560.     JMS OUTDMP
  561.     JMP OCRET    /AN ERROR OCCURRED WHILE DUMPING THE BUFFER
  562. NODUMP,    TAD I OU7600    /GET THE DEVICE NUMBER
  563.     JMS I (200
  564.     4        /CLOSE THE OUTPUT FILE
  565. OU7601,    7601        /POINTER TO THE OUTPUT FILE NAME
  566. OUCCNT,    0
  567.     SKP        /ERROR WHILE CLOSING THE FILE - BAD!
  568. OCISZ,    ISZ OCLOSE
  569. OCRET,    CDF CIF 10    /RESTORE CALLING FIELDS
  570.     JMP I OCLOSE
  571.     PAGE
  572. OUSETP,    0        /ROUTINE TO INITIALIZE CHARACTER POINTERS
  573.     TAD (OUCTL&3700    /GET SIZE OF BUFFER IN DOUBLEWORDS
  574.     CIA        /PAL10 IS DEFINITELY NOT NICE
  575.     DCA OUDWCT
  576. /    TAD (OUBUF
  577.     IFNZRO OUBUF <ERROR!>    /V3
  578.     DCA OUPTR    /INITIALIZE WORD POINTER
  579.     TAD OUJMPE
  580.     DCA OUJMP    /INITIALIZE THREE-WAY CHARACTER SWITCH
  581.     JMP I OUSETP
  582.  
  583. OCHAR,    0
  584.     AND (377
  585.     DCA OUTEMP
  586.     RDF
  587.     TAD LEAVE
  588.     DCA OUCRET
  589.     TAD OUTINH
  590.     SZA CLA        /IS THERE AN OUTPUT FILE?
  591.     JMP OUCOMN    /NO - EXIT
  592. OUCHAR,    CDF OUFLD    /SET DATA FIELD TO BUFFER'S FIELD
  593.     ISZ OUJMP    /BUMP THE CHARACTER SWITCH
  594. OUJMP,    HLT        /THREE WAY CHARACTER SWITCH
  595.     JMP OCHAR1
  596.     JMP OCHAR2
  597. OCHAR3,    TAD OUTEMP
  598.     CLL RTL
  599.     RTL
  600.     AND (7400
  601.     TAD I OUPOLD
  602.     DCA I OUPOLD    /UPDATE FIRST WORD OF TWO WITH HIGH
  603.             /ORDER 4 BITS OF THIRD CHAR
  604.     TAD OUTEMP
  605.     CLL RTR
  606.     RTR
  607.     RAR
  608.     AND (7400
  609.     TAD I OUPTR
  610.     DCA I OUPTR    /UPDATE SECOND WORD FROM LOW ORDER 4 BITS
  611.     TAD OUJMPE
  612.     DCA OUJMP    /RESET SWITCH
  613.     ISZ OUPTR
  614.     ISZ OUDWCT    /BUMP DOUBLEWORD COUNTER EVERY 3 CHARS
  615.     JMP OUCOMN
  616.     TAD (OUCTL    /LOAD CONTROL WORD FOR A FULL WRITE
  617.     JMS I (OUTDMP    /DUMP THE BUFFER
  618.     JMP OUCRET    /OUTPUT ERROR - GIVE ERROR RETURN
  619.     JMS OUSETP    /RE-INITIALIZE THE POINTERS
  620.     JMP OUCOMN
  621. OCHAR2,    TAD OUPTR
  622.     DCA OUPOLD    /SAVE POINTER TO FIRST WORD OF TWO
  623.     ISZ OUPTR    /BUMP WORD POINTER TO SECOND WORD
  624. OCHAR1,    TAD OUTEMP
  625.     DCA I OUPTR
  626. OUCOMN,    ISZ OCHAR
  627. OUCRET,    HLT        /RESTORE CALLING FIELDS
  628.     JMP I OCHAR
  629. OUTEMP,    0
  630. OUPOLD,    0
  631. OUPTR,    0
  632. OUJMPE,    JMP OUJMP
  633. OUDWCT,    0
  634. OUTINH,    0
  635. OTYPE,    0
  636.             /GET THE DEVICE POSITION PROVIDED BY THE COMMAND DECODER
  637.             /IN THE OUTPUT FILE SLOT. USE IT TO FIND THE DEVICE
  638.             /INFORMATION MAINTAINED IN THE DEVICE CONTROL WORD
  639.             /TABLE. DCW STRUCTURE:
  640.             /BIT 0 SET IF DEVICE IS FILE STRUCTURED
  641.             /BIT 1 SET IF DEVICE IS READ ONLY
  642.             /BIT 2 SET IF DEVICE IS WRITE ONLY
  643.             /BITS 3-8 IS OS/8 6-BIT DEVICE CODE
  644.             /BITS 9-11 ARE UNIQUE TAPE DEVICE INFORMATION 
  645.             /                    (ONLY BIT 11 IS USED AT PRESENT)
  646.  
  647.     RDF
  648.     TAD LEAVE
  649.     DCA OTRTN
  650.     CDF 10
  651.     TAD I (7600
  652.     AND (17
  653.     TAD (DCB-1
  654.     DCA OUTEMP
  655.     TAD I OUTEMP
  656. OTRTN,    HLT
  657.     JMP I OTYPE
  658. CTCTST,    0
  659.     TAD (200    /V3
  660.     KRS
  661.     TAD (-203
  662.     SNA CLA        /IS THE TELETYPE BUFFER A ^C
  663.     KSF        /WITH THE TELETYPE FLAG ON?
  664.     JMP I CTCTST    /NO
  665. LEAVE,    CDF CIF 0    /YES - GO TO MONITOR
  666.     JMP I (7600    /THROUGH THE "SAVE CORE" RETURN
  667.             /UNLESS LOCKED OUT BY SETCTC ROUTINE
  668.  
  669. SLASHG,    0
  670.     DCA CTCTST
  671.     TAD SQFLAG
  672.     SZA CLA        /ARE WE SQUISHING?
  673.     JMP I (SQIOER    /YES
  674.     TAD CTCTST
  675.     SPA CLA        /ONLY IGNORE HARD ERRORS
  676.     TAD I (MPARAM
  677.     AND (40
  678.     SZA CLA        / "G" SWITCH
  679. SLGRET,    JMP I SLASHG    /IGNORED!
  680.     TAD I SLASHG
  681.     TAD SLASHG
  682.     DCA SLASHG    /SET UP NON-IGNORE ADDRESS
  683.     TAD CTCTST
  684.     JMP I SLASHG    /RETURN WITH AC RESTORED
  685.  
  686.  
  687.     IFZERO OS78 <
  688. DIR,    DCA DTYPE    /SAVE TYPE OF REQUEST
  689.     TAD I (7600
  690.     SZA CLA        /IS THERE AN OUTPUT FILE?
  691.     JMP I (DIRPRE    /YES
  692.     DCA TTYDEV+1
  693.     JMS I (200
  694.     12        /ASSIGN WITHOUT FETCH
  695. TTYDEV,    5524        /COMPRESSED CODE FOR "TTY"
  696.     0
  697.     0
  698.     JMP I (PIP    /V3 WHAT - NO TELETYPE!
  699.     TAD TTYDEV+1
  700.     DCA I (7600
  701.     JMP I (DIRPRE
  702.     >
  703.  
  704.     IFNZRO OS78 <
  705. DIR,    JMS I    (PIPERR    /TYPE OUT MESSAGE
  706.     14
  707. DIRMSG,        TEXT    "USE CCL 'DIRECT'"
  708.     >
  709.  
  710. PIPCLR,    JMS I    (SRSTOR    /CLEAR OUT 07600
  711.     JMP I    (PIP
  712.  
  713.     PAGE
  714.     /PIP PROPER BEGINS HERE
  715.     /**********************
  716.  
  717.     /IMAGE MODE PROCESSOR FOR PIP
  718.  
  719. IMAGE,    JMS I (FIXLEN
  720.     JMS I (OUTOPN
  721.     JMS IMTRA
  722. IMCLOS,    TAD I (OUTINH
  723.     SZA CLA        /WAS THERE AN OUTPUT FILE?
  724.     JMP I (PIPCLR    /NO - DON'T CLOSE IT
  725.     JMS I (OUK    /GET THE LENGTH OF THE OUTPUT FILE
  726.     DCA IMCCNT
  727.     TAD I IM7600
  728.     JMS I (200
  729.     4        /CLOSE
  730.     7601        /FILE NAME
  731. IMCCNT,    0
  732.     JMP I (AOUERR
  733.     JMP I (PIPCLR
  734.  
  735. ENDFUJ,    0        /PART OF DIRECTORY PRINTING ROUTINE
  736.     JMS I (PRNUM
  737.     TAD (-6
  738.     JMS I (PRWD    /PRINT SIX WORDS
  739.     0006        / F
  740.     2205        /RE
  741.     0500        /E 
  742.     0214        /BL
  743.     1703        /OC
  744.     1323        /KS
  745.     JMS I (PCRLF
  746.     JMS I (PCRLF    /LEAVE A SPACE BETWEEN DIRECTORIES
  747.     ISZ INEOF    /SIMULATE "END OF FILE" FOR INPUT ROUTINE
  748.     CLA CMA
  749.     DCA I (INCHCT    /AS WELL AS "END OF BUFFER"
  750.     JMP I ENDFUJ
  751. IMHNDL,            /V3
  752. SQTRA,    0
  753.     TAD SQTRA
  754.     DCA IMTRA    /FAKE A CALL TO "IMTRA"
  755.     TAD RECCNT    /SETTING UP THE ARGS TO DO THE SQUISHING FOR US
  756.     DCA I (INCTR
  757.     TAD IHNDLR
  758.     DCA IMHNDL
  759.     TAD INBLK
  760.     DCA IMREC
  761.     TAD OUTBLK
  762.     DCA I (OUCCNT
  763.     DCA INEOF
  764.     JMP IMRCLP
  765.  
  766. IMTRA,    0
  767.     JMS I (IOPEN    /INITIALIZE INPUT ROUTINE
  768. AGAIN,    TAD INEOF    /IOPEN ALWAYS SETS INEOF
  769.     SNA CLA        /KEEP READING?
  770.     JMP IMRCLP    /YES
  771.             /NO, OPEN NEXT FILE
  772. IMFILP,    JMS I (INNEWF    /SET UP PARAMS FOR NEXT FILE
  773.     JMP I IMTRA    /NO NEXT FILE
  774.     TAD I (INHNDL
  775.     DCA IMHNDL    /GET DEVICE HANDLER ENTRY
  776.     TAD I (INREC
  777.     DCA IMREC    /AND STARTING BLOCK NUMBER
  778. IMRCLP,    TAD I (INCTR
  779.     CLL
  780.     TAD (15
  781.     SNL        /IF LINK IS ON, THERE ARE LESS THAN 16 BLOCKS LEFT
  782.     DCA I (INCTR
  783.     SZL
  784.     ISZ INEOF
  785.     CLL CML CMA RTR
  786.     RTR
  787.     RTR
  788.     TAD (3201    /FORM A FULL OR PARTIAL READ CONTROL WORD
  789.     DCA IMCTLW
  790.     JMS I (CTCTST    /CHECK FOR ^C
  791.     CIF 0
  792.     JMS I IMHNDL
  793. IMCTLW,    0
  794.     OUBUF
  795. IMREC,    0
  796.     JMS I (SLASHG
  797.     IMERRX-.
  798.     TAD IMREC
  799.     TAD (15
  800.     DCA IMREC    /UPDATE BLOCK NUMBER
  801.     CLA CLL CML RAR
  802.     TAD IMCTLW
  803. IMOUT,    JMS I (OUTDMP    /WRITE OUT WHAT WE JUST READ IN
  804.     JMP I (AOUERR    /WRITE ERROR - BAD!
  805.     JMP AGAIN    /V3
  806. IMERRX,    ISZ INEOF    /SIGNAL EOF OR WORSE
  807.     SPA CLA        /WHICH ONE IS IT?
  808.     JMP IM7600
  809.     TAD (6377    /MARCH DOWN THROUGH CORE
  810. IMEFLP,    DCA CHAR    /LOOKING FOR THE FIRST NON-ZERO WORD
  811.     CDF 0
  812.     TAD I CHAR
  813.     SZA CLA
  814.     JMP IMNZRO
  815.     CLA CMA CLL
  816.     TAD CHAR
  817.     SZL        /IF WE GO THROUGH THE BUFFER WITHOUT A NON-ZERO WORD
  818.     JMP IMEFLP
  819. IM7600,    7600
  820.     JMS I (PIPERR    /SOMETHING IS WRONG (HANDLER SHOULD HAVE INSERTED
  821.     4        /A ^Z AT LEAST)
  822. IMNZRO,    CDF 10
  823.     TAD CHAR
  824.     CLL CML RAR
  825.     AND IM7600
  826.     TAD (200    /GET THE LENGTH OF THE USEFUL PART OF THE BUFFER
  827.     JMP IMOUT    /AS AN OUTPUT CONTROL WORD AND GO OUTPUT IT
  828.     PAGE
  829. /** PIP STARTS HERE (OR HERE+1 IF CHAINED TO) **
  830.  
  831. PIPSA,    JMP PIPCD    /NORMAL ENTRY/RE-ENTRY - CALL CD
  832.     JMP NOPCD    /ENTRY FROM CHAIN COMMAND - ASSUME CD AREA SET UP
  833.     /PART OF ASCII PROCESSOR - CLEAN UP AT END OF LINE AND END OF FILE
  834.  
  835. LFEED,    TAD CHAR
  836.     DCA I XR    /PUT THE LINE FEED IN THE LINE BUFFER
  837. EOL,    DCA I XR    /MARK THE END OF USEFUL INFO
  838.     JMS I (CTCTST
  839.     TAD (ABUF-1
  840.     DCA XR        /RESET BUFFER POINTER
  841. EOLLP,    TAD I XR    /GET A CHARACTER FROM THE LINE BUFFER
  842. PIPSNA,    SNA        /ZERO MEANS NO MORE CHARS
  843.     JMP EOFTST
  844.     JMS I (OCHAR    /OUTPUT THE CHARACTER
  845.     JMP I (AOUERR
  846.     JMP EOLLP
  847. EOFTST,    TAD AEOFFG
  848.     SNA CLA        /END OF INPUT ENCOUNTERED?
  849.     JMP I (ASCIGO    /NO - GET NEXT LINE
  850. ACLOSE,    JMS I (OCLOSE    /YES - CLOSE THE OUTPUT FILE
  851.     JMP I (AOUERR    /ERROR ON CLOSE
  852. PIP,    TAD I (MPARAM-1    /V3
  853.     SMA CLA        /ALTMODE TERMINATE LAST COMMAND STRING?
  854.     JMP PIPCD    /NO
  855.     CDF CIF 0    /YES
  856.     JMP I (7605    /EXIT TO OS/8 WITHOUT SAVING CORE
  857. PIPCD,    JMS I (200    /OF COURSE THE MONITOR IS IN CORE!
  858.     5        /COMMAND DECODE
  859.     0        /NO ASSUMED EXTENSIONS ON INPUT
  860. L20,            /V3
  861. NOPCD,    JMS I (ONCE    /REPLACED BY '20' BY ONCE-ONLY CODE
  862.     JMS I (SRSTOR    /CLEAR /S OR /Y;READ MONITOR
  863.     DCA SQFLAG    /CLEAR /S INDICATOR
  864.     TAD PIPSNA
  865.     DCA I (INCTZF    /RESET INPUT SWITCH TO DETECT "^Z"'S
  866.     TAD I (MPARAM+1
  867.     AND (40        /"S" SWITCH
  868.     SZA CLA
  869.     JMP I (SQUISH    /IT WAS ON - COMPRESS THE INDICATED DEVICES
  870.     TAD I (MPARAM+2
  871.     RTL
  872.     SZL CLA        /"Z" SWITCH IN THE LINK
  873.     JMS I (DZERO    /ZERO DIRECTORY BEFORE PROCEEDING
  874.     TAD I (MPARAM
  875.     AND (400    /"D" SWITCH
  876.     SZA CLA
  877.     JMS I (DELETE    /DELETE OUTPUT FILE
  878.     TAD I (MPARAM+2    /IS /Y ON?
  879.     SPA CLA
  880.     JMP I (SYSCOP    /YEP..TRANSFER SYSTEM HEAD
  881.     TAD I (MPARAM
  882.     AND (301    /"E","F" AND "L" SWITCHES
  883.     SZA        /ANY ONE OF THEM ON?
  884.     JMP I (DIR    /YES - LIST A DIRECTORY
  885.     TAD I (MPARAM
  886.     RTL
  887.     AND (40        /"I" SWITCH ROTATED TWO LEFT
  888.     SZA CLA
  889.     JMP I (IMAGE    /IMAGE MODE TRANSFER
  890.     TAD I (7617    /MUST PRESERVE THE LINK
  891.     SNA CLA        /V3 IMAGE MODE ALLOWS NO INPUT FILE
  892.     JMP PIP        /TERMINATE HERE IF NO INPUT SIDE
  893.     SZL CLA        /"B" SWITCH IN LINK
  894.     JMP I (BINARY    /BINARY MODE TRANSFER
  895.  
  896.     /DEFAULT MODE OF TRANSFER IS ASCII
  897.  
  898. ASCII,    TAD I (MPARAM+1
  899.     AND L20
  900.     DCA COPTSW
  901.     TAD COPTSW
  902.     JMS I (ASCI2    /TEST FOR OUTPUT DEVICE
  903.     JMS I (OUTOPN
  904.     JMS I (IOPEN    /OPEN THE INPUT FILES
  905.     DCA AEOFFG    /ZERO THE END-OF-FILE FLAG
  906.     JMS I (LEADER
  907.     JMP I (ASCIGO
  908.  
  909.     /ENTRY ON END OF INPUT
  910. ASCEOF,    SPA CLA        /WAS IT END OF INPUT OR AN INPUT ERROR?
  911. PER4,    JMS I (PIPERR
  912.     4
  913.     ISZ AEOFFG    /SET END-OF-INPUT FLAG
  914.     JMP EOL        /PROCESS LAST LINE (IF ANY)
  915. AEOFFG,    0
  916.     /SUBROUTINE TO OUTPUT RUBOUTS AFTER FORM CONTROL CHARACTERS
  917. RUBOUT,    0        /UNLESS OUTPUT IS TO A DIRECTORY DEVICE
  918.     DCA TEMP    /STORE COUNT
  919.     JMS I (OTYPE    /GET TYPE OF OUTPUT DEVICE
  920.     SPA CLA
  921.     JMP I RUBOUT    /DIRECTORY DEVICE - DON'T BOTHER
  922. RBTLP,    TAD CHAR
  923.     TAD (-214
  924.     SNA CLA        /IS THE FORM CONTROL CHAR A FORM-FEED?
  925.     IAC        /YES - OUTPUT BLANK TAPE INSTEAD
  926.     TAD (377
  927.     DCA I XR    /PUT IN BUFFER
  928.     ISZ TEMP
  929.     JMP RBTLP        /LOOP FOR THE REQUISITE COUNT
  930.     JMP I RUBOUT
  931. COPTSW,    0
  932.  
  933. DEND,    SPA CLA
  934.     JMP PER4
  935.     JMP ACLOSE
  936.     PAGE
  937.     *3200
  938.     /ASCII PROCESSOR CONTINUED
  939.  
  940. ASCIGO,    TAD (ABUF-2
  941.     DCA XR
  942.     DCA I XR    /PROTECT AGAINST NULL LINE WITH "T" OPTION
  943.     DCA COLCT    /ZERO COLUMN COUNTER FOR TAB CONVERSION
  944. ACHLP,    JMS I (ICHAR    /GET A CHARACTER
  945.     JMP I (ASCEOF    /END OF INPUT OR WORSE
  946.     AND (177    /MASK OUT PARITY BIT
  947.     SZA        /IGNORE BLANK TAPE AND LEADER/TRAILER
  948.     TAD (-177
  949.     SNA
  950.     JMP ACHLP    /DITTO RUBOUTS
  951.     TAD (177-32    /V3C
  952.     SNA
  953.     JMP I (ASCPTCH    /7-BIT ^Z CHECK
  954.     TAD (232    /FORCE COLUMN 8 ON
  955.     DCA CHAR
  956.     TAD CHAR
  957.     TAD (-216
  958.     CLL
  959.     TAD ASCI5
  960.     SNL        /IS THE CHARACTER A FORM CONTROL CHARACTER?
  961.     JMP CINSRT    /NO
  962.     TAD ASCJMP    /YES - GO TO APPROPRIATE ROUTINE
  963.     DCA .+1
  964.     HLT
  965. ASCJMP,    JMP I .+1
  966.     TAB
  967.     LFEED
  968.     VTAB
  969.     FFEED
  970.     CARRET
  971. CINSRT,    7600        /GRP 2 CLA
  972.     TAD CHAR
  973. ADCAXR,    DCA I XR    /STORE THE CHARACTER IN THE LINE BUFFER
  974.     ISZ COLCT    /ALWAYS BUMP THE COLUMN POINTER
  975. TESTXR,    TAD XR
  976.     TAD (-ABUF-226
  977.     SPA CLA        /HAS THE BUFFER OVERFLOWED?
  978.     JMP ACHLP    /NO - GET NEXT CHARACTER
  979.     JMS I (PIPERR
  980.     1
  981. TAB,    TAD I (COPTSW
  982.     SNA CLA        /DO WE WANT TO CONVERT?
  983.     JMP TABRBT    /NO
  984. TABLP,    TAD (240
  985.     DCA I XR    /OUTPUT A SPACE
  986.     ISZ COLCT
  987.     TAD COLCT
  988.     AND (7
  989.     SZA CLA        /IS THE COLUMN COUNTER A MULTIPLE OF 8?
  990.     JMP TABLP    /NOT YET
  991.     JMP TESTXR    /YES - CHECK BUFFER OVERFLOW
  992. TABRBT,    TAD CHAR
  993.     DCA I XR
  994.     CLA CMA
  995.     JMS I (RUBOUT    /TWO RUBOUTS FOLLOW A TAB
  996.     JMP TESTXR    /CHECK FOR BUFFER OVERFLOW
  997. VTAB,    TAD I (COPTSW
  998.     SZA CLA        /SHOULD WE CONVERT?
  999.     JMP VTLF    /YES
  1000.     TAD CHAR
  1001.     DCA I XR
  1002.     TAD (-4
  1003.     JMS I (RUBOUT    /FOUR RUBOUTS AFTER A VERTICAL TAB
  1004.     JMP I (EOL
  1005. FFLF,    TAD (-4        /NINE LINE FEED SIMULATE A FORM FEED
  1006. VTLF,    TAD (-5        /FIVE LINE FEEDS SIMULATE A VERTICAL TAB
  1007.     DCA TEMP
  1008.     TAD (212
  1009.     DCA I XR
  1010.     ISZ TEMP
  1011.     JMP .-3
  1012.     JMP I (EOL    /FORM FEED AND VERTICAL TAB ARE LINE ENDERS
  1013. FFEED,    TAD I (COPTSW
  1014.     SZA CLA        /SHOULD WE CONVERT?
  1015.     JMP FFLF    /YES
  1016.     TAD CHAR
  1017.     DCA I XR
  1018.     TAD (-11    /NINE RUBOUTS AFTER A FORM FEED
  1019.     JMS I (RUBOUT
  1020.     JMP I (EOL
  1021. CARRET,    TAD I (MPARAM
  1022.     RTL
  1023.     SMA CLA        /"C" SWITCH MEANS DELETE TRAILING BLANKS FROM CARDS
  1024.     JMP NOTOPT    /IT WASN'T ON
  1025. TOPT,    TAD XR
  1026.     DCA TEMP
  1027.     TAD I TEMP
  1028.     TAD (-240
  1029.     SZA CLA        /WAS THE LAST CHAR ON THE LINE A SPACE?
  1030.     JMP NOTOPT    /NO
  1031.     CLA CMA
  1032.     TAD XR        /YES - BACK UP THE LINE POINTER
  1033.     DCA XR
  1034.     JMP TOPT
  1035. NOTOPT,    TAD CHAR
  1036.     DCA I XR    /STORE THE CARRIAGE RETURN IN THE BUFFER
  1037.     JMP TESTXR    /CARRIAGE RETURN IS NOT A LINE TERMINATOR
  1038. COLCT,    0
  1039.  
  1040. OUTOPN,    0
  1041.     JMS I (OOPEN
  1042.     SMA CLA
  1043.     JMP I OUTOPN
  1044.     JMS I (PIPERR
  1045. ASCI5,    5
  1046.     PAGE
  1047.     /SUBROUTINES CALLED BY THE REST OF PIP
  1048.  
  1049. K770,    770        /** DON'T MOVE THIS CONSTANT
  1050. DELETE,    0
  1051.     TAD P7600
  1052.     DCA DPFILE
  1053.     CLA CLL CMA RTL
  1054.     DCA CHAR    /MAXIMUM OF THREE OUTPUT FILES
  1055. DELOOP,    TAD (7201
  1056.     DCA DLHNDL
  1057.     TAD I DPFILE
  1058.     SNA        /DOES THIS FILE EXIST?
  1059.     JMP I DELETE    /THAT'S ALL
  1060.     JMS I C200
  1061.     1        /ASSIGN HANDLER FOR THE DELETION
  1062. DLHNDL,    0
  1063.     HLT
  1064.     TAD I DPFILE    /RELOAD DEVICE NUMBER FOR DELETE
  1065.     ISZ DPFILE    /BUMP DPFILE TO POINT TO THE FILE NAME
  1066.     JMS I C200    /DEVICE NUMBER IN AC
  1067. DP4,    4        /CLOSE - USED AS DELETE IN THIS CASE
  1068. DPFILE,    0        /POINTER TO FILE NAME
  1069.     0        /ZERO LENGTH FOR DELETE
  1070.     JMS I (PIPERR    /FILE WASN'T THERE TO BE DELETED
  1071.     3
  1072.     TAD DPFILE
  1073.     TAD DP4
  1074.     DCA DPFILE
  1075.     ISZ CHAR
  1076.     JMP DELOOP    /DELETE AS MANY FILES AS HE LISTED(UP TO 3)
  1077.     JMP I DELETE
  1078. DZERO,    0        /SUBROUTINE TO ZERO THE DIRECTORY OF THE
  1079.             /FIRST OUTPUT DEVICE
  1080.     JMS I (OTYPE
  1081.     CLL RTL
  1082.     SZL        /IS DEVICE READ-ONLY?
  1083.     JMP OZERR    /YES - ERROR
  1084.     RTR
  1085.     SMA        /FILE-STRUCTURED DEVICES WILL HAVE 4000 BIT SET
  1086.     JMP NONDIR    /NON-DIRECTORY DEVICE
  1087.     AND K770    /MASK OUT DEVICE TYPE
  1088.     CLL RTR
  1089.     RAR
  1090.     TAD (DEVLEN    /USE IT TO INDEX A TABLE OF DEVICE LENGTHS
  1091.     DCA PIPERR
  1092.     TAD (OUDEVH+1
  1093.     DCA OZHNDL
  1094.     TAD I P7600
  1095.     JMS I C200
  1096.     1        /ASSIGN DEVICE, FETCH HANDLER
  1097. OZHNDL,    0
  1098.     HLT
  1099.     TAD I PIPERR
  1100.     SNA         /IS THE LENGTH ZERO?
  1101.     JMS I (DVREDE    /IF SO, GO "READ LENGTH"
  1102.     DCA PIPERR    /STORE LENGTH
  1103.     TAD I (MPARAM+2    /IF /Y ON, DO SYSTEM ZERO
  1104.     SPA CLA
  1105.     JMP ZRO70
  1106.     TAD OZHNDL    /BUT IF NOT, CHECK FOR SYSTEM ZERO
  1107.     TAD (-7607
  1108.     SZA CLA
  1109.     JMP ZRO70+1    /NOT SYSTEM FILES BEGIN AT 7
  1110.     JMS I (CONFRM    /ASK IF HE'S SURE
  1111.     SYSZRO        /V3
  1112. ZRO70,    TAD (61
  1113.     TAD (7
  1114.     DCA I (DFORG
  1115.     DCA I (SQFLAG    /AND CLEAR OUT SQUISHES
  1116.     TAD PIPERR
  1117.     TAD I (DFORG
  1118.     DCA I (DLENGT
  1119.     JMS I (GETEQ
  1120.     DCA I (DWASTE    /DEFINE # OF WASTE WORDS
  1121.     DCA I (MPARAM+3    /KILL = OPTION FOR FUTURE /I TRANSFERS
  1122.     CIF 0
  1123.     JMS I OZHNDL
  1124.     5410        /V3 OUTPUT 6 BLOCKS FROM FIELD 1
  1125.     DIRECT
  1126.     1        /ALL DIRECTORIES ARE IN RECORD 1
  1127. OZERR,    JMS I (PIPERR    /ERROR WHILE ZEROING DIRECTORY
  1128.     2
  1129.     DCA OLDDIR    /ZERO DIRECTORY POINTER TO FORCE A NEW READ
  1130. NONDIR,    CLA        /NON DIRECTORY RETURN
  1131.     JMP I DZERO
  1132. PIPERR,    0
  1133. P7600,    7600        /V3 CLA
  1134.     JMS I (SRSTOR    /RESET 07600!
  1135.     CDF 10        /JUST IN CASE
  1136.     TAD I PIPERR    /GET ARG
  1137.     TAD (ERRTBL
  1138.     DCA TEMP
  1139.     TAD I TEMP
  1140.     JMS I (ERPRNT
  1141.     JMP I (PIP    /RESTART PIP
  1142.  
  1143. LEADER,    0
  1144.     JMS I (OTYPE
  1145. C200,    AND K770    /GET THE TYPE OF THE OUTPUT DEVICE
  1146.     TAD (-PTP    /IS IT A PAPER TAPE PUNCH?
  1147.     SZA CLA
  1148.     JMP I LEADER    /NO
  1149.     TAD P7600
  1150.     DCA TEMP
  1151.     JMS I (OCHAR    /PUT OUT SOME LEADER
  1152.     JMP I (AOUERR
  1153.     ISZ TEMP
  1154.     JMP .-3
  1155.     JMP I LEADER
  1156.     PAGE
  1157.     /TABLE OF DEVICE LENGTHS FOR /Z OPTION
  1158.  
  1159. DEVLEN,    0    /00-TTY
  1160.     0    /01-PTR
  1161.     0    /02-PTP
  1162.     0    /03-CARD READER
  1163.     0    /04-LPT
  1164.     0    /05-COM0/1
  1165.     0    /06-
  1166.     0    /07-
  1167.     0    /10-
  1168.     0    /11-
  1169.     0    /12-
  1170.     0    /13-
  1171.     0    /14-
  1172.     0    /15-
  1173.     0    /16-
  1174.     0    /17-
  1175.     0    /20-TM8E,MAGTAPE
  1176.     6437    /21-TD8E
  1177.     0    /22-BAT
  1178.     1520    /23-RK8E,RK05
  1179.     0    /24-NULL
  1180.     7022    /25 RX01 FLOPPY DISK
  1181.     17    /26 RL01 DEVICE A OR B
  1182.     0    /27-
  1183.     6401    /30-RX50 FLOPPY DISK
  1184.     4027    /31-RL01 DEVICE C
  1185.     0    /32-RX02 MUST BE ZERO TO FORCE A READ OF FLOPPY DENSITY
  1186.     7600    /33-KT8A DEVICE FOR 32-64K MEMORY
  1187.     7400    /34-KT8A DEVICE FOR 64-96K MEMORY
  1188.     7200    /35-KT8A DEVICE FOR 96-128K MEMORY
  1189.     0    /36-ONE OF VT278 SUPPORTED SERIAL DEVICES.
  1190.     17    /37-RL02 DEVICES A-E
  1191.  
  1192.     ZBLOCK 40    /SUPPOSED TO BE RESERVED FOR USER DEVICES.
  1193.  
  1194.  
  1195. FIXLEN,    0        /ROUTINE TO ESTIMATE OUTPUT FILE LENGTH
  1196.     TAD I (7600
  1197.     AND (7760
  1198.     SZA CLA        /DID THE USER PROVIDE AN ESTIMATE?
  1199.     JMP I FIXLEN    /YES - USE IT
  1200.     DCA CHAR
  1201.     TAD (7617
  1202.     DCA TEMP
  1203. FIXLP,    TAD I TEMP    /GET NEXT INPUT FILE
  1204.     SNA
  1205.     JMP FIXOVR    /NO MORE INPUT FILES
  1206.     AND (7760
  1207.     CIA CLL        /GET LENGTH AS A POSITIVE NUMBER
  1208.             /(LENGTH OF ZERO TURNS LINK ON)
  1209.     TAD CHAR
  1210.     DCA CHAR    /UPDATE CUMULATIVE LENGTH
  1211.     SZL CLA        /DID CUMULATIVE LENGTH OVERFLOW 256 BLOCKS?
  1212.     JMP I FIXLEN    /YES - CAN'T ESTIMATE IT
  1213.     ISZ TEMP
  1214.     ISZ TEMP
  1215.     JMP FIXLP
  1216. FIXOVR,    TAD CHAR
  1217.     TAD I (7600
  1218.     DCA I (7600    /STICK LENGTH IN OUTPUT FILE DESCRIPTOR
  1219.     JMP I FIXLEN
  1220. NOYES,    TEXT    /NO/
  1221.     TEXT    /YES/
  1222.  
  1223.     /DATA BLOCK FOR CONFRM:
  1224.  
  1225.     /CALL+1:  POINTER TO QUESTION TEXT
  1226.     /CALL+2:  RETURN HERE IF ANSWER WAS YES
  1227.     /OTHERWISE RESTART PIP
  1228.  
  1229. CONFRM,    0
  1230.     TAD I (MPARAM+1
  1231.     RTL        /'O' BIT TO SIGN
  1232.     SPA CLA
  1233.     JMP GOTCON    /V3 'O' MEANS OK, ASSUME 'YES'
  1234.     TAD I CONFRM    /V3
  1235.     JMS I (ERPRNT
  1236.     KSF
  1237.     JMP .-1
  1238.     JMS I (CTCTST
  1239.     KRB        /LOOK AT HIS REPLY
  1240.     AND (137    /IGNORE PARITY AND LOWER CASE
  1241.     TAD (-"Y!7600    /V3
  1242.     SNA CLA        /IS IT YES?
  1243.     ISZ SQFLAG    /SET SQFLAG TO 1 (NEEDED 1 LATER)
  1244.     TAD SQFLAG    /USE SQFLAG AS INDEX FOR MESSAGE
  1245.     CLL RAL
  1246.     TAD (NOYES
  1247.     JMS I (ERPRNT
  1248.     TAD SQFLAG
  1249.     SNA CLA
  1250.     JMP I (PIP
  1251. CNFMXT,    ISZ CONFRM
  1252.     JMP I CONFRM
  1253.  
  1254. GOTCON,    ISZ SQFLAG    /SET SQFLAG
  1255.     JMP CNFMXT    /AND TAKE SKIP EXIT
  1256.     PAGE
  1257.     /DIRECTORY PRINTER FOR PIP
  1258.     MDATE=7666
  1259.  
  1260. DIRPRE,    JMS I (OUTOPN    /OPEN THE OUTPUT FILE
  1261.     TAD (ABUF
  1262.     DCA CHAR    /ABUF WILL BE A TEMPORARY ARRAY OF STARTING FILES
  1263.     TAD (7617
  1264.     DCA TEMP
  1265.     TAD I (7617
  1266.     SNA
  1267.     JMS I (DSKNUM
  1268.     DCA I (7617    /DEFAULT DIRECTORY IS DSK:
  1269. DFUJLP,    TAD I TEMP
  1270.     SNA        /ARE WE THROUGH WITH THE INPUT DEVICES?
  1271.     JMP GETDIR    /YES
  1272.     AND (17
  1273.     DCA I TEMP    /ONLY THE DEVICE NUMBER IS IMPORTANT
  1274.     TAD I TEMP
  1275.     TAD (DCB-1
  1276.     DCA PRWD
  1277.     CLA CLL CML RTL
  1278.     TAD TEMP
  1279.     DCA INFPTR    /THIS SERVES NO FUNCTION EXCEPT IMPROVING ERROR MESSAGES
  1280.     TAD I PRWD
  1281.     SMA CLA        /IS THE DEVICE A DIRECTORY DEVICE?
  1282.     JMS I (PIPERR    /NO
  1283.     6
  1284.     ISZ TEMP
  1285.     TAD I TEMP
  1286.     DCA I CHAR    /SAVE THE STARTING BLOCK NUMBER
  1287.     CLA IAC
  1288.     DCA I TEMP    /READ FROM THE DIRECTORY
  1289.     ISZ TEMP
  1290.     ISZ CHAR
  1291.     JMP DFUJLP
  1292. GETDIR,    TAD (ABUF
  1293.     DCA CHAR
  1294.     JMS PCRLF
  1295.     TAD I (MDATE
  1296.     JMS I (PDATE
  1297.     JMS PCRLF
  1298.     JMS I (IOPEN    /RESET POINTERS - WERE GONNA FAKE OUT THOSE "GENERAL"
  1299.             /ROUTINES
  1300.     JMP I (NXTDIR
  1301. PRWD,    0        /ROUTINE TO PRINT SIXBIT TEXT
  1302.     SNA        /IS COUNT ZERO?
  1303.     CMA        /MAKE IT ONE
  1304.     DCA PRCT    /STORE COUNT
  1305. PRWDLP,    TAD I PRWD
  1306. PR212,    RTR
  1307.     RTR
  1308.     RTR
  1309.     JMS PR6BIT
  1310.     TAD I PRWD
  1311.     JMS PR6BIT
  1312.     ISZ PRWD
  1313.     ISZ PRCT
  1314.     JMP PRWDLP
  1315.     JMP I PRWD
  1316. PRCT,    0
  1317. PR6BIT,    0
  1318.     AND (77
  1319.     SZA
  1320.     TAD (240    /V3
  1321.     AND (77        /V3
  1322.     TAD (240    /V3
  1323.     JMS I (OCHAR
  1324.     JMP I (AOUERR
  1325.     JMP I PR6BIT
  1326. PRNUM,    0
  1327.     DCA PRWD
  1328.     DCA TEMP
  1329.     TAD (PWRTEN
  1330.     DCA PCRLF
  1331. PRNMLP,    DCA PR6BIT
  1332.     TAD I PCRLF
  1333.     SNA
  1334.     JMP PRLAST    /V3
  1335.     CLL
  1336.     TAD PRWD
  1337.     SNL
  1338.     JMP .+4
  1339.     DCA PRWD
  1340.     ISZ PR6BIT
  1341.     JMP PRNMLP+1
  1342.     CLA
  1343.     TAD PR6BIT
  1344.     TAD TEMP
  1345.     SNA
  1346. PBLJMP,    JMP PRBLNK    /INCREMENTED BY PDATE TO KILL LEADING BLANKS
  1347.     TAD (260
  1348.     JMS PR6BIT
  1349.     CLA CLL CML RAR
  1350.     DCA TEMP
  1351.     ISZ PCRLF
  1352.     JMP PRNMLP
  1353. PRBLNK,    JMS PR6BIT
  1354.     JMP .-3
  1355. PRLAST,    TAD PRWD    /V3
  1356.     TAD (260    /V3
  1357.     JMS PR6BIT    /V3
  1358.     JMP I PRNUM    /V3
  1359. PCRLF,    0
  1360.     TAD (215
  1361.     JMS I (OCHAR
  1362.     JMP I (AOUERR
  1363.     TAD PR212
  1364.     JMS I (OCHAR
  1365.     JMP I (AOUERR
  1366.     JMP I PCRLF
  1367.  
  1368. PWRTEN,    -1750;-144;-12;0    /V3
  1369.     PAGE
  1370.     /MAIN DIRECTORY PRINTING LOOP
  1371.  
  1372. NXTDIR,    JMS I (ICHAR    /FAKE, FAKE
  1373.     JMP I (DEND
  1374.     CLA        /WE DON'T WANT THE CHARACTER
  1375.     DCA ECOUNT
  1376.     TAD (INBUF-1    /WE WANT THE BUFFER!
  1377. NEWSEG,    DCA XR
  1378.     CDF 0
  1379.     TAD I XR
  1380.     DCA DCOUNT    /NUMBER OF ENTRIES
  1381.     TAD DCOUNT
  1382.     CLL
  1383.     TAD (100
  1384.     SNL CLA
  1385.     JMS I (PIPERR
  1386.     11
  1387.     TAD I XR
  1388.     DCA BLOKNO    /FIRST BLOCK OF FILE STORAGE
  1389.     TAD I XR
  1390.     DCA DLINK    /LINK TO NEXT SEGMENT
  1391.     ISZ XR        /BUMP XR PAST FLAG WORD
  1392.     TAD I XR
  1393.     DCA WASTE
  1394. NAMELP,    CDF 0
  1395.     TAD I XR
  1396.     SNA        /WHAT TYPE OF ENTRY IS IT?
  1397.     JMP DEMPTY    /A FREE FILE
  1398.     DCA NAME1    /A PERMENANT OR TENTATIVE FILE
  1399.     TAD I XR
  1400.     DCA NAME2
  1401.     TAD I XR
  1402.     DCA NAME3
  1403.     TAD I XR
  1404.     DCA NAME4
  1405.     TAD I XR
  1406.     DCA DDATE
  1407.     TAD WASTE    /COMPENSATE FOR THE DATE INCREMENT
  1408.     CMA        /AND THE WASTE WORDS
  1409.     TAD XR
  1410.     DCA XR
  1411.     TAD I XR
  1412.     SNA        /IS IT A TENTATIVE FILE?
  1413.     JMP ADDLEN+1    /YES - TENTATIVE FILES ARE ALWAYS IGNORED
  1414.     CIA
  1415.     DCA FLENGT    /NO - STORE THE LENGTH
  1416.     CDF 10
  1417.     TAD I CHAR    /GET THE STARTING FILE FOR THIS LISTING
  1418.     CIA CLL
  1419.     TAD BLOKNO
  1420.     SNL CLA        /ARE WE THERE YET?
  1421.     JMP ADDLEN    /NO - KEEP GOING
  1422.     CLA CLL CMA RTL
  1423.     JMS I (PRWD    /PRINT THREE WORDS
  1424. NAME1,    0
  1425. NAME2,    0
  1426. NAME3,    0
  1427.     TAD NAME4
  1428.     SNA CLA        /IS THERE AN EXTENSION?
  1429.     TAD (-16    /NO - PRINT A BLANK
  1430.     TAD (56        /YES - PRINT A PERIOD
  1431.     JMS I (PR6BIT
  1432.     JMS I (PRWD
  1433. NAME4,    0        /ZERO PRINTS AS TWO MORE BLANKS
  1434. PRLNGT,    TAD DTYPE
  1435.     AND (100
  1436.     SZA CLA        /WAS THE LISTING SWITCH /F?
  1437.     JMP PRTCRL    /YES - DON'T PRINT LENGTH
  1438.     TAD FLENGT
  1439.     JMS I (PRNUM
  1440.     TAD WASTE
  1441.     SZA CLA
  1442.     TAD DDATE
  1443.     JMS I (PDATE    /PRINT THE CREATION DATE OF THE FILE
  1444. PRTCRL,    JMS I (PCRLF
  1445. ADDLEN,    TAD FLENGT
  1446.     TAD BLOKNO
  1447.     DCA BLOKNO    /UPDATE BLOCK NUMBER
  1448.     ISZ DCOUNT
  1449.     JMP NAMELP    /LOOP UNTIL ALL FILES ARE PROCESSED
  1450.     TAD DLINK
  1451.     SNA CLA        /MULTI-SEGMENT DIRECTORY?
  1452.     JMP ENDDIR    /NO - FINISH UP
  1453.     TAD XR
  1454.     AND (7400
  1455.     TAD (377    /BUMP XR TO NEXT BLOCK
  1456.     JMP NEWSEG    /PROCESS NEXT LINK
  1457. DEMPTY,    TAD I XR
  1458.     CIA
  1459.     DCA FLENGT    /STORE LENGTH OF FREE ENTRY
  1460.     CDF 10
  1461.     TAD FLENGT
  1462.     TAD ECOUNT
  1463.     DCA ECOUNT    /BUMP COUNT OF FREE BLOCKS
  1464.     TAD DTYPE
  1465.     AND (200
  1466.     SNA CLA        /IS THE /E SWITCH ON?
  1467.     JMP ADDLEN    /NO - DON'T LIST FREE FILES
  1468.     TAD (-4
  1469.     JMS I (PRWD
  1470.     TEXT    /<EMPTY>/
  1471.     JMS I (PR6BIT
  1472.     TAD FLENGT
  1473.     JMS I (PRNUM
  1474.     JMP PRTCRL
  1475. ENDDIR,    ISZ CHAR    /BUMP TEMP ARRAY TO NEXT ENTRY
  1476.     TAD ECOUNT
  1477.     JMS I (ENDFUJ
  1478.     JMP NXTDIR
  1479.     PAGE
  1480. /BINARY MODE PROCESSOR FOR PIP
  1481.  
  1482. BIN360,    360
  1483. BINARY,    JMS I (FIXLEN
  1484.     JMS I (OUTOPN
  1485.     JMS I (IOPEN
  1486.     JMS I (LEADER    /PUT OUT BLANK TAPE IF HS PUNCH OUTPUT
  1487.     JMS LTCODE
  1488. NEWTAP,    JMS I (ICHAR
  1489.     JMP BEOF        /END OF FILE ON INPUT
  1490.     SNA
  1491.     JMP NEWTAP    /BLANK TAPE - KEEP GOING
  1492.     TAD BN7600
  1493.     SZA CLA
  1494.     JMP NEWTAP
  1495.     JMS I (ICHAR
  1496.     JMP BEOF
  1497.     TAD BN7600
  1498.     SNA
  1499.     JMP .-4
  1500.     TAD BIN200
  1501.     DCA CHAR
  1502.     TAD CHAR
  1503. BIN200,    AND BIN360
  1504.     TAD (-240    /CHECK TYPE OF TAPE
  1505.     SNA        /IS IT RELOCATABLE?
  1506.     JMP RELBIN    /YES
  1507.     TAD (-40    /IF A FIELD SETTING, IT'S ABSOLUTE
  1508.     AND (7700
  1509.     SNA
  1510.     JMP ABSLUT
  1511.     TAD BIN200    /CHECK FOR ORIGIN ALSO
  1512.     SZA CLA
  1513.     JMP NEWTAP    /NOTHING..NEXT FRAME
  1514. ABSLUT,    CLA CMA
  1515.     JMS LTCODE
  1516. ABSBIN,    JMS RCOPY1    /COPY THIS FRAME AND READ NEXT
  1517.     TAD BN7600
  1518. BNM140,    SZA CLA        /IS IT TRAILER?
  1519.     JMP ABSBIN    /NO - KEEP GOING
  1520. BEOT,    CLA CMA        /END OF TAPE
  1521.     JMS LTCODE    /PUT OUT SHORT LEADER/TRAILER
  1522.     JMP NEWTAP    /GET NEXT TAPE
  1523. LTCODE,    0        /SUBROUTINE TO PUNCH 200 CODE
  1524.     SMA        /SHORT LEADER/TRAILER?
  1525.     JMS I (OTYPE
  1526.     SPA CLA        /DIRECTORY DEVICE?
  1527.     TAD (70    /YES
  1528.     TAD (-100
  1529.     DCA TEMP
  1530. LTLOOP,    TAD BIN200
  1531.     JMS I (OCHAR    /OUTPUT 64 OR 8 FRAMES OF L/T CODE
  1532.     JMP I (AOUERR
  1533.     ISZ TEMP
  1534.     JMP LTLOOP
  1535.     JMP I LTCODE
  1536.  
  1537. RELBIN,    TAD (SKP
  1538.     DCA I (INCTZF    /DISABLE CONTROL-Z CHECKING ON INPUT
  1539.     CLA CMA
  1540.     JMS LTCODE    /PUT OUT SHORT LEADER/TRAILER
  1541. RELLP,    TAD CHAR
  1542.     RTR
  1543.     RTR
  1544.     AND (17
  1545.     TAD (RELTBL
  1546.     DCA TEMP
  1547.     TAD I TEMP    /GET DATA WORD FOR THIS FRAME
  1548.     SMA SZA        /POSITIVE MEANS SPECIAL OR ERROR
  1549.     JMP RELERR
  1550. RELSNA,    SNA
  1551.     JMP RELEND    /ZERO MEANS CHECKSUM FRAME
  1552.     DCA TEMP    /NEGATIVE MEANS COUNT OF NUMBER OF SLAVE FRAMES
  1553.     JMS RCOPY1
  1554. BN7600,    7600
  1555.     ISZ TEMP
  1556.     JMP .-3    /COPY THIS FRAME AND ALL SLAVE FRAMES
  1557.     JMP RELLP    /GET NEXT CONTROL FRAME
  1558. RELEND,    JMS RCOPY1    /COPY THE FIRST FRAME OF THE CHECKSUM
  1559.     JMS I (OCHAR
  1560.     JMP I (AOUERR    /OUTPUT THE SECOND FRAME
  1561.     JMP BEOT    /END TAPE - START NEXT ONE
  1562. BEOF,    JMS LTCODE
  1563.     JMS I (OCLOSE
  1564.     JMP I (AOUERR
  1565.     JMP I (PIP
  1566. RCOPY1,    0        /ROUTINE TO ADVANCE "CHAR" TO NEXT INPUT CHARACTER
  1567.     TAD CHAR
  1568.     JMS I (OCHAR
  1569.     JMP I (AOUERR
  1570.     JMS I (ICHAR
  1571.     JMP INEFER
  1572.     DCA CHAR
  1573.     TAD CHAR
  1574.     JMP I RCOPY1
  1575. INEFER,    SMA CLA        /DETECT FATALITIES
  1576.     JMS I (PIPERR
  1577.     7
  1578.     JMS I (PIPERR        /A REAL BAD READ
  1579.     4
  1580.  
  1581. RELERR,    CLL RAR
  1582.     SZA CLA        /CODE OF 1 MEANS SPECIAL
  1583.     JMS I (PIPERR    /ILLEGAL RELOCATABLE INPUT
  1584.     10
  1585.     JMS RCOPY1
  1586.     CLL CML CMA RTL    /MULTIPLY NAME COUNT BY -6 (APPROXIMATELY)
  1587.     TAD CHAR
  1588.     CLL CML RAL    /(ACTUALLY THIS PRODUCES -6X-1 WHICH IS WHAT WE WANT)
  1589.     JMP RELSNA
  1590.     PAGE
  1591. ERPRNT,    0        /ERROR MESSAGE PRINTOUT ROUTINE
  1592.     DCA TEMP
  1593. ERLP,    TAD I TEMP
  1594.     RTR
  1595.     RTR
  1596.     RTR
  1597.     JMS ERPCH    /PRINT HIGH-ORDER CHARACTER
  1598.     TAD I TEMP
  1599.     JMS ERPCH    /PRINT LOW-ORDER CHARACTER
  1600.     ISZ TEMP
  1601.     JMP ERLP
  1602.  
  1603. ERPCH,    0
  1604.     AND (77
  1605.     SNA
  1606.     JMP ERCRLF    /0 CHARACTER TERMINATES
  1607.     JMS CHPRNT
  1608.     JMP I ERPCH
  1609. FILENR,    TAD ("#
  1610.     JMS I (TTYOUT
  1611.     TAD INFPTR    /GET PTR TO CURRENT INPUT FILE
  1612.     TAD (321    /MAGIC NUMBER
  1613.     CLL RAR
  1614.     JMP FILENR-2
  1615.  
  1616. CHPRNT,    0
  1617.     TAD (-37    /IS IT A _?
  1618.     SNA
  1619.     JMP FILENR    /YES..PRINT FILE NUMBER
  1620.     IAC
  1621.     SNA         /MAYBE ^?
  1622.     JMP I (SQFILE    /YEP..PRINT FILE NAME
  1623.     SPA
  1624.     TAD (100
  1625.     TAD (236
  1626.     JMS I (TTYOUT
  1627.     JMP I CHPRNT
  1628.  
  1629. ERCRLF,    TAD (215
  1630.     JMS I (TTYOUT
  1631.     TAD (212
  1632.     JMS I (TTYOUT
  1633.     JMP I ERPRNT
  1634. PDATE,    0        /PRINTS THE DATE
  1635.     SNA
  1636.     JMP I PDATE    /NO DATE TO PRINT
  1637.     DCA ERPRNT
  1638.     ISZ I (PBLJMP
  1639.     JMS I (PR6BIT
  1640.     TAD ERPRNT
  1641.     CLL RTL
  1642.     RTL
  1643.     RAL
  1644.     AND (17
  1645.     JMS I (PRNUM
  1646.     TAD (57
  1647.     JMS I (PR6BIT
  1648.     TAD ERPRNT
  1649.     RTR
  1650.     RAR
  1651.     AND (37
  1652.     JMS I (PRNUM
  1653.     TAD (57
  1654.     JMS I (PR6BIT
  1655.     TAD ERPRNT
  1656.     AND (7
  1657.     TAD (106
  1658.     JMS I (PRNUM
  1659.     CLA CMA
  1660.     TAD I (PBLJMP
  1661.     DCA I (PBLJMP    /RESET PRNUM TO PRINT LEADING SPACES
  1662.     JMP I PDATE
  1663.  
  1664. DSKNUM,    0
  1665.     DCA DSKNAM+1
  1666.     JMS I (200
  1667.     12
  1668. DSKNAM,    5723
  1669.     0
  1670.     0
  1671.     HLT
  1672.     TAD DSKNAM+1
  1673.     JMP I DSKNUM
  1674. RELTBL,    -2;-2;2;-10;-2;-2;-2;2;0;2;-2;2;2;2;2;1
  1675.  
  1676. ERRTBL,    ERR0
  1677.     ERR1
  1678.     ERR2
  1679.     ERR3
  1680.     ERR4
  1681.     ERR5
  1682.     ERR6
  1683.     ERR7
  1684.     ERR8
  1685.     ERR9
  1686.     ERR10
  1687.     ERR11
  1688.     IFNZRO OS78 <DIRMSG>
  1689.  
  1690.     PAGE
  1691. /ERROR MESSAGE TEXT GOES HERE
  1692.  
  1693.  
  1694. ERR0,    TEXT    /NO ROOM FOR OUTPUT FILE/
  1695. ERR1,    TEXT    /LINE TOO LONG IN FILE_/
  1696. ERR3,    TEXT    /ERROR DELETING FILE/
  1697. ERR4,    TEXT    /INPUT ERROR, FILE_/
  1698. ERR5,    TEXT    /CAN'T OPEN OUTPUT FILE/
  1699. ERR6,    TEXT    /DEVICE_ NOT A DIRECTORY DEVICE/
  1700. ERR7,    TEXT    /PREMATURE END OF FILE, FILE_/
  1701. ERR8,    TEXT    /ILLEGAL BINARY INPUT, FILE_/
  1702. ERR9,    TEXT    /BAD DIRECTORY ON DEVICE_/
  1703. ERR10,    TEXT    /DIRECTORY ERROR/
  1704.  
  1705.  
  1706. TTYOUT,    0
  1707.     TLS
  1708.     TSF
  1709.     JMP .-1
  1710.     CLA
  1711.     JMP I TTYOUT
  1712.     PAGE
  1713. /SQUISH PROCESSOR
  1714.  
  1715. SQUISH,    JMS I (CONFRM
  1716.     SURE        /V3
  1717. SQUISX,    DCA I (OUELEN    /INITIALIZE PARAMS TO FAKE OUT "IMTRA"
  1718.     DCA I (OUBLK
  1719.     DCA I (7621    /ZERO SECOND FILE FOR "INNEWF"
  1720.     DCA I (CTCFLG
  1721.     JMS I (IOPEN
  1722.     JMS I (INNEWF
  1723.     JMP I (PIP    /NO INPUT
  1724.     TAD (OUDEVH+1
  1725.     DCA SOHND
  1726.     TAD I SQ7600
  1727.     SNA
  1728.     JMP I (PIP    /NO OUTPUTEE, NO SQUISHEE
  1729.     JMS I (200
  1730.     1
  1731. SOHND,    0
  1732.     HLT
  1733.     JMS INTEST
  1734.     JMS I (OTYPE
  1735.     CLL RTR
  1736.     RAR
  1737.     AND (77
  1738.     TAD (DEVLEN
  1739.     DCA TEMP
  1740.     TAD SOHND    /SET UP OZHNDL
  1741.     DCA I (OZHNDL    /IN CASE OF JMP TO DVREDE
  1742.     TAD I TEMP    /GET ENTRY FROM DEVICE LENGTH TABLE
  1743.     SNA        /IS THE DEVICE LENGTH ZERO ?
  1744.     JMS I (DVREDE    /IF SO, READ THE LENGTH
  1745.     DCA OUDLEN    /SAVE OUTPUT DEVICE LENGTH
  1746.     JMS I (GETEQ
  1747.     DCA OUWAST
  1748.     TAD SOHND
  1749.     DCA OHNDLR
  1750.     TAD OHNDLR
  1751.     DCA I (OUHNDL
  1752.     TAD I (INHNDL
  1753.     DCA IHNDLR
  1754.     JMS SETCTC    /DISALLOW ^C DURING SQUISH
  1755.     JMS I (CTCFLG
  1756.     CIF 0
  1757.     JMS I IHNDLR
  1758.     1400
  1759.     0
  1760.     1
  1761.     JMP I (SQIDER+1
  1762.     CIF 0
  1763.     JMS I (7607
  1764.     5400
  1765.     0
  1766.     MTEMP        /MOVE THE INPUT DIRECTORY TO SYS:
  1767.     JMP I (SQIDER+1
  1768.     CLA IAC
  1769.     DCA I (SQBUF2+2
  1770.     DCA I (CTCFLG
  1771.     TAD SOHND    /SETUP DIRECTORY START
  1772.     JMS I (SQDTST
  1773.     JMS I (SETSAM    /IF IHNDLR=OHNDLR, SAME=1
  1774.     CLA CMA
  1775.     DCA I (SQBUF2
  1776.     DCA I (OUTSEG
  1777.     JMP I (NEWOUT
  1778.  
  1779. INTEST,    0        /TEST IF INPUT IS DIRECTORY
  1780.     TAD I (7617
  1781.     AND (17
  1782.     TAD (DCB-1
  1783.     DCA TEMP
  1784.     TAD I TEMP
  1785.     SMA CLA
  1786.     JMS I (PIPERR
  1787.     6
  1788.     JMP I INTEST
  1789.  
  1790. SETCTC,    0        /MODIFY 076000 TO RETURN TO SQCTLC. PREVENTS ^C
  1791.             /EXIT DURING SYSTEM HEAD MANIPULATION. NORMAL
  1792.             /^C FUNCTION GETS RESTORED BY SRSTOR.
  1793.     TAD CDIF10
  1794.     CDF 0
  1795.     DCA I SQ7600
  1796.     TAD (5602    /JMP I .+1
  1797.     DCA I (7601
  1798.     TAD (SQCTLC
  1799.     DCA I (7602
  1800. CDIF10,    CIF CDF 10
  1801.     JMP I SETCTC
  1802. OUK,    0        /V3 ON IMAGE MODE TRANSFER
  1803.             /CLOSE OUT FILE WITH = OPTION
  1804.             /IF NOT TOO SMALL
  1805.     TAD I (OUCCNT
  1806.     CLL CIA
  1807.     TAD I (MPARAM+3
  1808.     SNL        /IS = OPTION LARGER?
  1809. SQ7600,    7600        /RETURN OUCCNT IF IT'S LARGER
  1810.     TAD I (OUCCNT    /RETURN LOW ORDER = OPTION IF IT'S LARGER
  1811.     JMP I OUK
  1812.     PAGE
  1813. NEWIN,    TAD (MTEMP-1
  1814.     DCA INSEG
  1815.     JMS I (CTCFLG
  1816.     CIF 0
  1817.     JMS I (7607
  1818.     0210
  1819. S7200,    SQBUF2
  1820. INSEG,    0
  1821.     JMP I (SQIDER
  1822.     DCA I (CTCFLG
  1823.     TAD I (SQBUF2+1
  1824.     DCA INBLK
  1825.     TAD (SQBUF2+4
  1826.     DCA INXR
  1827. SGETIN,    TAD I INXR
  1828.     SNA
  1829.     JMP SEMPTY
  1830.     DCA I OUTXR
  1831.     TAD OUTXR
  1832.     DCA OUSAVE
  1833.     JMS I (CYWAST    /COPY WASTE WORDS
  1834.     TAD I INXR
  1835.     DCA RECCNT
  1836.     TAD RECCNT
  1837.     SNA
  1838.     JMP SNULL
  1839.     CMA CLL        /V3
  1840.     TAD OUTBLK
  1841.     TAD OUDLEN
  1842.     SZL CLA
  1843.     JMP SNULER
  1844.     TAD RECCNT
  1845.     DCA I OUTXR
  1846.     CLA CMA
  1847.     TAD I (SQBUF1
  1848.     DCA I (SQBUF1
  1849.     TAD INBLK
  1850.     CIA
  1851.     TAD OUTBLK
  1852.     SNA CLA
  1853.     TAD SAME
  1854.     SNA CLA
  1855. MOVFIL,    JMS I (SQTRA    /MOVE THE FILE DOWN
  1856.     TAD RECCNT
  1857.     CIA
  1858.     TAD OUTBLK
  1859.     DCA OUTBLK
  1860.     TAD RECCNT
  1861. DMTX,    CIA
  1862.     TAD INBLK
  1863.     DCA INBLK
  1864.     TAD OUTXR
  1865.     CIA
  1866.     TAD OUWAST
  1867.     TAD OUWAST
  1868.     TAD (SQBUF1+365
  1869.     SMA CLA        /DO WE HAVE ROOM FOR TWO MORE ENTRIES?
  1870.     JMP NEXTIN
  1871.  
  1872.     /DIRECTORY SEGMENT OVERFLOW ON OUTPUT...
  1873.  
  1874.     ISZ I (OUTSEG
  1875.     TAD I (OUTSEG
  1876.     IAC
  1877.     DCA I (SQBUF1+2    /STORE LINK TO NEXT SEGMENT
  1878.     TAD I (SQBUF1+2
  1879.     TAD (-7
  1880.     SMA CLA
  1881.     JMP I (SQIDER-1    /TOO MANY SEGMENTS
  1882.     JMS I (OUTDIR    /OUTPUT THIS SEGMENT
  1883. NEWOUT,    TAD (SQBUF1-1
  1884.     DCA OUTXR    /INITIALIZE XR FOR NEXT OUTPUT SEGMENT
  1885.     DCA I (OUTINH    /ZAP ANY OLD OUTPUT INHIBIT FLAG
  1886.     DCA I OUTXR
  1887.     TAD OUTBLK
  1888.     DCA I OUTXR
  1889.     DCA I OUTXR
  1890.     DCA I OUTXR
  1891.     TAD OUWAST
  1892.     DCA I OUTXR
  1893. NEXTIN,    ISZ I S7200
  1894.     JMP SGETIN
  1895.     TAD I (SQBUF2+2
  1896.     SNA        /ANY MORE INPUT SEGMENTS?
  1897.     JMP I (SQOVER
  1898.     JMP NEWIN
  1899. SNULER,    TAD (NOROOM
  1900.     JMS I (ERPRNT
  1901. SNULL,    CLA CMA
  1902.     TAD OUSAVE
  1903.     DCA OUTXR
  1904.     JMP DMTX-1
  1905. SEMPTY,    TAD I INXR
  1906.     JMP DMTX
  1907. OUSAVE,    0
  1908. SURE,    TEXT    /ARE YOU SURE?/
  1909.  
  1910. SETSAM,    0
  1911.     TAD IHNDLR
  1912.     CIA
  1913.     TAD OHNDLR
  1914.     SNA CLA
  1915.     IAC
  1916.     DCA SAME
  1917.     JMP I SETSAM
  1918.     PAGE
  1919. SQOVER,    DCA I OUTXR
  1920.     TAD OUDLEN
  1921.     TAD OUTBLK
  1922.     SNA
  1923.     JMP CKZERO
  1924.     DCA I OUTXR
  1925.     CLA CMA
  1926.     TAD I (SQBUF1
  1927.     DCA I (SQBUF1
  1928. CKZERO,    TAD I (SQBUF1
  1929.     SZA CLA
  1930.     JMP ZEROK
  1931.     CLA CLL CML RAR
  1932.     JMS OUTDIR    /READ IN LAST DIRECTORY
  1933.     DCA I (SQBUF1+2    /ZERO OUT LINK WORD
  1934.     SKP
  1935. ZEROK,    ISZ OUTSEG
  1936.     JMS OUTDIR
  1937. ZEROKS,    JMS SRSTOR
  1938.     JMP I (PIP
  1939.  
  1940.     DCA I (SQBUF1+2
  1941. SQIDER,    JMS OUTDIR
  1942.     JMS SRSTOR
  1943.     JMS I (PIPERR
  1944.     12
  1945. OUTDIR,    0
  1946.     TAD (4210
  1947.     DCA .+4
  1948.     JMS CTCFLG
  1949.     CIF 0
  1950.     JMS I OHNDLR
  1951.     0
  1952.     SQBUF1
  1953. OUTSEG,    0
  1954.     JMP SQIDER+1
  1955.     DCA CTCFLG
  1956.     JMP I OUTDIR
  1957.  
  1958. SQIOER,    TAD (IOMSG
  1959.     JMS I (ERPRNT
  1960.     JMP I (SLGRET
  1961. SQCTLC,    KCC        /JUMPED TO BY CODE AT 07600
  1962.     JMS I (TSTSAM    /TEST IF OPERATION IS SYS: TO SYS: 
  1963.     TAD (CTCMSG    /YES--PRINT MESSAGE, ELSE TO TO ZEROKS TO REMOVE
  1964.             /CONTROL C LOCKOUT
  1965.     JMS I (ERPRNT
  1966.     TAD CTCFLG
  1967.     SZA CLA
  1968.     JMP I CTCFLG    /HAS LOCATION TO CONTINUE INTERRUPTED ^C CHECKING
  1969.     TAD I (MPARAM+1    /IS IT /S?
  1970.     AND (40
  1971.     SNA CLA
  1972.     JMP I (SYSCPY    /NO../Y
  1973.     JMP I (MOVFIL
  1974.  
  1975. SRSTOR,    0
  1976.     JMS I (7700    /MAKE SURE MONITOR IS IN CORE
  1977.     10
  1978.     DCA .-2        /AND WIPE THE CALL AWAY
  1979.     TAD (4207
  1980.     CDF 0
  1981.     DCA I (7600
  1982.     TAD (5000
  1983.     DCA I (7601
  1984.     DCA I (7602
  1985.     CDF 10
  1986.     JMP I SRSTOR
  1987.  
  1988.     /IF A ROUTINE CANNOT BE INTERRUPTED, USE THIS ROUTINE TO SET UP
  1989.     /A RETURN POINT IF ^C IS ENCOUNTERED. SETCTC PATCHES THE NORMAL
  1990.     /^C EXIT TO COME TO SQCTLC. IF NO RESTART POINT EXISTS (0) AND
  1991.     /NO Y OR S COMMAND IS IN PROCESS, ^C LOCKOUT IS REMOVED, AND
  1992.     /THE FILE IS MOVED.
  1993.     /OTHERWISE ERROR "CANNOT BE INTERRUPTED" IS PRINTED AND OPERATION
  1994.     /CONTINUED.
  1995.  
  1996. CTCFLG,    0
  1997.     JMP I CTCFLG
  1998. CTCMSG,    TEXT    /SORRY - NO INTERRUPTIONS/
  1999. IOMSG,    TEXT    /I-O ERROR IN ^ - CONTINUING/
  2000. NOROOM,    TEXT    /NO ROOM IN ^ - CONTINUING/
  2001.     PAGE
  2002. K7760,    7760
  2003. SYSCOP,    TAD K7622        /SET INFPTR IN CASE OF /Y ERROR
  2004.     DCA INFPTR    /WILL FILE #1
  2005.     JMS I (SETCTC    /KLUDGE UP 07600
  2006. SYSCPY,    TAD (INDEVH+1
  2007.     DCA YIHAND    /SET TO ASSIGN INPUT HANDLER
  2008.     TAD (OUDEVH+1
  2009.     DCA YOHAND
  2010.     TAD (2000
  2011.     DCA K2000    /THIS MAY GET CLOBBERED READING IN DIRECT.
  2012.     IAC        /V12B
  2013.     DCA OFSET
  2014.     TAD I K7617
  2015.     SNA CLA        /IS THERE AN INPUT DEVICE?
  2016.     ISZ I K7617    /MAKE INPUT =SYS
  2017.     JMS I (INTEST    /SEE IF OPERATIONS ARE TO SAME DEVICE
  2018.     TAD I K7617
  2019.     JMS I K200    /ASSIGN HANDLER
  2020.     1
  2021. YIHAND,    0
  2022. K7622,    7622    /THINLY DISGUISED HALT
  2023.     TAD I K7617
  2024. K200,    AND K7760    /CHECK INPUT FILE LENGTH
  2025.     SNA        /IF BLANK,INPUT SYSTEM HEAD
  2026.     JMP    YSOUT
  2027.     TAD (-6340    /CHECK FOR PROPER LENGTH
  2028.     SZA CLA
  2029.     JMP PER13    /ERROR..NOT SYSTEM HEAD
  2030.     TAD I (7601    /IS THERE OUTPUT DEVICE?
  2031.     SZA CLA        /IF YES..WE CAN DO IMAGE XFER
  2032.     JMP I (IMGTST
  2033.     TAD I (7620
  2034. YOUSYS,    DCA YINREC    /PICK UP STARTING RECORD
  2035.     CIF 0
  2036.     JMS I YIHAND    /READ IN FIRST INPUT RECORDS
  2037. K2000,    2000        /(0-15 IF SYSTEM HEAD,0-7 IF FILE)
  2038.     OUBUF
  2039. YINREC,    0
  2040.     JMP I (PER4    /INPUT ERROR
  2041.     TAD I (7620    /IF INPUT FROM A FILE, OPEN
  2042.     SNA CLA        /TEST LOC 605
  2043.     TAD (3000    /IF FROM HEAD, TEST 3605
  2044.     TAD (605
  2045.     DCA I (HDTST
  2046.     JMS I (TSTHED    /TEST FOR VALID SYSTEM HEAD
  2047.     TAD YINREC
  2048.     TAD OFSET    /BUMP TO NEXT RECORD
  2049.     DCA NXTRD
  2050.     TAD I (7600    /IF NO OUTPUT, FORGET IT
  2051.     SNA
  2052.     JMP I (PIPCLR    /RESET AND GO TO PIP
  2053.     JMS I K200
  2054.     1
  2055. YOHAND,    0
  2056.     HLT        /V3
  2057.     JMS I (FAKE
  2058.     JMS I (SETSAM
  2059.     JMS I (TSTIO    /TEST OUTPUT. SEE IF DIRECT. DEV.
  2060.     CIF 0
  2061.     JMS I YOHAND    /READ OUTPUT DIRECTORY INTO PLACE
  2062.     1400
  2063.     400
  2064.     1
  2065.     JMP I (PER4
  2066.     CDF 0
  2067.     TAD I (401    /NOW TEST FOR VALID OUTPUT DEVICE
  2068.     CDF 10
  2069.     TAD (-10    /IF LESS THAN 10, DON'T XFER
  2070.     SPA CLA
  2071.     JMS I (PIPERR
  2072.     11
  2073.     TAD (-10    /V12B
  2074.     DCA YINREC    /XFER COUNTER
  2075.  
  2076.     JMP    YDUMP
  2077. YLOOP,    CIF 0
  2078.     JMS I YIHAND    /READ NEXT
  2079. K3400,    1600        /V12B 7 BLOCKS
  2080.     OUBUF
  2081. NXTRD,    0
  2082.     JMP I (PER4
  2083.     TAD NXTRD
  2084.     TAD (7        /V12B
  2085.     DCA NXTRD
  2086. YDUMP,    TAD (5600    /V12B
  2087.     JMS I (OUTDMP    /WRITE BUFFER
  2088.     JMP I (AOUERR
  2089.     ISZ YINREC    /DONE YET?
  2090.     JMP YLOOP    /NOT YET..LOOP
  2091.     CIF CDF 20
  2092.     JMP I    (RX50CK    /THIS WILL RETURN TO PIPCLR WHEN DONE.
  2093. YSOUT,    TAD I    (7601    /HERE IF INPUT FROM SYSTEM HEAD
  2094.     SZA CLA        /IS THERE AN OUTPUT FILE?
  2095.     JMP I    (YTSOUT    /YES, SET UP FOR IMAGE MODE
  2096. YNOOUT,    
  2097.     TAD (7        /AND RESTART READ AT RECORD 16
  2098.     DCA OFSET
  2099.     JMP YOUSYS
  2100. OFSET,    0
  2101.  
  2102. PER13,    JMS I (PIPERR
  2103.     13
  2104. K7617,    7617        /V3
  2105.     PAGE
  2106. DIRECT,    -1
  2107. DFORG,    0        /FILE STORAGE
  2108.     0
  2109.     0
  2110. DWASTE,    0        /#WASTE WORDS
  2111.     0
  2112. DLENGT,    0
  2113.  
  2114. MOVE,    0
  2115. IMGTST,    DCA SAME    /V12B
  2116.     TAD I (YIHAND    /V12B
  2117.     DCA IHNDLR    /V12B
  2118.     JMP I (IMAGE    /V12B
  2119.     TAD (6777
  2120. MOVE1,    DCA TSTSAM
  2121.     CDF 0
  2122.     TAD I MWAST
  2123.     DCA I TSTSAM
  2124.     CMA
  2125.     TAD    MWAST
  2126.     DCA    MWAST
  2127.     CMA
  2128.     TAD    TSTSAM
  2129.     ISZ TEMP
  2130.     JMP MOVE1
  2131.     CLA
  2132.     CDF 10
  2133.     JMP I MOVE
  2134.  
  2135. ERR11,    TEXT    /BAD SYSTEM HEAD/
  2136.  
  2137. YTSOUT,    TAD I (7617    /O.K. SETUP CD AREA FOR IMAGE XFER
  2138.     TAD (7760    /FROM SYSTEM AREA OF INPUT DEVICE
  2139.     DCA I (7617
  2140.     TAD I (7617
  2141.     AND (17
  2142.     TAD (6360
  2143.     DCA I (7621
  2144.     TAD K7
  2145.     DCA I (7622
  2146.     DCA SAME    /ALLOW ^C IF TO OUTPUT FILE
  2147.     TAD I (YIHAND    /TEST FOT VALID SYSTEM
  2148.     DCA IHNDLR
  2149.     CIF 0
  2150.     JMS I IHNDLR
  2151.     0200
  2152.     3400
  2153. K7,    7
  2154.     JMP I (PER4
  2155.     JMS I (TSTHED
  2156.     JMP I (IMAGE
  2157. TSTSAM,    0
  2158.     TAD SAME    /IF /Y IS TO SAME DEVICE AS INPUT (SYS)
  2159.     SNA CLA        /^C GIVES MESSAGE AND RETRIES OPERATION
  2160.     JMP I (ZEROKS
  2161.     JMP I TSTSAM
  2162.  
  2163. ERR2,    TEXT    /OUTPUT ERROR/
  2164.  
  2165. SQFILE,    DCA MWAST
  2166.     TAD I (OUSAVE
  2167.     DCA TSTSAM    /IF ERROR DURING /S
  2168.     DCA DWASTE
  2169.     CLA CLL CMA RTL
  2170.     DCA MOVE    /-3 FOR FILE NAME
  2171. SQFIL3,    TAD I TSTSAM    /FIRST 2 CHARS. IN NAME
  2172.     CLL RTR
  2173.     RTR
  2174.     RTR
  2175. SQFIL5,    AND (77
  2176.     SZA        /IF ZERO, DON'T BOTHER
  2177.     JMS I (CHPRNT
  2178.     ISZ DWASTE    /RIGHT HALF OR NEW WORD?
  2179.     JMP SQFIL4    /RIGHT HALF
  2180.     ISZ TSTSAM
  2181.     ISZ MOVE    /EXHAUSTED ALL?
  2182.     JMP SQFIL3    /NOPE
  2183.     TAD MWAST    /DONE WITH IT YET?
  2184.     SZA CLA
  2185.     JMP I (FILENR-1    /YES
  2186.     TAD I TSTSAM    /IS THERE AN EXTENSION?
  2187.     SNA CLA
  2188.     JMP I (FILENR-1    /NO..CONTINUE ORIGINAL MSG
  2189.     TAD (256
  2190.     JMS I (TTYOUT
  2191.     ISZ MWAST    /SIGNAL END
  2192.     CLA CMA
  2193.     JMP SQFIL3-1
  2194. SQFIL4,    CLA CMA
  2195.     DCA DWASTE
  2196.     TAD I TSTSAM    /GET RIGHT HALF
  2197.     JMP SQFIL5
  2198. MWAST,    0
  2199.     DCA TEMP
  2200.     TAD I INXR
  2201.     DCA I OUTXR    /ROUTINE TO COPY WASTE WORDS
  2202.     ISZ TEMP
  2203.     JMP .-3
  2204.     JMP I MWAST
  2205.     PAGE
  2206. FAKE,    0
  2207.     TAD I (YIHAND
  2208.     DCA IHNDLR
  2209.     TAD I (YOHAND
  2210.     DCA OHNDLR
  2211.     DCA I (OUCCNT
  2212.     DCA I (OUBLK
  2213.     DCA I (OUELEN
  2214.     TAD I (YOHAND
  2215.     DCA I (OUHNDL
  2216.     JMP I FAKE
  2217.  
  2218. CYWAST,    0        /ROUTINE TO COPY WASTE WORDS
  2219.     CLA CLL CMA RTL    /THREE MORE FOR FILE NAME
  2220.     JMS I (MWAST    /COPY THEM
  2221.     TAD I (SQBUF2+4    /NOW ADJUST I/O WASTE WORDS
  2222.     CIA
  2223.     TAD OUWAST    /DIFF. BETWEEN OUT AND IN WORDS
  2224.     SMA        /IF <0, MORE OUT THAN IN
  2225.     JMP CGEWST    /POS. MORE IN THAN OUT (OR SAME)
  2226.     DCA TEMP1
  2227.     TAD I (SQBUF2+4
  2228.     SZA
  2229.     JMS I (MWAST    /COPY ALL INPUT WORDS
  2230.     DCA I OUTXR    /AND 0 ALL EXTRA OUTPUT WORDS
  2231.     ISZ TEMP1
  2232.     JMP .-2
  2233.     JMP I CYWAST
  2234. CGEWST,    DCA TEMP1
  2235.     TAD OUWAST    /XFER ONLY ENOUGH OUTPUT WDS.
  2236.     SZA
  2237.     JMS I (MWAST
  2238.     TAD INXR
  2239.     TAD TEMP1    /POINT INPUT TO NEXT FILE
  2240.     DCA INXR
  2241.     JMP I CYWAST
  2242.  
  2243. TSTHED,    0        /TESTS FOR KEYBOARD MONITOR
  2244.     CDF 0
  2245.     TAD I HDTST    /V12C
  2246.     CDF 10
  2247.     TAD (-7200
  2248.     SZA CLA
  2249.     JMP I (PER13    /IF NOT CLA, NOT VALID
  2250.     JMP I TSTHED
  2251. HDTST,    3605        /MAGIC LOCATION (205) IN KEYMON TO SEE IF THIS IS
  2252.             /THE CORRECT SYSTEM HEAD.
  2253. TSTIO,    0        /SEE IF OUTPUT IS DIRECTORY DEVICE
  2254.     JMS I (OTYPE    /GET DCB WORD FOR OUTPUT
  2255.     SMA CLA        /IF NOT NEG., NOT DIRECT DEVICE
  2256.     JMS I (PIPERR
  2257.     5
  2258.     TAD OHNDLR    /IF OUTPUT=SYS, SET NO INTERRUPT
  2259.     TAD (171
  2260.     SNA CLA
  2261.     ISZ SAME
  2262.     JMP I TSTIO
  2263.  
  2264. ASCI2,    0        /SEE IF VALID ASCII OUTPUT
  2265.     DCA TSTIO
  2266.     TAD I (7600
  2267.     SNA CLA
  2268.     JMP I (PIP    /NO..BACK TO PIP
  2269.     TAD TSTIO    /SEE IF /C IS ON
  2270.     SNA CLA
  2271.     JMS I (FIXLEN    /NO..TRY TO ESTIMATE OUTPUT
  2272.     JMP I ASCI2
  2273.  
  2274. SQDTST,    0        /ROUTINE TO CHECK /S DIRECTORIES
  2275.     DCA NOHND    /PRESERVE POSSIBLE SYS ON OUTPUT
  2276.     TAD (7        /DEFAULT TO BLOCK 7
  2277.     DCA OUTBLK    /INITIAL GUESS
  2278.     CDF 10        /NOW TRY TO READ DIRECTORY OF OUTPUT
  2279.     JMS I (OTYPE    /IF NON-FILE, DON'T READ IT
  2280.     SMA CLA
  2281.     JMP P1A
  2282.     CIF 0        /COULD BE NON-FILE, HOWEVER.
  2283.     JMS I NOHND
  2284.     0210
  2285.     1400
  2286. P1,    1
  2287.     JMP I (SQIDER+1    /ERROR IN READ
  2288. P1A,    DCA OLDDIR    /WIPES ANY DIRECT. SEGMENT
  2289.     TAD I (1401
  2290.     TAD (-70    /IS OUTPUT A SYS DEVICE?
  2291.     SNA CLA
  2292.     JMP SYSDIR    /YES.
  2293.     TAD NOHND    /IS OUTPUT THE SYSTEM DEVICE?
  2294.     TAD (171
  2295.     SZA CLA
  2296.     JMP .+3
  2297. SYSDIR,    TAD (70
  2298.     DCA OUTBLK
  2299.     JMP I SQDTST
  2300.  
  2301. NOHND=FAKE
  2302.  
  2303. SYSZRO,    TEXT /ZERO SYS?/
  2304. AOUERR,    SMA CLA        /WAS IT A DEVICE ERROR OR ARE WE OUT OF SPACE?
  2305.     JMP BOUERR    /OUT OF SPACE
  2306. PER2,    JMS I (PIPERR
  2307.     2
  2308. BOUERR,    JMS I (PIPERR
  2309.     0
  2310.  
  2311. ASCPTCH,TAD (ACHLP+1    /V3C FAKE OUT ICHAR
  2312.     DCA I (ICHAR    /SIMULATE CALL TO ICHAR FROM 'ACHLP'
  2313.     JMP I (GETNEW    /V3C SIMULATE OCCURRENCE OF 8-BIT ^Z IN ICHAR
  2314.     PAGE
  2315. /THIS IS ONCE-ONLY CODE
  2316.  
  2317. ONCE,    0
  2318.     STA
  2319.     TAD ONCE
  2320.     DCA ONCENF
  2321.     TAD (20
  2322.     DCA I ONCENF    /RESTORE L20, DON'T ALLOW REENTRY
  2323.     CLL CLA IAC RTL
  2324.     AND I (MPARAM+1
  2325.     SNA CLA        /IS /V SET?
  2326.     JMP    LEVONE    /NO RETURN
  2327.     TAD (VER    /YES
  2328.     JMS I (ERPRNT    /PRINT VERSION NUMBER
  2329. LEVONE,    CLL CLA IAC        /CHECK FOR X SWITCH FIRMWARE XFER
  2330.     AND I    (7644
  2331.     SNA CLA
  2332.     JMP I ONCE    /RETURN
  2333.     CIF CDF 20    /FOUND IT GOTO FIRMWARE ROUTINE
  2334.     JMP I    (RX50CK
  2335.  
  2336. VER,    TEXT    "PIP: VERSION B5"
  2337.  
  2338. ONCENF,    0
  2339. GETEQ,    0        /V3
  2340.     TAD I (MPARAM+3
  2341.     SNA
  2342.     IAC
  2343.     AND (77        /CONVERT 0 TO 1 AND 100 TO 0
  2344.     CIA
  2345.     JMP I GETEQ
  2346.  
  2347. DVREDE,    0    /READ DEVICE WITH BAD BLOCK REFERENCED
  2348.     TAD I (OZHNDL    /GET DEVICE ENTRY POINT
  2349.     DCA NEWHL
  2350.     CIF 0
  2351.     JMS I NEWHL    /DO THE READ
  2352.     0011
  2353.     0
  2354.     -111        /NEGATIVE BLOCK - RETURNS MINUS LENGTH
  2355.     CIF 10
  2356.     JMP I DVREDE    /ERROR RETURN FOR READ YIELDS DESIRED RESULTS
  2357. NEWHL,    0
  2358.     FIELD 2
  2359.  
  2360.     *10
  2361. XR210,    0
  2362.  
  2363.     *20
  2364. INDRV,    0    /WILL CONTAIN DRIVE# AND DRIVE PAIR INFO FOR INPUT DEV
  2365. OUTDRV,    0    /WILL CONTAIL DRIVE# AND DRIVE PAIR INFO FOR OUTPUT DEV
  2366. XTEMP,    0
  2367. XTEMP1,    0
  2368. L70,    70    /THE FOLLOWING DATA IS USED BY 8 BIT HANDLER
  2369. K100,    100
  2370. BUF,    0
  2371. RETRY,    0
  2372. SYS,    0
  2373. QUO,    0
  2374. REC,    0
  2375. BC,    0
  2376. FN,    0
  2377. DENSW,    7000
  2378. T1,    0
  2379. L12,    12
  2380. LM12,    -12
  2381. L6,    6
  2382. LM6,    -6
  2383. L79,    117
  2384. SEEK,    117
  2385.  
  2386.  
  2387.     /READ 5 BLOCKS FROM INPUT DEVICE
  2388.  
  2389. XFER,    0        /CALL I/O ROUTINE FOR 5 BLOCK XFER
  2390.     TAD I    XFER    /GET STARTING BLOCK #
  2391.     DCA    XFER1    /AND SAVE IT IN CALL
  2392.     TAD I    XFER
  2393.     DCA    XFER3
  2394.     ISZ    XFER    /SETUP RETURN TO CALLER + 2
  2395.     JMS    RXCALL    /CALL I/O ROUTINE
  2396.       0005        /READ 5 BLOCKS
  2397. XFER1,      0000        /STARTING BLOCK #
  2398. XFER2,      0000        /DRIVE # & SELECT BIT
  2399.     JMP    FRMIN    /ERROR RETURN
  2400.     CLL CLA
  2401.  
  2402.     /WRITE 5 BLOCKS TO OUTPUT DEVICE
  2403.  
  2404.     JMS    RXCALL
  2405.       4005        /WRITE 5 BLOCKS
  2406. XFER3,      0000        /STARTING BLOCK #
  2407. XFER4,      0000        /DRIVE # & SELECT BIT
  2408.     JMP    FRMOUT    /ERROR RETURN
  2409.     CLL CLA
  2410.     JMP I    XFER    /ALL DONE LEAVE
  2411.  
  2412.     / LOAD COMMAND SUBROUTINE
  2413.  
  2414. FLPWC=.
  2415. LDCMD,    0
  2416.     TAD    K100    /SET 8 BIT MODE
  2417.     LCD        /AND LOAD IT
  2418.     JMS    WAIT    /WAIT FOR STR
  2419.     SKP
  2420.     JMP    ERRSET
  2421.     CLA IAC
  2422.     XDR
  2423.     CLA
  2424.     JMP I    LDCMD    /NO RETURN TO CALLER
  2425.  
  2426. WAIT,    0
  2427.     STR        /TEST XFER FLAG
  2428.     SKP
  2429.     JMP I    WAIT    /STR FOUND, RETURN TO CALLER + 1
  2430.     SDN
  2431.     JMP    WAIT+1    /LOOP UNTIL STR OR SDN SETS
  2432.     ISZ    WAIT    /SDN FOUND, RETURN TO CALLER + 2
  2433.     SER        /CHECK FOR ANY ERROR CONDITIONS
  2434.     JMP I    WAIT    /NONE FOUND RETURN TO CALLER + 2
  2435. ERRSET,    AC4000        /ERROR FOUND
  2436.     ISZ    RETRY    /HAS ERROR RETRY COUND EXPIRED
  2437.     JMP    RECOVR    /NO
  2438.     JMP    EXFLD    /YES RETURN TO CALLER WITH - AC
  2439.  
  2440.  
  2441. FIXIT,    0        /CALCULATE DRIVE NUMBER AND DRIVE PAIR
  2442.     AND    (7
  2443.     TAD    (-7    /IS IT SYS
  2444.     SNA
  2445.     JMP    YESSYS    /NO.  SPECIAL CASE
  2446.     TAD    (7    /YES, RESTORE VALUE
  2447.     CLL RTR
  2448.     DCA    XTEMP
  2449.     TAD    XTEMP    /FIND DRIVE #
  2450.     SPA CLA
  2451.     IAC
  2452.     DCA    XTEMP1    /AND STORE IT
  2453.     TAD    XTEMP    /FINE DRIVE PAIR
  2454.     RAR
  2455.     SZL CLA
  2456.     TAD    (20
  2457.     TAD    XTEMP1
  2458.     JMP I    FIXIT    /RETURN INFO
  2459.  
  2460. YESSYS,    CDF 0        /SYS DEVICE GET INFO FROM MAGIC
  2461.     TAD I    (BOOTYP    /DRIVE# & PAIR STORED IN HANDLER
  2462.     CDF 20
  2463.     JMP I    FIXIT
  2464.     *0200
  2465. RX50CK,    CLL CLA
  2466.     CDF 10
  2467.     TAD I    (7617        /IS INPUT DEVICE AN RX50
  2468.     AND    (17
  2469.     TAD    (7757
  2470.     DCA    XTEMP
  2471.     TAD I    XTEMP
  2472.     RTR
  2473.     RAR
  2474.     AND    (77        /ALL RX50 DEVICE NUMBERS = 30
  2475.     TAD    (-30        /IS INPUT DEVICE AN RX50
  2476.     SZA CLA
  2477.     JMP    RX50EX        /NO LEAVE
  2478.     TAD I    (7600        /YES, BUT IS OUTPUT DEVICE AN RX50
  2479.     AND    (17
  2480.     TAD    (7757
  2481.     DCA    XTEMP
  2482.     TAD I    XTEMP        /GET OUTPUT DEVICE NUMBER
  2483.     RTR
  2484.     RAR
  2485.     AND    (77
  2486.     TAD    (-30        /IS OUTPUT DEVICE NUMBER 30
  2487.     SZA CLA
  2488.     JMP    RX50EX        /NO LEAVE
  2489.     TAD    (INDEVH+1    /YES, NOW FIND WHAT DRIVE NUMBER
  2490.     DCA    IN50
  2491.     TAD I    (7617        /SET AC = TO INTERNAL HANDLER NUMBER
  2492.     CDF 20
  2493.     SNA
  2494.     IAC            /IF AC = 0 SET DEV SYS
  2495.     CIF 10
  2496.     JMS I    (200        /CALL USR TO FETCH HANDLER
  2497.       0001            /FETCH
  2498. IN50,      0000            /THIS WILL CONTAIN ENTRY POINT OF HANDLER
  2499.       HLT
  2500.     CLL CLA
  2501.     TAD    IN50
  2502.     JMS    FIXIT
  2503.     DCA    INDRV
  2504.     CDF 10
  2505.     TAD    (OUDEVH+1    /YES, NOW FIND WHAT DRIVE NUMBER
  2506.     DCA    OUT50
  2507.     TAD I    (7600        /SET AC = TO INTERNAL HANDLER NUMBER
  2508.     CDF 20
  2509.     SNA
  2510.     IAC            /IF NON ZERO SET DEV TO SYS
  2511.     CIF 10
  2512.     JMS I    (200        /CALL USR TO FETCH HANDLER
  2513.       0001            /FETCH
  2514. OUT50,      0000            /THIS WILL CONTAIN ENTRY POINT OF HANDLER
  2515.       HLT
  2516.     CLL CLA
  2517.     TAD    OUT50
  2518.     JMS    FIXIT
  2519.     DCA    OUTDRV
  2520.     TAD    INDRV        /SETUP XFER ROUTINES FOR HANDLER CALL
  2521.     DCA    XFER2
  2522.     TAD    OUTDRV
  2523.     DCA    XFER4
  2524.     JMS    XFER        /XFER TRACK 0
  2525.       0000
  2526.     JMS    XFER
  2527.       0005
  2528.     CDF 10            /CHECK FOR /X SWITCH
  2529.     CLL CLA IAC
  2530.     AND I    (7644
  2531.     CDF 20
  2532.     SZA CLA
  2533.     JMP    SKIP        /X SWITCH ACTIVE JUMP OVER BLOCK 0 FIX
  2534.     TAD    OUTDRV        /FIX BLOCK 0
  2535.     DCA    .+4
  2536.     JMS    RXCALL
  2537.       0001            /READ 1 BLOCK
  2538.       0012            /STARTING AT BLOCK 12 (TRK 1, SEC 1)
  2539.       0000
  2540.     JMP    ZEROIN        /ERROR RETURN
  2541.     STA            /FIX DISK ID WORDS IN BLOCK 0
  2542.     DCA    XTEMP        /SET UP POINTER
  2543.     JMS    STORE
  2544.     JMS    STORE
  2545.     AC0002
  2546.     JMS    STORE
  2547.     IAC
  2548.     JMS    STORE
  2549.     JMS    STORE
  2550.     JMS    STORE
  2551.     TAD    (10
  2552.     JMS    STORE
  2553.     TAD    (10
  2554.     JMS    STORE
  2555.     TAD    (11
  2556.     JMS    STORE
  2557.     TAD    (346
  2558.     JMS    STORE
  2559.     JMS    STORE
  2560.     IAC
  2561.     JMS    STORE        /ALL DONE SO
  2562.     TAD    OUTDRV        /WRITE TRK 1, SEC 1 BACK OUT
  2563.     DCA    .+4        /THAT IS BLOCK 0
  2564.     JMS    RXCALL
  2565.       4001
  2566.       0012
  2567.       0000
  2568.     JMP    ZEROUT        /ERROR RETURN
  2569.     JMP    SKIP
  2570.  
  2571.     PAGE
  2572.  
  2573. SKIP,    CLL CLA            /XFER LAST 2 TRACKS
  2574.     JMS    XFER
  2575.       1414
  2576.     JMS    XFER
  2577.       1421
  2578.     JMS    XFER
  2579.       1426
  2580.     JMS    XFER
  2581.       1433
  2582. RX50EX,    CLL CLA            /LEAVE
  2583.     CIF CDF 10        /RETURN TO PIP
  2584.     JMP I    (PIPCLR
  2585.     
  2586. STORE,    0            /STORE BLOCK 0 ID WORDS IN BUFFER AREA
  2587.     ISZ    XTEMP
  2588.     NOP
  2589.     CDF 30
  2590.     DCA I    XTEMP
  2591.     CDF 20
  2592.     JMP I    STORE
  2593.  
  2594. FRMIN,    JMS    PNTERR        /ERROR READING FIRMWARE
  2595.       FRMTXT
  2596.     JMS    PNTERR
  2597.       INTXT
  2598.     JMS    PNTERR
  2599.       CRLF
  2600.     JMP    RX50EX
  2601.  
  2602. FRMOUT,    JMS    PNTERR        /ERROR WRITING FIRMWARE
  2603.       FRMTXT
  2604.     JMS    PNTERR
  2605.       OUTTXT
  2606.     JMS    PNTERR
  2607.       CRLF
  2608.     JMP    RX50EX
  2609.  
  2610. ZEROIN,    JMS    PNTERR        /ERROR READING BLOCK 0
  2611.       RDTXT
  2612.     JMS    PNTERR
  2613.       ZROTXT
  2614.     JMS    PNTERR
  2615.       OUTTXT
  2616.     JMS    PNTERR
  2617.       CRLF
  2618.     JMP    RX50EX
  2619.  
  2620. ZEROUT,    JMS    PNTERR        /ERROR WRITING BLOCK 0
  2621.       WRTTXT
  2622.     JMS    PNTERR
  2623.       ZROTXT
  2624.     JMS    PNTERR
  2625.       OUTTXT
  2626.     JMS    PNTERR
  2627.       CRLF
  2628.     JMP    RX50EX
  2629.  
  2630. PNTERR,    0            /PRINT ERROR MESSAGE
  2631.     CLL CLA CMA
  2632.     TAD I    PNTERR
  2633.     DCA    XR210
  2634.     ISZ    PNTERR
  2635. PNTLOP,    TAD I    XR210
  2636.     SNA
  2637.     JMP I    PNTERR
  2638.     TLS
  2639.     TSF
  2640.     JMP .-1
  2641.     CLA
  2642.     JMP    PNTLOP
  2643.  
  2644.     PAGE
  2645.  
  2646. FRMTXT,    "F;"i;"r;"m;"w;"a;"r;"e;" ;"e;"r;"r;"o;"r;" ;"o;"n;" ;0
  2647. INTXT,    "i;"n;"p;"u;"t;" ;"d;"e;"v;"i;"c;"e;".;0
  2648. OUTTXT,    "o;"u;"t;"p;"u;"t;" ;"d;"e;"v;"i;"c;"e;".;0
  2649. RDTXT,    "E;"r;"r;"o;"r;" ;"r;"e;"a;"d;"i;"n;"g;" ;0
  2650. WRTTXT,    "E;"r;"r;"o;"r;" ;"w;"r;"i;"t;"i;"n;"g;" ;0
  2651. ZROTXT,    "b;"l;"o;"c;"k;" ;"0;" ;"o;"n;" ;0
  2652. CRLF,    15;12;0
  2653.  
  2654.     PAGE
  2655. /HANDLER ROUTINE MAX XFER IS 10 PAGES (5 BLOCKS)
  2656.  
  2657. /THIS ROUTINE CAN XFER A HALF OF A BLOCK IF RXCALL START UP CODE
  2658. /IS MODIFIED.  THE I/O ROUTINE IS A MODIFIED RX50 NONSYSTEM HANDLER
  2659. /TO READ AND WRITE IN 8 BIT MODE.  TO GET A BETTER UNDERSTANDING
  2660. /OF WHAT IS HAPPENING HERE REFER TO THE RX50 NONSYSTEM HANDLER.
  2661.  
  2662. RXCALL,    0
  2663.     CLL CLA
  2664.     TAD    (-6
  2665.     DCA    RETRY
  2666. RSTART,    CLL CLA
  2667.     TAD    RXCALL
  2668.     DCA    SYS    /POINTER TO ARG'S, EXIT
  2669.     TAD I    SYS    /SET UP READ WRITE WORD
  2670.     RAL
  2671.     SNL CLA
  2672.     AC0002
  2673.     DCA    FN
  2674.     AC3777        /MASK OUT R/W BIT
  2675.     AND I    SYS    /SET UP LOOP CONTROL COUNT
  2676.     BSW
  2677.     CLL RTL
  2678.     RAL
  2679.     AND    L7600
  2680.     CIA
  2681.     DCA    BC    /-# OF BYTES TO XFER
  2682.     ISZ    SYS
  2683.     TAD I    SYS
  2684.     DCA    REC    /BLOCK ADDRESS
  2685.     ISZ    SYS
  2686.     IAC
  2687.     AND I    SYS
  2688.     SEL
  2689.     CLL CLA
  2690.     TAD I    SYS
  2691.     AND    (7776
  2692.     TAD    FN
  2693.     DCA    FN
  2694.     ISZ    SYS    /SET UP FOR ERROR RETURN
  2695.     DCA    BUF    /BUFFER IS AT LOC 0 FIELD 0
  2696.     JMS    DIVSUB    /CALL DIVISION SUBROUTINE OTHER PAGE
  2697.     AC0002        /MASK OUT READ WRITE BIT
  2698.     AND    FN    /SPLIT READ AND WRITE
  2699.     SZA    CLA    /SKIP IF WRITE
  2700.     JMP    STREAD    /READ GOES TO START IN MIDDLE OF LOOP
  2701.             /WRITE FALLS THRU TO NEXT LISTING PAGE
  2702. /WRITE FALLS THRU TO THIS LOOP
  2703. /
  2704. /  TOP OF MAIN LOOP
  2705. /
  2706. TOP,    TAD    FN    /SET SILO TO LOAD-UNLOAD
  2707.     JMS    LDCMD    /COMMAND TO CONTROLLER
  2708.     TAD    DENSW    /MAKE SILO LOOP COUNT, 7400 FOR RX50
  2709.     DCA    FLPWC    /LDCMD ENTRY SAFE TEMPORARY
  2710.     CLL        /FLAG FOR BC OVERFLOW
  2711. TRLOOP,    TAD    FN
  2712.     AND    (2
  2713.     CDF 30
  2714.     SNA CLA        /NO WRITE GET DATA
  2715.     TAD I    BUF    /IN CASE WRITE, FETCH A WORD
  2716.     CDF 20
  2717.     JMS    WAIT    /WAIT FOR STR
  2718.     SKP
  2719.     JMP    ERRSET
  2720.     XDR        /TO OR FROM AC
  2721.     SZL        /LINK SET IF BLOCK COUNT EXPIRED, ODD PAGE THING
  2722.     JMP    INCWC    /THROUGH AWAY DATA, JUST COUNT TRANSFERS
  2723.     CDF 30
  2724.     DCA I    BUF    /STILL WORDS TO GET
  2725.     CDF 20
  2726.     ISZ    BUF
  2727. REMD,    0        /HOME FOR SECTOR NUMBER, ALWAYS 00XY, HENCE NOP
  2728.     ISZ    BC    /TEST FOR END OF TRANSFER
  2729.     SKP        /NO, GO ON
  2730.     STL        /YES
  2731. INCWC,    CLA
  2732.     ISZ    FLPWC    /256 WORD COUNTER
  2733.     JMP    TRLOOP
  2734.     JMS    WAIT    /WAIT FOR SDN
  2735.     JMP    ERRSET
  2736.     TAD    BC    /WENT TO ZERO IF TRANSFER COMPLETE
  2737.     SZA CLA
  2738.     JMP    STREAD
  2739.     AC0002
  2740.     AND    FN
  2741.     SZA CLA
  2742.     JMP    EXIT
  2743.     STL        /INDICATES THAT BLOCK COUNT HAS EXPIRED
  2744. /
  2745. /  MIDDLE OF MAIN LOOP
  2746. /
  2747. STREAD,    TAD    K4    /LEAVE THE LINK ALONE
  2748.     TAD    FN    /TURNING SILO COMMAND INTO READ-WRITE COMMAND
  2749.     JMS    LDCMD    /I/O COMMAND TO CONTROLLER
  2750.     TAD    REMD    /PRECOMPUTED SECTOR #
  2751.     JMS    WAIT    /WAIT FOR STR
  2752.     SKP
  2753.     JMP    ERRSET
  2754.     XDR
  2755. L7600,    7600        /CLEAR AC, AND IS LITERAL
  2756.     JMS    WAIT    /WAIT FOR STR
  2757.     SKP
  2758.     JMP    ERRSET
  2759.     TAD    QUO
  2760.     XDR        /TRACK # IS ALWAYS NON0 !!
  2761.     ISZ    REC    /MOVE TO NEXT RECORD NUMBER
  2762.     JMS    DIVSUB    /DO TRACK SECTOR FOR NEXT OPERATION
  2763.     JMS    WAIT    /WAIT FOR SDN
  2764.     JMP    ERRSET
  2765.     SNL CLA        /EXIT IF LINK SET, DIVIDE ROUTINE MUST PRESERVE !!
  2766.     JMP    TOP    /STILL MORE
  2767. EXIT,    ISZ    SYS    /KICK TO OK EXIT
  2768. EXFLD,    DCA    BUF
  2769.     SEL
  2770.     TAD    BUF
  2771.     CDF 20
  2772.     JMP I    SYS    /OUT
  2773.  
  2774. K4,    4        /MAKES 0 GO TO 4 AND 2 GO TO 6
  2775.  
  2776.     PAGE
  2777. /  DIVSUB
  2778. /
  2779. /  CALL TO SET UP TRACK, SECTOR, FROM OVERALL SECTOR #
  2780. /  ALSO, SET UNIT WITH HEAD COMMAND IF WE ARE ON TO SECOND SIDE
  2781. /
  2782.  
  2783. DIVSUB,    0
  2784.     CLA
  2785.     DCA    QUO    /CLEAR DIVIDE QUOTIENT
  2786.     RAR
  2787.     DCA    SAVL    /SAVE THE CONTENTS OF THE LINK
  2788.     TAD    REC    /THIS FOR TRACK-SECTOR
  2789.     SKP
  2790. DIVLOO,    ISZ    QUO    /MAIN DIIVIDIE LOOP
  2791.     TAD    LM12    /DIVIDE BY 10 TO GET TRACK
  2792.     SMA        /SKIP IF DONE
  2793.     JMP    DIVLOO
  2794.     TAD    L12    /REMAINDER 0-9
  2795.     DCA    T1    /HOLD IT IN TEMPORARY
  2796.     TAD     T1    /FOR INTERLEAVE OF 3
  2797.     TAD    T1
  2798.     TAD     T1
  2799.     CLL IAC        /LINK CLEAR FOR FINAL TEST; +1 TO START AT 1 NOT 0
  2800.     TAD    LM12    /DIVIDE BY 10 TO GET SECTOR
  2801.     SMA SZA        /SKIP IF DONE
  2802.     JMP    .-2
  2803.     TAD    L12    /RESTORE POSITIVE VALUE TO BE SECTOR
  2804.     DCA    REMD    
  2805.     TAD    SAVL
  2806.     CLL    RAL    /RESTORE LINK
  2807.     JMP I    DIVSUB    /OUT
  2808. SAVL,    0        /TEMPORARY SO WE CAN SAVE LINK THROUGH ALL THE
  2809.             /EVIL ARITHMETIC
  2810. RECOVR,    TAD    SEEK    /ERROR RETRY ROUTINE
  2811.     SNA CLA        /THIS WILL ALTERNATE BETWEEN TRACKS 1 AND 79
  2812.     TAD    L79
  2813.     DCA    SEEK
  2814.     TAD    FN
  2815.     AND    (20
  2816.     TAD    L6
  2817.     JMS    LDCMD    /AND LOAD IT
  2818.     JMS    WAIT    /WAIT FOR OPERATION TO COMPLETE
  2819.     SKP        /STR NORMAL RETURN
  2820.     JMP     ERRSET    /DONE ERROR RETURN
  2821.     CLA IAC        /SELECT SECTOR 1
  2822.     XDR
  2823.     CLA
  2824.     JMS    WAIT    /WAIT FOR OPERATION TO FINISH
  2825.     SKP
  2826.     JMP     ERRSET
  2827.     TAD    SEEK    /SEEK TO TRACK 1 OR 79
  2828.     XDR
  2829.     JMS    WAIT    /WAIT FOR OPERATION TO COMPLETE
  2830.     JMP    ERRSET
  2831.     JMP    RSTART
  2832.  
  2833.