1 /DIRECT V3D FOR OS/78 V1A AND OS/8 V3D
11 /COPYRIGHT (C) 1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION
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.
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.
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
45 \f/JANUARY 17, 1974 H.J.
47 /5-AUGUST-1975 MAINT. RELEASE CHANGES S.R.
48 /1. UPDATED COPYRIGHT DATE
49 /2. CHANGED VERSION NUMBER TO V4
50 /3. INCORPORATED PATCH (SEQ #2) OF FEB 1975 DSN
51 / (FIXES BUG RE: DEFAULTING TO TTY: AND DSK:)
53 / 5-APR-77 MH OS/78 FIXES (V5A)
54 / 18-MAY-77 MH SPR 2286 (V6A)
56 /DIRECTORY LISTING PROGRAM
58 / START ADDRESS 14600; JSW 6403
83 AC4000=CLA CLL CML RAR
91 EQLS=7646 /EQUALS OPTION
93 BIPCCL=7777 /CONTAINS DATE EXTENSION IN BITS 3 AND 4 (MH)
94 BUF=5200 /THE FILE OUTPUT BUFFER
95 /5 BLOCKS LONG, TO 7577
100 SKP CLA /NORMAL ENTRY
101 JMP MSTRT /CHAIN ENTRY
102 CDCALL, JMS I (200 /SEE WHAT THE PERSON WANTS
104 STAR, 5200 /IN SPECIAL MODE
106 MSTRT, TAD I (OPT2 /GET OPTION /W
108 SNL CLA /SKIP FOR VESION NUMBER
110 JMS I (ERROR /PRINT VERSION NUMBER
115 /SET UP FOR MULTIPLE ENTRIES ON A LINE
117 EQUALT, TAD I (EQLS /EQUALS OPTION WORD
118 SPA /MUST BE POSITIVE
119 CLA CLL CML RTR /SET AC LARGE POSITIVE
120 TAD (-10 /CHECK LEGALITY OF OPTION
121 SMA SZA CLA /SKIP IF GOOD
124 /SUBSTITUTE .DI IF NULL EXTENSION
126 TAD I (7604 /GET EXTENSION
129 DCA I (7604 /PUT EXTENSION BACK
131 / GET THE DATE INCREMENT BITS
133 CDF 0 /GET GET WORD FORM FIELD 0(MH)
134 TAD I (BIPCCL /THE BITS WITH DATE EXT. ARE 3 AND 4 (MH)
135 CDF 10 /BACK TO FIELD 1 (MH)
136 RTR /SHIFT THOSE BITS SO THEY CREATE A 0,10,20, OR 30(MH)
137 RTR /AFTER MASKING (MH)
139 DCA DATINC /SAVE THE DATE EXTENSION (MH)
141 / CHECK FOR ? IN OUTPUT SPECIFICATION
143 DCA CNT /CNT HAVING -10 PUTS US AT FIRST CHAR
145 JMS I (GTSXBT /GET A CHAR
146 TAD (-"?!7700 /CHECK FOR ?
156 / CHECK FOR EMBEDDED * IN ANY SPECIFICATION
185 /THIS IS THE END OF OPERATION CODE
186 /IT CLOSES THE FILE AND HANDLES RETURNS
191 TAD I (OUWDCT /GET -WORDS LEFT IN BUFFER
192 AND (177 /CHECK AGAINST NEW BUFFER #
193 SNA /SPR 2286, CHECK CAREFULLY (MH)
194 TAD RPOS /TO SEE IF ANY TRAILING (MH)
195 CIA /OR DANGLING CHARS (MH)
196 TAD (RPOS-1 /ARE LEFT OVER (MH)
198 JMP OLOOP /KEEP GOING TO DUMP ONE
200 TAD (1200 /DONT DUMP IF AT END
202 JMS DUMP /DUMP BUFFER
209 JMP ABORT /CODE MOVED TO ANOTHER PAGE (MH)
252 TAD (RPOS-1 /SPR 2286 (MH)
254 TAD (-1200 /NUMBER OF WORDS IN BUFFER
259 JMP FINDSK /V3C IF NO DEVICE SPECIFIED, LOOKUP 'DSK'
278 DCA I (DATNOW /SAVE CURRENT DATE (MH)
279 TAD I (DATE /GET DATE BACK INTO AC (MH)
286 SMA /SET UP NEGATIVE COUNT
288 DCA I (ALNCNT /SAVE FOR LATER
289 TAD I (ALNCNT /SAVE FOR LATER
290 DCA I (LNCNT /SAVE FOR LATER
298 EOLIN, TAD (215 /COME HERE TO ABORT DIRECTORY
299 JMS I (TYPE /AND PRINT CRLF
300 JMP I (ABORT /ABORT OPERATION AND GOTO ENDUP
305 5723 /TO LOCATE 'DSK'
308 JMP I (IDBLVT /NO 'DSK' IMPOSSIBLE (SO SAY NO 'TTY')
309 TAD XX /RETURN DEVICE NUMBER OF DSK
312 \f DIRCTY=0 /LOCATION OF INPUT DIRECTORY
326 CDF 0 /CODE TO CHECK FOR
327 TAD I (DIRCTY /LEGALITY OF DIRECTORY
334 JMP BIDIR /DIRECTORY IS BAD
336 / COUNT NUMBER OF INPUTS FROM SAME DEVICE
383 /THIS IS THE ERROR MESSAGE PRINTER
405 ABORT, TAD I (ALTOPT /MOVED (MH)
416 /THIS IS THE SUPERQUASIFACETED DIRECTORY PATTERN MATCHING ROUTINE
418 /THE INPUT DIRECTORY IS SEARCHED HERE, IF A MATCH
419 /IS FOUND USING THE INPUT GROUPING
420 /GOT1 GETS CONTROL WITH -BLOCKS IN THE AC
422 NBLOCK, TAD BDPTR /POINTER TO START OF DIR BLOCK
425 TAD I XR /GET BLOCK NUMBER FIRST FILE
427 TAD I XR /NEXT SEGMENT NUMBER
428 DCA LFLAG /IF IT 0 WE AT END
429 ISZ XR /SKIP TENTATIVE FILE WORD
430 TAD I XR /GET -NUMBER OF INFO WORDS
433 TAD XR /POINT TO FIRST
437 BLOOP, TAD I EPTR /GET FILENAME WORD
439 SNA CLA /SKIP IF FILE HERE
440 JMP EMPTY /NO... ITS REALLY AN EMPTY
441 TAD INSCNT /SET NUMBER OF INPUT TO LOOK
442 DCA NCNT /AT ALL AT ONCE
443 DCA MATFLG /CLEAR MATCH FLAG
444 TAD INFPTR /ADDRESS OF FIRST INPUT
446 MN1, TAD GPTR2 /ADDRESS OF CURRENT INPUT
447 TAD (5 /GTSXBT SUBR REQUIRES US TO
448 DCA GPTR2 /POINT TO END OF FIELD
449 TAD EPTR /POINT DIRECTORY POINTER TO
450 TAD (4 /END OF ENTRY FOR SAME REASON
452 TAD GPTR1 /SET EPNEXT TO POINT TO
453 TAD INFWDS /MINUS NUMBER OF BLOCKS IN
454 DCA EPNEXT /FILE WORD
455 TAD (-10 /NUMBER OF CHARS TO LOOK AT
458 MLP, TAD GPTR2 /OK - GET A CHARACTER FROM
459 JMS I (GTSXBT /STRING
460 TAD (-"*!7700 /IS IT AN *
462 JMP WILDA /YEP... ITS A WILD CARD
463 TAD ("*-"? /IS IT A ?
465 JMP WILD /YES... FORCE MATCH ON THIS CHAR
466 TAD ("?&77 /RESTORE VALUE
469 TAD GPTR1 /NOW GET CHAR FROM DIRECTORY
473 TAD CHAR /DO CHARS MATCH
474 SZA CLA /SKIP IF THEY DO
475 JMP NM1 /NO MATCH ON THIS INPUT
476 WILD, ISZ CNT /BUMP COUNT OF CHARS & POINTER
477 JMP MLP /COMPARE ALL 8
478 MEXT, ISZ MATFLG /A MATCH!!!!!!!
479 NM1, CLA /WILD CARD COMES HERE WITH ICHY AC
480 ISZ NCNT /HAVE WE CHECKED GROUP OF INPUTS
481 JMP MN1 /NO CHECK WHOLE GROUP
482 TAD MATFLG /HAVE THERE BEEN ANY MATCHES
484 TAD (4 /WILL INVERT /V SWITCH
485 TAD I (OPT2 /ADD SWITCH
488 /SKIPS IF INPUT DIRECTORY ENTRY IS NOT CANDIDATE
489 /THAT IS - IF A MATCH WAS NOT FOUND BETWEEN ANY
490 /OF THE INPUTS AND /V WAS NOT SPECIFIED OR
491 /A MATCH WAS FOUND AND /V WAS SPECIFIED
493 /THIS ALLOWS /V TO MEAN EVERYTHING BUT...
496 TAD I EPNEXT /GET -NUMBER OF BLOCKS
498 SZA /SKIPS IF TENTATIVE OR NOT CANDIDATE
499 JMP I (GOT1 /PROCESS FILE
500 NENT, TAD EPNEXT /POINT EPTR TO BLOCK
501 DCA EPTR /COUNT OF FILE
503 EMPTY, ISZ EPTR /ON EMPTY MAKE EPTR POINT TO BLOCK COUNT
504 JMS I (HEMPTY /HANDLE EMPTY SLOTS
506 TAD I EPTR /GET BLOCK COUNT
510 ISZ EPTR /POINT TO NEXT ENTRY
511 ISZ I BDPTR /POINTS TO -NUMBER OF ENTRIES
512 JMP BLOOP /NOT DONE WITH SEGMENT
514 TAD (400 /BUMP TO NEXT SEGMENT
517 TAD LFLAG /DID WE PROCESS LAST SEGMENT
518 SZA CLA /SKIP IF WE DID
519 JMP NBLOCK /PROCESS NEW SEGNENT
524 WILDA, TAD CNT /GET CURRENT CHAR POSITION
525 TAD (6 /ADD SIZE OF FILENAME
526 SPA /SKIP IF IN EXTENSION FIELD
527 JMP WILDNM /THIS BUMPS TO EXTENSION
528 JMP MEXT /THIS MEANS IT HAS TO BE A MATCH
541 \fGOT1, DCA IFCNT /-# OF BLOCKS IN AC
542 JMS I (DATCHK /VERIFY /C AND /O SWITCHES
548 JMS I (ADDINF /SEE IF ADDITIONAL INFO WORDS
553 TAD INFPTR /FILL IN *.* FOR FILENAME
560 ISZ TEMP /POINT TO EXTENSION
562 DCA I TEMP /SUBSTITUTE IT
572 JMS BSPACE /(MH) PATCH FOR /B/E
587 NODATE, ISZ LNCNT /IS LINE FILLED?
590 TAD ALNCNT /RESET COUNT
593 MOROLN, TAD (5 /OUTPUT 5 BLANKS
644 BSPACE, 0 /(MH) PATCH FOR /B/E
726 /ROUTINE TO MAKE SURE USER SPECIFIED
727 //C AND /O SWITCHES CAUSE CORRECT MATCH WITH DATE
730 TAD I (OPT1 /CHECK /C
732 NOP /RETURN HERE WITH AC=0 IF NO /C
733 SZA CLA /RETURN HERE WITH AC=0 IF DATES MATCH
734 JMP I (NENT /DATES DONT MATCH AND /C GIVEN
735 TAD I (OPT2 /CHECK /V
737 CMA CLA /SET AC=-1 IF NO /V
738 SNA CLA /RETURN HERE AC=0 IF DATES SAME
739 JMP I (NENT /DATES SAME WITH /V-IGNORE FILE
740 JMP I DATCHK /CONTINUE
742 MDATE, 0 //O AND /V ARE AC2
743 RTL /IS IT OPTION ON?
744 SMA CLA /SKIP IF IT IS
745 JMP I MDATE /NO- RETURN WITH 0 AC
746 ISZ MDATE /SKIP RETURN
748 TAD I GPTR1 /GET DATE WORD
751 TAD I (DATE /COMPARE WITH MONITORS, 0 IF =
785 PRBLNK, JMS I (CONVTP
793 PWRTEN, -1750;-144;-12;-1;0
799 TAD DATNOW /WAS A DATE ENTERED AT BOOT TIME?(MH)
801 JMP FDATE /NO -- DON'T PRINT DATE IF NOT ENTERED(MH)
802 AND (7 /YES -- SAVE YR NEGATED(MH)
804 DCA DATTMP /SAVE THIS RESULT TEMP(MH)
837 TAD DATTMP /ADD -ENTERED YR(MH)
838 CLL /CLEAR LINK FOR FLAG USE(MH)
839 SZA!SMA!CLA /SKIP AND CLEAR IF ENTERED YR BIGGER,SAME(MH)
840 CML /SET LINK IF DIR YR BIGGER THAN ENETERED YR (MH)
841 TAD DATEY /GET DATE BACK(MH)
842 AND (7 /GET THE YR(MH)
843 SZL /SKIP IF ENTERED YR WAS BIG OR SAME(MH)
844 TAD (-10 /SUBTRACT 10 OCTAL IF DIR YR WAS BIGGER(MH)
845 TAD DATINC /ADD DATE INCREMENT(MH)
852 FDATE, TAD I (LNCNT /SEE IF AT END OF LINE?
854 SNA CLA /OUT PUT SPACES TO FILL DATE SLOT
855 JMP I PDATE /NO NEED FOR SPACES IF AT END OF LINE
856 TAD (12 /10 SPACES IS WHATS NEEDED
861 DATNOW, 0 /CURRENT DATE IF ONE WAS ENTERED(MH)
862 DATINC, 0 /DATE ENXTENSION TO 1970 (0,10,20, OR 30) (MH)
863 DATTMP, 0 /TEMP STORE (MH)
919 SNA CLA /IF YES PAD BY ADDIDTIONAL INFO WORDS
922 TAD INFWDS /NUMBER OF SPACES=5*(INFWDS-1)
927 SZA /DONT OUTPUT 4096 BLANKS
943 JMS I (BSPACE /(MH) PATCH FOR /B/E
949 ISZ I (LNCNT /AT END OF LINE
950 JMP WORK /NO. HAVE TO DO BLANK PADDING
952 TAD I (ALNCNT /RESET COUNT
955 WORK, TAD (5 /FORCES 5 BLANKS
958 AND (100 /CHECK FOR /F
959 SZA CLA /ADD 10 SPACES TO COVER DATE
1002 IDBLVT, JMS I (ERROR
1010 TAD (-4 /FORCE PRINTING OF ONLY 1 DIGIT
1011 DCA I (MPNTCNT /FOR 0 FREE BLOCKS
1038 /ROUTINE TO DUMP ADDITIONAL INFO WORDS IF WANTED
1042 AND (10 /CHECK /I SWITCH
1046 TAD INFWDS /GET NUMBER
1047 SPA SNA /MUST BE 2 OR MORE TO PRINT
1052 IAC /BUMP TO FIRST ONE
1055 TAD I PGPTR1 /GET WORD
1057 JMS I (OPRNT /PRINT IT IN OCTAL
1058 JMS I (CONVTP /OUTPUT A BLANK
1060 ISZ CNTX /COUNT NUMBER
1070 VERNO, TEXT /DIRECT V6A /
1071 BADIRD, TEXT /ERROR READING INPUT DIRECTORY/
1072 SPRBLM, TEXT /NO ROOM FOR OUTPUT FILE/
1073 OUERR, TEXT /ERROR WRITING FILE/
1074 CLERR, TEXT /ERROR CLOSING FILE/
1075 NFLEIN, TEXT /DEVICE DOES NOT HAVE DIRECTORY/
1076 BIGEQ, TEXT /EQUALS OPTION BAD/
1077 ILLQ, TEXT /ILLEGAL ?/
1078 ILLA, TEXT /ILLEGAL */
1079 BADDIR, TEXT /BAD INPUT DIRECTORY/
1080 NOTTY, TEXT /THERE IS NO HOPE-THERE IS NO TTY HANDLER IN YOUR SYSTEM/
1081 EMPTYM, "<;"E;"M;"P;"T;"Y;">;240;240
1082 FRBLM, "F;"R;"E;"E;240;"B;"L;"O;"C;"K;"S
1084 "B;"A;"D /PROTECTION AGAINST BAD DATE
1097 "B;"A;"D /PROTECTION AGAINST BAD DATE
1098 "B;"A;"D /PROTECTION AGAINST BAD DATE
1099 "B;"A;"D /PROTECTION AGAINST BAD DATE
1102 TAD I (LENGTH /GET LENGTH AVAILABLE
1103 SNA /IF ZERO ITS NON FILE STRUCTURE
1104 JMP NOMATR /IF ZERO DOESNT MATTER
1106 TAD I (CLEN /ADD CURRENT SIZE
1107 TAD (5 /ADD # OF BLOCKS
1108 SZL CLA /WE ARE OK IF SKIPS
1110 TAD I (CLEN /UPDATE CLOSING LENGTH
1111 TAD (5 /BY NUMBER OF BLOCKS
1112 DCA I (CLEN /SAVE FOR CLOSE
1123 TAD BLCKN /UPDATE BLOCK # BY 5