software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape5 / HELP.PA
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 $