1 /3 PIP FOR OS/8 MONITOR
11 /COPYRIGHT (C) 1970,1971,1972,1973,1974,1975,1977
12 /BY DIGITAL EQUIPMENT CORPORATION
23 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
24 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
25 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
26 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
28 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
29 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
30 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
31 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
33 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
34 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
46 \f/ 4-MAY-1977 FILE: PIP.PA OS/8 VERSION 12A
47 /RL/EF/ET.AL./S.R./E.S.
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
60 /FIXED PROBLEM WITH ONE-PAGE WRITE
61 /IN /S OR /Z, =OPTION IS TAKEN MODULO 100 (OCTAL)
62 / WITH 100, 200, ETC. MEANING USE 0 ADDITIONAL WDS.
63 /DATES STILL DON'T LINE UP
65 /ALLOW FILLING UP DEVICE TO VERY LAST BLOCK
67 /ALTMODE ON CD LINE RETURNS TO MONITOR WHEN DONE
68 /NO HALT ON /L IF NO TTY HANDLER (ACTS AS NOP)
69 / /V PRINTS VERSION NUMBER FIRST TIME CALLED
70 / /O AFFIRMS /Y ON ZERO SYS OR ARE YOU SURE
71 /=NNNN ON /I OPTION SPECIFIES LENGTH TO CLOSE FILE
74 /MAINTENANCE RELEASE CHANGES:
76 /1. FIXED LENGTH OF ALL VARIETIES OF RF08
77 /2. ADDED RX01 TO INTERNAL LENGTH TABLES
78 /3. CHANGED VERSION NUMBER TO V10
79 /4. ADDED CHECK FOR 7-BIT CTRL/Z TO ASCII HANDLER
81 /E.S. DISABLED /E,/F,/L
82 /E.S. FIXED /Y OPTION PER SPR
86 /PIP RUNS WITH THE USR (USER SERVICE ROUTINES) ALWAYS IN CORE.
87 /THIS ELIMINATES SWAPPING THE MONITOR. IF ANY CHANGES ARE MADE
88 /TO PIP, CARE SHOULD BE TAKEN IN USING PAGE ZERO LOCATIONS, AS
89 /THEY MUST NOT DESTROY ANY MONITOR LOCATIONS.
94 /00000-02777- OUTPUT BUFFER
95 /03000-06377- INPUT BUFFER
96 /06400-06577- USED FOR /Y COMMAND ONLY
97 /06600-07177- INPUT HANDLER
98 /07200-07577- OUTPUT HANDLER
102 /10000-11777- OS/8 I/O MONITOR
103 /12000-16577- EXECUTABLE CODE
104 /16600-17177- HOLDS NEW DIRECTORY SEGMENT FOR /S OPTION
105 /17200-17577- HOLDS OLD DIRECTORY SEGMENT IN /S OPTION
108 /MAJOR PIECES OF CODE AND THEIR FUNCTION (BRIEFLY).
109 /THIS IS A LIST OF ROUTINES AS THEY APPEAR PHYSICALLY, AND
110 /NOT AS THEY ARE LOGICALLY CONNECTED.
112 /ICHAR- GENERAL CHARACTER INPUT ROUTINE. ASSIGNS NEW
113 / DEVICE HANDLERS AS NEEDED.
115 /OOPEN- ENTERS A FILE ON A SPECIFIED DEVICE.
117 /OUTDMP- WRITES OUTPUT BUFFER TO OUTPUT DEVICE.
119 /OCLOSE- CLOSES FILE CREATED BY OOPEN
121 /OCHAR- CHARACTER OUTPUT ROUTINE. WRITES CHARACTERS
122 / TO OUTPUT BUFFER, CALLING OUTDMP WHEN FULL.
124 /OTYPE- USES DEVICE NUMBER IN OUTPUT AREA OF CD TO
125 / INSPECT THE DEVICE CONTROL BLOCK WORD. THIS
126 / GIVES A CODE FOR THE TYPE OF DEVICE.
128 /SLASHG- HANDLES I/O ERRORS. IF /G IS SET, HARD I/O
129 / ERRORS ARE IGNORED. IF /S AND /G ARE ON, A
130 / SPECIAL RETURN IS TAKEN.
132 /IMAGE- IMAGE MODE PROCESSOR FOR PIP.
134 /SQTRA- MAIN SUBROUTINE OF IMAGE MODE, AND /S OPTION.
136 /PIP, PIP+1- MAIN ENTRANCES TO PIP. THE CODE ON THIS PAGE
137 / INSPECTS CD OPTION WORDS AND BRANCHES TO PROPER
140 /ASCII- THE DEFAULT TRANSFER MODE IN PIP IS ASCII.
142 /DELETE- DELETES FILES ON OUTPUT SIDE OF CD LIST.
144 /DZERO- ZEROES DIRECTORY OF FIRST OUTPUT DEVICE.
146 /PIPERR- ERROR ROUTINR FOR PIP.
148 /DIRPRE- DIRECTORY PRINTING ROUTINE.
150 /BINARY- BINARY MODE PROCESSOR. HANDLES ABSOLUTE AND
151 / RELOCATABLE BINARY FILES.
153 /ERPRNT- ERROR PRINTOUT.
155 /SQUISH- FILE COMPRESSION PROCESSOR. ELIMINATES 'HOLES'
156 / IN DIRECTORY OF INPUT DEVICE.
158 /SYSCOP- SYSTEM COPY PROCESSOR. ALLOWS TRANSFER OF THE
160 \f/OPTIONS AVAILABLE IN PIP:
162 /A- ASCII TRANSFER; DEFAULT MODE
163 /B- BINARY MODE TANSFER
164 /C- DELETE TRAILING BLANKS. (ASCII MODE)
165 /D- DELETE FIRST OUTPUT FILE BEFORE PROCEEDING
166 /E- LIST INPUT DIRECTORY INCLUDING EMPTY FILES
167 /F- LIST INPUT DIRECTORY; ONLY FILE NAMES
168 /G- IGNORE ERRORS WHILE TRANSFERING
169 /I- IMAGE MODE TRANSFER
170 /L- LIST INPUT DIRECTORY; EXCLUDE EMPTY FILES
171 /O- OK TO PERFORM A SQUISH OR ZERO WITHOUT ASKING
172 /S- COMPRESS INPUT DEVICE ONTO OUTPUT DEVICE. ELIMINATES
173 / 'HOLES' ON INPUT DEVICE.
174 /T- PROVIDE SIMPLE TTY FORMATTING. (ASCII ONLY)
175 /Y- COPY OS/8 SYSTEM AREA
176 /Z- ZERO OUTPUT DEVICE DIRECTORY BEFORE PROCEEDING
177 /=N- LEAVE N WORDS EXTRA PER DIRECTORY ENTR. VALID
178 / ONLY WITH /S OR /Z.
179 /=N- WITH /I OPTION CLOSES OUTPUT FILE WITH THIS LENGTH
180 /V PRINTS VERSION # (FIRST TIME ONLY)
182 /COMMENTS ON THE PROGRAM:
184 /SINCE PIP RUNS WITH USR IN CORE, NO PAGE ZERO LITERALS
185 /CAN BE USED. THE LOCATIONS CURRENTLY USED IN
186 /FIELD 1 ON PAGE ZERO ARE:
191 IHNDLR=24 /HOLDS INPUT HANDLER ADDRESS
192 OHNDLR=25 /OUTPUT HANDLER ADDRESS
193 SQFLAG=26 /'SQUISH INDICATOR
194 OUWAST=27 /# WASTE WORDS ON OUTPUT
201 /CONSTANTS USED BY THE DIRECTORY PRINTOUT ROUTINE (OVERLAPPING) ARE:
211 \f /PIP FOR OS/8 MONITOR
212 /EQUIVALENCES FOR GENERAL CHARACTER I/O ROUTINES
214 OUBUF=0 /MUST BE LOWER THAN INBUF
215 OUCTL=5400 /OUTPUT BUFFER OF 3000 WORDS
216 OUDEVH=7200 /PROVIDE ROOM FOR TWO-PAGE HANDLERS
218 INCTL=1600 /INPUT BUFFER OF 3400 WORDS
222 /PAGE 6400 IS FREE, EXCEPT DURING /Y COMMAND
224 /EQUIVALENCES NECESSARY TO INTERFACE WITH MONITOR
226 MPARAM=7643 /CD PARAMETER AREA
227 OLDDIR=7 /POINTER TO MONITOR VARIABLE "OLDT9"
228 MTEMP=27 /MONITOR SCRATCH AREA ON "SYS" - ***VOLATILE***
229 PTP=20 /INTERNAL TYPE CODE FOR PAPER TAPE PUNCH
236 ABUF=6601 /LINE BUFFER - 150 CHARACTERS LONG
237 SQBUF1=6600 /DIRECTORY BUFFER FOR "SQUISH" OPTION
242 /TO ENABLE /E,/F,/L SET
248 \f /GENERAL CHARACTER I/O ROUTINES FOR BLEEP
251 /JMS I (IOPEN INITIALIZES THE INPUT ROUTINE
253 /JMS I (ICHAR READS A CHARACTER
254 /ERROR RETURN /AC>0 IF END OF FILE, AC<0 IF READ ERROR
256 /JMS I (OOPEN INITIALIZES THE OUTPUT ROUTINE
257 /ERROR RETURN AC>0 IF NO OUTPUT DEVICE/FILE, AC<0 IF ERROR
259 /JMS I (OCHAR OUTPUTS A CHARACTER
260 /ERROR RETURN OUTPUT ERROR OR TOO MUCH OUTPUT
262 /JMS I (OCLOSE CLOSES THE OUTPUT FILE
263 /ERROR RETURN FILE TOO LARGE TO BE CLOSED OR OUTPUT ERROR
265 /JMS I (OTYPE RETURNS DCB WORD OF OUTPUT DEVICE IN AC
271 /INBUF= ADDRESS OF INPUT BUFFER
272 /INCTL= INPUT BUFFER CONTROL WORD
273 /OUBUF= ADDRESS OF OUTPUT BUFFER
274 /OUCTL= OUTPUT BUFFER CONTROL WORD (MUST BE NEGATIVE)
276 /INDEVH= ADDRESS OF PAGE FOR INPUT HANDLER
277 /OUDEVH= ADDRESS OF PAGE FOR OUTPUT HANDLER
279 /ASSUMES I/O MONITOR IS RESIDENT IN CORE.
280 /CAN BE CALLED FROM ANY FIELD WITH BUFFERS IN ANY FIELD.
281 \f INFLD=INCTL&70 /GET FIELD OF INPUT BUFFER
282 OUFLD=OUCTL&70 /DITTO OUTPUT BUFFER
289 DCA INCHCT /SET INCHCT TO FORCE A READ
290 ISZ INEOF /SET END-OF-FILE FLAG TO FORCE A NEW FILE
292 DCA INFPTR /RESET FILE POINTER
296 INPTR, HLT /RESTORE CALLING FIELDS
303 DCA INRTRN /SAVE CALLING FIELDS
305 ISZ INJMP /BUMP THREE-WAY UNPACK SWITCH
309 SNA CLA /DID LAST READ YIELD END-OF-FILE?
310 JMP INGBUF /NO - DO ANOTHER
311 GETNEW, JMS INNEWF /OPEN A NEW INPUT FILE
312 JMP EOFERR /NO FILE TO OPEN
317 DCA INCTR /RESTORE INCTR IF IT HASN'T OVERFLOWED
318 SZL /IS THIS THE LAST READ?
319 ISZ INEOF /YES - SET END-OF-FILE FLAG
320 /NOT END-OF-FILE IF INPUT DEVICE
321 /IS NON-FILE STRUCTURED!
322 CLL CML CMA RTR /CONSTRUCT A CONTROL WORD FOR THE READ
323 RTR /FROM THE AMOUNT OF THE OVERFLOW
324 RTR /(IF ANY) AND THE STANDARD CONTROL WORD
329 JMS I INHNDL /CALL THE DEVICE HANDLER
333 JMS I (SLASHG /A HANDLER ERROR - SHOULD WE IGNORE?
334 INERRX-. /ADDRESS IF NOT
337 DCA INREC /UPDATE THE RECORD NUMBER
344 DCA INCHCT /COMPUTE THE NEW CHARACTER COUNT
346 DCA INJMP /RESET THE CHARACTER SWITCH
348 DCA INPTR /AND THE WORD POINTER
349 JMP INCHAR /GO BACK AND MAKE BELIEVE THIS NEVER HAPPENED
350 INERRX, ISZ INEOF /EITHER AN END-OF-FILE OR A BADDIE
351 SMA CLA /WHICH TYPE WAS IT?
352 JMP INBREC /END OF FILE - RESUME THY PROCESSING
353 INERR, CLA CLL CML RAR /BADDIE - GIVE ERROR RETURN WITH NEGATIVE AC
355 INJMP, HLT /THIS IS THE THREE - WAY CHARACTER SWITCH
363 RTR /COMBINE THE HIGH-ORDER FOUR BITS OF
365 RTR /THE TWO WORD TO FORM THE THIRD CHARACTER
371 DCA INCTLW /SAVE THE HIGH-ORDER BITS FOR THE THIRD CHAR
372 ISZ INPTR /BUMP THE WORD POINTER
376 INCTZF, SNA /IS THE CHARACTER A ^Z?
377 JMP GETNEW /YES - GET A NEW FILE
378 TAD (232 /RESTORE THE CHARACTER
379 ISZ ICHAR /BUMP RETURN TO NORMAL RETURN
380 INRTRN, 0 /RESTORE CALLING FIELDS
381 JMP I ICHAR /AND RETURN
382 /IOPEN IS UNNECESSARY.
383 \fINNEWF, -1 /ROUTINE TO OPEN NEW INPUT FILE
387 DCA INHNDL /INITIALIZE HANDLER ADDRESS
388 TAD I INFPTR /GET NEXT CD INPUT FILE ENTRY
390 JMP I INNEWF /NO - OUT OF INPUT
392 1 /ASSIGN, FETCH HANDLER
396 AND (7760 /GET LENGTH PART OF WORD
397 SZA /LENGTH OF 0 MEANS LENGTH >=256
398 TAD (17 /ADD HIGH-ORDER BITS
401 DCA INCTR /STORE LENGTH OF FILE
404 DCA INREC /STORE STARTING RECORD NUMBER OF FILE
406 DCA INEOF /ZERO END-OF-FILE FLAG
411 \fOOPEN, 0 /OPEN OUTPUT FILE
421 TAD I OU7600 /GET DEVICE NUMBER WORD OF OUTPUT FILE ENTRY
422 AND (17 /STRIP OFF ANY LENGTH INFO
423 SNA /IS THERE AN OUTPUT DEVICE?
424 JMP ONOFIL /NO - INHIBIT OUTPUT
426 1 /ASSIGN, FETCH HANDLER
427 OUHNDL, 0 /OUTPUT DEVICE HANDLER ENTRY
432 OUBLK, 7601 /REPLACED WITH STARTING BLOCK
433 OUELEN, 0 /REPLACED WITH LENGTH OF HOLE
434 JMP OEFAIL /FAILED - MAYBE WE ASKED TOO MUCH
436 DCA I (OUTINH /ZERO OUTPUT INHIBIT FLAG
439 OORETN, CDF CIF 10 /RESTORE CALLING FIELDS
442 AND (7760 /GET REQUESTED LENGTH
443 SNA CLA /WAS IT AN INDEFINITE REQUEST
444 JMP ONTERR /YES - CANNOT ENTER THE FILE
446 AND (17 /MAKE THE REQUESTED LENGTH ZERO
448 JMP OUENTR /TRY, TRY AGAIN
449 ONTERR, CLA CLL CML RAR
450 JMP OORETN /TAKE THE ERROR RETURN WITH AC<0
451 ONOFIL, ISZ I (OUTINH
452 JMP OORETN /TAKE THE ERROR RETURN WITH AC=0
454 DCA OUCTLW /STORE THE CONTROL WORD
463 DCA OUREC /COMPUTE THE STARTING BLOCK NUMBER OF THIS TRANSFER
468 AND (17 /COMPUTE THE NUMBER OF RECORDS
469 TAD OUCCNT /UPDATE THE NUMBER OF BLOCKS IN THE FILE
474 SNL SZA CLA /DOES THE LENGTH EXCEED THE GIVEN LENGTH?
475 JMP I OUTDMP /YES - SIGNAL OUTPUT ERROR
484 OUNOWR, ISZ OUTDMP /BUMP OUTDMP TO NORMAL RETURN
489 SZA CLA /IS OUTPUT INHIBITED?
490 JMP OCISZ /YES - CLOSE IS A NOP
493 TAD (-PTP /CHECK FOR PAPER TAPE PUNCH OUTPUT
494 SZA CLA /AND SKIP ^Z OUTPUT IF TRUE
495 TAD (232 /OUTPUT A ^Z
502 JMS I (OTYPE /GET TYPE OF OUTPUT DEVICE
504 TAD (100 /IF ITS A DIRECTORY DEVICE FORCE A RECORD
505 TAD (77 /BOUNDARY - OTHERWISE A HALF-RECORD
507 SZA CLA /UP TO THE BOUNDARY YET?
508 JMP FILLLP /NO - FILL WITH ZEROS
509 TAD I (OUDWCT /GET DOUBLEWORD COUNT LEFT
511 SNA /A FULL WRITE LEFT?
512 JMP NODUMP /YES - DON'T DO IT - THE ^Z IS ALREADY OUT
513 TAD (4000+OUFLD /PUT IN THE FIELD BITS AND THE WRITE BIT
515 JMP OCRET /AN ERROR OCCURRED WHILE DUMPING THE BUFFER
516 NODUMP, TAD I OU7600 /GET THE DEVICE NUMBER
518 4 /CLOSE THE OUTPUT FILE
519 OU7601, 7601 /POINTER TO THE OUTPUT FILE NAME
521 SKP /ERROR WHILE CLOSING THE FILE - BAD!
523 OCRET, CDF CIF 10 /RESTORE CALLING FIELDS
526 \fOUSETP, 0 /ROUTINE TO INITIALIZE CHARACTER POINTERS
527 TAD (OUCTL&3700 /GET SIZE OF BUFFER IN DOUBLEWORDS
528 CIA /PAL10 IS DEFINITELY NOT NICE
531 IFNZRO OUBUF <ERROR!> /V3
532 DCA OUPTR /INITIALIZE WORD POINTER
534 DCA OUJMP /INITIALIZE THREE-WAY CHARACTER SWITCH
544 SZA CLA /IS THERE AN OUTPUT FILE?
545 JMP OUCOMN /NO - EXIT
546 OUCHAR, CDF OUFLD /SET DATA FIELD TO BUFFER'S FIELD
547 ISZ OUJMP /BUMP THE CHARACTER SWITCH
548 OUJMP, HLT /THREE WAY CHARACTER SWITCH
556 DCA I OUPOLD /UPDATE FIRST WORD OF TWO WITH HIGH
557 /ORDER 4 BITS OF THIRD CHAR
564 DCA I OUPTR /UPDATE SECOND WORD FROM LOW ORDER 4 BITS
566 DCA OUJMP /RESET SWITCH
568 ISZ OUDWCT /BUMP DOUBLEWORD COUNTER EVERY 3 CHARS
570 TAD (OUCTL /LOAD CONTROL WORD FOR A FULL WRITE
571 JMS I (OUTDMP /DUMP THE BUFFER
572 JMP OUCRET /OUTPUT ERROR - GIVE ERROR RETURN
573 JMS OUSETP /RE-INITIALIZE THE POINTERS
576 DCA OUPOLD /SAVE POINTER TO FIRST WORD OF TWO
577 ISZ OUPTR /BUMP WORD POINTER TO SECOND WORD
581 OUCRET, HLT /RESTORE CALLING FIELDS
605 SNA CLA /IS THE TELETYPE BUFFER A ^C
606 KSF /WITH THE TELETYPE FLAG ON?
608 LEAVE, CDF CIF 0 /YES - GO TO MONITOR
609 JMP I (7600 /THROUGH THE "SAVE CORE" RETURN
614 SZA CLA /ARE WE SQUISHING?
617 SPA CLA /ONLY IGNORE HARD ERRORS
621 SLGRET, JMP I SLASHG /IGNORED!
624 DCA SLASHG /SET UP NON-IGNORE ADDRESS
626 JMP I SLASHG /RETURN WITH AC RESTORED
630 DIR, DCA DTYPE /SAVE TYPE OF REQUEST
632 SZA CLA /IS THERE AN OUTPUT FILE?
636 12 /ASSIGN WITHOUT FETCH
637 TTYDEV, 5524 /COMPRESSED CODE FOR "TTY"
640 JMP I (PIP /V3 WHAT - NO TELETYPE!
647 DIR, JMS I (PIPERR /TYPE OUT MESSAGE
649 DIRMSG, TEXT "USE DIRECT"
653 \f /PIP PROPER BEGINS HERE
654 /**********************
656 /IMAGE MODE PROCESSOR FOR PIP
661 IMCLOS, TAD I (OUTINH
662 SZA CLA /WAS THERE AN OUTPUT FILE?
663 JMP I (PIPCLR /NO - DON'T CLOSE IT
664 JMS I (OUK /GET THE LENGTH OF THE OUTPUT FILE
674 ENDFUJ, 0 /PART OF DIRECTORY PRINTING ROUTINE
677 JMS I (PRWD /PRINT SIX WORDS
685 JMS I (PCRLF /LEAVE A SPACE BETWEEN DIRECTORIES
686 ISZ INEOF /SIMULATE "END OF FILE" FOR INPUT ROUTINE
688 DCA I (INCHCT /AS WELL AS "END OF BUFFER"
693 DCA IMTRA /FAKE A CALL TO "IMTRA"
694 TAD RECCNT /SETTING UP THE ARGS TO DO THE SQUISHING FOR US
706 JMS I (IOPEN /INITIALIZE INPUT ROUTINE
707 AGAIN, TAD INEOF /IOPEN ALWAYS SETS INEOF
708 SNA CLA /KEEP READING?
711 IMFILP, JMS I (INNEWF /SET UP PARAMS FOR NEXT FILE
712 JMP I IMTRA /NO NEXT FILE
714 DCA IMHNDL /GET DEVICE HANDLER ENTRY
716 DCA IMREC /AND STARTING BLOCK NUMBER
720 SNL /IF LINK IS ON, THERE ARE LESS THAN 16 BLOCKS LEFT
727 TAD (3201 /FORM A FULL OR PARTIAL READ CONTROL WORD
729 JMS I (CTCTST /CHECK FOR ^C
739 DCA IMREC /UPDATE BLOCK NUMBER
742 IMOUT, JMS I (OUTDMP /WRITE OUT WHAT WE JUST READ IN
743 JMP I (AOUERR /WRITE ERROR - BAD!
745 \fIMERRX, ISZ INEOF /SIGNAL EOF OR WORSE
746 SPA CLA /WHICH ONE IS IT?
748 TAD (6377 /MARCH DOWN THROUGH CORE
749 IMEFLP, DCA CHAR /LOOKING FOR THE FIRST NON-ZERO WORD
756 SZL /IF WE GO THROUGH THE BUFFER WITHOUT A NON-ZERO WORD
759 JMS I (PIPERR /SOMETHING IS WRONG (HANDLER SHOULD HAVE INSERTED
765 TAD (200 /GET THE LENGTH OF THE USEFUL PART OF THE BUFFER
766 JMP IMOUT /AS AN OUTPUT CONTROL WORD AND GO OUTPUT IT
768 \f/** PIP STARTS HERE (OR HERE+1 IF CHAINED TO) **
770 PIPSA, JMP PIPCD /NORMAL ENTRY/RE-ENTRY - CALL CD
771 JMP NOPCD /ENTRY FROM CHAIN COMMAND - ASSUME CD AREA SET UP
772 /PART OF ASCII PROCESSOR - CLEAN UP AT END OF LINE AND END OF FILE
775 DCA I XR /PUT THE LINE FEED IN THE LINE BUFFER
776 EOL, DCA I XR /MARK THE END OF USEFUL INFO
779 DCA XR /RESET BUFFER POINTER
780 EOLLP, TAD I XR /GET A CHARACTER FROM THE LINE BUFFER
781 PIPSNA, SNA /ZERO MEANS NO MORE CHARS
783 JMS I (OCHAR /OUTPUT THE CHARACTER
787 SNA CLA /END OF INPUT ENCOUNTERED?
788 JMP I (ASCIGO /NO - GET NEXT LINE
789 ACLOSE, JMS I (OCLOSE /YES - CLOSE THE OUTPUT FILE
790 JMP I (AOUERR /ERROR ON CLOSE
791 PIP, TAD I (MPARAM-1 /V3
792 SMA CLA /ALTMODE TERMINATE LAST COMMAND STRING?
795 JMP I (7605 /EXIT TO OS/8 WITHOUT SAVING CORE
796 PIPCD, JMS I (200 /OF COURSE THE MONITOR IS IN CORE!
798 0 /NO ASSUMED EXTENSIONS ON INPUT
800 NOPCD, JMS I (ONCE /REPLACED BY '20' BY ONCE-ONLY CODE
801 JMS I (SRSTOR /CLEAR /S OR /Y;READ MONITOR
802 DCA SQFLAG /CLEAR /S INDICATOR
804 DCA I (INCTZF /RESET INPUT SWITCH TO DETECT "^Z"'S
808 JMP I (SQUISH /IT WAS ON - COMPRESS THE INDICATED DEVICES
811 SZL CLA /"Z" SWITCH IN THE LINK
812 JMS I (DZERO /ZERO DIRECTORY BEFORE PROCEEDING
816 JMS I (DELETE /DELETE OUTPUT FILE
817 TAD I (MPARAM+2 /IS /Y ON?
819 JMP I (SYSCOP /YEP..TRANSFER SYSTEM HEAD
821 AND (301 /"E","F" AND "L" SWITCHES
822 SZA /ANY ONE OF THEM ON?
823 JMP I (DIR /YES - LIST A DIRECTORY
826 AND (40 /"I" SWITCH ROTATED TWO LEFT
828 JMP I (IMAGE /IMAGE MODE TRANSFER
829 TAD I (7617 /MUST PRESERVE THE LINK
830 SNA CLA /V3 IMAGE MODE ALLOWS NO INPUT FILE
831 JMP PIP /TERMINATE HERE IF NO INPUT SIDE
832 SZL CLA /"B" SWITCH IN LINK
833 JMP I (BINARY /BINARY MODE TRANSFER
835 /DEFAULT MODE OF TRANSFER IS ASCII
837 ASCII, TAD I (MPARAM+1
841 JMS I (ASCI2 /TEST FOR OUTPUT DEVICE
843 JMS I (IOPEN /OPEN THE INPUT FILES
844 DCA AEOFFG /ZERO THE END-OF-FILE FLAG
848 /ENTRY ON END OF INPUT
849 ASCEOF, SPA CLA /WAS IT END OF INPUT OR AN INPUT ERROR?
852 ISZ AEOFFG /SET END-OF-INPUT FLAG
853 JMP EOL /PROCESS LAST LINE (IF ANY)
855 \f /SUBROUTINE TO OUTPUT RUBOUTS AFTER FORM CONTROL CHARACTERS
856 RUBOUT, 0 /UNLESS OUTPUT IS TO A DIRECTORY DEVICE
857 DCA TEMP /STORE COUNT
858 JMS I (OTYPE /GET TYPE OF OUTPUT DEVICE
860 JMP I RUBOUT /DIRECTORY DEVICE - DON'T BOTHER
863 SNA CLA /IS THE FORM CONTROL CHAR A FORM-FEED?
864 IAC /YES - OUTPUT BLANK TAPE INSTEAD
866 DCA I XR /PUT IN BUFFER
868 JMP RBTLP /LOOP FOR THE REQUISITE COUNT
877 /ASCII PROCESSOR CONTINUED
881 DCA I XR /PROTECT AGAINST NULL LINE WITH "T" OPTION
882 DCA COLCT /ZERO COLUMN COUNTER FOR TAB CONVERSION
883 ACHLP, JMS I (ICHAR /GET A CHARACTER
884 JMP I (ASCEOF /END OF INPUT OR WORSE
885 AND (177 /MASK OUT PARITY BIT
886 SZA /IGNORE BLANK TAPE AND LEADER/TRAILER
889 JMP ACHLP /DITTO RUBOUTS
892 JMP I (ASCPTCH /7-BIT ^Z CHECK
893 TAD (232 /FORCE COLUMN 8 ON
899 SNL /IS THE CHARACTER A FORM CONTROL CHARACTER?
901 TAD ASCJMP /YES - GO TO APPROPRIATE ROUTINE
910 CINSRT, 7600 /GRP 2 CLA
912 ADCAXR, DCA I XR /STORE THE CHARACTER IN THE LINE BUFFER
913 ISZ COLCT /ALWAYS BUMP THE COLUMN POINTER
916 SPA CLA /HAS THE BUFFER OVERFLOWED?
917 JMP ACHLP /NO - GET NEXT CHARACTER
921 SNA CLA /DO WE WANT TO CONVERT?
924 DCA I XR /OUTPUT A SPACE
928 SZA CLA /IS THE COLUMN COUNTER A MULTIPLE OF 8?
930 JMP TESTXR /YES - CHECK BUFFER OVERFLOW
934 JMS I (RUBOUT /TWO RUBOUTS FOLLOW A TAB
935 JMP TESTXR /CHECK FOR BUFFER OVERFLOW
937 SZA CLA /SHOULD WE CONVERT?
942 JMS I (RUBOUT /FOUR RUBOUTS AFTER A VERTICAL TAB
944 FFLF, TAD (-4 /NINE LINE FEED SIMULATE A FORM FEED
945 VTLF, TAD (-5 /FIVE LINE FEEDS SIMULATE A VERTICAL TAB
951 JMP I (EOL /FORM FEED AND VERTICAL TAB ARE LINE ENDERS
952 \fFFEED, TAD I (COPTSW
953 SZA CLA /SHOULD WE CONVERT?
957 TAD (-11 /NINE RUBOUTS AFTER A FORM FEED
960 CARRET, TAD I (MPARAM
962 SMA CLA /"C" SWITCH MEANS DELETE TRAILING BLANKS FROM CARDS
963 JMP NOTOPT /IT WASN'T ON
968 SZA CLA /WAS THE LAST CHAR ON THE LINE A SPACE?
971 TAD XR /YES - BACK UP THE LINE POINTER
975 DCA I XR /STORE THE CARRIAGE RETURN IN THE BUFFER
976 JMP TESTXR /CARRIAGE RETURN IS NOT A LINE TERMINATOR
986 \f /SUBROUTINES CALLED BY THE REST OF PIP
988 K770, 770 /** DON'T MOVE THIS CONSTANT
993 DCA CHAR /MAXIMUM OF THREE OUTPUT FILES
997 SNA /DOES THIS FILE EXIST?
998 JMP I DELETE /THAT'S ALL
1000 1 /ASSIGN HANDLER FOR THE DELETION
1003 TAD I DPFILE /RELOAD DEVICE NUMBER FOR DELETE
1004 ISZ DPFILE /BUMP DPFILE TO POINT TO THE FILE NAME
1005 JMS I C200 /DEVICE NUMBER IN AC
1006 DP4, 4 /CLOSE - USED AS DELETE IN THIS CASE
1007 DPFILE, 0 /POINTER TO FILE NAME
1008 0 /ZERO LENGTH FOR DELETE
1009 JMS I (PIPERR /FILE WASN'T THERE TO BE DELETED
1015 JMP DELOOP /DELETE AS MANY FILES AS HE LISTED(UP TO 3)
1017 \fDZERO, 0 /SUBROUTINE TO ZERO THE DIRECTORY OF THE
1018 /FIRST OUTPUT DEVICE
1021 SZL /IS DEVICE READ-ONLY?
1022 JMP OZERR /YES - ERROR
1024 AND K770 /MASK OUT DEVICE TYPE
1027 TAD (DEVLEN /USE IT TO INDEX A TABLE OF DEVICE LENGTHS
1031 JMP I DZERO /DEVICE LENGTH ZERO MEANS NON-DIRECTORY DEVICE
1032 DCA PIPERR /STORE LENGTH
1037 1 /ASSIGN DEVICE, FETCH HANDLER
1040 TAD I (MPARAM+2 /IF /Y ON, DO SYSTEM ZERO
1043 TAD OZHNDL /BUT IF NOT, CHECK FOR SYSTEM ZERO
1046 JMP ZRO70+1 /NOT SYSTEM FILES BEGIN AT 7
1047 JMS I (CONFRM /ASK IF HE'S SURE
1052 DCA I (SQFLAG /AND CLEAR OUT SQUISHES
1057 DCA I (DWASTE /DEFINE # OF WASTE WORDS
1058 DCA I (MPARAM+3 /KILL = OPTION FOR FUTURE /I TRANSFERS
1061 5410 /V3 OUTPUT 6 BLOCKS FROM FIELD 1
1063 1 /ALL DIRECTORIES ARE IN RECORD 1
1064 OZERR, JMS I (PIPERR /ERROR WHILE ZEROING DIRECTORY
1066 DCA OLDDIR /ZERO DIRECTORY POINTER TO FORCE A NEW READ
1070 JMS I (SRSTOR /RESET 07600!
1071 CDF 10 /JUST IN CASE
1072 TAD I PIPERR /GET ARG
1077 JMP I (PIP /RESTART PIP
1081 C200, AND K770 /GET THE TYPE OF THE OUTPUT DEVICE
1082 TAD (-PTP /IS IT A PAPER TAPE PUNCH?
1087 JMS I (OCHAR /PUT OUT SOME LEADER
1093 \f /TABLE OF DEVICE LENGTHS FOR /Z OPTION
1095 DEVLEN, 0;0;0;0;0;1520 /RK08 (1520= - DECIMAL 3248)
1096 6001;4001;2001;0001 /RF08 IN VARIOUS SIZES
1097 /(CHEATS A BLOCK ON LARGEST TO KEEP IT NON-ZERO)
1098 7601;7401;7201;7001 /DF32 IN VARIOUS SIZES
1099 /(CHEATS A BLOCK TO AVOID HARDWARE TROUBLE)
1100 6437;6437 /DECTAPE AND LINCTAPE
1101 ZBLOCK 1 /20 MAGTAPE
1104 1520 / 1/2 OF AN RK8E IS 23
1106 7022 /25 RX01 FLOPPY DISK
1107 ZBLOCK 52 /ALL THE REST
1110 FIXLEN, 0 /ROUTINE TO ESTIMATE OUTPUT FILE LENGTH
1113 SZA CLA /DID THE USER PROVIDE AN ESTIMATE?
1114 JMP I FIXLEN /YES - USE IT
1118 FIXLP, TAD I TEMP /GET NEXT INPUT FILE
1120 JMP FIXOVR /NO MORE INPUT FILES
1122 CIA CLL /GET LENGTH AS A POSITIVE NUMBER
1123 /(LENGTH OF ZERO TURNS LINK ON)
1125 DCA CHAR /UPDATE CUMULATIVE LENGTH
1126 SZL CLA /DID CUMULATIVE LENGTH OVERFLOW 256 BLOCKS?
1127 JMP I FIXLEN /YES - CAN'T ESTIMATE IT
1133 DCA I (7600 /STICK LENGTH IN OUTPUT FILE DESCRIPTOR
1140 RTL /'O' BIT TO SIGN
1142 JMP GOTCON /V3 'O' MEANS OK, ASSUME 'YES'
1148 KRB /LOOK AT HIS REPLY
1149 AND (177 /IGNORE PARITY TTY
1152 ISZ SQFLAG /SET SQFLAG TO 1 (NEEDED 1 LATER)
1153 TAD SQFLAG /USE SQFLAG AS INDEX FOR MESSAGE
1163 GOTCON, ISZ SQFLAG /SET SQFLAG
1164 JMP CNFMXT /AND TAKE SKIP EXIT
1166 \f /DIRECTORY PRINTER FOR PIP
1169 DIRPRE, JMS I (OUTOPN /OPEN THE OUTPUT FILE
1171 DCA CHAR /ABUF WILL BE A TEMPORARY ARRAY OF STARTING FILES
1177 DCA I (7617 /DEFAULT DIRECTORY IS DSK:
1179 SNA /ARE WE THROUGH WITH THE INPUT DEVICES?
1182 DCA I TEMP /ONLY THE DEVICE NUMBER IS IMPORTANT
1188 DCA INFPTR /THIS SERVES NO FUNCTION EXCEPT IMPROVING ERROR MESSAGES
1190 SMA CLA /IS THE DEVICE A DIRECTORY DEVICE?
1195 DCA I CHAR /SAVE THE STARTING BLOCK NUMBER
1197 DCA I TEMP /READ FROM THE DIRECTORY
1207 JMS I (IOPEN /RESET POINTERS - WERE GONNA FAKE OUT THOSE "GENERAL"
1210 \fPRWD, 0 /ROUTINE TO PRINT SIXBIT TEXT
1213 DCA PRCT /STORE COUNT
1255 PBLJMP, JMP PRBLNK /INCREMENTED BY PDATE TO KILL LEADING BLANKS
1264 PRLAST, TAD PRWD /V3
1277 PWRTEN, -1750;-144;-12;0 /V3
1279 \f /MAIN DIRECTORY PRINTING LOOP
1281 NXTDIR, JMS I (ICHAR /FAKE, FAKE
1283 CLA /WE DON'T WANT THE CHARACTER
1285 TAD (INBUF-1 /WE WANT THE BUFFER!
1289 DCA DCOUNT /NUMBER OF ENTRIES
1297 DCA BLOKNO /FIRST BLOCK OF FILE STORAGE
1299 DCA DLINK /LINK TO NEXT SEGMENT
1300 ISZ XR /BUMP XR PAST FLAG WORD
1305 SNA /WHAT TYPE OF ENTRY IS IT?
1306 JMP DEMPTY /A FREE FILE
1307 DCA NAME1 /A PERMENANT OR TENTATIVE FILE
1316 TAD WASTE /COMPENSATE FOR THE DATE INCREMENT
1317 CMA /AND THE WASTE WORDS
1321 SNA /IS IT A TENTATIVE FILE?
1322 JMP ADDLEN+1 /YES - TENTATIVE FILES ARE ALWAYS IGNORED
1324 DCA FLENGT /NO - STORE THE LENGTH
1326 TAD I CHAR /GET THE STARTING FILE FOR THIS LISTING
1329 SNL CLA /ARE WE THERE YET?
1330 JMP ADDLEN /NO - KEEP GOING
1332 JMS I (PRWD /PRINT THREE WORDS
1337 SNA CLA /IS THERE AN EXTENSION?
1338 TAD (-16 /NO - PRINT A BLANK
1339 TAD (56 /YES - PRINT A PERIOD
1342 NAME4, 0 /ZERO PRINTS AS TWO MORE BLANKS
1345 SZA CLA /WAS THE LISTING SWITCH /F?
1346 JMP PRTCRL /YES - DON'T PRINT LENGTH
1352 JMS I (PDATE /PRINT THE CREATION DATE OF THE FILE
1353 PRTCRL, JMS I (PCRLF
1356 DCA BLOKNO /UPDATE BLOCK NUMBER
1358 JMP NAMELP /LOOP UNTIL ALL FILES ARE PROCESSED
1360 SNA CLA /MULTI-SEGMENT DIRECTORY?
1361 JMP ENDDIR /NO - FINISH UP
1364 TAD (377 /BUMP XR TO NEXT BLOCK
1365 JMP NEWSEG /PROCESS NEXT LINK
1368 DCA FLENGT /STORE LENGTH OF FREE ENTRY
1372 DCA ECOUNT /BUMP COUNT OF FREE BLOCKS
1375 SNA CLA /IS THE /E SWITCH ON?
1376 JMP ADDLEN /NO - DON'T LIST FREE FILES
1384 ENDDIR, ISZ CHAR /BUMP TEMP ARRAY TO NEXT ENTRY
1389 \f/BINARY MODE PROCESSOR FOR PIP
1392 BINARY, JMS I (FIXLEN
1395 JMS I (LEADER /PUT OUT BLANK TAPE IF HS PUNCH OUTPUT
1397 NEWTAP, JMS I (ICHAR
1398 JMP BEOF /END OF FILE ON INPUT
1400 JMP NEWTAP /BLANK TAPE - KEEP GOING
1413 TAD (-240 /CHECK TYPE OF TAPE
1414 SNA /IS IT RELOCATABLE?
1416 TAD (-40 /IF A FIELD SETTING, IT'S ABSOLUTE
1420 TAD BIN200 /CHECK FOR ORIGIN ALSO
1422 JMP NEWTAP /NOTHING..NEXT FRAME
1425 ABSBIN, JMS RCOPY1 /COPY THIS FRAME AND READ NEXT
1427 BNM140, SZA CLA /IS IT TRAILER?
1428 JMP ABSBIN /NO - KEEP GOING
1429 BEOT, CLA CMA /END OF TAPE
1430 JMS LTCODE /PUT OUT SHORT LEADER/TRAILER
1431 JMP NEWTAP /GET NEXT TAPE
1432 \fLTCODE, 0 /SUBROUTINE TO PUNCH 200 CODE
1433 SMA /SHORT LEADER/TRAILER?
1435 SPA CLA /DIRECTORY DEVICE?
1440 JMS I (OCHAR /OUTPUT 64 OR 8 FRAMES OF L/T CODE
1447 DCA I (INCTZF /DISABLE CONTROL-Z CHECKING ON INPUT
1449 JMS LTCODE /PUT OUT SHORT LEADER/TRAILER
1456 TAD I TEMP /GET DATA WORD FOR THIS FRAME
1457 SMA SZA /POSITIVE MEANS SPECIAL OR ERROR
1460 JMP RELEND /ZERO MEANS CHECKSUM FRAME
1461 DCA TEMP /NEGATIVE MEANS COUNT OF NUMBER OF SLAVE FRAMES
1465 JMP .-3 /COPY THIS FRAME AND ALL SLAVE FRAMES
1466 JMP RELLP /GET NEXT CONTROL FRAME
1467 RELEND, JMS RCOPY1 /COPY THE FIRST FRAME OF THE CHECKSUM
1469 JMP I (AOUERR /OUTPUT THE SECOND FRAME
1470 JMP BEOT /END TAPE - START NEXT ONE
1475 \fRCOPY1, 0 /ROUTINE TO ADVANCE "CHAR" TO NEXT INPUT CHARACTER
1484 INEFER, SMA CLA /DETECT FATALITIES
1487 JMS I (PIPERR /A REAL BAD READ
1491 SZA CLA /CODE OF 1 MEANS SPECIAL
1492 JMS I (PIPERR /ILLEGAL RELOCATABLE INPUT
1495 CLL CML CMA RTL /MULTIPLY NAME COUNT BY -6 (APPROXIMATELY)
1497 CLL CML RAL /(ACTUALLY THIS PRODUCES -6X-1 WHICH IS WHAT WE WANT)
1500 \fERPRNT, 0 /ERROR MESSAGE PRINTOUT ROUTINE
1506 JMS ERPCH /PRINT HIGH-ORDER CHARACTER
1508 JMS ERPCH /PRINT LOW-ORDER CHARACTER
1515 JMP ERCRLF /0 CHARACTER TERMINATES
1520 TAD INFPTR /GET PTR TO CURRENT INPUT FILE
1521 TAD (321 /MAGIC NUMBER
1526 TAD (-37 /IS IT A _?
1528 JMP FILENR /YES..PRINT FILE NUMBER
1531 JMP I (SQFILE /YEP..PRINT FILE NAME
1543 \fPDATE, 0 /PRINTS THE DATE
1545 JMP I PDATE /NO DATE TO PRINT
1570 DCA I (PBLJMP /RESET PRNUM TO PRINT LEADING SPACES
1583 \fRELTBL, -2;-2;2;-10;-2;-2;-2;2;0;2;-2;2;2;2;2;1
1597 IFNZRO OS78 <DIRMSG>
1600 \f/ERROR MESSAGE TEXT GOES HERE
1603 ERR0, TEXT /NO ROOM FOR OUTPUT FILE/
1604 ERR1, TEXT /LINE TOO LONG IN FILE_/
1605 ERR3, TEXT /ERROR DELETING FILE/
1606 ERR4, TEXT /INPUT ERROR, FILE_/
1607 ERR5, TEXT /CAN'T OPEN OUTPUT FILE/
1608 ERR6, TEXT /DEVICE_ NOT A DIRECTORY DEVICE/
1609 ERR7, TEXT /PREMATURE END OF FILE, FILE_/
1610 ERR8, TEXT /ILLEGAL BINARY INPUT, FILE_/
1611 ERR9, TEXT /BAD DIRECTORY ON DEVICE_/
1612 ERR10, TEXT /DIRECTORY ERROR/
1624 SQUISH, JMS I (CONFRM
1626 SQUISX, DCA I (OUELEN /INITIALIZE PARAMS TO FAKE OUT "IMTRA"
1628 DCA I (7621 /ZERO SECOND FILE FOR "INNEWF"
1632 JMP I (PIP /NO INPUT
1637 JMP I (PIP /NO OUTPUTEE, NO SQUISHEE
1649 TAD I TEMP /GET ENTRY FROM DEVICE LENGTH TABLE
1650 DCA OUDLEN /SAVE OUTPUT DEVICE LENGTH
1671 MTEMP /MOVE THE INPUT DIRECTORY TO SYS:
1676 TAD SOHND /SETUP DIRECTORY START
1678 JMS I (SETSAM /IF IHNDLR=OHNDLR, SAME=1
1688 AND (77 /CONVERT 0 TO 1 AND 100 TO 0
1692 INTEST, 0 /TEST IF INPUT IS DIRECTORY
1703 SETCTC, 0 /MODIFY 07600 TO RETURN TO SQCTLC
1707 TAD (5602 /JMP I .+1
1713 \fOUK, 0 /V3 ON IMAGE MODE TRANSFER
1714 /CLOSE OUT FILE WITH = OPTION
1719 SNL /IS = OPTION LARGER?
1720 SQ7600, 7600 /RETURN OUCCNT IF IT'S LARGER
1721 TAD I (OUCCNT /RETURN LOW ORDER = OPTION IF IT'S LARGER
1724 \fNEWIN, TAD (MTEMP-1
1744 JMS I (CYWAST /COPY WASTE WORDS
1766 MOVFIL, JMS I (SQTRA /MOVE THE FILE DOWN
1780 SMA CLA /DO WE HAVE ROOM FOR TWO MORE ENTRIES?
1783 /DIRECTORY SEGMENT OVERFLOW ON OUTPUT...
1788 DCA I (SQBUF1+2 /STORE LINK TO NEXT SEGMENT
1792 JMP I (SQIDER-1 /TOO MANY SEGMENTS
1793 JMS I (OUTDIR /OUTPUT THIS SEGMENT
1794 NEWOUT, TAD (SQBUF1-1
1795 DCA OUTXR /INITIALIZE XR FOR NEXT OUTPUT SEGMENT
1796 DCA I (OUTINH /ZAP ANY OLD OUTPUT INHIBIT FLAG
1807 SNA /ANY MORE INPUT SEGMENTS?
1819 \fSURE, TEXT /ARE YOU SURE?/
1830 \fSQOVER, DCA I OUTXR
1839 CKZERO, TAD I (SQBUF1
1843 JMS OUTDIR /READ IN LAST DIRECTORY
1844 DCA I (SQBUF1+2 /ZERO OUT LINK WORD
1872 \fSQCTLC, KCC /JUMPED TO BY CODE AT 07600
1873 JMS I (TSTSAM /TEST IF OPERATION IS TO ITSELF
1879 TAD I (MPARAM+1 /IS IT /S?
1882 JMP I (SYSCPY /NO../Y
1886 JMS I (7700 /MAKE SURE MONITOR IS IN CORE
1888 DCA .-2 /AND WIPE THE CALL AWAY
1900 \fCTCMSG, TEXT /SORRY - NO INTERRUPTIONS/
1901 IOMSG, TEXT /I-O ERROR IN ^ - CONTINUING/
1902 NOROOM, TEXT /NO ROOM IN ^ - CONTINUING/
1905 SYSCOP, TAD K7622 /SET INFPTR IN CASE OF /Y ERROR
1906 DCA INFPTR /WILL FILE #1
1907 JMS I (SETCTC /KLUDGE UP 07600
1908 SYSCPY, TAD (INDEVH+1
1909 DCA YIHAND /SET TO ASSIGN INPUT HANDLER
1913 DCA K2000 /THIS MAY GET CLOBBERED READING IN DIRECT.
1917 SNA CLA /IS THERE AN INPUT DEVICE?
1918 ISZ I K7617 /MAKE INPUT =SYS
1919 JMS I (INTEST /SEE IF OPERATIONS ARE TO SAME DEVICE
1921 JMS I K200 /ASSIGN HANDLER
1924 K7622, 7622 /THINLY DISGUISED HALT
1926 K200, AND K7760 /CHECK INPUT FILE LENGTH
1927 SNA /IF BLANK,INPUT SYSTEM HEAD
1929 TAD (-6340 /CHECK FOR PROPER LENGTH
1931 JMP PER13 /ERROR..NOT SYSTEM HEAD
1932 TAD I (7601 /IS THERE OUTPUT DEVICE?
1933 SZA CLA /IF YES..WE CAN DO IMAGE XFER
1936 YOUSYS, DCA YINREC /PICK UP STARTING RECORD
1938 JMS I YIHAND /READ IN FIRST INPUT RECORDS
1939 K2000, 2000 /(0-15 IF SYSTEM HEAD,0-7 IF FILE)
1942 JMP I (PER4 /INPUT ERROR
1943 TAD I (7620 /IF INPUT FROM A FILE, OPEN
1944 SZA CLA /A HOLE FOR OUTPUT DIRECTORY
1945 JMS I (MOVE /DO A CORE MOVE
1946 JMS I (TSTHED /TEST FOR VALID SYSTEM HEAD
1948 TAD OFSET /BUMP TO NEXT RECORD
1950 TAD I (7600 /IF NO OUTPUT, FORGET IT
1952 JMP PIPCLR /RESET AND GO TO PIP
1959 \f JMS I (TSTIO /TEST OUTPUT. SEE IF DIRECT. DEV.
1961 JMS I YOHAND /READ OUTPUT DIRECTORY INTO PLACE
1967 TAD I (401 /NOW TEST FOR VALID OUTPUT DEVICE
1969 TAD (-10 /IF LESS THAN 10, DON'T XFER
1974 DCA YINREC /XFER COUNTER
1978 JMS I YIHAND /READ NEXT
1979 K3400, 3400 /16 BLOCKS
1987 JMS I (OUTDMP /WRITE BUFFER
1989 ISZ YINREC /DONE YET?
1990 JMP YLOOP /NOT YET..LOOP
1991 PIPCLR, JMS I (SRSTOR /CLEAR OUT 07600
1993 \fYSOUT, TAD I (7601 /HERE IF INPUT FROM SYSTEM HEAD
1994 SZA CLA /IS THERE AN OUTPUT FILE?
1995 JMP I (YTSOUT /YES, SET UP FOR IMAGE MODE
1996 YNOOUT, TAD K3400 /SET TO READ IN DIRECTORY
1997 DCA K2000 /PLUS FIRST 7 RECORDS
1998 TAD (16 /AND RESTART READ AT RECORD 16
2003 PER13, JMS I (PIPERR
2008 DFORG, 0 /FILE STORAGE
2011 DWASTE, 0 /#WASTE WORDS
2016 TAD (4400 /MOVES CORE TO OPEN DIRECTORY HOLE
2036 ERR11, TEXT /BAD SYSTEM HEAD/
2038 YTSOUT, TAD I (7617 /O.K. SETUP CD AREA FOR IMAGE XFER
2039 TAD (7760 /FROM SYSTEM AREA OF INPUT DEVICE
2047 IMGTST, DCA SAME /ALLOW ^C IF TO OUTPUT FILE
2048 TAD I (YIHAND /TEST FOT VALID SYSTEM
2059 TAD SAME /IF /Y IS TO SAME DEVICE AS INPUT (SYS)
2060 SNA CLA /^C GIVES MESSAGE AND RETRIES OPERATION
2064 ERR2, TEXT /OUTPUT ERROR/
2068 DCA TSTSAM /IF ERROR DURING /S
2071 DCA MOVE /-3 FOR FILE NAME
2072 SQFIL3, TAD I TSTSAM /FIRST 2 CHARS. IN NAME
2077 SZA /IF ZERO, DON'T BOTHER
2079 ISZ DWASTE /RIGHT HALF OR NEW WORD?
2080 JMP SQFIL4 /RIGHT HALF
2082 ISZ MOVE /EXHAUSTED ALL?
2084 TAD MWAST /DONE WITH IT YET?
2086 JMP I (FILENR-1 /YES
2087 TAD I TSTSAM /IS THERE AN EXTENSION?
2089 JMP I (FILENR-1 /NO..CONTINUE ORIGINAL MSG
2092 ISZ MWAST /SIGNAL END
2097 TAD I TSTSAM /GET RIGHT HALF
2102 DCA I OUTXR /ROUTINE TO COPY WASTE WORDS
2119 CYWAST, 0 /ROUTINE TO COPY WASTE WORDS
2120 CLA CLL CMA RTL /THREE MORE FOR FILE NAME
2121 JMS I (MWAST /COPY THEM
2122 TAD I (SQBUF2+4 /NOW ADJUST I/O WASTE WORDS
2124 TAD OUWAST /DIFF. BETWEEN OUT AND IN WORDS
2125 SMA /IF <0, MORE OUT THAN IN
2126 JMP CGEWST /POS. MORE IN THAN OUT (OR SAME)
2130 JMS I (MWAST /COPY ALL INPUT WORDS
2131 DCA I OUTXR /AND 0 ALL EXTRA OUTPUT WORDS
2136 TAD OUWAST /XFER ONLY ENOUGH OUTPUT WDS.
2140 TAD TEMP1 /POINT INPUT TO NEXT FILE
2144 TSTHED, 0 /TESTS FOR KEYBOARD MONITOR
2150 JMP I (PER13 /IF NOT CLA, NOT VALID
2152 \fTSTIO, 0 /SEE IF OUTPUT IS DIRECTORY DEVICE
2153 JMS I (OTYPE /GET DCB WORD FOR OUTPUT
2154 SMA CLA /IF NOT NEG., NOT DIRECT DEVICE
2157 TAD OHNDLR /IF OUTPUT=SYS, SET NO INTERRUPT
2163 ASCI2, 0 /SEE IF VALID ASCII OUTPUT
2167 JMP I (PIP /NO..BACK TO PIP
2168 TAD TSTIO /SEE IF /C IS ON
2170 JMS I (FIXLEN /NO..TRY TO ESTIMATE OUTPUT
2173 SQDTST, 0 /ROUTINE TO CHECK /S DIRECTORIES
2174 DCA NOHND /PRESERVE POSSIBLE SYS ON OUTPUT
2175 TAD (7 /DEFAULT TO BLOCK 7
2176 DCA OUTBLK /INITIAL GUESS
2177 CDF 10 /NOW TRY TO READ DIRECTORY OF OUTPUT
2178 JMS I (OTYPE /IF NON-FILE, DON'T READ IT
2181 CIF 0 /COULD BE NON-FILE, HOWEVER.
2186 JMP I (SQIDER+1 /ERROR IN READ
2187 P1A, DCA OLDDIR /WIPES ANY DIRECT. SEGMENT
2189 TAD (-70 /IS OUTPUT A SYS DEVICE?
2192 TAD NOHND /IS OUTPUT THE SYSTEM DEVICE?
2202 SYSZRO, TEXT /ZERO SYS?/
2203 \fAOUERR, SMA CLA /WAS IT A DEVICE ERROR OR ARE WE OUT OF SPACE?
2204 JMP BOUERR /OUT OF SPACE
2207 BOUERR, JMS I (PIPERR
2210 ASCPTCH,TAD (ACHLP+1 /V3C FAKE OUT ICHAR
2211 DCA I (ICHAR /SIMULATE CALL TO ICHAR FROM 'ACHLP'
2212 JMP I (GETNEW /V3C SIMULATE OCCURRENCE OF 8-BIT ^Z IN ICHAR
2214 \f/THIS IS ONCE-ONLY CODE
2221 DCA I ONCENF /RESTORE L20, DON'T ALLOW REENTRY
2225 JMP I ONCE /NO, RETURN
2227 JMS I (ERPRNT /PRINT VERSION NUMBER
2230 VER, TEXT \OS/8 PIP V11A\