Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | /3 PIP FOR OS/8 MONITOR |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | / | |
9 | / | |
10 | / | |
11 | /COPYRIGHT (C) 1970,1971,1972,1973,1974,1975,1977 | |
12 | /BY DIGITAL EQUIPMENT CORPORATION | |
13 | / | |
14 | / | |
15 | / | |
16 | / | |
17 | / | |
18 | / | |
19 | / | |
20 | / | |
21 | / | |
22 | / | |
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. | |
27 | / | |
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. | |
32 | / | |
33 | /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE | |
34 | /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY | |
35 | /DIGITAL. | |
36 | / | |
37 | / | |
38 | / | |
39 | / | |
40 | / | |
41 | / | |
42 | / | |
43 | / | |
44 | / | |
45 | / | |
46 | \f/ 4-MAY-1977 FILE: PIP.PA OS/8 VERSION 12A | |
47 | /RL/EF/ET.AL./S.R./E.S. | |
48 | ||
49 | ||
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 | ||
58 | /VERSION 3 MODS: | |
59 | ||
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 | |
64 | /'0 FREE BLOCKS' | |
65 | /ALLOW FILLING UP DEVICE TO VERY LAST BLOCK | |
66 | /ALLOW 7-BIT ^C | |
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 | |
72 | ||
73 | ||
74 | /MAINTENANCE RELEASE CHANGES: | |
75 | ||
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 | |
80 | ||
81 | /E.S. DISABLED /E,/F,/L | |
82 | /E.S. FIXED /Y OPTION PER SPR | |
83 | ||
84 | \f/DETAILS OF PIP: | |
85 | ||
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. | |
90 | ||
91 | /CORE USED: | |
92 | /FIELD 0 | |
93 | ||
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 | |
99 | ||
100 | /FIELD 1 | |
101 | ||
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 | |
106 | ||
107 | ||
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. | |
111 | ||
112 | /ICHAR- GENERAL CHARACTER INPUT ROUTINE. ASSIGNS NEW | |
113 | / DEVICE HANDLERS AS NEEDED. | |
114 | ||
115 | /OOPEN- ENTERS A FILE ON A SPECIFIED DEVICE. | |
116 | ||
117 | /OUTDMP- WRITES OUTPUT BUFFER TO OUTPUT DEVICE. | |
118 | ||
119 | /OCLOSE- CLOSES FILE CREATED BY OOPEN | |
120 | ||
121 | /OCHAR- CHARACTER OUTPUT ROUTINE. WRITES CHARACTERS | |
122 | / TO OUTPUT BUFFER, CALLING OUTDMP WHEN FULL. | |
123 | ||
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. | |
127 | ||
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. | |
131 | ||
132 | /IMAGE- IMAGE MODE PROCESSOR FOR PIP. | |
133 | ||
134 | /SQTRA- MAIN SUBROUTINE OF IMAGE MODE, AND /S OPTION. | |
135 | ||
136 | /PIP, PIP+1- MAIN ENTRANCES TO PIP. THE CODE ON THIS PAGE | |
137 | / INSPECTS CD OPTION WORDS AND BRANCHES TO PROPER | |
138 | / ROUTINES. | |
139 | ||
140 | /ASCII- THE DEFAULT TRANSFER MODE IN PIP IS ASCII. | |
141 | ||
142 | /DELETE- DELETES FILES ON OUTPUT SIDE OF CD LIST. | |
143 | ||
144 | /DZERO- ZEROES DIRECTORY OF FIRST OUTPUT DEVICE. | |
145 | ||
146 | /PIPERR- ERROR ROUTINR FOR PIP. | |
147 | ||
148 | /DIRPRE- DIRECTORY PRINTING ROUTINE. | |
149 | ||
150 | /BINARY- BINARY MODE PROCESSOR. HANDLES ABSOLUTE AND | |
151 | / RELOCATABLE BINARY FILES. | |
152 | ||
153 | /ERPRNT- ERROR PRINTOUT. | |
154 | ||
155 | /SQUISH- FILE COMPRESSION PROCESSOR. ELIMINATES 'HOLES' | |
156 | / IN DIRECTORY OF INPUT DEVICE. | |
157 | ||
158 | /SYSCOP- SYSTEM COPY PROCESSOR. ALLOWS TRANSFER OF THE | |
159 | / OS/8 SYSTEM AREA. | |
160 | \f/OPTIONS AVAILABLE IN PIP: | |
161 | ||
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) | |
181 | ||
182 | /COMMENTS ON THE PROGRAM: | |
183 | ||
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: | |
187 | ||
188 | OUTXR=10 | |
189 | INXR=11 | |
190 | TEMP1=12 | |
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 | |
195 | OUTBLK=30 | |
196 | OUDLEN=31 | |
197 | SAME=32 | |
198 | INBLK=33 | |
199 | RECCNT=34 | |
200 | ||
201 | /CONSTANTS USED BY THE DIRECTORY PRINTOUT ROUTINE (OVERLAPPING) ARE: | |
202 | ||
203 | FLENGT=24 | |
204 | BLOKNO=25 | |
205 | DTYPE=27 | |
206 | DCOUNT=30 | |
207 | DLINK=31 | |
208 | WASTE=32 | |
209 | DDATE=33 | |
210 | ECOUNT=35 | |
211 | \f /PIP FOR OS/8 MONITOR | |
212 | /EQUIVALENCES FOR GENERAL CHARACTER I/O ROUTINES | |
213 | ||
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 | |
217 | INBUF=3000 | |
218 | INCTL=1600 /INPUT BUFFER OF 3400 WORDS | |
219 | INRECS=7 | |
220 | INDEVH=6600 | |
221 | ||
222 | /PAGE 6400 IS FREE, EXCEPT DURING /Y COMMAND | |
223 | ||
224 | /EQUIVALENCES NECESSARY TO INTERFACE WITH MONITOR | |
225 | DCB=7760 | |
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 | |
230 | XR=10 | |
231 | TEMP=20 | |
232 | CHAR=21 | |
233 | INFPTR=22 | |
234 | INEOF=23 | |
235 | ||
236 | ABUF=6601 /LINE BUFFER - 150 CHARACTERS LONG | |
237 | SQBUF1=6600 /DIRECTORY BUFFER FOR "SQUISH" OPTION | |
238 | SQBUF2=7200 /"" | |
239 | ||
240 | FIELD 1 | |
241 | ||
242 | /TO ENABLE /E,/F,/L SET | |
243 | /OS78=0 | |
244 | ||
245 | /TO DISABLE /E,/F,/L | |
246 | IFNDEF OS78 <OS78=1> | |
247 | ||
248 | \f /GENERAL CHARACTER I/O ROUTINES FOR BLEEP | |
249 | /CALLED AS FOLLOWS: | |
250 | ||
251 | /JMS I (IOPEN INITIALIZES THE INPUT ROUTINE | |
252 | ||
253 | /JMS I (ICHAR READS A CHARACTER | |
254 | /ERROR RETURN /AC>0 IF END OF FILE, AC<0 IF READ ERROR | |
255 | ||
256 | /JMS I (OOPEN INITIALIZES THE OUTPUT ROUTINE | |
257 | /ERROR RETURN AC>0 IF NO OUTPUT DEVICE/FILE, AC<0 IF ERROR | |
258 | ||
259 | /JMS I (OCHAR OUTPUTS A CHARACTER | |
260 | /ERROR RETURN OUTPUT ERROR OR TOO MUCH OUTPUT | |
261 | ||
262 | /JMS I (OCLOSE CLOSES THE OUTPUT FILE | |
263 | /ERROR RETURN FILE TOO LARGE TO BE CLOSED OR OUTPUT ERROR | |
264 | ||
265 | /JMS I (OTYPE RETURNS DCB WORD OF OUTPUT DEVICE IN AC | |
266 | ||
267 | ||
268 | ||
269 | /PARAMETERS NEEDED: | |
270 | ||
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) | |
275 | /INRECS= [INCTL/256] | |
276 | /INDEVH= ADDRESS OF PAGE FOR INPUT HANDLER | |
277 | /OUDEVH= ADDRESS OF PAGE FOR OUTPUT HANDLER | |
278 | ||
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 | |
283 | ||
284 | *2000 | |
285 | ||
286 | IN7400, 7400 | |
287 | IOPEN, 0 | |
288 | CLA CMA | |
289 | DCA INCHCT /SET INCHCT TO FORCE A READ | |
290 | ISZ INEOF /SET END-OF-FILE FLAG TO FORCE A NEW FILE | |
291 | TAD (7617 | |
292 | DCA INFPTR /RESET FILE POINTER | |
293 | RDF | |
294 | TAD INCDIF | |
295 | DCA .+1 | |
296 | INPTR, HLT /RESTORE CALLING FIELDS | |
297 | JMP I IOPEN | |
298 | ||
299 | ICHAR, 0 | |
300 | IN7600, 7600 | |
301 | RDF | |
302 | TAD INCDIF | |
303 | DCA INRTRN /SAVE CALLING FIELDS | |
304 | INCHAR, CDF INFLD | |
305 | ISZ INJMP /BUMP THREE-WAY UNPACK SWITCH | |
306 | ISZ INCHCT | |
307 | INJMPP, JMP INJMP | |
308 | TAD INEOF | |
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 | |
313 | INGBUF, TAD INCTR | |
314 | CLL | |
315 | TAD (INRECS | |
316 | SNL | |
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 | |
325 | TAD (INCTL+1 | |
326 | DCA INCTLW | |
327 | INCDIF, CDF CIF 0 | |
328 | CDF 10 | |
329 | JMS I INHNDL /CALL THE DEVICE HANDLER | |
330 | INCTLW, 0 | |
331 | INBUFP, INBUF | |
332 | INREC, 0 | |
333 | JMS I (SLASHG /A HANDLER ERROR - SHOULD WE IGNORE? | |
334 | INERRX-. /ADDRESS IF NOT | |
335 | INBREC, TAD INREC | |
336 | TAD (INRECS | |
337 | DCA INREC /UPDATE THE RECORD NUMBER | |
338 | TAD INCTLW | |
339 | AND IN7600 | |
340 | CLL RAL | |
341 | TAD INCTLW | |
342 | AND IN7600 | |
343 | CMA | |
344 | DCA INCHCT /COMPUTE THE NEW CHARACTER COUNT | |
345 | TAD INJMPP | |
346 | DCA INJMP /RESET THE CHARACTER SWITCH | |
347 | TAD INBUFP | |
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 | |
354 | EOFERR, JMP INRTRN | |
355 | INJMP, HLT /THIS IS THE THREE - WAY CHARACTER SWITCH | |
356 | JMP ICHAR1 | |
357 | JMP ICHAR2 | |
358 | ICHAR3, TAD INJMPP | |
359 | DCA INJMP | |
360 | TAD I INPTR | |
361 | IN200, AND IN7400 | |
362 | CLL RTR | |
363 | RTR /COMBINE THE HIGH-ORDER FOUR BITS OF | |
364 | TAD INCTLW | |
365 | RTR /THE TWO WORD TO FORM THE THIRD CHARACTER | |
366 | RTR | |
367 | ISZ INPTR | |
368 | JMP INCOMN | |
369 | ICHAR2, TAD I INPTR | |
370 | AND IN7400 | |
371 | DCA INCTLW /SAVE THE HIGH-ORDER BITS FOR THE THIRD CHAR | |
372 | ISZ INPTR /BUMP THE WORD POINTER | |
373 | ICHAR1, TAD I INPTR | |
374 | INCOMN, AND (377 | |
375 | TAD (-232 | |
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 | |
384 | INCHCT=INNEWF | |
385 | CDF 10 | |
386 | TAD (INDEVH+1 | |
387 | DCA INHNDL /INITIALIZE HANDLER ADDRESS | |
388 | TAD I INFPTR /GET NEXT CD INPUT FILE ENTRY | |
389 | SNA /ANY MORE? | |
390 | JMP I INNEWF /NO - OUT OF INPUT | |
391 | JMS I IN200 | |
392 | 1 /ASSIGN, FETCH HANDLER | |
393 | INHNDL, 0 | |
394 | HLT /HUH? | |
395 | TAD I INFPTR | |
396 | AND (7760 /GET LENGTH PART OF WORD | |
397 | SZA /LENGTH OF 0 MEANS LENGTH >=256 | |
398 | TAD (17 /ADD HIGH-ORDER BITS | |
399 | CLL CML RTR | |
400 | RTR | |
401 | DCA INCTR /STORE LENGTH OF FILE | |
402 | ISZ INFPTR | |
403 | TAD I INFPTR | |
404 | DCA INREC /STORE STARTING RECORD NUMBER OF FILE | |
405 | ISZ INFPTR | |
406 | DCA INEOF /ZERO END-OF-FILE FLAG | |
407 | ISZ INNEWF | |
408 | JMP I INNEWF | |
409 | INCTR=IOPEN | |
410 | PAGE | |
411 | \fOOPEN, 0 /OPEN OUTPUT FILE | |
412 | OU7600, 7600 | |
413 | / RDF | |
414 | / TAD OUCDIF | |
415 | / DCA OORETN | |
416 | TAD OU7601 | |
417 | DCA OUBLK | |
418 | TAD (OUDEVH+1 | |
419 | DCA OUHNDL | |
420 | CDF 10 | |
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 | |
425 | JMS I (200 | |
426 | 1 /ASSIGN, FETCH HANDLER | |
427 | OUHNDL, 0 /OUTPUT DEVICE HANDLER ENTRY | |
428 | HLT /HUH? | |
429 | OUENTR, TAD I OU7600 | |
430 | JMS I (200 | |
431 | 3 /ENTER OUTPUT FILE | |
432 | OUBLK, 7601 /REPLACED WITH STARTING BLOCK | |
433 | OUELEN, 0 /REPLACED WITH LENGTH OF HOLE | |
434 | JMP OEFAIL /FAILED - MAYBE WE ASKED TOO MUCH | |
435 | DCA OUCCNT | |
436 | DCA I (OUTINH /ZERO OUTPUT INHIBIT FLAG | |
437 | JMS I (OUSETP | |
438 | ISZ OOPEN | |
439 | OORETN, CDF CIF 10 /RESTORE CALLING FIELDS | |
440 | JMP I OOPEN | |
441 | OEFAIL, TAD I OU7600 | |
442 | AND (7760 /GET REQUESTED LENGTH | |
443 | SNA CLA /WAS IT AN INDEFINITE REQUEST | |
444 | JMP ONTERR /YES - CANNOT ENTER THE FILE | |
445 | TAD I OU7600 | |
446 | AND (17 /MAKE THE REQUESTED LENGTH ZERO | |
447 | DCA I OU7600 | |
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 | |
453 | \fOUTDMP, 0 | |
454 | DCA OUCTLW /STORE THE CONTROL WORD | |
455 | CDF 10 | |
456 | TAD I (OUTINH | |
457 | SZA CLA | |
458 | JMP OUNOWR | |
459 | TAD OUCCNT | |
460 | SNA | |
461 | ISZ OUCTLW | |
462 | TAD OUBLK | |
463 | DCA OUREC /COMPUTE THE STARTING BLOCK NUMBER OF THIS TRANSFER | |
464 | TAD OUCTLW | |
465 | CLL RTL | |
466 | RTL | |
467 | RTL | |
468 | AND (17 /COMPUTE THE NUMBER OF RECORDS | |
469 | TAD OUCCNT /UPDATE THE NUMBER OF BLOCKS IN THE FILE | |
470 | DCA OUCCNT | |
471 | TAD OUCCNT | |
472 | CLL CML | |
473 | TAD OUELEN | |
474 | SNL SZA CLA /DOES THE LENGTH EXCEED THE GIVEN LENGTH? | |
475 | JMP I OUTDMP /YES - SIGNAL OUTPUT ERROR | |
476 | OUCDIF, CDF CIF 0 | |
477 | CDF 10 | |
478 | JMS I OUHNDL | |
479 | OUCTLW, 0 | |
480 | OUBUF | |
481 | OUREC, 0 | |
482 | JMS I (SLASHG | |
483 | .+2-. | |
484 | OUNOWR, ISZ OUTDMP /BUMP OUTDMP TO NORMAL RETURN | |
485 | JMP I OUTDMP | |
486 | \fOCLOSE, 0 | |
487 | CDF 10 | |
488 | TAD I (OUTINH | |
489 | SZA CLA /IS OUTPUT INHIBITED? | |
490 | JMP OCISZ /YES - CLOSE IS A NOP | |
491 | JMS I (OTYPE | |
492 | AND (770 | |
493 | TAD (-PTP /CHECK FOR PAPER TAPE PUNCH OUTPUT | |
494 | SZA CLA /AND SKIP ^Z OUTPUT IF TRUE | |
495 | TAD (232 /OUTPUT A ^Z | |
496 | JMS I (OCHAR | |
497 | JMP OCRET | |
498 | JMS I (OCHAR | |
499 | JMP OCRET | |
500 | FILLLP, JMS I (OCHAR | |
501 | JMP OCRET | |
502 | JMS I (OTYPE /GET TYPE OF OUTPUT DEVICE | |
503 | SPA CLA | |
504 | TAD (100 /IF ITS A DIRECTORY DEVICE FORCE A RECORD | |
505 | TAD (77 /BOUNDARY - OTHERWISE A HALF-RECORD | |
506 | AND I (OUDWCT | |
507 | SZA CLA /UP TO THE BOUNDARY YET? | |
508 | JMP FILLLP /NO - FILL WITH ZEROS | |
509 | TAD I (OUDWCT /GET DOUBLEWORD COUNT LEFT | |
510 | TAD (OUCTL&3700 | |
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 | |
514 | JMS OUTDMP | |
515 | JMP OCRET /AN ERROR OCCURRED WHILE DUMPING THE BUFFER | |
516 | NODUMP, TAD I OU7600 /GET THE DEVICE NUMBER | |
517 | JMS I (200 | |
518 | 4 /CLOSE THE OUTPUT FILE | |
519 | OU7601, 7601 /POINTER TO THE OUTPUT FILE NAME | |
520 | OUCCNT, 0 | |
521 | SKP /ERROR WHILE CLOSING THE FILE - BAD! | |
522 | OCISZ, ISZ OCLOSE | |
523 | OCRET, CDF CIF 10 /RESTORE CALLING FIELDS | |
524 | JMP I OCLOSE | |
525 | PAGE | |
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 | |
529 | DCA OUDWCT | |
530 | / TAD (OUBUF | |
531 | IFNZRO OUBUF <ERROR!> /V3 | |
532 | DCA OUPTR /INITIALIZE WORD POINTER | |
533 | TAD OUJMPE | |
534 | DCA OUJMP /INITIALIZE THREE-WAY CHARACTER SWITCH | |
535 | JMP I OUSETP | |
536 | ||
537 | OCHAR, 0 | |
538 | AND (377 | |
539 | DCA OUTEMP | |
540 | RDF | |
541 | TAD (CDF CIF 0 | |
542 | DCA OUCRET | |
543 | TAD OUTINH | |
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 | |
549 | JMP OCHAR1 | |
550 | JMP OCHAR2 | |
551 | OCHAR3, TAD OUTEMP | |
552 | CLL RTL | |
553 | RTL | |
554 | AND (7400 | |
555 | TAD I OUPOLD | |
556 | DCA I OUPOLD /UPDATE FIRST WORD OF TWO WITH HIGH | |
557 | /ORDER 4 BITS OF THIRD CHAR | |
558 | TAD OUTEMP | |
559 | CLL RTR | |
560 | RTR | |
561 | RAR | |
562 | AND (7400 | |
563 | TAD I OUPTR | |
564 | DCA I OUPTR /UPDATE SECOND WORD FROM LOW ORDER 4 BITS | |
565 | TAD OUJMPE | |
566 | DCA OUJMP /RESET SWITCH | |
567 | ISZ OUPTR | |
568 | ISZ OUDWCT /BUMP DOUBLEWORD COUNTER EVERY 3 CHARS | |
569 | JMP OUCOMN | |
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 | |
574 | JMP OUCOMN | |
575 | OCHAR2, TAD OUPTR | |
576 | DCA OUPOLD /SAVE POINTER TO FIRST WORD OF TWO | |
577 | ISZ OUPTR /BUMP WORD POINTER TO SECOND WORD | |
578 | OCHAR1, TAD OUTEMP | |
579 | DCA I OUPTR | |
580 | OUCOMN, ISZ OCHAR | |
581 | OUCRET, HLT /RESTORE CALLING FIELDS | |
582 | JMP I OCHAR | |
583 | OUTEMP, 0 | |
584 | OUPOLD, 0 | |
585 | OUPTR, 0 | |
586 | OUJMPE, JMP OUJMP | |
587 | OUDWCT, 0 | |
588 | OUTINH, 0 | |
589 | \fOTYPE, 0 | |
590 | RDF | |
591 | TAD (CDF CIF 0 | |
592 | DCA OTRTN | |
593 | CDF 10 | |
594 | TAD I (7600 | |
595 | AND (17 | |
596 | TAD (DCB-1 | |
597 | DCA OUTEMP | |
598 | TAD I OUTEMP | |
599 | OTRTN, HLT | |
600 | JMP I OTYPE | |
601 | CTCTST, 0 | |
602 | TAD (200 /V3 | |
603 | KRS | |
604 | TAD (-203 | |
605 | SNA CLA /IS THE TELETYPE BUFFER A ^C | |
606 | KSF /WITH THE TELETYPE FLAG ON? | |
607 | JMP I CTCTST /NO | |
608 | LEAVE, CDF CIF 0 /YES - GO TO MONITOR | |
609 | JMP I (7600 /THROUGH THE "SAVE CORE" RETURN | |
610 | ||
611 | SLASHG, 0 | |
612 | DCA CTCTST | |
613 | TAD SQFLAG | |
614 | SZA CLA /ARE WE SQUISHING? | |
615 | JMP I (SQIOER /YES | |
616 | TAD CTCTST | |
617 | SPA CLA /ONLY IGNORE HARD ERRORS | |
618 | TAD I (MPARAM | |
619 | AND (40 | |
620 | SZA CLA / "G" SWITCH | |
621 | SLGRET, JMP I SLASHG /IGNORED! | |
622 | TAD I SLASHG | |
623 | TAD SLASHG | |
624 | DCA SLASHG /SET UP NON-IGNORE ADDRESS | |
625 | TAD CTCTST | |
626 | JMP I SLASHG /RETURN WITH AC RESTORED | |
627 | ||
628 | \f | |
629 | IFZERO OS78 < | |
630 | DIR, DCA DTYPE /SAVE TYPE OF REQUEST | |
631 | TAD I (7600 | |
632 | SZA CLA /IS THERE AN OUTPUT FILE? | |
633 | JMP I (DIRPRE /YES | |
634 | DCA TTYDEV+1 | |
635 | JMS I (200 | |
636 | 12 /ASSIGN WITHOUT FETCH | |
637 | TTYDEV, 5524 /COMPRESSED CODE FOR "TTY" | |
638 | 0 | |
639 | 0 | |
640 | JMP I (PIP /V3 WHAT - NO TELETYPE! | |
641 | TAD TTYDEV+1 | |
642 | DCA I (7600 | |
643 | JMP I (DIRPRE | |
644 | > | |
645 | ||
646 | IFNZRO OS78 < | |
647 | DIR, JMS I (PIPERR /TYPE OUT MESSAGE | |
648 | 14 | |
649 | DIRMSG, TEXT "USE DIRECT" | |
650 | > | |
651 | ||
652 | PAGE | |
653 | \f /PIP PROPER BEGINS HERE | |
654 | /********************** | |
655 | ||
656 | /IMAGE MODE PROCESSOR FOR PIP | |
657 | ||
658 | IMAGE, JMS I (FIXLEN | |
659 | JMS I (OUTOPN | |
660 | JMS IMTRA | |
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 | |
665 | DCA IMCCNT | |
666 | TAD I IM7600 | |
667 | JMS I (200 | |
668 | 4 /CLOSE | |
669 | 7601 /FILE NAME | |
670 | IMCCNT, 0 | |
671 | JMP I (AOUERR | |
672 | JMP I (PIPCLR | |
673 | ||
674 | ENDFUJ, 0 /PART OF DIRECTORY PRINTING ROUTINE | |
675 | JMS I (PRNUM | |
676 | TAD (-6 | |
677 | JMS I (PRWD /PRINT SIX WORDS | |
678 | 0006 / F | |
679 | 2205 /RE | |
680 | 0500 /E | |
681 | 0214 /BL | |
682 | 1703 /OC | |
683 | 1323 /KS | |
684 | JMS I (PCRLF | |
685 | JMS I (PCRLF /LEAVE A SPACE BETWEEN DIRECTORIES | |
686 | ISZ INEOF /SIMULATE "END OF FILE" FOR INPUT ROUTINE | |
687 | CLA CMA | |
688 | DCA I (INCHCT /AS WELL AS "END OF BUFFER" | |
689 | JMP I ENDFUJ | |
690 | \fIMHNDL, /V3 | |
691 | SQTRA, 0 | |
692 | TAD SQTRA | |
693 | DCA IMTRA /FAKE A CALL TO "IMTRA" | |
694 | TAD RECCNT /SETTING UP THE ARGS TO DO THE SQUISHING FOR US | |
695 | DCA I (INCTR | |
696 | TAD IHNDLR | |
697 | DCA IMHNDL | |
698 | TAD INBLK | |
699 | DCA IMREC | |
700 | TAD OUTBLK | |
701 | DCA I (OUCCNT | |
702 | DCA INEOF | |
703 | JMP IMRCLP | |
704 | ||
705 | IMTRA, 0 | |
706 | JMS I (IOPEN /INITIALIZE INPUT ROUTINE | |
707 | AGAIN, TAD INEOF /IOPEN ALWAYS SETS INEOF | |
708 | SNA CLA /KEEP READING? | |
709 | JMP IMRCLP /YES | |
710 | /NO, OPEN NEXT FILE | |
711 | IMFILP, JMS I (INNEWF /SET UP PARAMS FOR NEXT FILE | |
712 | JMP I IMTRA /NO NEXT FILE | |
713 | TAD I (INHNDL | |
714 | DCA IMHNDL /GET DEVICE HANDLER ENTRY | |
715 | TAD I (INREC | |
716 | DCA IMREC /AND STARTING BLOCK NUMBER | |
717 | IMRCLP, TAD I (INCTR | |
718 | CLL | |
719 | TAD (15 | |
720 | SNL /IF LINK IS ON, THERE ARE LESS THAN 16 BLOCKS LEFT | |
721 | DCA I (INCTR | |
722 | SZL | |
723 | ISZ INEOF | |
724 | CLL CML CMA RTR | |
725 | RTR | |
726 | RTR | |
727 | TAD (3201 /FORM A FULL OR PARTIAL READ CONTROL WORD | |
728 | DCA IMCTLW | |
729 | JMS I (CTCTST /CHECK FOR ^C | |
730 | CIF 0 | |
731 | JMS I IMHNDL | |
732 | IMCTLW, 0 | |
733 | OUBUF | |
734 | IMREC, 0 | |
735 | JMS I (SLASHG | |
736 | IMERRX-. | |
737 | TAD IMREC | |
738 | TAD (15 | |
739 | DCA IMREC /UPDATE BLOCK NUMBER | |
740 | CLA CLL CML RAR | |
741 | TAD IMCTLW | |
742 | IMOUT, JMS I (OUTDMP /WRITE OUT WHAT WE JUST READ IN | |
743 | JMP I (AOUERR /WRITE ERROR - BAD! | |
744 | JMP AGAIN /V3 | |
745 | \fIMERRX, ISZ INEOF /SIGNAL EOF OR WORSE | |
746 | SPA CLA /WHICH ONE IS IT? | |
747 | JMP IM7600 | |
748 | TAD (6377 /MARCH DOWN THROUGH CORE | |
749 | IMEFLP, DCA CHAR /LOOKING FOR THE FIRST NON-ZERO WORD | |
750 | CDF 0 | |
751 | TAD I CHAR | |
752 | SZA CLA | |
753 | JMP IMNZRO | |
754 | CLA CMA CLL | |
755 | TAD CHAR | |
756 | SZL /IF WE GO THROUGH THE BUFFER WITHOUT A NON-ZERO WORD | |
757 | JMP IMEFLP | |
758 | IM7600, 7600 | |
759 | JMS I (PIPERR /SOMETHING IS WRONG (HANDLER SHOULD HAVE INSERTED | |
760 | 4 /A ^Z AT LEAST) | |
761 | IMNZRO, CDF 10 | |
762 | TAD CHAR | |
763 | CLL CML RAR | |
764 | AND IM7600 | |
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 | |
767 | PAGE | |
768 | \f/** PIP STARTS HERE (OR HERE+1 IF CHAINED TO) ** | |
769 | ||
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 | |
773 | ||
774 | LFEED, TAD CHAR | |
775 | DCA I XR /PUT THE LINE FEED IN THE LINE BUFFER | |
776 | EOL, DCA I XR /MARK THE END OF USEFUL INFO | |
777 | JMS I (CTCTST | |
778 | TAD (ABUF-1 | |
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 | |
782 | JMP EOFTST | |
783 | JMS I (OCHAR /OUTPUT THE CHARACTER | |
784 | JMP I (AOUERR | |
785 | JMP EOLLP | |
786 | EOFTST, TAD AEOFFG | |
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? | |
793 | JMP PIPCD /NO | |
794 | CDF CIF 0 /YES | |
795 | JMP I (7605 /EXIT TO OS/8 WITHOUT SAVING CORE | |
796 | PIPCD, JMS I (200 /OF COURSE THE MONITOR IS IN CORE! | |
797 | 5 /COMMAND DECODE | |
798 | 0 /NO ASSUMED EXTENSIONS ON INPUT | |
799 | L20, /V3 | |
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 | |
803 | TAD PIPSNA | |
804 | DCA I (INCTZF /RESET INPUT SWITCH TO DETECT "^Z"'S | |
805 | TAD I (MPARAM+1 | |
806 | AND (40 /"S" SWITCH | |
807 | SZA CLA | |
808 | JMP I (SQUISH /IT WAS ON - COMPRESS THE INDICATED DEVICES | |
809 | TAD I (MPARAM+2 | |
810 | RTL | |
811 | SZL CLA /"Z" SWITCH IN THE LINK | |
812 | JMS I (DZERO /ZERO DIRECTORY BEFORE PROCEEDING | |
813 | TAD I (MPARAM | |
814 | AND (400 /"D" SWITCH | |
815 | SZA CLA | |
816 | JMS I (DELETE /DELETE OUTPUT FILE | |
817 | TAD I (MPARAM+2 /IS /Y ON? | |
818 | SPA CLA | |
819 | JMP I (SYSCOP /YEP..TRANSFER SYSTEM HEAD | |
820 | TAD I (MPARAM | |
821 | AND (301 /"E","F" AND "L" SWITCHES | |
822 | SZA /ANY ONE OF THEM ON? | |
823 | JMP I (DIR /YES - LIST A DIRECTORY | |
824 | TAD I (MPARAM | |
825 | RTL | |
826 | AND (40 /"I" SWITCH ROTATED TWO LEFT | |
827 | SZA CLA | |
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 | |
834 | ||
835 | /DEFAULT MODE OF TRANSFER IS ASCII | |
836 | ||
837 | ASCII, TAD I (MPARAM+1 | |
838 | AND L20 | |
839 | DCA COPTSW | |
840 | TAD COPTSW | |
841 | JMS I (ASCI2 /TEST FOR OUTPUT DEVICE | |
842 | JMS I (OUTOPN | |
843 | JMS I (IOPEN /OPEN THE INPUT FILES | |
844 | DCA AEOFFG /ZERO THE END-OF-FILE FLAG | |
845 | JMS I (LEADER | |
846 | JMP I (ASCIGO | |
847 | ||
848 | /ENTRY ON END OF INPUT | |
849 | ASCEOF, SPA CLA /WAS IT END OF INPUT OR AN INPUT ERROR? | |
850 | PER4, JMS I (PIPERR | |
851 | 4 | |
852 | ISZ AEOFFG /SET END-OF-INPUT FLAG | |
853 | JMP EOL /PROCESS LAST LINE (IF ANY) | |
854 | AEOFFG, 0 | |
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 | |
859 | SPA CLA | |
860 | JMP I RUBOUT /DIRECTORY DEVICE - DON'T BOTHER | |
861 | RBTLP, TAD CHAR | |
862 | TAD (-214 | |
863 | SNA CLA /IS THE FORM CONTROL CHAR A FORM-FEED? | |
864 | IAC /YES - OUTPUT BLANK TAPE INSTEAD | |
865 | TAD (377 | |
866 | DCA I XR /PUT IN BUFFER | |
867 | ISZ TEMP | |
868 | JMP RBTLP /LOOP FOR THE REQUISITE COUNT | |
869 | JMP I RUBOUT | |
870 | COPTSW, 0 | |
871 | ||
872 | DEND, SPA CLA | |
873 | JMP PER4 | |
874 | JMP ACLOSE | |
875 | PAGE | |
876 | \f *3200 | |
877 | /ASCII PROCESSOR CONTINUED | |
878 | ||
879 | ASCIGO, TAD (ABUF-2 | |
880 | DCA XR | |
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 | |
887 | TAD (-177 | |
888 | SNA | |
889 | JMP ACHLP /DITTO RUBOUTS | |
890 | TAD (177-32 /V3C | |
891 | SNA | |
892 | JMP I (ASCPTCH /7-BIT ^Z CHECK | |
893 | TAD (232 /FORCE COLUMN 8 ON | |
894 | DCA CHAR | |
895 | TAD CHAR | |
896 | TAD (-216 | |
897 | CLL | |
898 | TAD ASCI5 | |
899 | SNL /IS THE CHARACTER A FORM CONTROL CHARACTER? | |
900 | JMP CINSRT /NO | |
901 | TAD ASCJMP /YES - GO TO APPROPRIATE ROUTINE | |
902 | DCA .+1 | |
903 | HLT | |
904 | ASCJMP, JMP I .+1 | |
905 | TAB | |
906 | LFEED | |
907 | VTAB | |
908 | FFEED | |
909 | CARRET | |
910 | CINSRT, 7600 /GRP 2 CLA | |
911 | TAD CHAR | |
912 | ADCAXR, DCA I XR /STORE THE CHARACTER IN THE LINE BUFFER | |
913 | ISZ COLCT /ALWAYS BUMP THE COLUMN POINTER | |
914 | TESTXR, TAD XR | |
915 | TAD (-ABUF-226 | |
916 | SPA CLA /HAS THE BUFFER OVERFLOWED? | |
917 | JMP ACHLP /NO - GET NEXT CHARACTER | |
918 | JMS I (PIPERR | |
919 | 1 | |
920 | \fTAB, TAD I (COPTSW | |
921 | SNA CLA /DO WE WANT TO CONVERT? | |
922 | JMP TABRBT /NO | |
923 | TABLP, TAD (240 | |
924 | DCA I XR /OUTPUT A SPACE | |
925 | ISZ COLCT | |
926 | TAD COLCT | |
927 | AND (7 | |
928 | SZA CLA /IS THE COLUMN COUNTER A MULTIPLE OF 8? | |
929 | JMP TABLP /NOT YET | |
930 | JMP TESTXR /YES - CHECK BUFFER OVERFLOW | |
931 | TABRBT, TAD CHAR | |
932 | DCA I XR | |
933 | CLA CMA | |
934 | JMS I (RUBOUT /TWO RUBOUTS FOLLOW A TAB | |
935 | JMP TESTXR /CHECK FOR BUFFER OVERFLOW | |
936 | VTAB, TAD I (COPTSW | |
937 | SZA CLA /SHOULD WE CONVERT? | |
938 | JMP VTLF /YES | |
939 | TAD CHAR | |
940 | DCA I XR | |
941 | TAD (-4 | |
942 | JMS I (RUBOUT /FOUR RUBOUTS AFTER A VERTICAL TAB | |
943 | JMP I (EOL | |
944 | FFLF, TAD (-4 /NINE LINE FEED SIMULATE A FORM FEED | |
945 | VTLF, TAD (-5 /FIVE LINE FEEDS SIMULATE A VERTICAL TAB | |
946 | DCA TEMP | |
947 | TAD (212 | |
948 | DCA I XR | |
949 | ISZ TEMP | |
950 | JMP .-3 | |
951 | JMP I (EOL /FORM FEED AND VERTICAL TAB ARE LINE ENDERS | |
952 | \fFFEED, TAD I (COPTSW | |
953 | SZA CLA /SHOULD WE CONVERT? | |
954 | JMP FFLF /YES | |
955 | TAD CHAR | |
956 | DCA I XR | |
957 | TAD (-11 /NINE RUBOUTS AFTER A FORM FEED | |
958 | JMS I (RUBOUT | |
959 | JMP I (EOL | |
960 | CARRET, TAD I (MPARAM | |
961 | RTL | |
962 | SMA CLA /"C" SWITCH MEANS DELETE TRAILING BLANKS FROM CARDS | |
963 | JMP NOTOPT /IT WASN'T ON | |
964 | TOPT, TAD XR | |
965 | DCA TEMP | |
966 | TAD I TEMP | |
967 | TAD (-240 | |
968 | SZA CLA /WAS THE LAST CHAR ON THE LINE A SPACE? | |
969 | JMP NOTOPT /NO | |
970 | CLA CMA | |
971 | TAD XR /YES - BACK UP THE LINE POINTER | |
972 | DCA XR | |
973 | JMP TOPT | |
974 | NOTOPT, TAD CHAR | |
975 | DCA I XR /STORE THE CARRIAGE RETURN IN THE BUFFER | |
976 | JMP TESTXR /CARRIAGE RETURN IS NOT A LINE TERMINATOR | |
977 | COLCT, 0 | |
978 | ||
979 | OUTOPN, 0 | |
980 | JMS I (OOPEN | |
981 | SMA CLA | |
982 | JMP I OUTOPN | |
983 | JMS I (PIPERR | |
984 | ASCI5, 5 | |
985 | PAGE | |
986 | \f /SUBROUTINES CALLED BY THE REST OF PIP | |
987 | ||
988 | K770, 770 /** DON'T MOVE THIS CONSTANT | |
989 | DELETE, 0 | |
990 | TAD P7600 | |
991 | DCA DPFILE | |
992 | CLA CLL CMA RTL | |
993 | DCA CHAR /MAXIMUM OF THREE OUTPUT FILES | |
994 | DELOOP, TAD (7201 | |
995 | DCA DLHNDL | |
996 | TAD I DPFILE | |
997 | SNA /DOES THIS FILE EXIST? | |
998 | JMP I DELETE /THAT'S ALL | |
999 | JMS I C200 | |
1000 | 1 /ASSIGN HANDLER FOR THE DELETION | |
1001 | DLHNDL, 0 | |
1002 | HLT | |
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 | |
1010 | 3 | |
1011 | TAD DPFILE | |
1012 | TAD DP4 | |
1013 | DCA DPFILE | |
1014 | ISZ CHAR | |
1015 | JMP DELOOP /DELETE AS MANY FILES AS HE LISTED(UP TO 3) | |
1016 | JMP I DELETE | |
1017 | \fDZERO, 0 /SUBROUTINE TO ZERO THE DIRECTORY OF THE | |
1018 | /FIRST OUTPUT DEVICE | |
1019 | JMS I (OTYPE | |
1020 | CLL RTL | |
1021 | SZL /IS DEVICE READ-ONLY? | |
1022 | JMP OZERR /YES - ERROR | |
1023 | RTR | |
1024 | AND K770 /MASK OUT DEVICE TYPE | |
1025 | CLL RTR | |
1026 | RAR | |
1027 | TAD (DEVLEN /USE IT TO INDEX A TABLE OF DEVICE LENGTHS | |
1028 | DCA PIPERR | |
1029 | TAD I PIPERR | |
1030 | SNA | |
1031 | JMP I DZERO /DEVICE LENGTH ZERO MEANS NON-DIRECTORY DEVICE | |
1032 | DCA PIPERR /STORE LENGTH | |
1033 | TAD (OUDEVH+1 | |
1034 | DCA OZHNDL | |
1035 | TAD I P7600 | |
1036 | JMS I C200 | |
1037 | 1 /ASSIGN DEVICE, FETCH HANDLER | |
1038 | OZHNDL, 0 | |
1039 | HLT | |
1040 | TAD I (MPARAM+2 /IF /Y ON, DO SYSTEM ZERO | |
1041 | SPA CLA | |
1042 | JMP ZRO70 | |
1043 | TAD OZHNDL /BUT IF NOT, CHECK FOR SYSTEM ZERO | |
1044 | TAD (-7607 | |
1045 | SZA CLA | |
1046 | JMP ZRO70+1 /NOT SYSTEM FILES BEGIN AT 7 | |
1047 | JMS I (CONFRM /ASK IF HE'S SURE | |
1048 | SYSZRO /V3 | |
1049 | ZRO70, TAD (61 | |
1050 | TAD (7 | |
1051 | DCA I (DFORG | |
1052 | DCA I (SQFLAG /AND CLEAR OUT SQUISHES | |
1053 | TAD PIPERR | |
1054 | TAD I (DFORG | |
1055 | DCA I (DLENGT | |
1056 | JMS I (GETEQ | |
1057 | DCA I (DWASTE /DEFINE # OF WASTE WORDS | |
1058 | DCA I (MPARAM+3 /KILL = OPTION FOR FUTURE /I TRANSFERS | |
1059 | CIF 0 | |
1060 | JMS I OZHNDL | |
1061 | 5410 /V3 OUTPUT 6 BLOCKS FROM FIELD 1 | |
1062 | DIRECT | |
1063 | 1 /ALL DIRECTORIES ARE IN RECORD 1 | |
1064 | OZERR, JMS I (PIPERR /ERROR WHILE ZEROING DIRECTORY | |
1065 | 2 | |
1066 | DCA OLDDIR /ZERO DIRECTORY POINTER TO FORCE A NEW READ | |
1067 | JMP I DZERO | |
1068 | \fPIPERR, 0 | |
1069 | P7600, 7600 /V3 CLA | |
1070 | JMS I (SRSTOR /RESET 07600! | |
1071 | CDF 10 /JUST IN CASE | |
1072 | TAD I PIPERR /GET ARG | |
1073 | TAD (ERRTBL | |
1074 | DCA TEMP | |
1075 | TAD I TEMP | |
1076 | JMS I (ERPRNT | |
1077 | JMP I (PIP /RESTART PIP | |
1078 | ||
1079 | LEADER, 0 | |
1080 | JMS I (OTYPE | |
1081 | C200, AND K770 /GET THE TYPE OF THE OUTPUT DEVICE | |
1082 | TAD (-PTP /IS IT A PAPER TAPE PUNCH? | |
1083 | SZA CLA | |
1084 | JMP I LEADER /NO | |
1085 | TAD P7600 | |
1086 | DCA TEMP | |
1087 | JMS I (OCHAR /PUT OUT SOME LEADER | |
1088 | JMP I (AOUERR | |
1089 | ISZ TEMP | |
1090 | JMP .-3 | |
1091 | JMP I LEADER | |
1092 | PAGE | |
1093 | \f /TABLE OF DEVICE LENGTHS FOR /Z OPTION | |
1094 | ||
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 | |
1102 | 6437 /21 TD8E | |
1103 | 0 | |
1104 | 1520 / 1/2 OF AN RK8E IS 23 | |
1105 | 0 /24 | |
1106 | 7022 /25 RX01 FLOPPY DISK | |
1107 | ZBLOCK 52 /ALL THE REST | |
1108 | ||
1109 | ||
1110 | FIXLEN, 0 /ROUTINE TO ESTIMATE OUTPUT FILE LENGTH | |
1111 | TAD I (7600 | |
1112 | AND (7760 | |
1113 | SZA CLA /DID THE USER PROVIDE AN ESTIMATE? | |
1114 | JMP I FIXLEN /YES - USE IT | |
1115 | DCA CHAR | |
1116 | TAD (7617 | |
1117 | DCA TEMP | |
1118 | FIXLP, TAD I TEMP /GET NEXT INPUT FILE | |
1119 | SNA | |
1120 | JMP FIXOVR /NO MORE INPUT FILES | |
1121 | AND (7760 | |
1122 | CIA CLL /GET LENGTH AS A POSITIVE NUMBER | |
1123 | /(LENGTH OF ZERO TURNS LINK ON) | |
1124 | TAD CHAR | |
1125 | DCA CHAR /UPDATE CUMULATIVE LENGTH | |
1126 | SZL CLA /DID CUMULATIVE LENGTH OVERFLOW 256 BLOCKS? | |
1127 | JMP I FIXLEN /YES - CAN'T ESTIMATE IT | |
1128 | ISZ TEMP | |
1129 | ISZ TEMP | |
1130 | JMP FIXLP | |
1131 | FIXOVR, TAD CHAR | |
1132 | TAD I (7600 | |
1133 | DCA I (7600 /STICK LENGTH IN OUTPUT FILE DESCRIPTOR | |
1134 | JMP I FIXLEN | |
1135 | \fNOYES, TEXT /NO/ | |
1136 | TEXT /YES/ | |
1137 | ||
1138 | CONFRM, 0 | |
1139 | TAD I (MPARAM+1 | |
1140 | RTL /'O' BIT TO SIGN | |
1141 | SPA CLA | |
1142 | JMP GOTCON /V3 'O' MEANS OK, ASSUME 'YES' | |
1143 | TAD I CONFRM /V3 | |
1144 | JMS I (ERPRNT | |
1145 | KSF | |
1146 | JMP .-1 | |
1147 | JMS I (CTCTST | |
1148 | KRB /LOOK AT HIS REPLY | |
1149 | AND (177 /IGNORE PARITY TTY | |
1150 | TAD (-"Y!7600 /V3 | |
1151 | SNA CLA /IS IT YES? | |
1152 | ISZ SQFLAG /SET SQFLAG TO 1 (NEEDED 1 LATER) | |
1153 | TAD SQFLAG /USE SQFLAG AS INDEX FOR MESSAGE | |
1154 | CLL RAL | |
1155 | TAD (NOYES | |
1156 | JMS I (ERPRNT | |
1157 | TAD SQFLAG | |
1158 | SNA CLA | |
1159 | JMP I (PIP | |
1160 | CNFMXT, ISZ CONFRM | |
1161 | JMP I CONFRM | |
1162 | ||
1163 | GOTCON, ISZ SQFLAG /SET SQFLAG | |
1164 | JMP CNFMXT /AND TAKE SKIP EXIT | |
1165 | PAGE | |
1166 | \f /DIRECTORY PRINTER FOR PIP | |
1167 | MDATE=7666 | |
1168 | ||
1169 | DIRPRE, JMS I (OUTOPN /OPEN THE OUTPUT FILE | |
1170 | TAD (ABUF | |
1171 | DCA CHAR /ABUF WILL BE A TEMPORARY ARRAY OF STARTING FILES | |
1172 | TAD (7617 | |
1173 | DCA TEMP | |
1174 | TAD I (7617 | |
1175 | SNA | |
1176 | JMS I (DSKNUM | |
1177 | DCA I (7617 /DEFAULT DIRECTORY IS DSK: | |
1178 | DFUJLP, TAD I TEMP | |
1179 | SNA /ARE WE THROUGH WITH THE INPUT DEVICES? | |
1180 | JMP GETDIR /YES | |
1181 | AND (17 | |
1182 | DCA I TEMP /ONLY THE DEVICE NUMBER IS IMPORTANT | |
1183 | TAD I TEMP | |
1184 | TAD (DCB-1 | |
1185 | DCA PRWD | |
1186 | CLA CLL CML RTL | |
1187 | TAD TEMP | |
1188 | DCA INFPTR /THIS SERVES NO FUNCTION EXCEPT IMPROVING ERROR MESSAGES | |
1189 | TAD I PRWD | |
1190 | SMA CLA /IS THE DEVICE A DIRECTORY DEVICE? | |
1191 | JMS I (PIPERR /NO | |
1192 | 6 | |
1193 | ISZ TEMP | |
1194 | TAD I TEMP | |
1195 | DCA I CHAR /SAVE THE STARTING BLOCK NUMBER | |
1196 | CLA IAC | |
1197 | DCA I TEMP /READ FROM THE DIRECTORY | |
1198 | ISZ TEMP | |
1199 | ISZ CHAR | |
1200 | JMP DFUJLP | |
1201 | GETDIR, TAD (ABUF | |
1202 | DCA CHAR | |
1203 | JMS PCRLF | |
1204 | TAD I (MDATE | |
1205 | JMS I (PDATE | |
1206 | JMS PCRLF | |
1207 | JMS I (IOPEN /RESET POINTERS - WERE GONNA FAKE OUT THOSE "GENERAL" | |
1208 | /ROUTINES | |
1209 | JMP I (NXTDIR | |
1210 | \fPRWD, 0 /ROUTINE TO PRINT SIXBIT TEXT | |
1211 | SNA /IS COUNT ZERO? | |
1212 | CMA /MAKE IT ONE | |
1213 | DCA PRCT /STORE COUNT | |
1214 | PRWDLP, TAD I PRWD | |
1215 | PR212, RTR | |
1216 | RTR | |
1217 | RTR | |
1218 | JMS PR6BIT | |
1219 | TAD I PRWD | |
1220 | JMS PR6BIT | |
1221 | ISZ PRWD | |
1222 | ISZ PRCT | |
1223 | JMP PRWDLP | |
1224 | JMP I PRWD | |
1225 | PRCT, 0 | |
1226 | PR6BIT, 0 | |
1227 | AND (77 | |
1228 | SZA | |
1229 | TAD (240 /V3 | |
1230 | AND (77 /V3 | |
1231 | TAD (240 /V3 | |
1232 | JMS I (OCHAR | |
1233 | JMP I (AOUERR | |
1234 | JMP I PR6BIT | |
1235 | \fPRNUM, 0 | |
1236 | DCA PRWD | |
1237 | DCA TEMP | |
1238 | TAD (PWRTEN | |
1239 | DCA PCRLF | |
1240 | PRNMLP, DCA PR6BIT | |
1241 | TAD I PCRLF | |
1242 | SNA | |
1243 | JMP PRLAST /V3 | |
1244 | CLL | |
1245 | TAD PRWD | |
1246 | SNL | |
1247 | JMP .+4 | |
1248 | DCA PRWD | |
1249 | ISZ PR6BIT | |
1250 | JMP PRNMLP+1 | |
1251 | CLA | |
1252 | TAD PR6BIT | |
1253 | TAD TEMP | |
1254 | SNA | |
1255 | PBLJMP, JMP PRBLNK /INCREMENTED BY PDATE TO KILL LEADING BLANKS | |
1256 | TAD (260 | |
1257 | JMS PR6BIT | |
1258 | CLA CLL CML RAR | |
1259 | DCA TEMP | |
1260 | ISZ PCRLF | |
1261 | JMP PRNMLP | |
1262 | PRBLNK, JMS PR6BIT | |
1263 | JMP .-3 | |
1264 | PRLAST, TAD PRWD /V3 | |
1265 | TAD (260 /V3 | |
1266 | JMS PR6BIT /V3 | |
1267 | JMP I PRNUM /V3 | |
1268 | \fPCRLF, 0 | |
1269 | TAD (215 | |
1270 | JMS I (OCHAR | |
1271 | JMP I (AOUERR | |
1272 | TAD PR212 | |
1273 | JMS I (OCHAR | |
1274 | JMP I (AOUERR | |
1275 | JMP I PCRLF | |
1276 | ||
1277 | PWRTEN, -1750;-144;-12;0 /V3 | |
1278 | PAGE | |
1279 | \f /MAIN DIRECTORY PRINTING LOOP | |
1280 | ||
1281 | NXTDIR, JMS I (ICHAR /FAKE, FAKE | |
1282 | JMP I (DEND | |
1283 | CLA /WE DON'T WANT THE CHARACTER | |
1284 | DCA ECOUNT | |
1285 | TAD (INBUF-1 /WE WANT THE BUFFER! | |
1286 | NEWSEG, DCA XR | |
1287 | CDF 0 | |
1288 | TAD I XR | |
1289 | DCA DCOUNT /NUMBER OF ENTRIES | |
1290 | TAD DCOUNT | |
1291 | CLL | |
1292 | TAD (100 | |
1293 | SNL CLA | |
1294 | JMS I (PIPERR | |
1295 | 11 | |
1296 | TAD I XR | |
1297 | DCA BLOKNO /FIRST BLOCK OF FILE STORAGE | |
1298 | TAD I XR | |
1299 | DCA DLINK /LINK TO NEXT SEGMENT | |
1300 | ISZ XR /BUMP XR PAST FLAG WORD | |
1301 | TAD I XR | |
1302 | DCA WASTE | |
1303 | NAMELP, CDF 0 | |
1304 | TAD I XR | |
1305 | SNA /WHAT TYPE OF ENTRY IS IT? | |
1306 | JMP DEMPTY /A FREE FILE | |
1307 | DCA NAME1 /A PERMENANT OR TENTATIVE FILE | |
1308 | TAD I XR | |
1309 | DCA NAME2 | |
1310 | TAD I XR | |
1311 | DCA NAME3 | |
1312 | TAD I XR | |
1313 | DCA NAME4 | |
1314 | TAD I XR | |
1315 | DCA DDATE | |
1316 | TAD WASTE /COMPENSATE FOR THE DATE INCREMENT | |
1317 | CMA /AND THE WASTE WORDS | |
1318 | TAD XR | |
1319 | DCA XR | |
1320 | TAD I XR | |
1321 | SNA /IS IT A TENTATIVE FILE? | |
1322 | JMP ADDLEN+1 /YES - TENTATIVE FILES ARE ALWAYS IGNORED | |
1323 | CIA | |
1324 | DCA FLENGT /NO - STORE THE LENGTH | |
1325 | CDF 10 | |
1326 | TAD I CHAR /GET THE STARTING FILE FOR THIS LISTING | |
1327 | CIA CLL | |
1328 | TAD BLOKNO | |
1329 | SNL CLA /ARE WE THERE YET? | |
1330 | JMP ADDLEN /NO - KEEP GOING | |
1331 | CLA CLL CMA RTL | |
1332 | JMS I (PRWD /PRINT THREE WORDS | |
1333 | NAME1, 0 | |
1334 | NAME2, 0 | |
1335 | NAME3, 0 | |
1336 | TAD NAME4 | |
1337 | SNA CLA /IS THERE AN EXTENSION? | |
1338 | TAD (-16 /NO - PRINT A BLANK | |
1339 | TAD (56 /YES - PRINT A PERIOD | |
1340 | JMS I (PR6BIT | |
1341 | JMS I (PRWD | |
1342 | NAME4, 0 /ZERO PRINTS AS TWO MORE BLANKS | |
1343 | PRLNGT, TAD DTYPE | |
1344 | AND (100 | |
1345 | SZA CLA /WAS THE LISTING SWITCH /F? | |
1346 | JMP PRTCRL /YES - DON'T PRINT LENGTH | |
1347 | TAD FLENGT | |
1348 | JMS I (PRNUM | |
1349 | TAD WASTE | |
1350 | SZA CLA | |
1351 | TAD DDATE | |
1352 | JMS I (PDATE /PRINT THE CREATION DATE OF THE FILE | |
1353 | PRTCRL, JMS I (PCRLF | |
1354 | ADDLEN, TAD FLENGT | |
1355 | TAD BLOKNO | |
1356 | DCA BLOKNO /UPDATE BLOCK NUMBER | |
1357 | ISZ DCOUNT | |
1358 | JMP NAMELP /LOOP UNTIL ALL FILES ARE PROCESSED | |
1359 | TAD DLINK | |
1360 | SNA CLA /MULTI-SEGMENT DIRECTORY? | |
1361 | JMP ENDDIR /NO - FINISH UP | |
1362 | TAD XR | |
1363 | AND (7400 | |
1364 | TAD (377 /BUMP XR TO NEXT BLOCK | |
1365 | JMP NEWSEG /PROCESS NEXT LINK | |
1366 | \fDEMPTY, TAD I XR | |
1367 | CIA | |
1368 | DCA FLENGT /STORE LENGTH OF FREE ENTRY | |
1369 | CDF 10 | |
1370 | TAD FLENGT | |
1371 | TAD ECOUNT | |
1372 | DCA ECOUNT /BUMP COUNT OF FREE BLOCKS | |
1373 | TAD DTYPE | |
1374 | AND (200 | |
1375 | SNA CLA /IS THE /E SWITCH ON? | |
1376 | JMP ADDLEN /NO - DON'T LIST FREE FILES | |
1377 | TAD (-4 | |
1378 | JMS I (PRWD | |
1379 | TEXT /<EMPTY>/ | |
1380 | JMS I (PR6BIT | |
1381 | TAD FLENGT | |
1382 | JMS I (PRNUM | |
1383 | JMP PRTCRL | |
1384 | ENDDIR, ISZ CHAR /BUMP TEMP ARRAY TO NEXT ENTRY | |
1385 | TAD ECOUNT | |
1386 | JMS I (ENDFUJ | |
1387 | JMP NXTDIR | |
1388 | PAGE | |
1389 | \f/BINARY MODE PROCESSOR FOR PIP | |
1390 | ||
1391 | BIN360, 360 | |
1392 | BINARY, JMS I (FIXLEN | |
1393 | JMS I (OUTOPN | |
1394 | JMS I (IOPEN | |
1395 | JMS I (LEADER /PUT OUT BLANK TAPE IF HS PUNCH OUTPUT | |
1396 | JMS LTCODE | |
1397 | NEWTAP, JMS I (ICHAR | |
1398 | JMP BEOF /END OF FILE ON INPUT | |
1399 | SNA | |
1400 | JMP NEWTAP /BLANK TAPE - KEEP GOING | |
1401 | TAD BN7600 | |
1402 | SZA CLA | |
1403 | JMP NEWTAP | |
1404 | JMS I (ICHAR | |
1405 | JMP BEOF | |
1406 | TAD BN7600 | |
1407 | SNA | |
1408 | JMP .-4 | |
1409 | TAD BIN200 | |
1410 | DCA CHAR | |
1411 | TAD CHAR | |
1412 | BIN200, AND BIN360 | |
1413 | TAD (-240 /CHECK TYPE OF TAPE | |
1414 | SNA /IS IT RELOCATABLE? | |
1415 | JMP RELBIN /YES | |
1416 | TAD (-40 /IF A FIELD SETTING, IT'S ABSOLUTE | |
1417 | AND (7700 | |
1418 | SNA | |
1419 | JMP ABSLUT | |
1420 | TAD BIN200 /CHECK FOR ORIGIN ALSO | |
1421 | SZA CLA | |
1422 | JMP NEWTAP /NOTHING..NEXT FRAME | |
1423 | ABSLUT, CLA CMA | |
1424 | JMS LTCODE | |
1425 | ABSBIN, JMS RCOPY1 /COPY THIS FRAME AND READ NEXT | |
1426 | TAD BN7600 | |
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? | |
1434 | JMS I (OTYPE | |
1435 | SPA CLA /DIRECTORY DEVICE? | |
1436 | TAD (70 /YES | |
1437 | TAD (-100 | |
1438 | DCA TEMP | |
1439 | LTLOOP, TAD BIN200 | |
1440 | JMS I (OCHAR /OUTPUT 64 OR 8 FRAMES OF L/T CODE | |
1441 | JMP I (AOUERR | |
1442 | ISZ TEMP | |
1443 | JMP LTLOOP | |
1444 | JMP I LTCODE | |
1445 | ||
1446 | RELBIN, TAD (SKP | |
1447 | DCA I (INCTZF /DISABLE CONTROL-Z CHECKING ON INPUT | |
1448 | CLA CMA | |
1449 | JMS LTCODE /PUT OUT SHORT LEADER/TRAILER | |
1450 | RELLP, TAD CHAR | |
1451 | RTR | |
1452 | RTR | |
1453 | AND (17 | |
1454 | TAD (RELTBL | |
1455 | DCA TEMP | |
1456 | TAD I TEMP /GET DATA WORD FOR THIS FRAME | |
1457 | SMA SZA /POSITIVE MEANS SPECIAL OR ERROR | |
1458 | JMP RELERR | |
1459 | RELSNA, SNA | |
1460 | JMP RELEND /ZERO MEANS CHECKSUM FRAME | |
1461 | DCA TEMP /NEGATIVE MEANS COUNT OF NUMBER OF SLAVE FRAMES | |
1462 | JMS RCOPY1 | |
1463 | BN7600, 7600 | |
1464 | ISZ TEMP | |
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 | |
1468 | JMS I (OCHAR | |
1469 | JMP I (AOUERR /OUTPUT THE SECOND FRAME | |
1470 | JMP BEOT /END TAPE - START NEXT ONE | |
1471 | BEOF, JMS LTCODE | |
1472 | JMS I (OCLOSE | |
1473 | JMP I (AOUERR | |
1474 | JMP I (PIP | |
1475 | \fRCOPY1, 0 /ROUTINE TO ADVANCE "CHAR" TO NEXT INPUT CHARACTER | |
1476 | TAD CHAR | |
1477 | JMS I (OCHAR | |
1478 | JMP I (AOUERR | |
1479 | JMS I (ICHAR | |
1480 | JMP INEFER | |
1481 | DCA CHAR | |
1482 | TAD CHAR | |
1483 | JMP I RCOPY1 | |
1484 | INEFER, SMA CLA /DETECT FATALITIES | |
1485 | JMS I (PIPERR | |
1486 | 7 | |
1487 | JMS I (PIPERR /A REAL BAD READ | |
1488 | 4 | |
1489 | ||
1490 | RELERR, CLL RAR | |
1491 | SZA CLA /CODE OF 1 MEANS SPECIAL | |
1492 | JMS I (PIPERR /ILLEGAL RELOCATABLE INPUT | |
1493 | 10 | |
1494 | JMS RCOPY1 | |
1495 | CLL CML CMA RTL /MULTIPLY NAME COUNT BY -6 (APPROXIMATELY) | |
1496 | TAD CHAR | |
1497 | CLL CML RAL /(ACTUALLY THIS PRODUCES -6X-1 WHICH IS WHAT WE WANT) | |
1498 | JMP RELSNA | |
1499 | PAGE | |
1500 | \fERPRNT, 0 /ERROR MESSAGE PRINTOUT ROUTINE | |
1501 | DCA TEMP | |
1502 | ERLP, TAD I TEMP | |
1503 | RTR | |
1504 | RTR | |
1505 | RTR | |
1506 | JMS ERPCH /PRINT HIGH-ORDER CHARACTER | |
1507 | TAD I TEMP | |
1508 | JMS ERPCH /PRINT LOW-ORDER CHARACTER | |
1509 | ISZ TEMP | |
1510 | JMP ERLP | |
1511 | ||
1512 | ERPCH, 0 | |
1513 | AND (77 | |
1514 | SNA | |
1515 | JMP ERCRLF /0 CHARACTER TERMINATES | |
1516 | JMS CHPRNT | |
1517 | JMP I ERPCH | |
1518 | FILENR, TAD ("# | |
1519 | JMS I (TTYOUT | |
1520 | TAD INFPTR /GET PTR TO CURRENT INPUT FILE | |
1521 | TAD (321 /MAGIC NUMBER | |
1522 | CLL RAR | |
1523 | JMP FILENR-2 | |
1524 | ||
1525 | CHPRNT, 0 | |
1526 | TAD (-37 /IS IT A _? | |
1527 | SNA | |
1528 | JMP FILENR /YES..PRINT FILE NUMBER | |
1529 | IAC | |
1530 | SNA /MAYBE ^? | |
1531 | JMP I (SQFILE /YEP..PRINT FILE NAME | |
1532 | SPA | |
1533 | TAD (100 | |
1534 | TAD (236 | |
1535 | JMS I (TTYOUT | |
1536 | JMP I CHPRNT | |
1537 | ||
1538 | ERCRLF, TAD (215 | |
1539 | JMS I (TTYOUT | |
1540 | TAD (212 | |
1541 | JMS I (TTYOUT | |
1542 | JMP I ERPRNT | |
1543 | \fPDATE, 0 /PRINTS THE DATE | |
1544 | SNA | |
1545 | JMP I PDATE /NO DATE TO PRINT | |
1546 | DCA ERPRNT | |
1547 | ISZ I (PBLJMP | |
1548 | JMS I (PR6BIT | |
1549 | TAD ERPRNT | |
1550 | CLL RTL | |
1551 | RTL | |
1552 | RAL | |
1553 | AND (17 | |
1554 | JMS I (PRNUM | |
1555 | TAD (57 | |
1556 | JMS I (PR6BIT | |
1557 | TAD ERPRNT | |
1558 | RTR | |
1559 | RAR | |
1560 | AND (37 | |
1561 | JMS I (PRNUM | |
1562 | TAD (57 | |
1563 | JMS I (PR6BIT | |
1564 | TAD ERPRNT | |
1565 | AND (7 | |
1566 | TAD (106 | |
1567 | JMS I (PRNUM | |
1568 | CLA CMA | |
1569 | TAD I (PBLJMP | |
1570 | DCA I (PBLJMP /RESET PRNUM TO PRINT LEADING SPACES | |
1571 | JMP I PDATE | |
1572 | ||
1573 | DSKNUM, 0 | |
1574 | DCA DSKNAM+1 | |
1575 | JMS I (200 | |
1576 | 12 | |
1577 | DSKNAM, 5723 | |
1578 | 0 | |
1579 | 0 | |
1580 | HLT | |
1581 | TAD DSKNAM+1 | |
1582 | JMP I DSKNUM | |
1583 | \fRELTBL, -2;-2;2;-10;-2;-2;-2;2;0;2;-2;2;2;2;2;1 | |
1584 | ||
1585 | ERRTBL, ERR0 | |
1586 | ERR1 | |
1587 | ERR2 | |
1588 | ERR3 | |
1589 | ERR4 | |
1590 | ERR5 | |
1591 | ERR6 | |
1592 | ERR7 | |
1593 | ERR8 | |
1594 | ERR9 | |
1595 | ERR10 | |
1596 | ERR11 | |
1597 | IFNZRO OS78 <DIRMSG> | |
1598 | ||
1599 | PAGE | |
1600 | \f/ERROR MESSAGE TEXT GOES HERE | |
1601 | ||
1602 | ||
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/ | |
1613 | ||
1614 | ||
1615 | TTYOUT, 0 | |
1616 | TLS | |
1617 | TSF | |
1618 | JMP .-1 | |
1619 | CLA | |
1620 | JMP I TTYOUT | |
1621 | PAGE | |
1622 | \f/SQUISH PROCESSOR | |
1623 | ||
1624 | SQUISH, JMS I (CONFRM | |
1625 | SURE /V3 | |
1626 | SQUISX, DCA I (OUELEN /INITIALIZE PARAMS TO FAKE OUT "IMTRA" | |
1627 | DCA I (OUBLK | |
1628 | DCA I (7621 /ZERO SECOND FILE FOR "INNEWF" | |
1629 | DCA I (CTCFLG | |
1630 | JMS I (IOPEN | |
1631 | JMS I (INNEWF | |
1632 | JMP I (PIP /NO INPUT | |
1633 | TAD (OUDEVH+1 | |
1634 | DCA SOHND | |
1635 | TAD I SQ7600 | |
1636 | SNA | |
1637 | JMP I (PIP /NO OUTPUTEE, NO SQUISHEE | |
1638 | JMS I (200 | |
1639 | 1 | |
1640 | SOHND, 0 | |
1641 | HLT | |
1642 | JMS INTEST | |
1643 | JMS I (OTYPE | |
1644 | CLL RTR | |
1645 | RAR | |
1646 | AND (77 | |
1647 | TAD (DEVLEN | |
1648 | DCA TEMP | |
1649 | TAD I TEMP /GET ENTRY FROM DEVICE LENGTH TABLE | |
1650 | DCA OUDLEN /SAVE OUTPUT DEVICE LENGTH | |
1651 | JMS GETEQ | |
1652 | DCA OUWAST | |
1653 | TAD SOHND | |
1654 | DCA OHNDLR | |
1655 | TAD OHNDLR | |
1656 | DCA I (OUHNDL | |
1657 | TAD I (INHNDL | |
1658 | DCA IHNDLR | |
1659 | JMS SETCTC | |
1660 | JMS I (CTCFLG | |
1661 | CIF 0 | |
1662 | JMS I IHNDLR | |
1663 | 1400 | |
1664 | 0 | |
1665 | 1 | |
1666 | JMP I (SQIDER+1 | |
1667 | CIF 0 | |
1668 | JMS I (7607 | |
1669 | 5400 | |
1670 | 0 | |
1671 | MTEMP /MOVE THE INPUT DIRECTORY TO SYS: | |
1672 | JMP I (SQIDER+1 | |
1673 | CLA IAC | |
1674 | DCA I (SQBUF2+2 | |
1675 | DCA I (CTCFLG | |
1676 | TAD SOHND /SETUP DIRECTORY START | |
1677 | JMS I (SQDTST | |
1678 | JMS I (SETSAM /IF IHNDLR=OHNDLR, SAME=1 | |
1679 | CLA CMA | |
1680 | DCA I (SQBUF2 | |
1681 | DCA I (OUTSEG | |
1682 | JMP I (NEWOUT | |
1683 | ||
1684 | GETEQ, 0 /V3 | |
1685 | TAD I (MPARAM+3 | |
1686 | SNA | |
1687 | IAC | |
1688 | AND (77 /CONVERT 0 TO 1 AND 100 TO 0 | |
1689 | CIA | |
1690 | JMP I GETEQ | |
1691 | ||
1692 | INTEST, 0 /TEST IF INPUT IS DIRECTORY | |
1693 | TAD I (7617 | |
1694 | AND (17 | |
1695 | TAD (DCB-1 | |
1696 | DCA TEMP | |
1697 | TAD I TEMP | |
1698 | SMA CLA | |
1699 | JMS I (PIPERR | |
1700 | 6 | |
1701 | JMP I INTEST | |
1702 | ||
1703 | SETCTC, 0 /MODIFY 07600 TO RETURN TO SQCTLC | |
1704 | TAD CDIF10 | |
1705 | CDF 0 | |
1706 | DCA I SQ7600 | |
1707 | TAD (5602 /JMP I .+1 | |
1708 | DCA I (7601 | |
1709 | TAD (SQCTLC | |
1710 | DCA I (7602 | |
1711 | CDIF10, CIF CDF 10 | |
1712 | JMP I SETCTC | |
1713 | \fOUK, 0 /V3 ON IMAGE MODE TRANSFER | |
1714 | /CLOSE OUT FILE WITH = OPTION | |
1715 | /IF NOT TOO SMALL | |
1716 | TAD I (OUCCNT | |
1717 | CLL CIA | |
1718 | TAD I (MPARAM+3 | |
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 | |
1722 | JMP I OUK | |
1723 | PAGE | |
1724 | \fNEWIN, TAD (MTEMP-1 | |
1725 | DCA INSEG | |
1726 | JMS I (CTCFLG | |
1727 | CIF 0 | |
1728 | JMS I (7607 | |
1729 | 0210 | |
1730 | S7200, SQBUF2 | |
1731 | INSEG, 0 | |
1732 | JMP I (SQIDER | |
1733 | DCA I (CTCFLG | |
1734 | TAD I (SQBUF2+1 | |
1735 | DCA INBLK | |
1736 | TAD (SQBUF2+4 | |
1737 | DCA INXR | |
1738 | SGETIN, TAD I INXR | |
1739 | SNA | |
1740 | JMP SEMPTY | |
1741 | DCA I OUTXR | |
1742 | TAD OUTXR | |
1743 | DCA OUSAVE | |
1744 | JMS I (CYWAST /COPY WASTE WORDS | |
1745 | TAD I INXR | |
1746 | DCA RECCNT | |
1747 | TAD RECCNT | |
1748 | SNA | |
1749 | JMP SNULL | |
1750 | CMA CLL /V3 | |
1751 | TAD OUTBLK | |
1752 | TAD OUDLEN | |
1753 | SZL CLA | |
1754 | JMP SNULER | |
1755 | TAD RECCNT | |
1756 | DCA I OUTXR | |
1757 | CLA CMA | |
1758 | TAD I (SQBUF1 | |
1759 | DCA I (SQBUF1 | |
1760 | TAD INBLK | |
1761 | CIA | |
1762 | TAD OUTBLK | |
1763 | SNA CLA | |
1764 | TAD SAME | |
1765 | SNA CLA | |
1766 | MOVFIL, JMS I (SQTRA /MOVE THE FILE DOWN | |
1767 | TAD RECCNT | |
1768 | CIA | |
1769 | TAD OUTBLK | |
1770 | DCA OUTBLK | |
1771 | TAD RECCNT | |
1772 | DMTX, CIA | |
1773 | TAD INBLK | |
1774 | DCA INBLK | |
1775 | TAD OUTXR | |
1776 | CIA | |
1777 | TAD OUWAST | |
1778 | TAD OUWAST | |
1779 | TAD (SQBUF1+365 | |
1780 | SMA CLA /DO WE HAVE ROOM FOR TWO MORE ENTRIES? | |
1781 | JMP NEXTIN | |
1782 | ||
1783 | /DIRECTORY SEGMENT OVERFLOW ON OUTPUT... | |
1784 | ||
1785 | ISZ I (OUTSEG | |
1786 | TAD I (OUTSEG | |
1787 | IAC | |
1788 | DCA I (SQBUF1+2 /STORE LINK TO NEXT SEGMENT | |
1789 | TAD I (SQBUF1+2 | |
1790 | TAD (-7 | |
1791 | SMA CLA | |
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 | |
1797 | DCA I OUTXR | |
1798 | TAD OUTBLK | |
1799 | DCA I OUTXR | |
1800 | DCA I OUTXR | |
1801 | DCA I OUTXR | |
1802 | TAD OUWAST | |
1803 | DCA I OUTXR | |
1804 | NEXTIN, ISZ I S7200 | |
1805 | JMP SGETIN | |
1806 | TAD I (SQBUF2+2 | |
1807 | SNA /ANY MORE INPUT SEGMENTS? | |
1808 | JMP I (SQOVER | |
1809 | JMP NEWIN | |
1810 | SNULER, TAD (NOROOM | |
1811 | JMS I (ERPRNT | |
1812 | SNULL, CLA CMA | |
1813 | TAD OUSAVE | |
1814 | DCA OUTXR | |
1815 | JMP DMTX-1 | |
1816 | SEMPTY, TAD I INXR | |
1817 | JMP DMTX | |
1818 | OUSAVE, 0 | |
1819 | \fSURE, TEXT /ARE YOU SURE?/ | |
1820 | ||
1821 | SETSAM, 0 | |
1822 | TAD IHNDLR | |
1823 | CIA | |
1824 | TAD OHNDLR | |
1825 | SNA CLA | |
1826 | IAC | |
1827 | DCA SAME | |
1828 | JMP I SETSAM | |
1829 | PAGE | |
1830 | \fSQOVER, DCA I OUTXR | |
1831 | TAD OUDLEN | |
1832 | TAD OUTBLK | |
1833 | SNA | |
1834 | JMP CKZERO | |
1835 | DCA I OUTXR | |
1836 | CLA CMA | |
1837 | TAD I (SQBUF1 | |
1838 | DCA I (SQBUF1 | |
1839 | CKZERO, TAD I (SQBUF1 | |
1840 | SZA CLA | |
1841 | JMP ZEROK | |
1842 | CLA CLL CML RAR | |
1843 | JMS OUTDIR /READ IN LAST DIRECTORY | |
1844 | DCA I (SQBUF1+2 /ZERO OUT LINK WORD | |
1845 | SKP | |
1846 | ZEROK, ISZ OUTSEG | |
1847 | JMS OUTDIR | |
1848 | ZEROKS, JMS SRSTOR | |
1849 | JMP I (PIP | |
1850 | ||
1851 | DCA I (SQBUF1+2 | |
1852 | SQIDER, JMS OUTDIR | |
1853 | JMS SRSTOR | |
1854 | JMS I (PIPERR | |
1855 | 12 | |
1856 | OUTDIR, 0 | |
1857 | TAD (4210 | |
1858 | DCA .+4 | |
1859 | JMS CTCFLG | |
1860 | CIF 0 | |
1861 | JMS I OHNDLR | |
1862 | 0 | |
1863 | SQBUF1 | |
1864 | OUTSEG, 0 | |
1865 | JMP SQIDER+1 | |
1866 | DCA CTCFLG | |
1867 | JMP I OUTDIR | |
1868 | ||
1869 | SQIOER, TAD (IOMSG | |
1870 | JMS I (ERPRNT | |
1871 | JMP I (SLGRET | |
1872 | \fSQCTLC, KCC /JUMPED TO BY CODE AT 07600 | |
1873 | JMS I (TSTSAM /TEST IF OPERATION IS TO ITSELF | |
1874 | TAD (CTCMSG | |
1875 | JMS I (ERPRNT | |
1876 | TAD CTCFLG | |
1877 | SZA CLA | |
1878 | JMP I CTCFLG | |
1879 | TAD I (MPARAM+1 /IS IT /S? | |
1880 | AND (40 | |
1881 | SNA CLA | |
1882 | JMP I (SYSCPY /NO../Y | |
1883 | JMP I (MOVFIL | |
1884 | ||
1885 | SRSTOR, 0 | |
1886 | JMS I (7700 /MAKE SURE MONITOR IS IN CORE | |
1887 | 10 | |
1888 | DCA .-2 /AND WIPE THE CALL AWAY | |
1889 | TAD (4207 | |
1890 | CDF 0 | |
1891 | DCA I (7600 | |
1892 | TAD (5000 | |
1893 | DCA I (7601 | |
1894 | DCA I (7602 | |
1895 | CDF 10 | |
1896 | JMP I SRSTOR | |
1897 | ||
1898 | CTCFLG, 0 | |
1899 | JMP I CTCFLG | |
1900 | \fCTCMSG, TEXT /SORRY - NO INTERRUPTIONS/ | |
1901 | IOMSG, TEXT /I-O ERROR IN ^ - CONTINUING/ | |
1902 | NOROOM, TEXT /NO ROOM IN ^ - CONTINUING/ | |
1903 | PAGE | |
1904 | \fK7760, 7760 | |
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 | |
1910 | TAD (OUDEVH+1 | |
1911 | DCA YOHAND | |
1912 | TAD (2000 | |
1913 | DCA K2000 /THIS MAY GET CLOBBERED READING IN DIRECT. | |
1914 | TAD (10 | |
1915 | DCA OFSET | |
1916 | TAD I K7617 | |
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 | |
1920 | TAD I K7617 | |
1921 | JMS I K200 /ASSIGN HANDLER | |
1922 | 1 | |
1923 | YIHAND, 0 | |
1924 | K7622, 7622 /THINLY DISGUISED HALT | |
1925 | TAD I K7617 | |
1926 | K200, AND K7760 /CHECK INPUT FILE LENGTH | |
1927 | SNA /IF BLANK,INPUT SYSTEM HEAD | |
1928 | JMP YSOUT | |
1929 | TAD (-6340 /CHECK FOR PROPER LENGTH | |
1930 | SZA CLA | |
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 | |
1934 | JMP I (IMGTST | |
1935 | TAD I (7620 | |
1936 | YOUSYS, DCA YINREC /PICK UP STARTING RECORD | |
1937 | CIF 0 | |
1938 | JMS I YIHAND /READ IN FIRST INPUT RECORDS | |
1939 | K2000, 2000 /(0-15 IF SYSTEM HEAD,0-7 IF FILE) | |
1940 | OUBUF | |
1941 | YINREC, 0 | |
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 | |
1947 | TAD YINREC | |
1948 | TAD OFSET /BUMP TO NEXT RECORD | |
1949 | DCA NXTRD | |
1950 | TAD I (7600 /IF NO OUTPUT, FORGET IT | |
1951 | SNA | |
1952 | JMP PIPCLR /RESET AND GO TO PIP | |
1953 | JMS I K200 | |
1954 | 1 | |
1955 | YOHAND, 0 | |
1956 | HLT /V3 | |
1957 | JMS I (FAKE | |
1958 | JMS I (SETSAM | |
1959 | \f JMS I (TSTIO /TEST OUTPUT. SEE IF DIRECT. DEV. | |
1960 | CIF 0 | |
1961 | JMS I YOHAND /READ OUTPUT DIRECTORY INTO PLACE | |
1962 | 1400 | |
1963 | 400 | |
1964 | 1 | |
1965 | JMP I (PER4 | |
1966 | CDF 0 | |
1967 | TAD I (401 /NOW TEST FOR VALID OUTPUT DEVICE | |
1968 | CDF 10 | |
1969 | TAD (-10 /IF LESS THAN 10, DON'T XFER | |
1970 | SPA CLA | |
1971 | JMS I (PIPERR | |
1972 | 11 | |
1973 | TAD (-4 | |
1974 | DCA YINREC /XFER COUNTER | |
1975 | ||
1976 | JMP YDUMP | |
1977 | YLOOP, CIF 0 | |
1978 | JMS I YIHAND /READ NEXT | |
1979 | K3400, 3400 /16 BLOCKS | |
1980 | OUBUF | |
1981 | NXTRD, 0 | |
1982 | JMP I (PER4 | |
1983 | TAD NXTRD | |
1984 | TAD (16 | |
1985 | DCA NXTRD | |
1986 | YDUMP, TAD (7400 | |
1987 | JMS I (OUTDMP /WRITE BUFFER | |
1988 | JMP I (AOUERR | |
1989 | ISZ YINREC /DONE YET? | |
1990 | JMP YLOOP /NOT YET..LOOP | |
1991 | PIPCLR, JMS I (SRSTOR /CLEAR OUT 07600 | |
1992 | JMP I (PIP | |
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 | |
1999 | DCA OFSET | |
2000 | JMP YOUSYS | |
2001 | OFSET, 0 | |
2002 | ||
2003 | PER13, JMS I (PIPERR | |
2004 | 13 | |
2005 | K7617, 7617 /V3 | |
2006 | PAGE | |
2007 | \fDIRECT, -1 | |
2008 | DFORG, 0 /FILE STORAGE | |
2009 | 0 | |
2010 | 0 | |
2011 | DWASTE, 0 /#WASTE WORDS | |
2012 | 0 | |
2013 | DLENGT, 0 | |
2014 | ||
2015 | MOVE, 0 | |
2016 | TAD (4400 /MOVES CORE TO OPEN DIRECTORY HOLE | |
2017 | DCA TEMP | |
2018 | TAD (3777 | |
2019 | DCA MWAST | |
2020 | TAD (6777 | |
2021 | MOVE1, DCA TSTSAM | |
2022 | CDF 0 | |
2023 | TAD I MWAST | |
2024 | DCA I TSTSAM | |
2025 | CMA | |
2026 | TAD MWAST | |
2027 | DCA MWAST | |
2028 | CMA | |
2029 | TAD TSTSAM | |
2030 | ISZ TEMP | |
2031 | JMP MOVE1 | |
2032 | CLA | |
2033 | CDF 10 | |
2034 | JMP I MOVE | |
2035 | ||
2036 | ERR11, TEXT /BAD SYSTEM HEAD/ | |
2037 | ||
2038 | YTSOUT, TAD I (7617 /O.K. SETUP CD AREA FOR IMAGE XFER | |
2039 | TAD (7760 /FROM SYSTEM AREA OF INPUT DEVICE | |
2040 | DCA I (7617 | |
2041 | TAD I (7617 | |
2042 | AND (17 | |
2043 | TAD (6360 | |
2044 | DCA I (7621 | |
2045 | TAD K7 | |
2046 | DCA I (7622 | |
2047 | IMGTST, DCA SAME /ALLOW ^C IF TO OUTPUT FILE | |
2048 | TAD I (YIHAND /TEST FOT VALID SYSTEM | |
2049 | DCA IHNDLR | |
2050 | CIF 0 | |
2051 | JMS I IHNDLR | |
2052 | 0200 | |
2053 | 3400 | |
2054 | K7, 7 | |
2055 | JMP I (PER4 | |
2056 | JMS I (TSTHED | |
2057 | JMP I (IMAGE | |
2058 | \fTSTSAM, 0 | |
2059 | TAD SAME /IF /Y IS TO SAME DEVICE AS INPUT (SYS) | |
2060 | SNA CLA /^C GIVES MESSAGE AND RETRIES OPERATION | |
2061 | JMP I (ZEROKS | |
2062 | JMP I TSTSAM | |
2063 | ||
2064 | ERR2, TEXT /OUTPUT ERROR/ | |
2065 | ||
2066 | SQFILE, DCA MWAST | |
2067 | TAD I (OUSAVE | |
2068 | DCA TSTSAM /IF ERROR DURING /S | |
2069 | DCA DWASTE | |
2070 | CLA CLL CMA RTL | |
2071 | DCA MOVE /-3 FOR FILE NAME | |
2072 | SQFIL3, TAD I TSTSAM /FIRST 2 CHARS. IN NAME | |
2073 | CLL RTR | |
2074 | RTR | |
2075 | RTR | |
2076 | SQFIL5, AND (77 | |
2077 | SZA /IF ZERO, DON'T BOTHER | |
2078 | JMS I (CHPRNT | |
2079 | ISZ DWASTE /RIGHT HALF OR NEW WORD? | |
2080 | JMP SQFIL4 /RIGHT HALF | |
2081 | ISZ TSTSAM | |
2082 | ISZ MOVE /EXHAUSTED ALL? | |
2083 | JMP SQFIL3 /NOPE | |
2084 | TAD MWAST /DONE WITH IT YET? | |
2085 | SZA CLA | |
2086 | JMP I (FILENR-1 /YES | |
2087 | TAD I TSTSAM /IS THERE AN EXTENSION? | |
2088 | SNA CLA | |
2089 | JMP I (FILENR-1 /NO..CONTINUE ORIGINAL MSG | |
2090 | TAD (256 | |
2091 | JMS I (TTYOUT | |
2092 | ISZ MWAST /SIGNAL END | |
2093 | CLA CMA | |
2094 | JMP SQFIL3-1 | |
2095 | SQFIL4, CLA CMA | |
2096 | DCA DWASTE | |
2097 | TAD I TSTSAM /GET RIGHT HALF | |
2098 | JMP SQFIL5 | |
2099 | \fMWAST, 0 | |
2100 | DCA TEMP | |
2101 | TAD I INXR | |
2102 | DCA I OUTXR /ROUTINE TO COPY WASTE WORDS | |
2103 | ISZ TEMP | |
2104 | JMP .-3 | |
2105 | JMP I MWAST | |
2106 | PAGE | |
2107 | \fFAKE, 0 | |
2108 | TAD I (YIHAND | |
2109 | DCA IHNDLR | |
2110 | TAD I (YOHAND | |
2111 | DCA OHNDLR | |
2112 | DCA I (OUCCNT | |
2113 | DCA I (OUBLK | |
2114 | DCA I (OUELEN | |
2115 | TAD I (YOHAND | |
2116 | DCA I (OUHNDL | |
2117 | JMP I FAKE | |
2118 | ||
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 | |
2123 | CIA | |
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) | |
2127 | DCA TEMP1 | |
2128 | TAD I (SQBUF2+4 | |
2129 | SZA | |
2130 | JMS I (MWAST /COPY ALL INPUT WORDS | |
2131 | DCA I OUTXR /AND 0 ALL EXTRA OUTPUT WORDS | |
2132 | ISZ TEMP1 | |
2133 | JMP .-2 | |
2134 | JMP I CYWAST | |
2135 | CGEWST, DCA TEMP1 | |
2136 | TAD OUWAST /XFER ONLY ENOUGH OUTPUT WDS. | |
2137 | SZA | |
2138 | JMS I (MWAST | |
2139 | TAD INXR | |
2140 | TAD TEMP1 /POINT INPUT TO NEXT FILE | |
2141 | DCA INXR | |
2142 | JMP I CYWAST | |
2143 | ||
2144 | TSTHED, 0 /TESTS FOR KEYBOARD MONITOR | |
2145 | CDF 0 | |
2146 | TAD I (3401 | |
2147 | CDF 10 | |
2148 | TAD (-7200 | |
2149 | SZA CLA | |
2150 | JMP I (PER13 /IF NOT CLA, NOT VALID | |
2151 | JMP I TSTHED | |
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 | |
2155 | JMS I (PIPERR | |
2156 | 5 | |
2157 | TAD OHNDLR /IF OUTPUT=SYS, SET NO INTERRUPT | |
2158 | TAD (171 | |
2159 | SNA CLA | |
2160 | ISZ SAME | |
2161 | JMP I TSTIO | |
2162 | ||
2163 | ASCI2, 0 /SEE IF VALID ASCII OUTPUT | |
2164 | DCA TSTIO | |
2165 | TAD I (7600 | |
2166 | SNA CLA | |
2167 | JMP I (PIP /NO..BACK TO PIP | |
2168 | TAD TSTIO /SEE IF /C IS ON | |
2169 | SNA CLA | |
2170 | JMS I (FIXLEN /NO..TRY TO ESTIMATE OUTPUT | |
2171 | JMP I ASCI2 | |
2172 | ||
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 | |
2179 | SMA CLA | |
2180 | JMP P1A | |
2181 | CIF 0 /COULD BE NON-FILE, HOWEVER. | |
2182 | JMS I NOHND | |
2183 | 0210 | |
2184 | 1400 | |
2185 | P1, 1 | |
2186 | JMP I (SQIDER+1 /ERROR IN READ | |
2187 | P1A, DCA OLDDIR /WIPES ANY DIRECT. SEGMENT | |
2188 | TAD I (1401 | |
2189 | TAD (-70 /IS OUTPUT A SYS DEVICE? | |
2190 | SNA CLA | |
2191 | JMP SYSDIR /YES. | |
2192 | TAD NOHND /IS OUTPUT THE SYSTEM DEVICE? | |
2193 | TAD (171 | |
2194 | SZA CLA | |
2195 | JMP .+3 | |
2196 | SYSDIR, TAD (70 | |
2197 | DCA OUTBLK | |
2198 | JMP I SQDTST | |
2199 | ||
2200 | NOHND=FAKE | |
2201 | ||
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 | |
2205 | PER2, JMS I (PIPERR | |
2206 | 2 | |
2207 | BOUERR, JMS I (PIPERR | |
2208 | 0 | |
2209 | ||
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 | |
2213 | PAGE | |
2214 | \f/THIS IS ONCE-ONLY CODE | |
2215 | ||
2216 | ONCE, 0 | |
2217 | STA | |
2218 | TAD ONCE | |
2219 | DCA ONCENF | |
2220 | TAD (20 | |
2221 | DCA I ONCENF /RESTORE L20, DON'T ALLOW REENTRY | |
2222 | TAD I (MPARAM+1 | |
2223 | AND (7 | |
2224 | SNA CLA /IS /V SET? | |
2225 | JMP I ONCE /NO, RETURN | |
2226 | TAD (VER /YES | |
2227 | JMS I (ERPRNT /PRINT VERSION NUMBER | |
2228 | JMP I ONCE /RETURN | |
2229 | ||
2230 | VER, TEXT \OS/8 PIP V11A\ | |
2231 | ONCENF, 0 | |
2232 | PAGE | |
2233 | $ | |
2234 | \f |