Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | / OS/8 HELP PROGRAM |
2 | / | |
3 | / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE | |
4 | / AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT | |
5 | / CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY | |
6 | / FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. | |
7 | / | |
8 | / THE SOFTWARE DESCRIBED HEREIN IS FURNISHED TO THE PURCHASER | |
9 | / UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED | |
10 | / (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH | |
11 | / SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. | |
12 | / | |
13 | / DIGITAL EQUIPMENT ASSUMES NO RESPONSIBILITY FOR THE USE | |
14 | / OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED | |
15 | / BY DIGITAL. | |
16 | / | |
17 | / COPYRIGHT (C) 1977 BY DIGITAL EQUIPMENT CORPORATION | |
18 | / | |
19 | \f | |
20 | / | |
21 | / VERSION #1 B. M. 1/1/77 | |
22 | / VERSION #2A M. H. 4/22/77 | |
23 | / (CHANGE TAG VERS WHEN CHANGING VERSION NUMBERS) | |
24 | / | |
25 | / THIS PROGRAM CAN BE CALLED DIRECTLY OR CHAINED TO BY CCL TO | |
26 | / PRINT INFORMATION ON RANDOM SUBJECTS THE USER ASKS ABOUT. | |
27 | / | |
28 | / START ADDRESS:200 JSW:3401 | |
29 | / CORE LIMITS:200-7377 | |
30 | / | |
31 | / THIS PROGRAM REQUIRES AN INPUT FILE TO RUN. FOR OS/8 THE FILE | |
32 | / SHOULD BE NAMED "HELP8.HL" FOR OS/78 THE NAME SHOULD BE "HELP78.HL". | |
33 | / | |
34 | / THE FORMAT OF THE FILE IS: | |
35 | / <SP><CR><LF> | |
36 | / &COMMAND NAME | |
37 | / &ADDITIONAL COMMAND NAMES(IF ANY) | |
38 | / TEXT OF HELP INFO | |
39 | / &NEXT COMMAND NAME | |
40 | / TEXT OF NEXT HELP INFO | |
41 | / ETC. | |
42 | / | |
43 | / NOTE: TOO SPEED UP PROCESSING A HASHING ALGORITHM IS USED | |
44 | / WHICH REQUIRES THAT WHEN MULTIPLE COMMANDS REFERENCE A | |
45 | / SINGLE SUBFILE, THE SUBFILE MUST APPEAR IN THE HELP FILE | |
46 | / ALPHABETICALLY ACCORDING TO THE 1ST COMMAND STRING LETTER | |
47 | / CLOSEST TO Z. | |
48 | / THAT IS, SUBFILES MUST BE ARRANGED ALPHABETICALLY ACCORDING TO | |
49 | / THE HIGHEST LETTERED 1ST CHARACTER OF THE COMMAND. | |
50 | / | |
51 | \f | |
52 | USR= 200 /ADDRESS OF USR | |
53 | OS78= 7771 /ADDRESS OF WD WITH OS/78 FLAG BIT(4) (MH) | |
54 | FETCH= 1 /FETCH A HANDLER | |
55 | LOOKUP= 2 /LOOKUP A FILE NAME | |
56 | ENTER= 3 /ENTER A FILE | |
57 | CLOSE= 4 /CLOSE A FILE | |
58 | DECODE= 5 /CALL THE COMMAND DECODER | |
59 | HASH= 3 /HASH CODE SUBTRACTION FACTOR(MH) | |
60 | ||
61 | *10 | |
62 | NAMPTR, 0 /POINTER TO CMD DECODER INPUT NAMES | |
63 | XR1, 0 /RANDOM INDEX REGISTER | |
64 | XR2, 0 /ANOTHER RANDOM INDEX REGISTER | |
65 | ||
66 | *30 | |
67 | COUNT, 0 /RANDOM WORD COUNT FOR ANYTHING | |
68 | CHAR, 0 /TEMPORARY PLACE TO PUT A CHARACTER | |
69 | WILD, 0 /IF NONZERO, NAME HAS '*' OR '?' IN IT | |
70 | WASHLP, 0 /NONZERO IF HELP WAS FOUND ON THIS WORD | |
71 | NAME, ZBLOCK 6 /NAME HELP WAS REQUESTED ON | |
72 | TXTNAM, ZBLOCK 10 /CURRENT SCRIPT FILE NAME BEING LOOKED AT | |
73 | NAMCNT, 0 /NUMBER OF NAMES IN THE COMMAND DECODER AREA | |
74 | BLKCNT, 0 /NUMBER OF AVAILABLE BLOCKS ON OUTPUT | |
75 | OUTADR, 0 /ADDRESS OF OUTPUT HANDLER | |
76 | LINCNT, 0 /COUNT OF NUMBER OF NAMES ON '*' OR 'HELP' LINE | |
77 | LINMAX, -5 /MAXIMUN NUMBER OF NAMES/LINE ON '*' OR 'HELP' LINE | |
78 | FILNAM, ZBLOCK 4 /OUTPUT FILE NAME | |
79 | WDCTR, 0 /WORD COUNTER IN INPUT BLOCK | |
80 | CHTEM, 0 /TEMPORARY SPOT FOR CHARACTER IN 2/3 UNPACK | |
81 | DEVHND, 0 /OUTPUT DEVICE HANDLER ADDRESS | |
82 | CHPTR, 0 /BUFFER POINTER FOR READING CHARACTERS | |
83 | TEMP, 0 /TEMP STORE | |
84 | \f | |
85 | / MAIN LOOP OF PROGRAM | |
86 | STADR=200 | |
87 | *STADR | |
88 | START, SKP CLA /NORMAL ENTRY POINT | |
89 | JMP START1 /CHAINED ENTRY (CMD DECODE DONE BY CCL) | |
90 | CIF 10 /SEE WHAT TO DO | |
91 | JMS I (USR | |
92 | DECODE | |
93 | 5200 | |
94 | 0 | |
95 | START1, JMS I (INIT /DO ALL INITIALIZATION AND SETUP | |
96 | MAINLP, JMS I (NXTNAM /GET NEXT NAME FROM COMMAND DECODER AREA | |
97 | JMP I (EXIT /NO NAMES LEFT | |
98 | JMS I (RESET /RESET THE INPUT FILE POINTERS TO THE BEGINNING | |
99 | TAD NAME /CHECK FOR '*' OR 'HELP" NAME INDICATING LIST OF HELPS | |
100 | TAD (-"* | |
101 | SNA!CLA | |
102 | JMP HELPLS /NAME BEGAN WITH '*' | |
103 | TAD NAME /NOT '*' LOOK FOR HELP (MH) | |
104 | TAD (-"H | |
105 | SZA!CLA | |
106 | JMP MAIN1 /NO 'HELP' | |
107 | TAD NAME+1 | |
108 | TAD (-"E | |
109 | SZA!CLA | |
110 | JMP MAIN1 | |
111 | TAD NAME+2 | |
112 | TAD (-"L | |
113 | SZA!CLA | |
114 | JMP MAIN1 | |
115 | TAD NAME+3 | |
116 | TAD (-"P | |
117 | SNA!CLA | |
118 | JMP HELPLS /WAS 'HELP" GO PRINT LIST (MH) | |
119 | TAD NAME /IS 1ST CHAR A "?"?(MH) | |
120 | TAD (-"? /(MH) | |
121 | SNA!CLA /(MH) | |
122 | JMP MAIN1 /YES -- DON'T TRY TO HASH FILE (MH) | |
123 | TAD NAME /NO -- HASH START BLK OF FILE BY (MH) | |
124 | AND (77 /MAKING 1ST CHAR OF NAME SIXBIT (MH) | |
125 | DCA TEMP /MULTIPLY BY 1.5 (MH) | |
126 | TAD NAME /THEN SUBTRACT "HASH"(3) (MH) | |
127 | AND (77 /(MH) | |
128 | CLL!RAR /(MH) | |
129 | TAD TEMP /(MH) | |
130 | TAD (-HASH /(MH) | |
131 | SPA /(MH) | |
132 | CLA /IF RESULT IF MINUS, SET TO ZERO (MH) | |
133 | TAD I (BLK /ADD REAL START BLK OF FILE (MH) | |
134 | DCA I (BLK /REPLACE NEW BLOCK(MH) | |
135 | MAIN1, JMS I (FINDNM /GET A NAME FROM THE SCRIPT FILE | |
136 | JMP NOHELP /HIT THE END OF THE FILE INSTEAD OF NAME | |
137 | JMS I (COMPAR /COMPARE THIS NAME WITH THE ONE HE HAD | |
138 | JMP MAIN1 /NOT A MATCH, TRY NEXT ONE | |
139 | JMS I (PRINT /PRINT THE HELP INFORMATION FOR THAT NAME | |
140 | TAD WILD /IF A WILD CARD TYPE NAME (I.E. '?') THEN | |
141 | SZA CLA / THEN KEEP SEARCHING PAST 1ST MATCH SINCE THERE | |
142 | JMP MAIN1 / MAY BE MORE. | |
143 | JMP MAINLP /NOT A WILD CARD, GET NEXT CMD DECODER NAME | |
144 | ||
145 | / HIT THE END OF THE SCRIPT FILE | |
146 | / IF DOING A WILD CARD NAME, SOME HJELP MAY HAVE ALREADY BEEN PRINTED. IF | |
147 | / NOT, PRINT AN ERROR MESSAGE ON THE TELETYPE (OR WHATEVER) | |
148 | NOHELP, TAD WASHLP /SEE IF HELP WAS ADMINISTERED | |
149 | SZA CLA | |
150 | JMP MAINLP /YES IT WAS, TRY NEXT NAME ON LIST | |
151 | JMS I (TYPE /TYPE THE ERROR MESSAGE ON THE TTY | |
152 | SORRY-1 | |
153 | DCA TXTNAM /PUT ON ZERO TERMINATER | |
154 | JMS I (TYPE | |
155 | NAME-1 /TYPE WHAT HELP MISSED | |
156 | JMS I (TYPE | |
157 | CRLF-1 /TYPE CARR RETURN, LINE FEED | |
158 | JMP MAINLP /NOW CONTINUE ON WITH IT | |
159 | ||
160 | ||
161 | / IF A '*' OR 'HELP' WAS TYPED AS HELP NAME, THEN PRINT A LISTING | |
162 | / OF ALL THE INFO IN THE HELP FILE FOR THE USER TO PICK FROM. | |
163 | HELPLS, JMS I [OUTSTR /PRINT THE HEADING MESSAGE | |
164 | AVAIL-1 | |
165 | TAD LINMAX /MAX NO. NAMES PER LINE | |
166 | DCA LINCNT /INITIAL COUNT OF NAMES PER LINE | |
167 | HELP1, JMS I (FINDNM /GET NEXT NAME | |
168 | JMP HELP2 /AT END OF FILE | |
169 | JMS I (NAMLST /PRINT THE NAME | |
170 | JMP HELP1 | |
171 | HELP2, TAD LINCNT /CHECK IF LAST CHAR WAS CRLF | |
172 | SNA!CLA | |
173 | JMP MAINLP /IT WAS, DON'T DO ANOTHER | |
174 | JMS I [OUTSTR | |
175 | CRLF-1 | |
176 | JMP MAINLP | |
177 | \f PAGE | |
178 | ||
179 | / CLOSE ALL FILES AND RETURN TO MONITOR | |
180 | / | |
181 | EXIT, TAD (32 /WRITE AN AND OF FILE TO THE OUTPUT | |
182 | JMS I [PCH | |
183 | TAD (-600 /CLOSE FILE BY WRITING 600(8) NULLS | |
184 | DCA COUNT | |
185 | JMS I [PCH /WRITE IT | |
186 | ISZ COUNT | |
187 | JMP .-2 | |
188 | TAD I [BLKSRT /COMPUTE ACTUAL FILE LENGTH FOR CLOSE | |
189 | CIA | |
190 | TAD I [OUTBLK /CURRENT BLOCK NUMBER | |
191 | IAC | |
192 | DCA OLEN | |
193 | CIF CDF 10 | |
194 | TAD I [7600 | |
195 | CDF 0 | |
196 | JMS I (USR /CLOSE THE FILE | |
197 | CLOSE | |
198 | FILNAM | |
199 | OLEN, 0 /THE LENGTH | |
200 | NOP /ERROR ON CLOSE... CAN'T HAPPEN(MH) | |
201 | JMP I (7605 /RETURN TO OS/8 | |
202 | \f | |
203 | / SEARCH FOR A <LF>& IN THE FILE | |
204 | / THIS IS THE START OF SOME HELP INFO FOR A SUBJECT WHICH IS NAMED AFTER | |
205 | / THE &. COPY THE NAME INTO 'TXTNAM' SO COMPARES CAN BE DONE LATER. | |
206 | / SKIP IF THE END OF FILE ISN'T FOUND ON THE WAY. | |
207 | FINDNM, 0 | |
208 | DCA TXTNAM /CLEAR THE NAME OUT | |
209 | DCA TXTNAM+1 | |
210 | DCA TXTNAM+2 | |
211 | DCA TXTNAM+3 | |
212 | DCA TXTNAM+4 | |
213 | DCA TXTNAM+5 | |
214 | DCA TXTNAM+6 | |
215 | FIND1, JMS I [GCH /LOOK FOR A <LF>& IN THE FILE | |
216 | TAD (-232 /CHECK FOR END OF FILE | |
217 | SNA | |
218 | JMP I FINDNM /RETURN IF FOUND | |
219 | TAD (232-212 /CHECK FOR LINE FEED | |
220 | SZA CLA | |
221 | JMP FIND1 /NOT IT | |
222 | FIND5, JMS I [GCH /TRY FOR THE & NOW | |
223 | TAD (-"& | |
224 | SNA CLA | |
225 | JMP FIND2 /FOUND A LF,& | |
226 | TAD ("&-232 /MAKE SURE THIS ISNT THE END OF FILE | |
227 | SNA CLA | |
228 | JMP I FINDNM /END OF FILE FOUND, RETURN | |
229 | JMP FIND1 /KEEP LOOKING FOR NAME | |
230 | FIND2, TAD (TXTNAM-1 /MOVE THE NAME INTO 'TXTNAM' | |
231 | DCA XR1 | |
232 | TAD (-7 /MAX OF 7 CHARACTERS | |
233 | DCA COUNT | |
234 | FIND3, JMS I [GCH /GET A NAME CHARACTER | |
235 | TAD (-215 /CHECK IF THE END OF LINE <CR> | |
236 | SNA CLA | |
237 | JMP FIND4 /END OF LINE, THATS IT | |
238 | TAD CHAR | |
239 | DCA I XR1 /SAVE CHARACTER IN TXTNAM | |
240 | ISZ COUNT | |
241 | JMP FIND3 /IF MORE CHARACTERS LEFT | |
242 | FIND4, ISZ FINDNM /BUMP RETURN ADDRESS FOR FOUND RETURN | |
243 | JMP I FINDNM | |
244 | PAGE | |
245 | \f | |
246 | / COMPARE TWO STRINGS, ONE IN NAME AND ONE IN TXTNAM. CHECK FOR WILD | |
247 | / CARD STUFF LATER WHEN THIS PART IS WORKING. | |
248 | / SKIP IF NAMES ARE EQUAL | |
249 | COMPAR, 0 | |
250 | TAD [NAME-1 /SET UP REGISTERS FOR COMPARE | |
251 | DCA XR1 | |
252 | TAD (TXTNAM-1 | |
253 | DCA XR2 | |
254 | TAD (-6 | |
255 | DCA COUNT | |
256 | COMP1, TAD I XR1 /GET A CHARACTER AND COMPARE WITH ONE FROM | |
257 | DCA CHAR | |
258 | TAD CHAR | |
259 | TAD (-"? /WILDCARD | |
260 | SZA CLA | |
261 | JMP COMP3 /NO WILDCARD | |
262 | ISZ XR2 | |
263 | ISZ WILD | |
264 | JMP COMP2 | |
265 | COMP3, TAD CHAR | |
266 | CIA / THE OTHER STRING | |
267 | TAD I XR2 | |
268 | SZA CLA | |
269 | JMP I COMPAR /NO MATCH, NORMAL RETURN | |
270 | COMP2, ISZ COUNT | |
271 | JMP COMP1 | |
272 | ISZ COMPAR /EQUAL RETURN IS RETRN ADDR+1 | |
273 | JMP I COMPAR | |
274 | \f | |
275 | / GET THE NEXT NAME FROM THE COMMAND DECODER AREA | |
276 | / STOP ON EITHER A ZERO OR THE NAME GOING TO ZERO | |
277 | NXTNAM, 0 | |
278 | ISZ NAMCNT /COUNT NAMES, ONLY 5 IN THE AREA | |
279 | SKP | |
280 | JMP I NXTNAM /RETURN, NO MORE NAMES | |
281 | CLA CLL CMA RTL /NUMBER OF WORDS OF NAME(-3) | |
282 | DCA COUNT | |
283 | TAD [NAME-1 | |
284 | DCA XR1 | |
285 | CDF 10 | |
286 | TAD I NAMPTR /GET 1ST CHARACTER OF NAME | |
287 | CDF 0 | |
288 | SNA | |
289 | JMP NXTN3 /MAYBE OUT OF NAMES(MH) | |
290 | NXTN1, DCA CHAR /SAVE THE WORD | |
291 | TAD CHAR | |
292 | RTR | |
293 | RTR | |
294 | RTR /ISOLATE HIGH 6 BITS | |
295 | JMS SIXTO8 | |
296 | DCA I XR1 /PUT IN NAME BUFFER | |
297 | TAD CHAR /NOW DO OTHER HALF | |
298 | JMS SIXTO8 | |
299 | DCA I XR1 /2ND CHARACTER OF WORD | |
300 | ISZ COUNT | |
301 | SKP | |
302 | JMP NXTN2 /NO MORE CHARACTERS IN NAME | |
303 | CDF 10 | |
304 | TAD I NAMPTR /LOOP IS STRANGE (SHOULD USE DEVICE WORD FOR CHECK) | |
305 | CDF 0 | |
306 | JMP NXTN1 | |
307 | NXTN2, ISZ NAMPTR /BUMP POINTER TO NEXT NAME IN AREA | |
308 | ISZ NAMPTR | |
309 | ISZ NXTNAM /BUMP RETURN ADDRESS FOR FOUND NAME | |
310 | JMP I NXTNAM | |
311 | NXTN3, TAD NAMCNT /CHECK FOR "HELP<CR>" OR "TTY:<<CR>"(MH) | |
312 | TAD (4 /IF 1ST TRY AT A NAME THEN NULL COMMAND WAS INPUT(MH) | |
313 | SZA!CLA | |
314 | JMP I NXTNAM /WASN'T NULL -- RETURN, END OF NAMES | |
315 | DCA NAME /WAS NULL -- CLEAR OUT NAME BUFFER | |
316 | DCA NAME+1 | |
317 | DCA NAME+2 | |
318 | DCA NAME+3 | |
319 | DCA NAME+4 | |
320 | DCA NAME+5 | |
321 | JMP NXTN2 /PREPARE TO RETURN(MH) | |
322 | ||
323 | SIXTO8, 0 /CONVERT 6BIT TO 8BIT | |
324 | AND (77 | |
325 | SNA /SNA IF NOT A NULL | |
326 | JMP I SIXTO8 /ELSE RETURN 8BIT NULL | |
327 | TAD (240 | |
328 | AND (77 | |
329 | TAD (240 | |
330 | JMP I SIXTO8 | |
331 | \f | |
332 | / PRINT ALL THE STUFF BETWEEN LINES OF THE OUTPUT DEVICE | |
333 | / THIS CONTINUES UNTIL A <LF>& IS SEEN OR AND OF FILE IS READ | |
334 | PRINT, 0 | |
335 | ISZ WASHLP /SET FLAG SAYING HE WAS HELPED | |
336 | PRINT3, JMS I [GCH /FIND 1ST LF WITHOUT FOLLOWING &, THEN PRINT(MH) | |
337 | TAD (-212 /WAS CHAR LF?(MH) | |
338 | SZA!CLA /(MH) | |
339 | JMP PRINT3 /NO -- READ NEXT CHAR(MH) | |
340 | JMS I [GCH /YES -- LOOK FOR &(MH) | |
341 | TAD (-"& /(MH) | |
342 | SNA!CLA /(MH) | |
343 | JMP PRINT3 /IT WAS & SO CONTINUE(MH) | |
344 | JMS I (OUTSTR /IT WASN'T & SO BEGIN PRINTING(MH) | |
345 | CRLF-1 | |
346 | TAD CHAR /(MH) | |
347 | SKP /(MH) | |
348 | PRINT1, JMS I [GCH /GET A CHARACTER | |
349 | JMS I [PCH /PRINT THE CHARACTER | |
350 | TAD CHAR /CHECK FOR <LF> | |
351 | TAD (-212 | |
352 | SZA CLA | |
353 | JMP PRINT1 | |
354 | JMS I [GCH /TRY FOR EITHER & OR END OF FILE OR FF | |
355 | TAD (-"& /CHECK FOR A & | |
356 | SNA | |
357 | JMP I PRINT /STOP ON <LF> & FOUND | |
358 | TAD (+32 /CHECK FOR <FF> ("&-"<FF> (MH) | |
359 | SNA /(MH) | |
360 | JMP I PRINT /(MH) | |
361 | TAD (-16 /-<EOT>+<FF> (MH) | |
362 | SNA | |
363 | JMP I PRINT /RETURN IF END OF FILE | |
364 | TAD (232-"@ | |
365 | SNA CLA | |
366 | JMP PRINT1 /SKIP "@" IF 1ST CHAR ON LINE | |
367 | TAD CHAR /GET THE CHARACTER BACK TO PRINT | |
368 | JMS I [PCH /PRINT IT | |
369 | JMP PRINT1 | |
370 | PAGE | |
371 | \f/ TYPE A MESSAGE ON THE TELETYPE | |
372 | / THE MESSAGE IS ONE CHARACTER PER WORD, TERMINATED WITH A ZERO | |
373 | TYPE, 0 | |
374 | TAD I TYPE /GET THE MESSAGE ADDRESS | |
375 | ISZ TYPE /BUMP RETURN ADDRESS | |
376 | DCA XR1 | |
377 | TYPE1, TAD I XR1 /GET A CHARACTER | |
378 | SNA | |
379 | JMP I TYPE /END OF THE MESSAGE | |
380 | TLS /PRINT THE CHARACTER | |
381 | TYPE2, TSF | |
382 | JMP TYPE2 | |
383 | CLA | |
384 | JMP TYPE1 /LOOP | |
385 | ||
386 | ||
387 | /PRINT THE NEXT NAME ON THE OUTPUT DEVICE AND CHECK TO SEE IF | |
388 | / A CRLF IS NEEDED. EACH NAME IS TERMINATED WITH A TAB CHAR | |
389 | NAMLST, 0 | |
390 | TAD TXTNAM /CHECK FOR NULL NAME (MH) | |
391 | SZA!CLA /(MH) | |
392 | JMP NAMLS1 /NOT NULL NAME (MH) | |
393 | JMS OUTSTR /WAS NULL -- PRINT "<NONE>" (MH) | |
394 | NULNAM-1 /(MH) | |
395 | JMP NAMLS2 /PROCEED (MH) | |
396 | NAMLS1, JMS OUTSTR /PRINT THE NAME ON THE DEVICE | |
397 | TXTNAM-1 | |
398 | NAMLS2, JMS OUTSTR /PRINT A TAB AFTER NAME | |
399 | TAB-1 | |
400 | ISZ LINCNT /BUMP NUMBER PRINTED SO FAR | |
401 | JMP I NAMLST /NO YET, JUST RETURN | |
402 | TAD LINMAX /RESET TO MAX NUMBER OF NAMES PER LINE | |
403 | DCA LINCNT | |
404 | JMS OUTSTR /TYPE CRLF | |
405 | CRLF-1 | |
406 | JMP I NAMLST /NOW RETURN | |
407 | ||
408 | ||
409 | / PRINT A STRING ON THE OUTPUT DEVICE BY STUFFING THE CHARACTERS | |
410 | / IN THE OUTPUT FILE. THE ADDRESS-1 IS FOLLOWING THE JMS | |
411 | OUTSTR, 0 | |
412 | TAD I OUTSTR /GET THE ADDRESS | |
413 | ISZ OUTSTR | |
414 | DCA XR1 /POINTER TO NAME | |
415 | OUTS1, TAD I XR1 /GET A CHARACTER | |
416 | SNA | |
417 | JMP I OUTSTR /RETURN IF DONE | |
418 | JMS I [PCH /PRINT THE CHARACTER | |
419 | JMP OUTS1 | |
420 | ||
421 | PAGE | |
422 | \f/ GET A CHARACTER FROM THE INPUT FILE | |
423 | GCH, 0 | |
424 | TAD CHAR /RETURN A EOF IF THE LAST WAS EOF | |
425 | TAD (-232 | |
426 | SZA CLA | |
427 | JMP I GIVCH /NOT EOF, GET NEXT CHARACTER | |
428 | TAD (232 /GET END OF FILE | |
429 | JMP I GCH | |
430 | ||
431 | GIVCH, INITBF /INITIALLY SET UP BUFFERS | |
432 | AND (377 /MASK THE CHARACTER | |
433 | DCA CHAR /SAVE CHARACTER | |
434 | TAD CHAR | |
435 | JMP I GCH /RETURN | |
436 | ||
437 | INITBF, TAD (-2000 /SET WORD COUNT FOR BLOCK(MH) | |
438 | DCA WDCTR | |
439 | TAD BUFAD | |
440 | DCA CHPTR /CHARACTER POINTER FOR BUFFER | |
441 | TAD I (BLKBGN /FIND OUT IF DATA TRANSFER WILL(MH) | |
442 | CMA!IAC /PASS END OF FILE, IF SO REDUCE(MH) | |
443 | TAD I (FSIZE /SIZE OF TRANSFER.(MH) | |
444 | DCA TEMP /SAVE -ST. BLK.-FILE SIZE(MH) | |
445 | TAD RDFCT /GET TRANSFER LENGTH IN BLKS(MH) | |
446 | CLL!RTL /(MH) | |
447 | RTL /(MH) | |
448 | RTL /(MH) | |
449 | TAD BLK /ADD CURRENT BLK(MH) | |
450 | TAD TEMP /SUBTRACT (ST. BLK OF FILE + SIZE)(MH) | |
451 | SPA!SNA /(MH) | |
452 | JMP INITOK /PROCEED -- DON"T CHG. TRANSFER LEN(MH) | |
453 | CLL!RTR /CHANGE TRANSFER LENGTH SO IT WON'T(MH) | |
454 | RTR /PASS END OF FILE(MH) | |
455 | RTR /(MH) | |
456 | CMA!IAC /(MH) | |
457 | TAD RDFCT /(MH) | |
458 | DCA RDFCT /ENTER THIS INTO FUNCTION WD.(MH) | |
459 | INITOK, JMS I DEVHND /CALL THE HANDLER TO READ A BLOCK | |
460 | RDFCT, 2000 /8 BLOCKS(MH) | |
461 | BUFAD, BUFFER | |
462 | BLK, 0 /BLOCK NUMBER | |
463 | JMP RDERR /ERROR RETURN(MH) | |
464 | NXTCH, TAD I CHPTR | |
465 | JMS GIVCH | |
466 | TAD (7400 | |
467 | AND I CHPTR /GET THE HIGH ORDER PART | |
468 | DCA CHTEM | |
469 | ISZ CHPTR | |
470 | TAD I CHPTR | |
471 | JMS GIVCH | |
472 | TAD I CHPTR | |
473 | AND (7400 | |
474 | CLL RTR | |
475 | RTR | |
476 | TAD CHTEM /GET OTHER HALF | |
477 | RTR | |
478 | RTR | |
479 | JMS GIVCH /GIVE THIRD CHARACTER OF GROUP | |
480 | ISZ CHPTR | |
481 | ISZ WDCTR /BUMP WORD COUNTER | |
482 | JMP NXTCH /LOOP | |
483 | TAD RDFCT /INCREMENT BLOCK NUMBER(MH) | |
484 | CLL!RTL /(MH) | |
485 | RTL /(MH) | |
486 | RTL /(MH) | |
487 | TAD BLK /(MH) | |
488 | DCA BLK /ENTER INTO FUNCTION WD(MH) | |
489 | JMP INITBF /READ IT IN | |
490 | ||
491 | PAGE | |
492 | \f/ ROUTINE TO INITIALIZE ALL OF THIS STUFF | |
493 | / POINTERS GET SET AND THE FILES OPENED. | |
494 | INIT, 0 | |
495 | TAD (OUTHSP+1 | |
496 | DCA OUTHND | |
497 | TAD (OUTHSP+1 /HANDLER ADDRESS | |
498 | DCA OUTHN1 | |
499 | CDF 10 | |
500 | TAD I [7600 /GET OUTPUT DEVICE | |
501 | SNA | |
502 | JMP TTYDFL | |
503 | CIF 10 | |
504 | CDF 0 | |
505 | JMS I (USR /FETCH THE HANDLER | |
506 | FETCH | |
507 | OUTHN1, OUTHSP+1 | |
508 | JMP FETERR /ERROR RETURN(MH) | |
509 | TAD OUTHN1 /GET HANDLER ADDRESS | |
510 | JMP COMMON /COMMON CODE FOR BOTH FETCHES | |
511 | ||
512 | / DEFAULT TO THE TTY WHEN NO OUTPUT DEVICE IS SPECIFIED | |
513 | TTYDFL, TAD TTYNM /SET UP THE DEVICE NAME | |
514 | DCA TTY | |
515 | TAD TTYNM+1 | |
516 | DCA TTY+1 | |
517 | CIF 10 /FETCH THE OUTPUT HANDLERS | |
518 | CDF 0 | |
519 | JMS I (USR | |
520 | FETCH | |
521 | TTY, DEVICE TTY /DEFAULT TO THE TTY | |
522 | OUTHND, OUTHSP+1 /PLACE TO PUT THE HANDLER | |
523 | JMP NOTTY /IF TELETYPE HANDLER DOESNT EXIST | |
524 | TAD TTY+1 /SET UP DEVICE NUMBER FOR COMMON CODE | |
525 | CDF 10 | |
526 | DCA I [7600 | |
527 | CDF 0 | |
528 | TAD OUTHND /GET HANDLER ENTRY POINT | |
529 | COMMON, DCA OUTADR | |
530 | TAD (OUTBUF | |
531 | DCA I (OCPTR | |
532 | TAD (-200 /OUTPUT BUFFER COUNT | |
533 | DCA I (OUWDCT | |
534 | TAD (7600 | |
535 | DCA XR1 /COPY NAME FROM FIELD 1 CMD DEC AREA | |
536 | CDF 10 | |
537 | TAD I XR1 | |
538 | SNA | |
539 | TAD (1014 /HL.LS IS DEFAULT NAME IF NONE THERE | |
540 | DCA FILNAM | |
541 | TAD I XR1 | |
542 | DCA FILNAM+1 | |
543 | TAD I XR1 | |
544 | DCA FILNAM+2 | |
545 | TAD I XR1 /COPY EXTENSION | |
546 | SNA | |
547 | TAD (1423 /USE .LS AS DEFAULT EXTENSION | |
548 | DCA FILNAM+3 | |
549 | CDF 0 | |
550 | TAD (FILNAM /INITIALIZE THE ENTER | |
551 | DCA BLKSRT | |
552 | CDF CIF 10 | |
553 | TAD I (7600 | |
554 | CDF 0 | |
555 | JMS I (USR /DO ENTER WITH DEVICE NO IN AC | |
556 | ENTER | |
557 | BLKSRT, 0 /STARTING BLOCK | |
558 | FILLNG, 0 /LENGTH OF FILE | |
559 | JMP NOROOM /DEVICE FULL | |
560 | TAD BLKSRT | |
561 | DCA I [OUTBLK /INITIAL OUTPUT BLOCK | |
562 | TAD FILLNG | |
563 | DCA BLKCNT /NEGATIVE FILE LENGTH IN BLOCKS | |
564 | \f | |
565 | TAD (7605 /SET NXTNAM POINTER TO THE NEXT NAME | |
566 | DCA NAMPTR | |
567 | TAD (-5 | |
568 | DCA NAMCNT /NUMBER OF CHARACTERS IN NAME | |
569 | CIF 10 | |
570 | JMS I (USR /FETCH THE SYSTEM DEVICE HANDLER | |
571 | FETCH / TO GET THE DEVICE NUMBER TO LOOKUP HELP FILE | |
572 | DEVNAM, DEVICE SYS /(MH) | |
573 | DEVH, 0 /HANDLER ADDRESS FOR READING | |
574 | JMP FETERR /FETCH ERROR(MH) | |
575 | TAD DEVNAM+1 /GET THE SYS DEVICE NUMBER | |
576 | CIF 10 /LOOKUP HELP FILE WITH IT | |
577 | JMS I (USR | |
578 | LOOKUP | |
579 | BLKBGN, HELP8 /STARTING BLOCK OF THE FILE(MH) | |
580 | FSIZE, 0 /-NUMBER OF BLOCKS(MH) | |
581 | JMP NOSCRP /THE SCRIPT FILE (HELP FILE) ISNT THERE | |
582 | TAD DEVH | |
583 | DCA DEVHND /COPY TO PG 0 FOR ADDRESSABILITY | |
584 | JMP I INIT /THATS IT | |
585 | ||
586 | NOSCRP, JMS I (TYPE /TYPE MESSAGE SAYING HELP FILE NOT THERE | |
587 | NOSC-1 | |
588 | JMP I (7605 /RETURN TO NONITOR | |
589 | NOTTY, JMS I (TYPE | |
590 | TTYMIS-1 | |
591 | JMP I (7605 | |
592 | TTYNM, DEVICE TTY | |
593 | NOROOM, JMS I [TYPE /DEVICE FILL | |
594 | DEVFUL-1 | |
595 | JMP I (7605 /RETURN TO MONITOR | |
596 | PAGE | |
597 | \f | |
598 | / RESET THE INPUT FILE TO THE FIRST BLOCK AND RESET ALL THE CHARACTER | |
599 | / UNPACKING STUFF TO THE 1ST CHARACTER OF THE FILE | |
600 | RESET, 0 | |
601 | TAD I (BUFFER /RESET BUFFER POINTER TO START | |
602 | DCA CHPTR | |
603 | DCA WASHLP /SET NOT YET HELPED | |
604 | DCA CHAR /SET TO STOP EOF STUFF | |
605 | TAD (-2000 /RESET WORD COUNT FOR 8 BLOCKS(MH) | |
606 | DCA WDCTR | |
607 | TAD I (BLKBGN /RESET STARTING BLOCK OF FILE | |
608 | DCA I (BLK | |
609 | TAD (2000 /RESET TRANSFER LEN FOR 8 BLOCKS(MH) | |
610 | DCA I (RDFCT /(MH) | |
611 | TAD (INITBF /SET UP TO REREAD BLOCK 0 OF FILE | |
612 | DCA I (GIVCH | |
613 | JMP I RESET | |
614 | \f | |
615 | / PUT A CHARACTER OUT TO THE OUTPUT DEVICE | |
616 | / THIS IS A COOROUTINE TYPE GUY JUST LIKE THE INPUT HANDLER | |
617 | ||
618 | PCH, 0 | |
619 | JMP I RPOS /DISPATCH | |
620 | ||
621 | RPOS1, DCA I OCPTR /PUT 1ST CHARACTER IN BUFFER | |
622 | JMS RPOS | |
623 | ||
624 | RPOS2, DCA HOLD /SAVE THE 2ND CHARACTER | |
625 | JMS RPOS | |
626 | ||
627 | RPOS3, RTL /PACK THE CHARACTERS | |
628 | RTL | |
629 | DCA HOLD2 | |
630 | TAD HOLD2 | |
631 | AND (7400 | |
632 | TAD I OCPTR | |
633 | DCA I OCPTR /PART WAY DONE | |
634 | ISZ OCPTR | |
635 | TAD HOLD2 | |
636 | RTL | |
637 | RTL | |
638 | AND (7400 /NOW THE 2ND WORD | |
639 | TAD HOLD | |
640 | DCA I OCPTR | |
641 | ISZ OCPTR /BUMP POINTER AGAIN | |
642 | ISZ OUWDCT | |
643 | SKP | |
644 | JMS DUMP /IF AT THE END OF THE BUFFER | |
645 | RPOS4, JMS RPOS | |
646 | JMP RPOS1 | |
647 | RPOS, RPOS1 /INITIALLY SET TO THE 1ST CHARACTER | |
648 | JMP I PCH /RETURN TO THE USER | |
649 | ||
650 | OUWDCT, 0 /OUTPUT BUFFER WORD COUNTER | |
651 | OCPTR, 0 /OUTPUT CHARACTER BUFFER POINTER | |
652 | HOLD, 0 /TEMPORARY PLACE TO PUT A CHARACACTER | |
653 | HOLD2, 0 /SAME AS ABOVE | |
654 | \f | |
655 | / DUMP THE OUTPUT BUFFER TO THE OUTPUT FILE | |
656 | ||
657 | DUMP, 0 | |
658 | ISZ BLKCNT /SEE IF ANY ROOM LEFT TO DUMP TO | |
659 | SKP | |
660 | JMP DUMPER /IF OUT OF ROOM | |
661 | JMS I OUTADR /CALL THE HANDLER | |
662 | 4200 | |
663 | OUTBFA, OUTBUF /OUTPUT BUFFER ADDRESS | |
664 | OUTBLK, 0 /OUTPUT BUFFER BLOCK NUMBER | |
665 | JMP WRERR /WRITE ERROR(MH) | |
666 | TAD OUTBFA /RESET INPUT POINTER | |
667 | DCA OCPTR | |
668 | TAD (-200 /RESET THE WORD COUNT | |
669 | DCA OUWDCT | |
670 | ISZ OUTBLK /BUMP OUTPUT BLOCK NUMBER | |
671 | JMP I DUMP /RETURN | |
672 | DUMPER, JMS I (TYPE /TYPE ERROR MESSAGE | |
673 | DEVFUL-1 /FILE FULL ERROR | |
674 | JMP I (7605 | |
675 | WRERR, JMS I (TYPE /WRITE ERROR (MH) | |
676 | MWRERR-1 /(MH) | |
677 | JMP I (7605 /(MH) | |
678 | FETERR, JMS I (TYPE /FETCH ERROR (MH) | |
679 | MFEERR-1 /(MH) | |
680 | JMP I (7605 /(MH) | |
681 | RDERR, JMS I (TYPE /(READ ERROR (MH) | |
682 | MRDERR-1 /(MH) | |
683 | JMP I (7605 /(MH) | |
684 | MWRERR, "W; "R; "I; "T; "E; 240; "E; "R; "R; 215; 212; 0 | |
685 | MFEERR, "F; "E; "T; "C; "H; 240; "E; "R; "R; 215; 212; 0 | |
686 | MRDERR, "R; "E; "A; "D; 240; "E; "R; "R; 215; 212; 0 | |
687 | PAGE | |
688 | \f | |
689 | TTYMIS, "N;"O;" ;"T;"T;"Y;" ;"H;"A;"N;"D;215;212;0 | |
690 | NOSC, "N;"O;" ;"H;"E;"L;"P; 240; "F; "I; "L; "E; 215;212;0 | |
691 | NULNAM, 242; "N; "O; "N; "E; 242; 0 | |
692 | AVAIL, " ; "H; "E; "L; "P; ".; "S; "V; 215; 212 | |
693 | 240; 215; 212 | |
694 | "C; "A; "L; "L; "I; "N; "G; 240; "C; "O; "M; "M; "A; "N; "D; "S; ": | |
695 | 215; 212; ".; "H; "E; "L; "P; 240; "P; "A; "R; "A; "M; "E; "T; "E; "R | |
696 | 215; 212 | |
697 | 240; 215; 212 | |
698 | "P; "A; "R; "A; "M; "E; "T; "E; "R; "S; ":; 215; 212; 0 | |
699 | CRLF, 215;212;0 | |
700 | TAB, 211;0 | |
701 | SORRY, 215;212;"N;"O;240;"H;"E;"L;"P;240;"-;240;0 | |
702 | DEVFUL, "D;"E;"V;"I;"C;"E;240;"F;"U;"L;"L;215;212;0 | |
703 | HELP8, FILENAME HELP.HL | |
704 | VERS, 0201 /VERSION 2A (MH) | |
705 | PAGE | |
706 | OUTHSP, ZBLOCK 400 /OUTPUT HANDLER SPACE | |
707 | OUTBUF, ZBLOCK 400 /OUTPUT BUFFER FOR LISTING | |
708 | BUFFER=. /INPUT BUFFER FOR HELP FILE, 8 BLKS OR 4000 WDS (MH) | |
709 | $ |