| 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 | $ |