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