Commit | Line | Data |
---|---|---|
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 | ||
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 | $ |