Add README.md
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape7 / FOTP.PA
1 /3.1 OS/8 V3 FOTP 5-AUGUST-1975 (NOT HALLOWEEN)
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION
12 /
13 /
14 /
15 /
16 /
17 /
18 /
19 /
20 /
21 /
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
26 /
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
31 /
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
34 /DIGITAL.
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 \f/WITH FAILSAFE CHANGES NOV 17, 1973 R.L.
46
47
48 / FOTP (FILE ORIENTED TRANSFER PROGRAM) H.J.
49
50
51 /CORE MAP
52
53 /FROM TOP OF CORE
54
55 / FIELD 2 GETS CONDITIONALLY USED AS BUFFER
56
57 / FIELD 1
58 / 7777-7600 MONITOR
59 / 7577-4600 INCORE OUTPUT DIRECTORY
60 / 4577-2000 FOTP CODE
61 / 1777-0 RESIDENT USR
62 /
63 / FIELD 0
64 / 7777-7600 MONITOR
65 / 7577-7200 ERROR MESSAGES
66 / 7177-0 WORK AREA AS:
67 /
68 / AT TOP- OUTPUT HANDLER IF NEEDED
69 / 1 OR 2 PAGES
70
71 / INPUT HANDLER IF NEEDED
72 / 1 OR 2 PAGES
73
74 / INPUT DEVICES DIRECTORY
75 / (ONLY USED PORTION)
76
77 / THE TRANSFER BUFFER IN 8K
78 / IS WHAT EVER REMAINS.
79
80 /FIXES FOR MAINTENANCE RELEASE: (S.R. 5-AUG-75)
81
82 /1. CHANGED COPYRIGHT DATE
83 /2. INCORPORATED SEQ #1 PATCH (DSN MARCH 1975)
84 / PERMITS FOTP TO RECOVER FROM A MONITOR ERROR 6
85 / BY UNFAKING THE SYSTEM HANDLER
86 /3. UPDATED FOTP VERSION NUMBER TO V8
87 /4. ADDED SPACE FOR A PATCH LEVEL
88 /5. ALLOWED /T SWITCH TO WORK IN CONJUNCTION WITH /R
89 /6. PERMITS RENAMING A FILE TO IT'S OWN NAME
90 /7. IF NO OUTPUT DEVICE IS SPECIFIED WITH /R,
91 / ASSUME OUT DEV=INPUT DEVICE.
92
93 /8. FIXED BUG RE ADDITIONAL INFO WORDS
94 \f/PAGE 0 LOCATIONS OS/8 USR WON'T MANGLE
95
96 PTR=20
97 CNT=21
98 INFPTR=22
99 OUHAND=23
100 INHAND=24
101 FPAGE=25
102 EPTR=26
103 INSCNT=27
104 TEMP=30
105 OKFLAG=31
106 IFCNT=32
107 BUFSIZ=33
108 INFWDS=34
109 BDPTR=35
110 GPTR1=36
111 INEOF=37
112
113 /AUTO INDEX REGISTERS USR WILL ALLOW ME TO USE TEMPORARILY
114
115 XR=10
116 XR1=11
117 XR2=12
118
119
120 /VARIOUS CONSTANTS THAT CAN BE GENERATED
121
122 AC2=CLA CLL CML RTL
123 AC4000=CLA CLL CML RAR
124 ACM2=CLA CLL CMA RAL
125 ACM3=CLA CLL CMA RTL
126
127 / LOCATIONS REFERENCED IN OS/8
128
129 ALTOPT=7642
130 OPT1=7643
131 OPT2=7644
132 DATE=7666
133 DIRKEY=7 /"DIRECTORY SEGMENT IN CORE" KEY
134
135 /SYMBOLIC FOTP LOCATIONS:
136
137 OUBUFR= 4600 /OUTPUT BUFFER - IN FIELD 1
138 INBUFR= 0 /INPUT BUFFER - IN FIELD 0
139 LSTFPG= 7000 /FIRST LOC OF LAST FREE PAGE IN FIELD 0
140 FAKHND= 200 /LOCATION OF OS/8 FAKEOUT HANDLER
141 VERSION= 11 /VERSION NUMBER
142 SUBVER= 01 /SUB VERSION (PATCH LEVEL)
143 /LOCATED AT "VERLOC" AS 60+VERSION^100+SUBVER
144 \f/STARTS AT 4600 IN FIELD 1 (ONCE ONLY CODE)
145
146 /SAVE INFO:
147
148 / .LOAD FOTP(89P)
149 / .SAVE SYS FOTP;14600
150
151 FIELD 1
152 *2000
153
154 CDCALL, JMS I (200 /SEE WHAT THE PERSON WANTS
155 FIVE, 5
156 STAR, 5200 /IN SPECIAL MODE
157
158 BYPSCD, JMS I (INTERC /CATCH CALLS TO 7600
159
160 TAD I (7600 /SAVE USER OUTPUT DEVICE
161 DCA I (USEROD /-FOR LATER
162
163
164 / CHECK FOR ? IN OUTPUT SPECIFICATION
165 TAD (-10 /8CHARACTERS TO LOOK AT
166 DCA CNT /CNT HAVING -10 PUTS US AT FIRST CHAR
167 S1C, TAD (7605
168 JMS I (GTSXBT /GET A CHAR
169 TAD (-"?!7700 /CHECK FOR ?
170 SNA CLA
171 JMP QINO /? IN OUTPUT NOT ALLOWED
172 ISZ CNT
173 JMP S1C
174
175 / CHECK FOR EMBEDDED * IN ANY SPECIFICATION
176
177 TAD (7605
178 S4L, DCA PTR
179 TAD (-10
180 DCA CNT
181 ACK, TAD PTR
182 JMS I (GTSXBT
183 TAD (-"*!7700 /CHECK TO SEE IF CHARACTER *
184 SZA CLA /SKIP IF IT IS
185 JMP CNTUP /GO LOOK AT NEXT
186 AC2
187 TAD CNT /ARE WE AT EXTENSION
188 SZA /SKIP IF YES
189 TAD (6 /ARE WE AT START OF FILENAME?
190 SNA CLA /SKIP IF NOT
191 ISZ CNT /BUMP COUNT ONLY IF OK
192 TAD PTR /LOOK AT NEXT CHAR
193 JMS I (GTSXBT
194 SZA CLA /SKIP IF ITS NULL - OK
195 JMP AINO /ERROR
196 CNTUP, ISZ CNT /BUMP TO NEXT CHAR
197 JMP ACK /CONTINUE CHECKING
198 TAD I PTR /ANY MORE INPUT
199 SNA CLA /SKIP IF THERE IS
200 JMP NULLCK
201 TAD FIVE /BUMP TO NEXT ENTRY
202 TAD PTR
203 JMP S4L
204 \f/ CHECK FOR NULL OUTPUT SPECIFICATION AND MAKE *.*
205
206 NULLCK, TAD I (7601 /WAS OUTPUT FILENAME GIVEN?
207 SZA CLA /SKIP IF NONE
208 JMP DIDEML
209 TAD STAR /PUT AN ASTERISK IN
210 DCA I (7601 /FILENAME
211 TAD STAR
212 DCA I (7604 /AND EXTENSION
213
214 /THIS CODE SETS A DEFAULT OUTPUT DEVICE ON DELETE
215
216 DIDEML, TAD I (7600 /IS AN OUTPUT DEVICE SPECIFIED?
217 SZA /SKIP IF NOT
218 JMP ODSPEC /NOTE DEVICE NUMBER IN AC
219 TAD I (OPT1 /CHECK FOR /D
220 AND (400
221 SZA CLA /SKIP IF NOT /D
222 JMP MOV /OUTPUT=INPUT
223 TAD I (OPT2 /V3C
224 AND (100 /CHECK FOR /R
225 SZA CLA /V3C
226 MOV, TAD I (7605 /WE'LL SUBSTITUTE FIRST INPUT DEVICE FOR USER
227 ODSPEC, AND (17 /CLEAR USER SPECIFIED LENGTH
228 DCA I (7600 /WE KNOW BETTER
229
230 /THE FOLLOWING BRINGS IN THE OUTPUT DEVICE HANDLER,
231 /READS THE DIRECTORY INTO CORE AND VERIFIES IT.
232
233 TAD (LSTFPG /SET THE FREE SPACE POINTER
234 DCA FPAGE /TO THE LAST FREE PAGE IN FIELD 0
235 TAD I (7600 /IS THERE AN OUTPUT DEVICE?
236 SZA /IF NO OUTPUT, DON'T FETCH HANDLER
237 JMS I (ASSIGN /GET THE HANDLER AND ALLOCATE ITS SPACE
238 DCA OUHAND /AC RETURNS HANDLER ENTRY POINT
239 JMS I (ODIRIN /READ IN THE OUTPUT DIRECTORY
240 TAD (7605 /INGIALIZE INPUT POINTER
241
242 /THIS IS THE BEGINING OF THE INPUT FILE LOOP
243
244 DOMOIN, DCA INFPTR /POINTER TO CURRENT INPUT
245 TAD I INFPTR /WHEN 0 NO MORE INPUT
246 SNA /SKIP IF MORE TO DO
247 JMP I (ENDCHK /DO END PROCESSING
248 JMS I (ASSIGN /ASSIGN AND ALLOCATE SPACE FOR INPUT HANDLER
249 DCA INHAND /AND SAVE ITS ENTRY ADDRESS
250
251 /THE FOLLOWING 2 INSTRUCTIONS HELP AVOID ALL KINDS OF
252 /PROBLEMS WITH THE MONITOR. IF A HANDLER GETS LOADED, THE
253 /MONITOR MAKES IT RESIDENT FOR OTHER PEOPLE AND DOESN'T DELETE
254 /ITS RESIDENT STATUS IF A REQUEST IS MADE FOR A NEW HANDLER
255 /TO BE LOADED OVER IT IF THE NEW HANDLER IS ALREADY RESIDENT
256
257 TAD FPAGE /SAVE FREE SPACE POINTER HERE
258 DCA SFUDG
259 JMP I (PG1 /LINK TO NEXT SECTION
260
261 SFUDG, 0
262 \fONDERR, JMS I (ERROR
263 ODRERR+40 /ERROR READING OUT DIR
264 AINO, JMS I (ERROR
265 ILLA+40 /ILLEGAL *
266 QINO, JMS I (ERROR
267 ILLQ+40 /ILLEGAL ?
268
269 PAGE
270 \f/CHECK FOR NON FILE STRUCTURED INPUT
271 /WE CAN'T HANDLE IT
272
273 PG1, TAD I INFPTR
274 TAD (7757
275 DCA TEMP
276 TAD I TEMP /IS FILE STRUCTURED BIT ON
277 SMA CLA /SKIP IF IT IS
278 JMP NFIN /ERROR
279 CIF 0
280 JMS I INHAND /READ INPUT DEVICES DIRECTORY
281 1400
282 IDBUF, INBUFR
283 1
284 JMP INDERR /ERROR
285 CDF 0
286 TAD I IDBUF /MAKE SURE THAT THE
287 CMA CLL /DIRECTORY OF
288 TAD I (INBUFR+2 /THE DEVICE IS
289 CDF 10 /GOOD
290 SNL
291 TAD (7700 /(SEE COMMENT ON TEST IN ROUTINE "ODIRIN")
292 SZL CLA /SKIP IF ITS GOOD
293 JMP BIDIR /ERROR
294
295 /FIND LAST BLOCK OF DIRECTORY
296
297 AC2 /LINK TO NEXT SGMENT NUMBER
298 FNDLST, DCA PTR /SAVE IT
299 CDF 0
300 TAD I PTR /IS THERE ANOTHER SEGMENT?
301 SNA CLA /SKIP IF YES
302 JMP ATIT /NO...WE ARE POINTING TO LAST
303 TAD PTR /BUMP TO NEXT SEGMENT
304 TAD (400
305 JMP FNDLST /LOOK AGAIN
306 ATIT, ACM3 /AC=7775
307 AND PTR /AND OUT 2'S BIT
308 TAD (400 /TOTAL SIZE OF IN CORE DIRECTRY
309 CIA /NEGATE FOR ISZ
310 DCA CNT
311 TAD FPAGE /WE ARE GOING TO PACK DIRECTORY
312 TAD (200 /RIGHT UP TO INPUT HANDLER SO
313 TAD CNT /WE GET MAX SIZE TRANSFER BUFFER
314 DCA FPAGE /ADJUSTED FREE CORE POINTER
315 CMA
316 TAD FPAGE
317 DCA XR1 /SET UP PLACE TO MOVE TO
318 CMA
319 DCA XR2 /ALWAYS COMES FROM 0
320 TAD I XR2 /MOVE
321 DCA I XR1 /IT
322 ISZ CNT
323 JMP .-3
324 \f/SET SAME DEVICE FLAG FLAG 4000 IF /D
325
326 CDF 10
327 TAD I (OPT1
328 AND (400
329 RTL CLL /PUT /D BIT INTO AC 0
330 RAL
331 DCA SDFLG
332
333
334 / COUNT NUMBER OF INPUTS FROM SAME DEVICE
335 /ALSO MAKE NULL INPUT FILENAMES *.*
336 /BUT ONLY IF NOT /D
337
338 TAD INFPTR /OK LETS GO THROUGH
339 DCA PTR /THE INPUT SPECIFICATIONS
340 GETCNT, ISZ PTR /POINT TO FILENAME WORD
341 TAD (3 /SET TEMP TO POINT TO EXTENSION
342 TAD PTR
343 DCA TEMP
344 TAD SDFLG /ARE WE DOING /D
345 K7450, SNA /SKIP IF YES - AC NON 0
346 TAD I PTR /NO /D - LOOK AT FILENAME
347 SZA CLA /ITS NULL PUT IN *.*
348 JMP NOSUB /DONT CHANGE IT
349 TAD (5200 /MAKE IT *
350 DCA I PTR
351 TAD (5200 /.*
352 DCA I TEMP
353 NOSUB, CLA IAC /TEMP+1 POINTS TO NEW INPUT
354 TAD TEMP
355 DCA PTR
356 /NOTE CNT WAS SET BY ISZ'ING TO ZERO
357 ISZ CNT /KEEP COUNT OF DEVICES IN GROUP
358 TAD I (OPT2 /CHECK FOR /U (UGLY SWITCH)
359 AND (10
360 SZA CLA /SKIP IN NO /U
361 JMP NOPTIM /WERE FORCED TO DO ONE AT A TIME
362 TAD I PTR /COMPARE DEVICE NUMBERS
363 CIA /IN A GROUPING
364 TAD I INFPTR
365 SNA CLA /SKIP IF NEW GROUP
366 JMP GETCNT /WE'LL DO ALL THE SAME AT ONCE
367 NOPTIM, TAD CNT
368 CIA /NEGATE COUNT
369 DCA INSCNT /AS NUMBER OF INPUTS TO DO AT ONCE
370 TAD PTR /SAVE WHERE TO CONTINUE FOR REST
371 DCA I (MOIN
372 \f/THE FOLLOWING CHECKS TO SEE IF A OPERATION
373 /IS BEING DONE FROM A DEVICE TO ITSELF
374
375 TAD I (7600 /GET DEVICE NUMBER
376 TAD (7646 /HANDLER ENTRY POINT TABLE
377 DCA TEMP
378 TAD I INFPTR /GET INPUT ENTRY POINT
379 TAD (7646
380 DCA PTR
381 TAD I PTR /CHECK INPUT ENTRY POINT AGAINST
382 CIA
383 TAD I TEMP /OUTPUT ENRTY POINT
384 SNA CLA /SKIP IF THEY ARE DIFFERENT
385 ISZ SDFLG /SET SAME DEVICE FLAG, AC11
386 TAD FPAGE /SET POINTER TO
387 DCA BDPTR /START OF DIRECTORY
388 DCA TYPFND /CLEAR FOUND FILE FLAG
389 JMP I (NBLOCK /LINK TO SOME MORE
390
391 TYPFND, 0
392 SDFLG, 0 /NEGATIVE MEANS /D, ODD MEANS OUTPUT DEV=INPUT DEV
393
394 NFIN, JMS I (ERROR
395 NFLEIN+40 /NON FILE STRUCTED INPUT
396 INDERR, JMS I (ERROR
397 BADIRD+40 /ERROR READING INPUT DIR
398 BIDIR, JMS I (ERROR
399 BIDIRM+40 /NOT A GOOD DIRECTORY
400
401 PAGE
402 \f/THIS IS THE SUPERQUASIFACETED DIRECTORY PATTERN MATCHING ROUTINE
403
404 /THE INPUT DIRECTORY IS SEARCHED HERE, IF A MATCH
405 /IS FOUND USING THE INPUT GROUPING
406 /GOT1 GETS CONTROL WITH -BLOCKS IN THE AC
407
408 NBLOCK, STA
409 TAD BDPTR /POINTER TO START OF DIR BLOCK
410 DCA XR
411 CDF 0
412 TAD I XR /GET COUNT OF NUMBER OF ENTRIES
413 DCA ENTCNT /SAVE LOCALLY TO AVOID HERB'S BUG
414 TAD I XR /GET BLOCK NUMBER FIRST FILE
415 DCA BLOCK
416 TAD I XR /NEXT SEGMENT NUMBER
417 DCA LFLAG /IF IT 0 WE AT END
418 ISZ XR /SKIP TENTATIVE FILE WORD
419 TAD I XR /GET -NUMBER OF INFO WORDS
420 CIA /MAKE POSITVE
421 DCA INFWDS
422 TAD XR /POINT TO FIRST
423 IAC /ENTRY
424 DCA EPTR
425
426 BLOOP, TAD I EPTR /GET FILENAME WORD
427 CDF 10
428 SNA CLA /SKIP IF FILE HERE
429 JMP EMPTY /NO... ITS REALLY AN EMPTY
430 TAD INSCNT /SET NUMBER OF INPUT TO LOOK
431 DCA NCNT /AT ALL AT ONCE
432 DCA MATFLG /CLEAR MATCH FLAG
433 TAD INFPTR /ADDRESS OF FIRST INPUT
434 SKP
435 MN1, TAD GPTR2 /ADDRESS OF CURRENT INPUT
436 TAD (5 /GTSXBT SUBR REQUIRES US TO
437 DCA GPTR2 /POINT TO END OF FIELD
438 TAD EPTR /POINT DIRECTORY POINTER TO
439 TAD (4 /END OF ENTRY FOR SAME REASON
440 DCA GPTR1
441 TAD GPTR1 /SET EPNEXT TO POINT TO
442 TAD INFWDS /MINUS NUMBER OF BLOCKS IN
443 DCA EPNEXT /FILE WORD
444 TAD (-10 /NUMBER OF CHARS TO LOOK AT
445 WILDNM, DCA CNT
446 \fMLP, TAD GPTR2 /OK - GET A CHARACTER FROM
447 JMS I (GTSXBT /STRING
448 TAD (-"*!7700 /IS IT AN *
449 SNA /SKIP IF NOT *
450 JMP WILDA /YEP... ITS A WILD CARD
451 TAD ("*-"? /IS IT A ?
452 SNA /SKIP IF NOT
453 JMP WILD /YES... FORCE MATCH ON THIS CHAR
454 TAD ("?&77 /RESTORE VALUE
455 CIA /NEGATE
456 DCA CHAR /AND SAVE
457 TAD GPTR1 /NOW GET CHAR FROM DIRECTORY
458 CDF 0
459 JMS I (GTSXBT
460 CDF 10
461 TAD CHAR /DO CHARS MATCH
462 SZA CLA /SKIP IF THEY DO
463 JMP NM1 /NO MATCH ON THIS INPUT
464 WILD, ISZ CNT /BUMP COUNT OF CHARS & POINTER
465 JMP MLP /COMPARE ALL 8
466 MEXT, ISZ MATFLG /A MATCH!!!!!!!
467 NM1, CLA /WILD CARD COMES HERE WITH ICHY AC
468 ISZ NCNT /HAVE WE CHECKED GROUP OF INPUTS
469 JMP MN1 /NO CHECK WHOLE GROUP
470 TAD MATFLG /HAVE THERE BEEN ANY MATCHES
471 SZA CLA /SKIP IF NOT
472 TAD (4 /WILL INVERT /V SWITCH
473 TAD I (OPT2 /ADD SWITCH
474 AND (4 /ISOLATE IT
475 CDF 0
476 /SKIPS IF INPUT DIRECTORY ENTRY IS NOT CANDIDATE
477 /THAT IS - IF A MATCH WAS NOT FOUND BETWEEN ANY
478 /OF THE INPUTS AND /V WAS NOT SPECIFIED OR
479 /A MATCH WAS FOUND AND /V WAS SPECIFIED
480
481 /THIS ALLOWS /V TO MEAN EVERYTHING BUT...
482
483 SZA CLA
484 TAD I EPNEXT /GET -NUMBER OF BLOCKS
485 CDF 10
486 SZA /SKIPS IF TENTATIVE OR NOT CANDIDATE
487 JMP I (GOT1 /PROCESS FILE
488 NENT, TAD EPNEXT /POINT EPTR TO BLOCK
489 DCA EPTR /COUNT OF FILE
490 SKP
491 EMPTY, ISZ EPTR /ON EMPTY MAKE EPTR POINT TO BLOCK COUNT
492 CDF 0
493 TAD I EPTR /GET BLOCK COUNT
494 CIA /MAKE POSITIVE
495 TAD BLOCK
496 DCA BLOCK /KEEP SUM
497 ISZ EPTR /POINT TO NEXT ENTRY
498 ISZ ENTCNT /BUMP THE NUMBER OF ENTRIES
499 JMP BLOOP /NOT DONE WITH SEGMENT
500 CDF 10
501 TAD (400 /BUMP TO NEXT SEGMENT
502 TAD BDPTR
503 DCA BDPTR
504 TAD LFLAG /DID WE PROCESS LAST SEGMENT
505 SZA CLA /SKIP IF WE DID
506 JMP NBLOCK /PROCESS NEW SEGNENT
507 TAD I (SFUDG /RESET FREE CORE POINTER
508 DCA FPAGE /TO PRESERVE INPUT HANDLER IF PRESENT
509 JMP I (SAYNON
510
511 /HANDLE WILD CARDS
512
513 WILDA, TAD CNT /GET CURRENT CHAR POSITION
514 TAD (6 /ADD SIZE OF FILENAME
515 SPA /SKIP IF IN EXTENSION FIELD
516 JMP WILDNM /THIS BUMPS TO EXTENSION
517 JMP MEXT /THIS MEANS IT HAS TO BE A MATCH
518
519
520 CHAR, 0
521 EPNEXT, 0
522 GPTR2, 0
523 LFLAG, 0
524 NCNT, 0
525 BLOCK, 0
526 MATFLG, 0
527 ENTCNT, 0
528
529
530 PAGE
531 \fGOT1, DCA IFCNT /-# OF BLOCKS IN AC
532 JMS I (DATCHK /VERIFY IF /C OR /O ALSO MATCH
533 ISZ I (TYPFND /COMES BACK IF THEY DO -
534 /TURN OFF NO FILES MSG FOR THIS INPUT GROUP
535 TAD I (OPT2 /CHECK FOR /T
536 AND (20
537 SNA CLA /SKIP IF /T
538 TAD INFWDS /SEE IF DATE PRESENT
539 CDF 0
540 SZA CLA /SKIP IF NO DATE OR /T
541 TAD I GPTR1
542 CDF 10
543 SZA /SKIP IF NO DATE OR /T
544 DCA I (DATE /GIVE MONITOR FILES DATE
545 TAD (-4 /MAKE 2 COPIES
546 DCA CNT /OF THE INPUT
547 CMA /FILE NAME IN
548 TAD EPTR /FIELD 1 TO
549 DCA XR /WORK WITH THEM
550 TAD (SPOT-1 /MAKE THEM AT SPOT
551 DCA XR1 /AND SPOT1
552 TAD (SPOT1 /SPOT1 WILL ALWAYS
553 DCA PTR /CONTAIN THE ORIGINAL
554 MOVENT, CDF 0 /AND SPOT WILL
555 TAD I XR /CONTAIN THE
556 CDF 10 /UPDATED VERSION AS
557 DCA I PTR /REFLECTED FROM
558 TAD I PTR /THE OUTPUT SPECIFICATION
559 ISZ PTR /-
560 DCA I XR1 /-
561 ISZ CNT /-
562 JMP MOVENT /-
563 TAD I (7601 /GET OUTPUT FILENAME
564 TAD (-5200 /WAS IT *
565 SNA CLA /SKIP IF NOT
566 JMP TSTEXT /YES... LEAVE FILENAME ALONE
567 TAD I (7601 /REPLACE INPUT NAME
568 DCA I (SPOT /WITH GIVEN
569 TAD I (7602 /OUTPUT
570 DCA I (SPOT+1 /SPECIFICATION
571 TAD I (7603
572 DCA I (SPOT+2 /-
573 TSTEXT, TAD I (7604 /SEE IF EXTENSION
574 TAD (-5200 /WAS *
575 SNA CLA /SKIP IF IT WASNT
576 JMP .+3 /LEAVE INPUT DEFAULT ALONE
577 TAD I (7604 /REPLCE EXTENSION
578 DCA I (SPOT+3 /WITH GIVEN EXTENSION
579 DCA TRFLG /CLEAR THE TRANSFER FLAG
580 TAD I (OPT2 /IS /R ON?
581 AND (100
582 TAD I (SDFLG /OR /D OR INPUT DEV=OUTPUT DEV?
583 SNA /SKIP IF ANY
584 JMP SETGD /WE ARE DEFINITELY OK
585 SMA CLA /IF /D THEN CHECK OUTPUT
586 TAD (SPOT1-SPOT /OTHERWISE INPUT
587 JMS I (LOOKUP
588 JMP NSETGD /NO OUTPUT FILE GIVEN
589 SNA /AC=BLOCK NO OF FILE OR 0 IF NONE
590 JMP I (NENT /NO FILE - DO NOTHING
591 DCA TEMP /SAVE - WE MIGHT NEED IT
592 TAD I (SDFLG /IF OPERATION IS TRANSFER THEN
593 /TRFLG IS SET IF FILE HAS NOT
594 /MOVED; IF /D TRFLG MUST NOT BE
595 /SET ; WE DONT CARE ABOUT
596 /RENAME - ITS IRRELEVANT.
597 SMA CLA /SKIP IF /D- WILL CAUSE TRFLG=0
598 TAD TEMP /GET THE BLOCK FILE IS NOW AT
599 CIA /CHECK AGAINST ORIGINAL
600 TAD I (BLOCK /LOCATION
601 SNA CLA /SKIP IF IT MOVED - NOTE THAT
602 /IF THIS SKIPS THE USER IS DOING
603 /A PLAY WITH DEATH OPERATION
604 SETGD, ISZ TRFLG /ENABLE TRANSFERING OF THE FILE
605 NSETGD, TAD I (SDFLG /SET UP TO PROMPT OR LIST
606 SPA CLA /SKIP IF NOT /D
607 TAD (SPOT-SPOT1 /USE OUTPUT NAME
608 TAD (SPOT1+4 /USE INPUT NAME
609 JMS I (PRINTE /SEE IF HE WANTS TO BE PROMPTED
610 FLSRSM, TAD I (OPT2
611 RTL /PUT /N INTO LINK
612 AND (400 /ISOLATE /R OPTION
613 SZA CLA /SKIP IF NOT /R
614 JMP I (RENAME /GO TO RENAME CODE
615 TAD I (SDFLG /CHECK FOR NO /D AND SAME DEV
616 SPA SNA CLA /SKIP IF NO /D AND SANE DEV
617 TAD I (7600 /IS THERE AN OUTPUT?
618 SNA SZL /SKIP IF NO /N AND OUTPUT DEV
619 /DIDNT SKIP IF NO /D AND SAME DEVICE
620 JMP NODEL /DONT DELETE
621 JMS I (FAKUSR /FAKE USR HANDLER CALLS
622 JMS I (200 /CALL USR
623 4 /CLOSE
624 SPOT /OUTPUT FILE NAME
625 0
626 CLA SKP /O.K. TO GET CLOSE ERROR NOW
627 ISZ I (WRTDIR /SIGNAL CHANGE MADE TO DIRECTRY
628 JMS I (UNFAK /FIXUP HANDLER ADDRESS AGAIN
629 NODEL, CLA
630 TAD TRFLG /SET AC NOT 0 IF TRANSFER GO AHEAD
631 JMP I (NPG /LINK TO SOME MORE
632
633 TRFLG, 0
634
635
636 PAGE
637 \f/THIS PAGE OF CODE PERFORMS FILE MOVES FROM
638 /INPUT TO OUTPUT
639
640 NPG, SNA CLA /SKIP IF WE CAN DO TRANSFER
641 JMP NFUNCT /GO PROCESS NEXT ENTRY
642
643 /THE FOLLOWING SMALL STRANGE PIECE OF CODE
644 /DYNAMICALLY ALLOCATES THE BUFFER ACCORDING
645 /TO THE FREE SPACE IN FIELD 0 (INCLUDING
646 /DIRECTORY SHRINKING) OR ALLOCATES 15 BLOCKS
647 /IN FIELD 2 IF ITS AVAILABLE.
648
649 F2C1, TAD (7400 /BECOMES TAD EPTR IF ONLY 8K
650 AND (7400 /CALCULATE FREE SPACE
651 RAL CLL /SIZE
652 RTL /AND SAVE
653 RTL /IT
654 DCA BUFSIZ
655 TAD IFCNT /SET THE OUTPUT
656 CIA /FILE COUNT
657 DCA OFCNT /AS POSITIVE NIMBER OF BLOCKS
658 TAD OFCNT /SET THE NUMBER
659 AND (7400 /OF BLOCKS
660 SNA CLA /UP FOR ENTER
661 TAD OFCNT /IF IT IS LESS
662 RTL CLL /THAN 256 OR
663 RTL /SET IT TO 0
664 DCA TEMP /FOR FILES GREATER THAN 256
665 TAD (SPOT /SET THE ADDRESS OF THE
666 DCA SBLKN /OUTPUT NAME
667 TAD I (7600 /IS THERE AN OUTPUT FILE?
668 SNA /SKIP IF THERE IS
669 JMP NFUNCT /DO NO TRANSFER
670 TAD (7757 /INDEX INTO TENTATIVE FILE
671 DCA MSIZE /TABLE IN ORDER TO
672 TAD I MSIZE /CLEAR OUT ANY
673 AND (7770 /TENTATIVE WE DONT WANT
674 DCA I MSIZE /THIS COMES IF AN I/O ERROR HIT
675 TAD I (7600 /DO THE ENTER
676 JMS I (FAKUSR /MAKE USR USE IN CORE HANDLER
677 TAD TEMP /ADD IN BLOCK COUNT
678 JMS I (200
679 3 /ENTER
680 SBLKN, SPOT
681 MSIZE, 0
682 JMP I (NOROOM /ENTER FAILED
683 TAD I (SVDATE /RESTORE REAL DATE TO MONITOR
684 DCA I (DATE
685 JMS I (UNFAK /REMOVE OUR FAKE HANDLER
686 JMS I (ADDINF /COPY ADDITIONAL INFO WORDS
687 TAD IFCNT /SEE IF ENTER SIZE
688 STL CIA /GIVEN BACK IS
689 TAD MSIZE /ENOUGH - HANDLES >255 AND
690 SNL SZA CLA /NON FILE STRUCTURED
691 JMP I (NOROOM /LENGTHS. NOT ENOUGH
692 DCA INEOF /CLEAR INPUT END OF FILE
693 TAD SBLKN /SET THE OUTPUT BLOCK NUMBER
694 DCA OBLCKN
695 TAD I (BLOCK /SET THE INPUT BLOCK NUMBER
696 DCA BLOCKN
697
698 \f/THE FOLLOWING PIECE OF CODE IS A TRICKY PIECE
699 /THAT CALCULATES THE NUMBER OF BLOCKS TO READ
700
701 MOVEIT, TAD IFCNT /GET THE NUMBER OF BLOCKS
702 CLL /ITS NEGATIVE
703 TAD BUFSIZ /ADD ON BUFFER SIZE
704 SNL /SKIP IF MORE ROOM AVAILABLE THAN NEEDED
705 DCA IFCNT /OTHERWISE RESAVE NEW COUNT
706 SZL /SKIP IF NOT AT END OF FILE
707 ISZ INEOF /SET END OF FILE INDICATOR
708 CIA /MAKES -BUFSIZ+COUNT
709 TAD BUFSIZ /MAKES COUNT OF NUMBER OF BLOCK
710 RTR CLL /BUILD THE
711 RTR /INPUT CONTROL
712 RTR /WORD
713 F2C2, TAD (20 /BECOMES NOP IF ONLY 8K
714 DCA INCTLW /SET INPUT CONTROL WORD
715 JMS I (CINTER /CHECK FOR ^C
716 SKP /SKIP IF NOT
717 JMP I (CTCDE /ABORT OPERATION
718 CIF 0
719 JMS I INHAND /READ INPUT HUNK
720 INCTLW, 0
721 0
722 BLOCKN, 0
723 JMP I (RDERR /WELL- SCRATCH THAT FILE
724 TAD BLOCKN /UPDATE BLOCK COUNT
725 TAD BUFSIZ
726 DCA BLOCKN
727 AC4000 /SET THE OUTPUT
728 TAD INCTLW /CONTROL WORD
729 DCA OUCTLW
730 JMS I (CINTER /CHECK FOR ^C
731 SKP /SKIP IF NOT
732 JMP I (CTCDE /ABORT OPERATION
733 ISZ I (MUSTWT /SIGNAL REAL OUTPUT DONE
734 CIF 0
735 JMS I OUHAND /WRITE A HUNK OF FILE
736 OUCTLW, 0
737 0
738 OBLCKN, 0
739 JMP I (WRTERR /WHAT A CRUMBY OUTPUT DEVICE
740 TAD OBLCKN /UPDATE THE
741 TAD BUFSIZ /OUTPUT FILE
742 DCA OBLCKN /BLOCK NUMBER
743 TAD INEOF /SEE IF THATS ALL FOLKS
744 SNA CLA /SKIP IF WE TRANSFERED FILE
745 JMP MOVEIT /DO SOME MORE
746 TAD I (7600 /OK - LETS MAKE IT PERMANENT
747 JMS I (FAKUSR /TELL USR TO USE INCORE HANDLER
748 JMS I (200
749 4 /CLOSE
750 SPOT
751 OFCNT, 0
752 JMP I (CLOERR /THIS IS IMPOSSIBLE (I HOPE)
753 JMS I (UNFAK /ENABLE SYSTEM USE OF REAL HANDLER
754 ISZ I (WRTDIR /SET WE CHANGED DIRECTORY FLAG
755 NFUNCT, JMP I (NENT /I KNOW ITS INEFFICIENT TO JUMP HERE
756 /BUT- IT'S CLEAN...
757 PAGE
758 \f/HERE COMES GOBBS AND GOBBS OF GOODY LITTLE ROUTINES
759
760 /FIRST WE HAVE A NICE LITTLE ROUTINE WHICH WILL DO
761 /HANDY LITTLE THINGS LIKE FETCH A HANDLER
762 /AND IN ADDITION ALLOCATE THE SPACE FOR IT.
763 /JUST IMAGINE THIS CAN BE YOURS FOR THE LOW LOW PRICE
764 /OF 23 INSTRUCTIONS
765
766 ASSIGN, 0
767 DCA TEMP /SAVE DEVICE NUMBER
768 TAD TEMP
769 JMS I (200
770 12 /INQUIRE ABOUT HANDLER
771 HADDR1, 0
772 JMP I (CLOERR /CANT HAPPEN (I HOPE)
773 TAD HADDR1 /DID WE GET BACK ADDRESS
774 SZA /SKIP IF NOT- NON-RESIDENT
775 JMP I ASSIGN /YES... RETURN ITS ENTRY POINT
776 SKP
777 TWOPAG, IAC /TURN ON 2-PAGE BIT
778 TAD FPAGE /GET FREE SPACE POINTER
779 DCA HADDR2 /SET FOR FETCH
780 TAD FPAGE /TAKE AWAY
781 TAD (-200 /PAGE FROM
782 DCA FPAGE /FREE SPACE
783 TAD TEMP /GET DEVICE NUMBER
784 JMS I (200
785 1 /FETCH
786 HADDR2, 0
787 JMP TWOPAG /FAILED- MUST BE 2-PAGER
788 TAD HADDR2 /RETURN ENTRY POINT ADDRESS
789 JMP I ASSIGN
790 \f/THIS UTILITY ROUTINE RETURNS A SIS BIT
791 /CHARACTER FROM ANY FIELD (SET ON ENTRY)
792 /FROM ADDRESS IN AC-COUNT(IN HALF WORDS)
793
794 GTSXBT, HLT
795 CLL RAL /DOUBLE POINTER ADDRESS
796 TAD CNT /ADD NEGATIVE DISPLACEMENT
797 CML RAR /GET WORD ADDRESS AGAIN
798 DCA TEMP /SAVE IT
799 TAD I TEMP /GET WORD
800 SNL /SKIP IF WE WANT RIGHT HALF
801 JMS ROTR6 /MAKE LEFT HALF RIGHT HALF
802 AND (77 /GET LOW SIX BITS
803 JMP I GTSXBT
804
805
806 ROTR6, 0
807 RTR
808 RTR
809 RTR
810 JMP I ROTR6
811
812 /THIS TAKES A SIX BIT CHAR IN AC AND CONVERTS
813 /IT TO ASCII TO TYPE IT
814
815 CONVTP, HLT
816 SZA /CONVERT 0 TO BLANKS
817 TAD (240
818 AND (77
819 TAD (240
820 JMS I (TYPE /TYPE IT
821 JMP I CONVTP
822 \f/TYPE TAKES A CHARACTER IN THE AC AND CALLS
823 /TTY TO TYPE IT IF ^O IS NOT IN AFFECT
824 /ALSO CHECKS FOR ^C AND ^P
825
826 TYPE, HLT
827 DCA READKB /SAVE CHARACTER
828 JMS I (CINTER /SEE IF ^C
829 SKP /NO
830 JMP I (CTCDE /ABORT OPERATION IF ^C OR ^P
831 TAD (217 /^O
832 JMS I (CTYPE /SEE IF TYPED
833 SKP /SKIP IF NOT
834 DCA ECHO /CLEAR ECHO SWITCH
835 TAD ECHO /IS ECHO IN EFFECT
836 SNA CLA /SKIP IF YES
837 JMP I TYPE /IGNORE CHARACTER IF ^O
838 TAD READKB /TYPE CHAR
839 JMS TTY
840 JMP I TYPE
841
842 TTY, 0
843 DCA TCHAR /SAVE CHAR
844 TAD TCHAR /GET CHAR BACK
845 /** NEXT 4 LOCATIONS REPLACED IF BATCH ACTIVE BY:
846 TTYOUT, TLS /** SKP
847 TSF /** 7400 /ADDRESS OF BATCH OUTPUT ROUTINE
848 JMP .-1 /** CIF TOPFIELD
849 CLA /** JMS I .-2
850 TAD TCHAR /GET CHAR AGAIN
851 TAD (-215 /IF WE JUST TYPED A C.R. TYPE
852 SZA CLA /A L.F.
853 JMP I TTY
854 TAD (12
855 JMP TTY+1
856 TCHAR, 0
857
858 /GET A CHARACTER FROM KEYBOARD AND
859 /CHECK FOR ^C AND ^P
860
861 READKB, HLT
862 KSF
863 JMP .-1
864 JMS I (CINTER /IS IT ^C
865 SKP /SKIP IF NOT
866 JMP I (CTCDE /YES
867 KRB /READ IT
868 AND (177 /AND GET RID OF
869 TAD (200 /PARITY
870 JMP I READKB
871 \f/ROUTINE TO MAKE SURE USER SPECIFIED
872 //C AND /O SWITCHES CAUSE CORRECT MATCH WITH DATE
873
874 DATCHK, 0
875 TAD I (OPT1 /CHECK /C
876 JMS MDATE
877 NOP /RETURN HERE WITH AC=0 IF NO /C
878 SZA CLA /RETURN HERE WITH AC=0 IF DATES MATCH
879 JMP I (NENT /DATES DONT MATCH AND /C GIVEN
880 TAD I (OPT2 /CHECK /V
881 JMS MDATE
882 CMA CLA /SET AC=-1 IF NO /V
883 SNA CLA /RETURN HERE AC=0 IF DATES SAME
884 JMP I (NENT /DATES SAME WITH /V-IGNORE FILE
885 JMP I DATCHK /CONTINUE
886
887 MDATE, 0 //O AND /V ARE AC2
888 RTL /IS IT OPTION ON?
889 SMA CLA /SKIP IF IT IS
890 JMP I MDATE /NO- RETURN WITH 0 AC
891 ISZ MDATE /SKIP RETURN
892 CDF 0
893 TAD I GPTR1 /GET DATE WORD
894 CIA
895 CDF 10
896 TAD I (SVDATE /COMPARE WITH MONITORS, 0 IF =
897 JMP I MDATE
898
899 ECHO, 1
900
901
902 PAGE
903 \f/THIS IS THE CORE DEVICE HANDLER
904 /THE USR IS MADE TO COME HERE BY A CALL TO FAKUSR.
905 /THIS HANDLER SWAPS THE DESIRED BLOCK INTO
906 /THE USR AREA AND WRITES THE BLOCK BACK INTO THE
907 /INCORE DIRECTORY.
908
909 /THE CODE SET UP IN FIELD 0 TO CALL THE HANDLER IS:
910 / *FAKHND
911 / 0 /ENTRY POINT
912 / TAD FAKHND /GET RETURN ADDRESS
913 / CIF CDF 10
914 / JMP I .+1 /PLOP UP TO BODY OF HANDLER IN FIELD 1
915 / FAKBDY
916
917
918 FAKBDY, DCA RETLOC /SAVE ARGUMENT ADDRESS
919 TAD I RETLOC /GET CONTROL WORD
920 RAL /R/W BIT INTO LINK
921 CLA RAL /R/W BIT INTO AC11
922 TAD DCAXR1 /IF WRITE MAKE DCA XR2 ELSE XR1
923 DCA DCASPT /SAVE WHERE WE NEED IT
924 ISZ RETLOC /BUMP TO LOCATION (ALWAYS 1400 FROM USR)
925 ISZ RETLOC /BUMP TO BLOCK NUMBER
926 TAD I RETLOC /GET IT
927 ISZ RETLOC /BUMP TO ERROR RETURN
928 ISZ RETLOC /NOW TO GOOD RETURN (WE WONT FAIL)
929 CLL RTR /MULTIPLY BY 400(8)
930 RTR
931 RAR
932 TAD (4177 /ADD ON TO BEGINING OF DIRECTRY
933 DCAXR1, DCA XR1 /SAVE IN BOTH XR1
934 TAD XR1
935 DCA XR2 /AND XR2
936 TAD (1377 /NOW SAVE USR BLOCK AREA
937 DCASPT, HLT /IN EITHER XR1 OR XR2 (R OR W)
938 TAD (-400 /SET WORD TRANSFER COUNT
939 DCA CNT
940 TAD I XR2 /GET A WORD
941 DCA I XR1 /PUT A WORD
942 ISZ CNT
943 JMP .-3
944 JMP I RETLOC /GO BACK TO USR
945 \f/THIS ROUTINE DOES THE SETUP OF THE INCORE
946 /DIRECTORY HANDLER AND CHANGES THE REAL
947 /HANDLERS ENTRY POINT IN THE MONITOR SO THAT
948 /THE USR WILL CALL IT.
949
950 FAKUSR, 0
951 DCA UNFAK /SAVE DEVICE NUMBER
952 TAD UNFAK /INDEX INTO MONITORS RESIDENCY
953 TAD (7646 /TABLE
954 DCA TABAD
955 TAD WRTDIR /SEE IF DEVICE HAS DIRECTORY
956 SPA CLA /SKIP IF IT DOES
957 JMP NOSUBST /!!!DONT CHANGE IF NON-FILE DEV
958 TAD (FAKHND /PUT OUR HANDLERS ADDRESS IN
959 DCA I TABAD /MONITORS TABLE
960 NOSUBST,CDF 0
961 TAD (1200 /PUT IN HANDLER INTERFACE CODE
962 DCA I (FAKHND+1 /INTO FIELD 0 AS GIVEN ABOVE
963 TAD (CIF CDF 10
964 DCA I (FAKHND+2
965 TAD (5604
966 DCA I (FAKHND+3
967 TAD (FAKBDY
968 DCA I (FAKHND+4
969 CDF 10
970 TAD UNFAK /RETURN WITH DEVICE NUMBER IN AC
971 JMP I FAKUSR
972
973 UNFAK, 0
974 CLA /V3C
975 TAD OUHAND /RESET MONITORS TABLE TO
976 DCA I TABAD /POINT TO REAL HANDLER
977 DCA TABAD /V3C
978 JMP I UNFAK
979
980 TABAD, 0
981 RETLOC, 0
982 \f/ENTER HERE IF A BRANCH TO 7600 OR 7605 OCCURS
983
984 FIXDIR, JMS UNFAK /JUST IN CASE
985 JMS I (CINTER /CHECK FOR ^C
986 NOP
987 AC4000 /EITHER WAY GO BACK TO
988 DCA I (ALTOPT /MONITOR BUT AFTER WE HANDLE DIRECTORY
989 CTCDE, TAD MUSTWT /IS MUST WRITE SET?
990 SNA CLA /SKIP IF /Q OR MUST WRITE
991 TAD WRTDIR /CHECK TO SEE IF WE HAVE TO
992 SPA SNA CLA /WRITE THE DIRECTORY
993 JMP ENDCHK /CONTINUE
994 DCA WRTDIR /KEEP OLD DIRECTORY
995 JMS I (ERROR /TELL HIM
996 DSVED+40
997
998 ENDCHK, ISZ I (ECHO /TURN ON ECHO
999 JMS DIROUT /WRITE OUT THE OUTPUT DIRECTORY
1000 JMS I (RESTORE /RESTORE 7600 IN FIELD 0
1001 TAD I (OPT2 /GET OPTION /W
1002 RTR
1003 SNL CLA /SKIP FOR VESION NUMBER
1004 JMP NOVER
1005 DCA I (OPT2 /STOPS RECUSION WITH ^P
1006 JMS I (ERROR /PRINT VERSION NUMBER
1007 VERNO+40
1008 TAD (215
1009 JMS I (TYPE
1010 NOVER, TAD I (ALTOPT /GO BACK TO MONITOR?
1011 SMA CLA /SKIP IF YES
1012 JMP I (CDCALL /CALL THE CD AGAIN
1013 CIF CDF 0 /RETURN TO MONITOR
1014 JMP I (7605
1015
1016
1017 MUSTWT, 0
1018 SVDATE, 0
1019 WRTDIR, 0
1020 \fDIROUT, 0 /ROUTINE TO WRITE THE OUTPUT DIRECTORY
1021 TAD WRTDIR /AC>0 IF WE HAVE TO WRITE IT
1022 SPA SNA CLA /SKIP TO WRITE DIRECTORY
1023 JMP I DIROUT
1024 CIF 0
1025 JMS I OUHAND /WRITE DIRECTORY BACK ONTO DEVICE
1026 5410
1027 4600
1028 1
1029 JMP I (ODERR /IS HE IN TROUBLE...
1030 DCA WRTDIR /CLEAR WRITE DIRECTORY FLAG
1031 JMP I DIROUT /RETURN
1032 PAGE
1033 \f/ROUTINE WHICH ECHOES ^(CHAR) AND SKIP RETURNS IF
1034 /ONE WE WANTED
1035
1036 CTYPE, 0
1037 DCA T2 /SAVE CHARACTER
1038 TAD (200 /GT RID OF PARITY
1039 KRS /SEE WHATS IN BUFFER
1040 CIA
1041 TAD T2 /COMPARE AGAINST DESIRED ONE
1042 SNA CLA /SKIP IF NOT ONE
1043 KSF /IS FLAG UP?
1044 JMP I CTYPE /NO... JUST RETURN
1045 KCC /CLEAR CHARACTER
1046 TAD ("^ /OUTPUT ^
1047 JMS I (TTY
1048 TAD T2
1049 TAD (100 /CHAR
1050 JMS I (TTY
1051 TAD (215
1052 JMS I (TTY
1053 ISZ CTYPE /SKIP RETURN
1054 JMP I CTYPE
1055
1056 T2, 0
1057
1058 /ROUTINE USED TO DETERMINE IF ^C OR ^P TYPED
1059
1060 CINTER, 0
1061 TAD (203 /CHECK FOR ^C
1062 JMS CTYPE
1063 JMP UPPCK /NO CHECK FOR ^P
1064 JMP SPURGE /YES SET ALTMODE BIT
1065 UPPCK, TAD (220
1066 JMS CTYPE
1067 JMP I CINTER /NOT EITHER ^P OR ^C
1068 SKP /IF ^P CLEAR ALTMODE BIT
1069 SPURGE, CMA /SET BIT
1070 DCA I (ALTOPT
1071 ISZ CINTER /SKIP RETURN
1072 JMP I CINTER
1073 \f/THIS ROUTINE MODIFIES THE THE MONITOR RETURN
1074 /LOCATIONS TO COME BACK TO FOTP AND SAVES WHAT
1075 /WAS THERE SO RESTORE CAN RESTORE THEM
1076
1077 INTERC, 0
1078 TAD I (DATE
1079 DCA I (SVDATE /SAVE MONITOR DATE
1080 CDF 0
1081 TAD I (7600 /SAVE 7600,7601,7602,7605
1082 DCA SCODE /AND REPLACE WITH
1083 TAD (CIF CDF 10 /CIF CDF 10
1084 DCA I (7600 /JMP I .+1
1085 TAD I (7601 /FIXDIR
1086 DCA SCODE+1 /7605 GETS JMP 7600
1087 TAD (5602 /THIS ENABLES FOTP TO WRITE
1088 DCA I (7601 /OUT DIRECTORY AN MANUAL ABORT
1089 TAD I (7602 /OR IF HANDLER PICKS UP ^C
1090 DCA SCODE+2 /AND TRIES TO GO TO MONITOR
1091 TAD (FIXDIR
1092 DCA I (7602
1093 TAD I (7605
1094 DCA SCODE+3
1095 TAD (5200
1096 DCA I (7605
1097 CDF 10
1098 JMP I INTERC
1099
1100 /THIS ROUTINE SIMPLY RESTORES THE MONITOR
1101 /LOCATIONS TO THEIR ORIGINAL VALUE
1102
1103 RESTORE,0
1104 TAD I (SVDATE /RESTORE DATE
1105 DCA I (DATE
1106 CDF 0
1107 TAD SCODE
1108 DCA I (7600 /RESTORE LOCATIONS
1109 TAD SCODE+1
1110 DCA I (7601
1111 TAD SCODE+2
1112 DCA I (7602
1113 TAD SCODE+3
1114 DCA I (7605
1115 CDF 10
1116 JMP I RESTORE
1117
1118 SCODE, 0;0;0;0
1119 \f/THIS IS THE MAGIC MESSAGE PRINTER
1120 /IT IS ACTUALLY USED MORE THAN JUST FOR ERROR MESSAGES
1121 /IF THE MESSAGE ENDS WITH A % THEN THE OPERATION
1122 /IS ABORTED OTHERWISE CONTROL IS RETURNED
1123 /TO THE CALLER AND NO CRLF IS GIVEN
1124 /ALL MESSAGES COMMING THROUGH HERE ARE ECHOED
1125
1126 ERROR, 0
1127 CLA CLL /JUNK MIGHT BE IN AC
1128 TAD I (ECHO /SAVE ECHO STATUS SO WE CAN
1129 DCA I (ECTMP /RESTORE IT AFTER MESSAGE
1130 ISZ I (ECHO /TURN ON ECHO
1131 TAD (-100 /USED SO WE CAN USE GTSXBT TO
1132 DCA CNT /UNPACK THE MESSAGES
1133 PLOOP, TAD I ERROR /CONTAINS ADDRESS OF MESSAGE
1134 CDF 0 /IN FIELD 0
1135 JMS I (GTSXBT /GET CHARACTER
1136 CDF 10
1137 TAD (-45 /IS IT %
1138 SNA /SKIP IF NOT
1139 JMP CRLF /WE HIT EOM AND CALLER NO WANT CONTROL
1140 TAD ("%&77 /RESTORE CHARACTER
1141 DCA DFLAG /SAVE IT FOR LATER
1142 TAD DFLAG /PRINT IT, 0 PRINTS AS BLANK
1143 JMS I (CONVTP
1144 ISZ CNT /BUMP TO NEXT CHAR IN MESSAGE
1145 TAD DFLAG /ARE WE AT END
1146 SZA CLA /SKIP IF WE ARE
1147 JMP PLOOP /DO ANOTHER CHARACTER
1148 ISZ ERROR /SKIP ADDRESS OF MESSAGE
1149 JMP I ERROR /RETURN
1150 CRLF, TAD (215 /PRINT CR
1151 JMS I (TYPE /LF
1152 JMP I (ENDCHK /FINISH PROCESSING
1153
1154 DFLAG, 0
1155 PAGE
1156 \f/THIS ROUTINE PRINTS A FILENAME.EXTENSION
1157
1158 PNMSUB, 0
1159 DCA NMEPLC /SAVE ADDRESS OF NAME
1160 TAD (-10 /SET CHAR COUNT
1161 DCA CNT
1162 PNLOOP, TAD NMEPLC /GET THE SIXBIT CHAR
1163 JMS I (GTSXBT
1164 SZA /SKIP IF NULL CHAR
1165 JMS I (CONVTP /PRINT CHAR
1166 TAD (3 /SEE IF AT START OF
1167 TAD CNT /EXTENSION
1168 SZA CLA /SKIP IF SO
1169 JMP .+3
1170 TAD (". /PRINT THE DOT
1171 JMS I (TYPE
1172 ISZ CNT
1173 JMP PNLOOP /KEEP GOING
1174 JMP I PNMSUB
1175
1176 NMEPLC, 0
1177 ECTMP, 0
1178
1179 RDERR, JMS I (ERROR
1180 INERR+40 /ERROR READING FILE
1181 DYSTF1, TAD (SPOT1+4 /PRINT INPUT FILE NAME
1182 DYSTUF, JMS I (PNMSUB
1183 TAD (215
1184 JMS I (TYPE
1185 TAD ECTMP /RESTORE ECHO FLAG AS
1186 DCA I (ECHO /SAVED ON ENTRY TO ERROR
1187 JMP I (NENT /GO TO NEXT FILE
1188 WRTERR, JMS I (ERROR
1189 OUERR+40 /ERROR WRITING FILE
1190 POUTNM, TAD (SPOT+4 /PRINT OUTPUT FILE NAME
1191 JMP DYSTUF
1192 NORUMX, JMS I (ERROR /NOT ENOUGH ROOM FOR
1193 SPRBLM+40 /FILE ON OUTPUT DEVICE
1194 JMP DYSTF1
1195 \f/ROUTINE WHICH PRINTS NO FILES MSG IF NECESSARY
1196 /IT WONT PRINT MESSAGE IF ANY FILE IN A SO CALLED
1197 /INPUT GROUP MATCHES(A BUG?)
1198
1199 SAYNON, TAD I (TYPFND /GET INPUT MATCH FLAG
1200 SZA CLA /SKIP IF NOTHING MATCHED
1201 JMP GOBCK /DONT DO MESSAGE
1202 TLP, JMS I (ERROR /PRINT MESSAGE
1203 NOFILE+40
1204 TAD INFPTR /POINT TO END OF INPUT ENTRY
1205 TAD (5 /TO MAKE GTSXBT WORK CORRECTLY
1206 DCA INFPTR
1207 TAD INFPTR /PRINT THE FILE NAME
1208 JMS I (PNMSUB
1209 TAD (OTAB-2 /NOW PRINT /V,/C,/O IF
1210 DCA XR2 /ANY OF THEM SPECIFIED
1211 NOPT1, ISZ XR2 /FIX POINTER WHEN SWITCH NOT ON
1212 NOPT, TAD I XR2 /GET ADDRESS OF OPTION
1213 SNA /SKIP IF NOT AT END
1214 JMP CRIT /WE ARE AT END
1215 DCA TEMP
1216 TAD I TEMP /GET OPTION WORD
1217 AND I XR2 /AND WITH OPTION BIT
1218 SNA CLA /SKIP IF OPTION GIVEN
1219 JMP NOPT1 /DO ANOTHER
1220 TAD ("/ /PRINT /
1221 JMS I (TYPE
1222 TAD I XR2 /OPTION
1223 JMS I (TYPE
1224 JMP NOPT /DO ANOTHER
1225 CRIT, TAD (215 /END WITH A CRLF
1226 JMS I (TYPE
1227 TAD ECTMP /RESTORE ECHO FLAG THAT ERROR
1228 DCA I (ECHO /SAVED
1229 ISZ INSCNT /PRINT MESSAGE FOR ALL FILES
1230 JMP TLP /IN GROUP
1231 GOBCK, TAD I (USEROD /GET USER SPECIFIED DEVICE
1232 SNA CLA /SKIP IF HE GAVE ONE
1233 TAD I (SDFLG /IF HE DIDNT WE CANT HANDLE /D
1234 SPA CLA /SKIP IF NO /D
1235 TAD I MOIN /YEP. /D BETTER NOT BE ANY MORE INPUT
1236 SZA CLA /THERE WASN'T - O.K.
1237 JMP DELERR /WARN HIM OF THE SHORTCOMING
1238 TAD MOIN /GET SAVED INPUT POINTER
1239 JMP I (DOMOIN /AND DO SOME MORE INPUTS
1240
1241 DELERR, JMS I (ERROR
1242 CNTDEL+40 /MULTIPLE DEVICE DELETE
1243 TAD (215
1244 JMS I (TYPE
1245 JMS I (ERROR
1246 CNTDE2+40
1247
1248 USEROD, 0
1249 MOIN, 0
1250 \f/TABLE OF SWITCHES FOR "NO FILES" MESSAGE
1251
1252 OTAB, OPT2
1253 4
1254 "V
1255 OPT1
1256 1000
1257 "C
1258 OPT2
1259 1000
1260 "O
1261 0
1262
1263 PAGE
1264 \f/THIS ROUTINE HANDLES THE /L AND /Q OPTIONS
1265 /IF EITHER IS ON IT PRINTS THE NAME
1266 /THEN IF ITS /Q IT PRINTS A ? AND WAITS FOR
1267 /A RESPONSE. IF Y IT RETURNS, ANYTHING ELSE
1268 /AND IT GOES TO PROCESS THE NEXT DIRECTORY ENTRY
1269
1270 PRINTE, 0
1271 DCA I (NMEPLC /SAVE ADDRESS OF NAME
1272 TAD I (OPT1 /CHECK /L
1273 RAR
1274 SZL CLA /SKIP IF NO /L
1275 JMP PIT /PRINT NAME
1276 TAD I (OPT2 /CHECK /Q
1277 AND (200
1278 SNA CLA /SKIP IF /Q
1279 JMP I PRINTE /RETURN
1280 ISZ I (ECHO /IF /Q FORCE ECHO ON
1281 PIT, TAD I (NMEPLC /NOW PRINT FILENAME
1282 JMS I (PNMSUB
1283 DCA OKFLAG /CLEAR OKFLAG
1284 TAD I (OPT2 /WAS IT /Q?
1285 AND (200
1286 SNA CLA /SKIP IF /Q
1287 JMP FUNCT2 /JUST PRINT CRLF
1288 TAD ("? /PRINT ?
1289 JMS I (TYPE
1290 CMA /SET OKFLAG NO GOOD
1291 DCA OKFLAG
1292 JMS I (READKB /GET A CHAR
1293 TAD (-"Y /IS IT Y?
1294 SNA CLA /SKIP ON NO
1295 ISZ OKFLAG /IT WAS Y, SET OK AND SKIP
1296 TAD ("N-"Y /GET N
1297 TAD ("Y /GET Y
1298 JMS I (TYPE /ECHO IT
1299 FUNCT2, TAD (215 /PRINT CRLF
1300 JMS I (TYPE
1301 TAD OKFLAG /OKFLG=0 MEANS YES
1302 SZA CLA /SKIP IF TO PROCESS FILE
1303 JMP I (NFUNCT /SKIP THIS FILE
1304 JMP I PRINTE /RETURN
1305
1306 ODERR, CLA
1307 DCA I (WRTDIR /FIX RECURSION
1308 JMS I (ERROR
1309 ODIERR+40 /ERROR WRITING DIRECTORY
1310 BODIR, JMS I (ERROR
1311 BODORM+40 /BAD OUTPUT DIRECTORY
1312 CLOERR, JMS I (ERROR
1313 SERR+40 /SYSTEM ERROR
1314 HLT /DONT LET HIM CONTINUE
1315 JMP .-1 /IT CAN ONLY GET WORSE
1316
1317 SPOT, ZBLOCK 4 /ROOM FOR OUTPUT FILE NAME
1318 SPOT1, ZBLOCK 4 /ROOM FOR INPUT FILE NAME
1319 \f/CODE TO HANDLE OUT OF ROOM CONDITION ON OUTPUT DEVICE
1320
1321 NOROOM, JMS I (UNFAK /RESTORE THE REAL OUTPUT HANDLER
1322 TAD I (OPT1
1323 AND (100 /CHECK FOR THE /F OPTION SPECIFIED
1324 SNA CLA
1325 JMP I (NORUMX /NO - GIVE AN ERROR MESSAGE
1326 JMS I (DIROUT /FAILSAFING - WRITE OUT THE OUTPUT DIRECTORY
1327 JMS I (ERROR /PRINT THE MESSAGE
1328 FLSFMS+40 /"MOUNT NEXT OUTPUT VOLUME"
1329 JMS I (READKB /GET AN ANSWER
1330 CLA /ANY CHAR EXCEPT ^C OR ^P IS YES
1331 TAD (215
1332 JMS I (TYPE /PRINT CRLF
1333 JMS ODIRIN /READ IN THE NEW OUTPUT DIRECTORY
1334 JMP I (FLSRSM /RECOMPUTE THE PENDING TRANSFER.
1335
1336 ODIRIN, 0 /SUBROUTINE TO READ IN THE OUTPUT DIRECTORY
1337 TAD I (7600 /GET OUTPUT DEVICE NUMBER
1338 SNA /IS IT PRESENT?
1339 JMP NOUTFL /NO - DON'T READ OUTPUT DIRECTORY
1340 TAD (7757 /ADD ADDRESS OF MONITOR TABLE
1341 DCA TEMP /TO INDEX INTO IT
1342 TAD I TEMP /FILE STRUCTURED BIT IS 0
1343 SMA CLA /SKIP IF DIRECTORY DEVICE
1344 JMP NOUTFL /WE DONT WANT TO READ OR WRITE DIRECTORY
1345 CIF 0
1346 JMS I OUHAND /READ DIRECTORY
1347 1410
1348 ODBUF, OUBUFR
1349 1
1350 JMP I (ONDERR /ERROR
1351 TAD I ODBUF
1352 CMA CLL /CHECK FOR LEGAL OUTPUT DIRECTORY - FIRST
1353 TAD I (OUBUFR+2 /WORD OF AN OS/8 DIRECTORY IS .LT. 50
1354 SNL /AND THE THIRD WORD MUST BE .LT. 7,
1355 TAD (7700 /SO WE CAN CHECK FOR THE SUM OF THOSE
1356 SZL CLA /WORDS BEING .LT. 64
1357 JMP I (BODIR /ERROR - CANT BE DIRECTORY
1358 SKP
1359 NOUTFL, AC4000 /WRTDIR MINUS MEANS DONT WRITE
1360 DCA I (WRTDIR /DIRECTORY
1361 DCA I (MUSTWT /CLEAR THE MUST WRITE FLAG
1362 DCA DIRKEY /CLEAR THE OS/8 DIRECTORY KEY
1363 JMP I ODIRIN /RETURN
1364 PAGE
1365 \f/SUBROUTINE TO DO LOOKUPS ON OUTPUT DEVICE
1366 /DOES IMMEDIATE RETURN IF NO OUTPUT DEVICE
1367 /OTHERWISE RETURNS WITH BLOCK OF FILE IN AC OR
1368 /0 IN AC MEANING NOT FOUND OR NON-FILE STRUCTURED DEVICE
1369 LOOKUP, 0
1370 TAD (SPOT /ADDRESS OF FILE NAME
1371 DCA PLACE
1372 TAD I (7600 /GET OUTPUT DEVICE
1373 SNA /SKIP IF PRESENT
1374 JMP I LOOKUP /NO OUTPUT DEVICE
1375 JMS I (FAKUSR /FAKE OUT THE USR
1376 JMS I (200
1377 2 /LOOKUP
1378 PLACE, SPOT
1379 0
1380 DCA PLACE /NOT FOUND, 0 PLACE
1381 JMS I (UNFAK /RESTORE RESIDENT HANDLER
1382 ISZ LOOKUP /SKIP RETURN
1383 TAD PLACE /WITH BLOCK IN AC
1384 JMP I LOOKUP
1385 \f/HERE IS WHAT WE HAVE ALL BEEN WAITING FOR
1386
1387 //////////////////////////////////////
1388 / /
1389 / RENAME /
1390 / /
1391 //////////////////////////////////////
1392
1393 RENAME, JMS LOOKUP
1394 JMP I (CLOERR /SUPER SYSTEM DISASTER
1395 DCA OBLOCK /V3C SAVE BLOCK OF NEW NAME (IF ANY)
1396 TAD (SPOT1-SPOT /LOOKUP INPUT FILE
1397 JMS LOOKUP
1398 JMP I (CLOERR /SUPER SYSTEM DISASTER
1399 CIA /LOOKUP INPUT NAME ON OUTPUT DEVICE
1400 TAD OBLOCK /IS IT SAME SPOT AS NEW NAME ON OUTPUT DEVICE?
1401 SZA CLA /V3C
1402 JMS EXERR /NO, MAYBE ALREADY EXISTS
1403 TAD I (1404 /GET ADDRESS OF FILE
1404 TAD 17 /FROM MONITOR BY THE
1405 TAD (-4 /DOCUMENTED METHOD
1406 DCA TEMP
1407 TAD (SPOT-1 /GET NEW OUTPUT NAME
1408 DCA XR1
1409 TAD (-4 /SET UP COUNT OF WORDS TO MOVE
1410 DCA CNT
1411 RNAM, TAD I XR1 /MOVE THEM
1412 DCA I TEMP
1413 ISZ TEMP
1414 ISZ CNT
1415 JMP RNAM /CONTINUE TILL DONE
1416 TAD I (1404 /V3C
1417 SNA CLA /BUT IS THERE ROOM FOR DATE?
1418 JMP NONUDA /NO, NO ADDITIONAL INFO WORDS
1419 TAD I (DATE /YES, MOVE DATE
1420 DCA I TEMP /INTO NEW FILENAME ENTRY
1421 NONUDA, JMS WRKEY /V3C
1422 ISZ I (WRTDIR /INDICATE DIRECTORY CHANGED
1423 JMP I (NFUNCT /DO NEXT FILE
1424
1425 WRKEY, 0 /V9
1426 TAD DIRKEY /GET "SEGMENT IN CORE" KEY
1427 AND (7 /ISOLATE SEGMENT NUMBER
1428 DCA SEGNO /NUMBER FOR WRITE
1429 CIF 0
1430 JMS I 51 /CALL HANDLER USR USED TO DO
1431 4210 /LOOKUP, THIS POINTS TO FOTPS
1432 1400 /INCORE DIRECTORY HANDLER
1433 SEGNO, 0 /REWRITE UPDATED DIRECTORY BLOCK
1434 JMP I (CLOERR /SYSTEM ERROR
1435 JMP I WRKEY
1436 \fEXERR, 0 /BLOCK NUMBERS DIFFERENT
1437 TAD OBLOCK /LOOK AT BLOCK NUMBER OF EXISTING FILE
1438 SNA CLA /DID IT REALLY EXIST?
1439 JMP I EXERR /NO, OK TO RENAME TO THIS NAME
1440 JMS I (ERROR /YES, TRYING TO RENAME TO EXISTING NAME
1441 RENERR+40 /FILE ALREADY EXISTS
1442 JMP I (POUTNM
1443
1444 OBLOCK, 0 /TEMPORARY, HOLDS BLOCK NUMBER OF ALREADY
1445 /EXISTING FILE WITH SAME NAME AS PROPOSED NEW NAME
1446 /ON OUT PUT DEVICE (OR 0 IF NONE)
1447 \f/THIS ROUTINE TRANSFERS THE ADDITIONAL
1448 /INFORMATION WORDS OF THE INPUT FILE WHEN COPYING
1449 /IT IF THERE ARE ANY
1450
1451 ADDINF, 0
1452 CLA IAC /AC=1
1453 TAD I (1404 /GET NUMBER OF WORDS FROM OUTPUT DIRECTORY
1454 SMA /SKIP IF 2 OR MORE
1455 JMP NOTRAN /WE DONT TOUCH IT
1456 DCA LOOKUP /SAVE NEGATIVE NUMBER TO MOVE
1457 TAD LOOKUP /ADD NUMBER TO LOC 17
1458 TAD 17 /TO FIND ADDR(SECOND)
1459 DCA PPTR1 /USE 17
1460 TAD INFWDS /GET NUMBER OF AIW IN INPUT
1461 CIA /NEGATE
1462 IAC /ADD 1
1463 SMA /SKIP IF MORE THAN 1 AIW
1464 JMP ZEROUT /ZERO OUTPUT AIW
1465 DCA TEMP /SAVE COUNT
1466 MOVEM, ISZ GPTR1 /BUMP PTR (1ST TIME PAST DATE)
1467 CDF 0
1468 TAD I GPTR1 /GET WORD
1469 ZLOOP, CDF 10
1470 DCA I PPTR1 /PUT IT INTO OUTPUT DIRECTORY
1471 ISZ PPTR1
1472 ISZ LOOKUP /HAS OUTPUT COUNT OVERFLOWED?
1473 JMP MORE /MORE OUTPUT TO DO
1474 JMS WRKEY /V9
1475 NOTRAN, CLA /EXIT
1476 JMP I ADDINF /WERE DONE
1477 MORE, ISZ TEMP /BUMP INPUT COUNT
1478 JMP MOVEM /IT HASNT OVERFLOWED
1479 ZEROUT, CLA CMA /NO MORE INPUT WORDS-
1480 DCA TEMP /SO FIX UP TO ZERO REST OF OUTPUT WORDS
1481 JMP ZLOOP /DO ALL THE OUTPUTS
1482
1483 PPTR1, 0
1484 PAGE
1485 \f/** THIS IS THE STARTING ADDRESS OF FOTP!!!
1486
1487 FOTP, JMS INIT /REGULAR ENTRY POINT
1488 JMS INIT /CHAIN ENTRY POINT
1489 JMP I (CDCALL /CALL COMMAND DECODER
1490 JMP I (BYPSCD /DONT CALL COMMAND DECODER
1491 INIT, 0
1492 ISZ INIT /DO SKIP RETURN
1493 CLA CLL
1494 CDF 0
1495 TAD I (7777 /GET BATCH CONTROL WORD
1496 AND (70
1497 TAD FCIF0 /FORM CIF TO BATCH FIELD
1498 DCA BATCIF
1499 TAD I (7777
1500 CDF 10
1501 RTL
1502 SNL CLA /BATCH RUNNING?
1503 JMP NOBTCH /NO
1504 BMOVLP, TAD BATOUT
1505 DCA I TTOUTP /MOVE IN SUBSTITUTE TTY OUTPUT CODE
1506 ISZ BMOVLP
1507 ISZ TTOUTP
1508 ISZ TTCNT4
1509 JMP .-5
1510 STA
1511 NOBTCH, DCA CORFUJ / =0 IF NO BATCH, -1 IF BATCH
1512 MOVMSG, TAD I ONCE /MOVE MSGS TO LOWER FIELD
1513 CDF 0
1514 DCA I ONLY
1515 CDF 10
1516 TAD I M1
1517 CDF 0 /MOVE CORE DETERMINER
1518 DCA I M1 /INTO FIELD 0 ALSO
1519 CDF 10
1520 ISZ M1
1521 ISZ ONCE
1522 ISZ ONLY
1523 ISZ CODE
1524 JMP MOVMSG
1525 TAD (2000 /SET RESTART LOCATION
1526 CDF 0
1527 DCA I (7745
1528 TAD (6403 /SET JSW
1529 DCA I (7746
1530 CDF 10
1531 FCIF0, CIF 0
1532 JMS I (CORE
1533 TAD CORFUJ /COMPUTE AMOUNT OF CORE EXCLUDING BATCH FIELD
1534 TAD (-1
1535 SZA CLA /SKIP IF WE HAVE ONLY 8K (OR 12K AND BATCH)
1536 JMP I INIT
1537 TAD (TAD EPTR /PATCH LOCATIONS IN FOTP
1538 DCA I (F2C1 /TO WORK WITH ONLY 8K
1539 TAD (NOP
1540 DCA I (F2C2
1541 JMP I INIT /START
1542
1543 M1, .&7600
1544 ONCE, MSGS
1545 ONLY, LSTFPG+200
1546 CODE, 7400
1547
1548 CORFUJ, 0
1549 TTCNT4, -4
1550 TTOUTP, TTYOUT
1551 BATOUT, SKP /OUTPUT TO BATCH LOG
1552 7400
1553 BATCIF, HLT
1554 TTYOUT+1&177+4600 /JMS I .-2
1555 \f/SUBR TO DETERMINE MACHINE SIZE - RETURNS NUMBER OF
1556 /BANKS IN AC.
1557 /MUST RUN IN FIELD 0.
1558
1559 CORE, 0
1560 TAD C6203
1561 RDF
1562 DCA CORRTN
1563 CDF 0
1564 TAD I (7777
1565 AND (70
1566 SNA /DOES LOCATION 7777 SPECIFY CORE SIZE?
1567 JMP CORELP /NO
1568 CLL RTR /YES - BELIEVE IT.
1569 RAR
1570 JMP CORRTN
1571 CORELP, CDF 0 /NEEDED FOR PDP-8L
1572 TAD TRYFLD /GET FLD TO TST
1573 CLL RTL
1574 RAL
1575 AND COR70 /MASK USEFUL BITS
1576 TAD CORELP
1577 DCA .+1 /SET UP CDF TO FLD
1578 COR706, 0
1579 TAD I CORLOC /SAV CURRENT CONTENTS
1580 NOP /HACK FOR PDP-8
1581 DCA .-3
1582 TAD .-2 /7000 IS A GOOD PATTERN
1583 DCA I CORLOC
1584 COR70, 70 /HACK FOR PDP-8.,NO-OP
1585 TAD I CORLOC /TRY TO READ BK 7000
1586 7400 /HACK FOR PDP-8,.NO-OP
1587 TAD .-1 /GUARD AGAINST WRAP AROUND
1588 TAD CORLOC+1 /TAD 1400
1589 SZA CLA
1590 JMP .+5 /NON EXISTENT FLD EXIT
1591 TAD COR706 /RESTORE CONTENS DESTROYED
1592 DCA I CORLOC
1593 ISZ TRYFLD /TRY NXT HIGHER FLD
1594 JMP CORELP
1595 STA
1596 TAD TRYFLD
1597 CORRTN, 0
1598 JMP I CORE
1599 CORLOC, COR70+2 /ADR TO TST IN EACH FLD
1600 1400 /7000+7400+1400=0
1601 TRYFLD, 1 /CURRENT FLD TO TST
1602 C6203, 6203
1603
1604 PAGE
1605 \f/FOTP'S ERROR MESSAGES
1606 /THESE RESIDE IN FIELD 0 LOCATIONS 7200-7577
1607
1608 MSGS,
1609
1610 NOPUNCH
1611 *LSTFPG+200
1612 ENPUNCH
1613
1614 ILLQ, TEXT /ILLEGAL ?%/
1615 ILLA, TEXT /ILLEGAL *%/
1616 SERR, TEXT /SYSTEM ERROR/
1617 RENERR, TEXT /ALREADY EXISTS-/
1618 VERNO, 0617;2420;4026 /FOTP V
1619 VERLOC, VERSION+60^100+SUBVER /ONE-DIGIT VERSION NUMBER AND 1 CHAR PATCH LEVEL
1620 0
1621 BADIRD, TEXT /ERROR READING INPUT DIRECTORY%/
1622 ODRERR, TEXT /ERROR READING OUTPUT DIRECTORY%/
1623 ODIERR, TEXT /ERROR WRITING OUTPUT DIRECTORY%/
1624 SPRBLM, TEXT /NO ROOM, SKIPPING-/
1625 INERR, TEXT /ERROR ON INPUT DEVICE-SKIPPING-/
1626 OUERR, TEXT /ERROR ON OUTPUT DEVICE-SKIPPING-/
1627 NFLEIN, TEXT /USE PIP FOR NON-FILE STRUCTURED INPUT%/
1628 NOFILE, TEXT /NO FILES OF THE FORM:/
1629 BIDIRM, TEXT /BAD INPUT DIRECTORY%/
1630 BODORM, TEXT /BAD OUTPUT DIRECTORY%/
1631 CNTDEL, TEXT /DELETES PERFORMED ONLY ON INPUT DEVICE GROUP 1/
1632 CNTDE2, TEXT /CAN'T HANDLE MULTIPLE DEVICE DELETES%/
1633 DSVED, TEXT /ORIGINAL DIRECTORY PRESERVED%/
1634 FLSFMS, TEXT /MOUNT NEXT OUTPUT VOLUME:/
1635
1636 FIELD 1 /SELF-STARTING BINARY LOADER STUFF FOR ABSLDR
1637 *FOTP
1638 $