software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape5 / HELP.PA
CommitLineData
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
52USR= 200 /ADDRESS OF USR
53OS78= 7771 /ADDRESS OF WD WITH OS/78 FLAG BIT(4) (MH)
54FETCH= 1 /FETCH A HANDLER
55LOOKUP= 2 /LOOKUP A FILE NAME
56ENTER= 3 /ENTER A FILE
57CLOSE= 4 /CLOSE A FILE
58DECODE= 5 /CALL THE COMMAND DECODER
59HASH= 3 /HASH CODE SUBTRACTION FACTOR(MH)
60
61*10
62NAMPTR, 0 /POINTER TO CMD DECODER INPUT NAMES
63XR1, 0 /RANDOM INDEX REGISTER
64XR2, 0 /ANOTHER RANDOM INDEX REGISTER
65
66*30
67COUNT, 0 /RANDOM WORD COUNT FOR ANYTHING
68CHAR, 0 /TEMPORARY PLACE TO PUT A CHARACTER
69WILD, 0 /IF NONZERO, NAME HAS '*' OR '?' IN IT
70WASHLP, 0 /NONZERO IF HELP WAS FOUND ON THIS WORD
71NAME, ZBLOCK 6 /NAME HELP WAS REQUESTED ON
72TXTNAM, ZBLOCK 10 /CURRENT SCRIPT FILE NAME BEING LOOKED AT
73NAMCNT, 0 /NUMBER OF NAMES IN THE COMMAND DECODER AREA
74BLKCNT, 0 /NUMBER OF AVAILABLE BLOCKS ON OUTPUT
75OUTADR, 0 /ADDRESS OF OUTPUT HANDLER
76LINCNT, 0 /COUNT OF NUMBER OF NAMES ON '*' OR 'HELP' LINE
77LINMAX, -5 /MAXIMUN NUMBER OF NAMES/LINE ON '*' OR 'HELP' LINE
78FILNAM, ZBLOCK 4 /OUTPUT FILE NAME
79WDCTR, 0 /WORD COUNTER IN INPUT BLOCK
80CHTEM, 0 /TEMPORARY SPOT FOR CHARACTER IN 2/3 UNPACK
81DEVHND, 0 /OUTPUT DEVICE HANDLER ADDRESS
82CHPTR, 0 /BUFFER POINTER FOR READING CHARACTERS
83TEMP, 0 /TEMP STORE
84\f
85/ MAIN LOOP OF PROGRAM
86STADR=200
87*STADR
88START, 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
95START1, JMS I (INIT /DO ALL INITIALIZATION AND SETUP
96MAINLP, 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)
135MAIN1, 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)
148NOHELP, 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.
163HELPLS, 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
167HELP1, JMS I (FINDNM /GET NEXT NAME
168 JMP HELP2 /AT END OF FILE
169 JMS I (NAMLST /PRINT THE NAME
170 JMP HELP1
171HELP2, 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/
181EXIT, 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
199OLEN, 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.
207FINDNM, 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
215FIND1, 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
222FIND5, 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
230FIND2, TAD (TXTNAM-1 /MOVE THE NAME INTO 'TXTNAM'
231 DCA XR1
232 TAD (-7 /MAX OF 7 CHARACTERS
233 DCA COUNT
234FIND3, 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
242FIND4, 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
249COMPAR, 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
256COMP1, 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
265COMP3, TAD CHAR
266 CIA / THE OTHER STRING
267 TAD I XR2
268 SZA CLA
269 JMP I COMPAR /NO MATCH, NORMAL RETURN
270COMP2, 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
277NXTNAM, 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)
290NXTN1, 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
307NXTN2, 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
311NXTN3, 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
323SIXTO8, 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
334PRINT, 0
335 ISZ WASHLP /SET FLAG SAYING HE WAS HELPED
336PRINT3, 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)
348PRINT1, 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
373TYPE, 0
374 TAD I TYPE /GET THE MESSAGE ADDRESS
375 ISZ TYPE /BUMP RETURN ADDRESS
376 DCA XR1
377TYPE1, TAD I XR1 /GET A CHARACTER
378 SNA
379 JMP I TYPE /END OF THE MESSAGE
380 TLS /PRINT THE CHARACTER
381TYPE2, 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
389NAMLST, 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)
396NAMLS1, JMS OUTSTR /PRINT THE NAME ON THE DEVICE
397 TXTNAM-1
398NAMLS2, 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
411OUTSTR, 0
412 TAD I OUTSTR /GET THE ADDRESS
413 ISZ OUTSTR
414 DCA XR1 /POINTER TO NAME
415OUTS1, 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
423GCH, 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
431GIVCH, 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
437INITBF, 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)
459INITOK, JMS I DEVHND /CALL THE HANDLER TO READ A BLOCK
460RDFCT, 2000 /8 BLOCKS(MH)
461BUFAD, BUFFER
462BLK, 0 /BLOCK NUMBER
463 JMP RDERR /ERROR RETURN(MH)
464NXTCH, 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.
494INIT, 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
507OUTHN1, 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
513TTYDFL, 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
521TTY, DEVICE TTY /DEFAULT TO THE TTY
522OUTHND, 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
529COMMON, 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
557BLKSRT, 0 /STARTING BLOCK
558FILLNG, 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
572DEVNAM, DEVICE SYS /(MH)
573DEVH, 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
579BLKBGN, HELP8 /STARTING BLOCK OF THE FILE(MH)
580FSIZE, 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
586NOSCRP, JMS I (TYPE /TYPE MESSAGE SAYING HELP FILE NOT THERE
587 NOSC-1
588 JMP I (7605 /RETURN TO NONITOR
589NOTTY, JMS I (TYPE
590 TTYMIS-1
591 JMP I (7605
592TTYNM, DEVICE TTY
593NOROOM, 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
600RESET, 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
618PCH, 0
619 JMP I RPOS /DISPATCH
620
621RPOS1, DCA I OCPTR /PUT 1ST CHARACTER IN BUFFER
622 JMS RPOS
623
624RPOS2, DCA HOLD /SAVE THE 2ND CHARACTER
625 JMS RPOS
626
627RPOS3, 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
645RPOS4, JMS RPOS
646 JMP RPOS1
647RPOS, RPOS1 /INITIALLY SET TO THE 1ST CHARACTER
648 JMP I PCH /RETURN TO THE USER
649
650OUWDCT, 0 /OUTPUT BUFFER WORD COUNTER
651OCPTR, 0 /OUTPUT CHARACTER BUFFER POINTER
652HOLD, 0 /TEMPORARY PLACE TO PUT A CHARACACTER
653HOLD2, 0 /SAME AS ABOVE
654\f
655/ DUMP THE OUTPUT BUFFER TO THE OUTPUT FILE
656
657DUMP, 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
663OUTBFA, OUTBUF /OUTPUT BUFFER ADDRESS
664OUTBLK, 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
672DUMPER, JMS I (TYPE /TYPE ERROR MESSAGE
673 DEVFUL-1 /FILE FULL ERROR
674 JMP I (7605
675WRERR, JMS I (TYPE /WRITE ERROR (MH)
676 MWRERR-1 /(MH)
677 JMP I (7605 /(MH)
678FETERR, JMS I (TYPE /FETCH ERROR (MH)
679 MFEERR-1 /(MH)
680 JMP I (7605 /(MH)
681RDERR, JMS I (TYPE /(READ ERROR (MH)
682 MRDERR-1 /(MH)
683 JMP I (7605 /(MH)
684MWRERR, "W; "R; "I; "T; "E; 240; "E; "R; "R; 215; 212; 0
685MFEERR, "F; "E; "T; "C; "H; 240; "E; "R; "R; 215; 212; 0
686MRDERR, "R; "E; "A; "D; 240; "E; "R; "R; 215; 212; 0
687 PAGE
688\f
689TTYMIS, "N;"O;" ;"T;"T;"Y;" ;"H;"A;"N;"D;215;212;0
690NOSC, "N;"O;" ;"H;"E;"L;"P; 240; "F; "I; "L; "E; 215;212;0
691NULNAM, 242; "N; "O; "N; "E; 242; 0
692AVAIL, " ; "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
699CRLF, 215;212;0
700TAB, 211;0
701SORRY, 215;212;"N;"O;240;"H;"E;"L;"P;240;"-;240;0
702DEVFUL, "D;"E;"V;"I;"C;"E;240;"F;"U;"L;"L;215;212;0
703HELP8, FILENAME HELP.HL
704VERS, 0201 /VERSION 2A (MH)
705 PAGE
706OUTHSP, ZBLOCK 400 /OUTPUT HANDLER SPACE
707OUTBUF, ZBLOCK 400 /OUTPUT BUFFER FOR LISTING
708BUFFER=. /INPUT BUFFER FOR HELP FILE, 8 BLKS OR 4000 WDS (MH)
709$