/DIR.SB RETURN DIRECTORY INFO / / CALL DIR(IUNIT,DEVNAM) / / SETS UP TO READ 'DEVNAM' DIRECTORY ON UNIT 'IUNIT'. / /-------------------------------------------------------------- / / CALL CAT(INFO) / / RETURNS IN 'INFO' / 1-4 FILE NAME (8 CHARS) / 5 MONTH (1-12) / 6 DAY (1-31) / 7 YEAR (70-78) / 8 FILE LENGTH (IN BLOCKS) / 9 FILE STARTING BLOCK / / IF INFO (1-7)=0 THEN / INFO(8) RETURNS LENGTH OF THE EMPTY FILE / / IF INFO(1)=-1 THEN END OF DIRECTORY / /--------------------------------------------------------- ENTRY CAT ENTRY DIR LAP OPDEF TADI 1400 OPDEF DCAI 3400 ABSYM X0 10 ABSYM X1 11 ABSYM TMP 7 OPDEF CDF0 6201 OPDEF CIF0 6202 ABSYM UNITNO 115 ABSYM UBASE 116 ABSYM XUSR 74 ABSYM XREADU 75 ABSYM XWRITU 76 ABSYM UTABLE 77 BUF, /DIRECTORY BUFFER ENTRI, 0 /-# OF ENTRIES SBLK, 0 /STARTING BLOCK BLK, 0 /NEXT DIRECTORY BLOCK TENT, 0 /TENTATIVE FILE POINTER INFOW, 0 /-# OF INFO WORDS BEGIN, 0 PAGE PAGE BUFPTR, BUF ENTPTR, BEGIN PUTADR, 0 POINT, 0 CTR, 0 CAT, BLOCK 2 TAD CAT DCA F F, HLT TADI CAT# DCA PFLD /WHERE TO RETURN INFO INC CAT# TADI CAT# DCA PUTADR INC CAT# TAD ENTRI /MORE ENTRIES? SPA CLA JMP NORD /YES TAD BLK /MORE BLOCKS? SPA SNA CLA JMP NOMORE /NO TAD PARAU DCA UNITNO TAD (-200 DCA CTR TAD BUFPTR DCA POINT CAT10, JMS READ DCA I POINT INC POINT JMS READ DCA I POINT INC POINT JMS READ /THROW AWAY THIRD 'BYTE' CLA ISZ CTR JMP CAT10 TAD ENTPTR DCA POINT TAD INFOW CIA DCA INFOW /POSITIZE INFO COUNT NORD, TAD I POINT /FILE? SNA CLA JMP EMPTY /NO, JUST AN EMPTY JMS MOV /YES, MOVE FILE NAME JMS MOV JMS MOV JMS MOV /ALL 4 WORDS TAD I POINT CLL RAL RTL RTL AND (17 JMS PUT /RETURN MONTH TADI POINT RAR RTR AND (37 JMS PUT /RETURN DAY TADI POINT AND (7 TAD (D70 JMS PUT /RETURN YEAR TAD POINT TAD INFOW DCA POINT /SKIP EXTRA INFO WORDS TADI POINT CIA DCA TMP TAD TMP JMS PUT /RETURN LENGTH RT, TAD SBLK JMS PUT /RETURN STARTING BLOCK TAD SBLK TAD TMP /ADD FILE LENGTH DCA SBLK INC POINT ISZ ENTRI NOP RTN, RETRN CAT EMPTY, TAD (-7 DCA TMP ZER, JMS PUT /RETURN ZERO FN ISZ TMP JMP ZER INC POINT TADI POINT CIA JMS PUT /RETURN LENGTH JMP RT /RETURN NOMORE, STA /NO MORE DIRECTORY ENTRIES JMS PUT JMP RTN PUT, 0 PFLD, HLT /INFO FIELD DCAI PUTADR ISZ PUTADR NOP JMP I PUT MOV, 0 /MOVE A WORD TAD I POINT INC POINT JMS CONV JMS PUT JMP I MOV PAGE PARAU, BLOCK 1 PARAD, BLOCK 2 DIRMSG, TEXT "IUER" /UNDEFINED INPUT UNIT ERROR DIR, BLOCK 2 JMS DIRP /SET UP FIRST PARA (UNIT #) JMS DIRV DCA PARAU JMS DIRP /SET UP SECOND PARA (DEVICE NAME) JMS DIRV JMS CONV DCA PARAD JMS DIRV JMS CONV DCA PARAD# STA TAD PARAU AND (7770 SZA CLA JMP DIRABT /UNIT # NOT 1-8! TAD PARAU TAD UTABLE DCA UBASE CDF0 TADI UBASE SNA JMP DIRABT /UNDEFINED UNIT! DCA UBASE STA TAD UBASE DCA X0 / / SET UP UNIT PARAMETER PACKET (UPP) / SEE LOADER.PA SOURCE FOR MORE INFO. / DCAI X0 /UFLAG DCAI X0 /UPTG DCAI X0 /UFBA DCAI X0 /UBLKS DCAI X0 /UBLREM INC X0 /UHETRY INC X0 /UFWA INC X0 /UWRDS DCAI X0 /UWDREM INC X0 /UHPARM TAD PARAD DCAI X0 /UDNAME TAD PARAD# DCAI X0 DCAI X0 /UFNAME DCAI X0 DCAI X0 DCAI X0 /UEXTEN / / CALL USR TO FETCH HANDLER AND PREPARE / FOR READING UNIT DURING CAT CALLS / TAD PARAU DCA UNITNO CIF0 FOOL1, JMS I XUSR JMP DIRERR /SOFT ERR JMP DIRERR /HARD ERR STA TAD UBASE DCA X0 CDF0 STL RAR /AC = 4000 = READ-ONLY DCAI X0 /UFLAG IAC /PTG 1 = READ FIRST BLOCK DCAI X0 /UPTG IAC /START BLOCK = 1 DCAI X0 /UFBA TAD (6 /DIRECTORY IS 6 BLOCKS LONG DCAI X0 TAD (-6 /DO THE WHOLE DIRECTORY DCAI X0 CLA CLL IAC /FIRST BLOCK IS #1 DIRERR, DCA BLK DCA ENTRI /CLEAR ENTRI # RETRN DIR DIRABT, CALL 1,ERROR ARG DIRMSG DIRP, 0 /SET UP DIR PARA TAD DIR DCA DIRP10 DIRP10, HLT TADI DIR# DCA DIRV10 INC DIR# TADI DIR# DCA DIRP10 INC DIR# JMP I DIRP DIRV, 0 /FETCH NEXT PARA WORD DIRV10, HLT TADI DIRP10 INC DIRP10 JMP I DIRV READ, 0 /READ A WORD FROM DIRECTORY CIF0 JMS I XREADU JMP NOMORE /SOFT ERR JMP NOMORE /HARD ERR JMP I READ CONV, 0 /CONVERT BLANKS TO ZEROES DCA TMP TAD TMP AND (3737 TAD (3737 AND (4040 TAD (3737 AND TMP JMP I CONV END