software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape7 / FOTP.PA
CommitLineData
7af5ad59
PH
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
137OUBUFR= 4600 /OUTPUT BUFFER - IN FIELD 1
138INBUFR= 0 /INPUT BUFFER - IN FIELD 0
139LSTFPG= 7000 /FIRST LOC OF LAST FREE PAGE IN FIELD 0
140FAKHND= 200 /LOCATION OF OS/8 FAKEOUT HANDLER
141VERSION= 11 /VERSION NUMBER
142SUBVER= 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
154CDCALL, JMS I (200 /SEE WHAT THE PERSON WANTS
155FIVE, 5
156STAR, 5200 /IN SPECIAL MODE
157
158BYPSCD, 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
167S1C, 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
178S4L, DCA PTR
179 TAD (-10
180 DCA CNT
181ACK, 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
196CNTUP, 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
206NULLCK, 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
216DIDEML, 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
226MOV, TAD I (7605 /WE'LL SUBSTITUTE FIRST INPUT DEVICE FOR USER
227ODSPEC, 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
244DOMOIN, 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
261SFUDG, 0
262\fONDERR, JMS I (ERROR
263 ODRERR+40 /ERROR READING OUT DIR
264AINO, JMS I (ERROR
265 ILLA+40 /ILLEGAL *
266QINO, 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
273PG1, 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
282IDBUF, 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
298FNDLST, 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
306ATIT, 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
340GETCNT, 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
345K7450, 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
353NOSUB, 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
367NOPTIM, 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
391TYPFND, 0
392SDFLG, 0 /NEGATIVE MEANS /D, ODD MEANS OUTPUT DEV=INPUT DEV
393
394NFIN, JMS I (ERROR
395 NFLEIN+40 /NON FILE STRUCTED INPUT
396INDERR, JMS I (ERROR
397 BADIRD+40 /ERROR READING INPUT DIR
398BIDIR, 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
408NBLOCK, 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
426BLOOP, 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
435MN1, 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
445WILDNM, 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
464WILD, ISZ CNT /BUMP COUNT OF CHARS & POINTER
465 JMP MLP /COMPARE ALL 8
466MEXT, ISZ MATFLG /A MATCH!!!!!!!
467NM1, 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
488NENT, TAD EPNEXT /POINT EPTR TO BLOCK
489 DCA EPTR /COUNT OF FILE
490 SKP
491EMPTY, 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
513WILDA, 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
520CHAR, 0
521EPNEXT, 0
522GPTR2, 0
523LFLAG, 0
524NCNT, 0
525BLOCK, 0
526MATFLG, 0
527ENTCNT, 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
554MOVENT, 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 /-
573TSTEXT, 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
604SETGD, ISZ TRFLG /ENABLE TRANSFERING OF THE FILE
605NSETGD, 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
610FLSRSM, 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
629NODEL, CLA
630 TAD TRFLG /SET AC NOT 0 IF TRANSFER GO AHEAD
631 JMP I (NPG /LINK TO SOME MORE
632
633TRFLG, 0
634
635
636 PAGE
637\f/THIS PAGE OF CODE PERFORMS FILE MOVES FROM
638/INPUT TO OUTPUT
639
640NPG, 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
649F2C1, 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
680SBLKN, SPOT
681MSIZE, 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
701MOVEIT, 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
713F2C2, 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
720INCTLW, 0
721 0
722BLOCKN, 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
736OUCTLW, 0
737 0
738OBLCKN, 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
751OFCNT, 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
755NFUNCT, 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
766ASSIGN, 0
767 DCA TEMP /SAVE DEVICE NUMBER
768 TAD TEMP
769 JMS I (200
770 12 /INQUIRE ABOUT HANDLER
771HADDR1, 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
777TWOPAG, 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
786HADDR2, 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
794GTSXBT, 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
806ROTR6, 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
815CONVTP, 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
826TYPE, 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
842TTY, 0
843 DCA TCHAR /SAVE CHAR
844 TAD TCHAR /GET CHAR BACK
845 /** NEXT 4 LOCATIONS REPLACED IF BATCH ACTIVE BY:
846TTYOUT, 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
856TCHAR, 0
857
858/GET A CHARACTER FROM KEYBOARD AND
859/CHECK FOR ^C AND ^P
860
861READKB, 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
874DATCHK, 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
887MDATE, 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
899ECHO, 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
918FAKBDY, 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
933DCAXR1, DCA XR1 /SAVE IN BOTH XR1
934 TAD XR1
935 DCA XR2 /AND XR2
936 TAD (1377 /NOW SAVE USR BLOCK AREA
937DCASPT, 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
950FAKUSR, 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
960NOSUBST,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
973UNFAK, 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
980TABAD, 0
981RETLOC, 0
982\f/ENTER HERE IF A BRANCH TO 7600 OR 7605 OCCURS
983
984FIXDIR, 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
989CTCDE, 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
998ENDCHK, 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
1010NOVER, 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
1017MUSTWT, 0
1018SVDATE, 0
1019WRTDIR, 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
1036CTYPE, 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
1056T2, 0
1057
1058/ROUTINE USED TO DETERMINE IF ^C OR ^P TYPED
1059
1060CINTER, 0
1061 TAD (203 /CHECK FOR ^C
1062 JMS CTYPE
1063 JMP UPPCK /NO CHECK FOR ^P
1064 JMP SPURGE /YES SET ALTMODE BIT
1065UPPCK, TAD (220
1066 JMS CTYPE
1067 JMP I CINTER /NOT EITHER ^P OR ^C
1068 SKP /IF ^P CLEAR ALTMODE BIT
1069SPURGE, 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
1077INTERC, 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
1103RESTORE,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
1118SCODE, 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
1126ERROR, 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
1133PLOOP, 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
1150CRLF, TAD (215 /PRINT CR
1151 JMS I (TYPE /LF
1152 JMP I (ENDCHK /FINISH PROCESSING
1153
1154DFLAG, 0
1155 PAGE
1156\f/THIS ROUTINE PRINTS A FILENAME.EXTENSION
1157
1158PNMSUB, 0
1159 DCA NMEPLC /SAVE ADDRESS OF NAME
1160 TAD (-10 /SET CHAR COUNT
1161 DCA CNT
1162PNLOOP, 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
1176NMEPLC, 0
1177ECTMP, 0
1178
1179RDERR, JMS I (ERROR
1180 INERR+40 /ERROR READING FILE
1181DYSTF1, TAD (SPOT1+4 /PRINT INPUT FILE NAME
1182DYSTUF, 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
1188WRTERR, JMS I (ERROR
1189 OUERR+40 /ERROR WRITING FILE
1190POUTNM, TAD (SPOT+4 /PRINT OUTPUT FILE NAME
1191 JMP DYSTUF
1192NORUMX, 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
1199SAYNON, TAD I (TYPFND /GET INPUT MATCH FLAG
1200 SZA CLA /SKIP IF NOTHING MATCHED
1201 JMP GOBCK /DONT DO MESSAGE
1202TLP, 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
1211NOPT1, ISZ XR2 /FIX POINTER WHEN SWITCH NOT ON
1212NOPT, 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
1225CRIT, 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
1231GOBCK, 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
1241DELERR, JMS I (ERROR
1242 CNTDEL+40 /MULTIPLE DEVICE DELETE
1243 TAD (215
1244 JMS I (TYPE
1245 JMS I (ERROR
1246 CNTDE2+40
1247
1248USEROD, 0
1249MOIN, 0
1250\f/TABLE OF SWITCHES FOR "NO FILES" MESSAGE
1251
1252OTAB, 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
1270PRINTE, 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
1281PIT, 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
1299FUNCT2, 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
1306ODERR, CLA
1307 DCA I (WRTDIR /FIX RECURSION
1308 JMS I (ERROR
1309 ODIERR+40 /ERROR WRITING DIRECTORY
1310BODIR, JMS I (ERROR
1311 BODORM+40 /BAD OUTPUT DIRECTORY
1312CLOERR, JMS I (ERROR
1313 SERR+40 /SYSTEM ERROR
1314 HLT /DONT LET HIM CONTINUE
1315 JMP .-1 /IT CAN ONLY GET WORSE
1316
1317SPOT, ZBLOCK 4 /ROOM FOR OUTPUT FILE NAME
1318SPOT1, ZBLOCK 4 /ROOM FOR INPUT FILE NAME
1319\f/CODE TO HANDLE OUT OF ROOM CONDITION ON OUTPUT DEVICE
1320
1321NOROOM, 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
1336ODIRIN, 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
1348ODBUF, 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
1359NOUTFL, 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
1369LOOKUP, 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
1378PLACE, 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
1393RENAME, 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
1411RNAM, 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
1421NONUDA, JMS WRKEY /V3C
1422 ISZ I (WRTDIR /INDICATE DIRECTORY CHANGED
1423 JMP I (NFUNCT /DO NEXT FILE
1424
1425WRKEY, 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
1433SEGNO, 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
1444OBLOCK, 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
1451ADDINF, 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
1466MOVEM, ISZ GPTR1 /BUMP PTR (1ST TIME PAST DATE)
1467 CDF 0
1468 TAD I GPTR1 /GET WORD
1469ZLOOP, 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
1475NOTRAN, CLA /EXIT
1476 JMP I ADDINF /WERE DONE
1477MORE, ISZ TEMP /BUMP INPUT COUNT
1478 JMP MOVEM /IT HASNT OVERFLOWED
1479ZEROUT, 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
1483PPTR1, 0
1484 PAGE
1485\f/** THIS IS THE STARTING ADDRESS OF FOTP!!!
1486
1487FOTP, 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
1491INIT, 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
1504BMOVLP, 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
1511NOBTCH, DCA CORFUJ / =0 IF NO BATCH, -1 IF BATCH
1512MOVMSG, 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
1531FCIF0, 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
1543M1, .&7600
1544ONCE, MSGS
1545ONLY, LSTFPG+200
1546CODE, 7400
1547
1548CORFUJ, 0
1549TTCNT4, -4
1550TTOUTP, TTYOUT
1551BATOUT, SKP /OUTPUT TO BATCH LOG
1552 7400
1553BATCIF, 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
1559CORE, 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
1571CORELP, 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
1578COR706, 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
1584COR70, 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
1597CORRTN, 0
1598 JMP I CORE
1599CORLOC, COR70+2 /ADR TO TST IN EACH FLD
1600 1400 /7000+7400+1400=0
1601TRYFLD, 1 /CURRENT FLD TO TST
1602C6203, 6203
1603
1604 PAGE
1605\f/FOTP'S ERROR MESSAGES
1606/THESE RESIDE IN FIELD 0 LOCATIONS 7200-7577
1607
1608MSGS,
1609
1610 NOPUNCH
1611 *LSTFPG+200
1612 ENPUNCH
1613
1614ILLQ, TEXT /ILLEGAL ?%/
1615ILLA, TEXT /ILLEGAL *%/
1616SERR, TEXT /SYSTEM ERROR/
1617RENERR, TEXT /ALREADY EXISTS-/
1618VERNO, 0617;2420;4026 /FOTP V
1619VERLOC, VERSION+60^100+SUBVER /ONE-DIGIT VERSION NUMBER AND 1 CHAR PATCH LEVEL
1620 0
1621BADIRD, TEXT /ERROR READING INPUT DIRECTORY%/
1622ODRERR, TEXT /ERROR READING OUTPUT DIRECTORY%/
1623ODIERR, TEXT /ERROR WRITING OUTPUT DIRECTORY%/
1624SPRBLM, TEXT /NO ROOM, SKIPPING-/
1625INERR, TEXT /ERROR ON INPUT DEVICE-SKIPPING-/
1626OUERR, TEXT /ERROR ON OUTPUT DEVICE-SKIPPING-/
1627NFLEIN, TEXT /USE PIP FOR NON-FILE STRUCTURED INPUT%/
1628NOFILE, TEXT /NO FILES OF THE FORM:/
1629BIDIRM, TEXT /BAD INPUT DIRECTORY%/
1630BODORM, TEXT /BAD OUTPUT DIRECTORY%/
1631CNTDEL, TEXT /DELETES PERFORMED ONLY ON INPUT DEVICE GROUP 1/
1632CNTDE2, TEXT /CAN'T HANDLE MULTIPLE DEVICE DELETES%/
1633DSVED, TEXT /ORIGINAL DIRECTORY PRESERVED%/
1634FLSFMS, TEXT /MOUNT NEXT OUTPUT VOLUME:/
1635
1636 FIELD 1 /SELF-STARTING BINARY LOADER STUFF FOR ABSLDR
1637 *FOTP
1638 $