0100 ORG 100H 0005 = BDOS EQU 05H 005C = FCB EQU 5CH ; 0100 C31201 JMP START ; 0103 28464D4150 DB '(FMAP 01/18/81)' ; GOOD FOR DIRECTORIES TO 256 ENTRIES ; 0112 210000 START: LXI H,0 0115 39 DAD SP 0116 222F05 SHLD STACK 0119 312F05 LXI SP,STACK 011C 3A6C00 LDA FCB+16 ;2ND UNIT PARAM. 011F B7 ORA A 0120 CA2601 JZ NODEST 0123 324F05 STA MYFCB ;CHG OUTPUT DRIVE 0126 3A6D00 NODEST: LDA FCB+17 0129 324C05 STA FILESW ;FLAG FOR FILE WRITE 012C 0E19 MVI C,25 ;FIND LOGGED DISK 012E CD0500 CALL BDOS 0131 324A05 STA CDSK 0134 3A5C00 LDA FCB 0137 B7 ORA A 0138 C23F01 JNZ FSPEC2 ;NO DRIVE SPEC'D 013B 3A4A05 LDA CDSK 013E 3C INR A 013F 3D FSPEC2: DCR A ;ADJ FOR INPUT RNG 0140 5F MOV E,A 0141 0E0E MVI C,14 ;SELECT DRIVE WANTED 0143 CD0500 CALL BDOS 0146 215C00 LXI H,FCB 0149 363F MVI M,'?' ;MATCH ALL ENTRIES 014B 0E1B MVI C,27 ;GET ALLOC VECT 014D CD0500 CALL BDOS 0150 223205 SHLD ALLADR ;SAVE ALLOC PNTR. 0153 0E0C MVI C,12 ;FIND REVISION 0155 CD0500 CALL BDOS 0158 B7 ORA A 0159 CA7F01 JZ OLDCPM ;BEFORE 2.0 USE DFLTS 015C 0E1F MVI C,31 ;GET DPB ADDRESS 015E CD0500 CALL BDOS 0161 23 INX H 0162 23 INX H 0163 23 INX H 0164 7E MOV A,M ;GET BLM 0165 3C INR A ;MAKE SECTORS/BLOCK 0166 0F RRC 0167 0F RRC 0168 0F RRC ;DIVIDE BY 8 FOR KB/BLK 0169 E61F ANI 1FH 016B 323605 STA BLKSIZ ;SIZE IN KBYTES 016E 23 INX H 016F 7E MOV A,M ;EXTENT MASK 0170 323B05 STA EXTMSK 0173 3A3605 LDA BLKSIZ ;RESTORE SIZE 0176 23 INX H 0177 5E MOV E,M 0178 23 INX H 0179 56 MOV D,M ;DSM 017A EB XCHG 017B 23 INX H ;TOTAL BLOCK COUNT 017C 223405 SHLD BLKCNT ; 017F 0E11 OLDCPM: MVI C,17 ;SRCH FIRST 0181 115C00 LXI D,FCB 0184 CD0500 CALL BDOS 0187 3C INR A 0188 F5 PUSH PSW 0189 119601 LXI D,TTL 018C CD4304 CALL WRCON 018F CD6204 CALL CR 0192 F1 POP PSW 0193 C3D801 JMP SOME ; 0196 46494C454ETTL: DB 'FILENAME TYP U EX RC -----EXTENT-----' 01BB 5645522E20 DB 'VER. 2.1 1/18/81$' 01CC 0E12 MORDIR: MVI C,12H 01CE 115C00 LXI D,FCB 01D1 CD0500 CALL BDOS 01D4 3C INR A 01D5 CA1602 JZ SPRINT 01D8 3D SOME: DCR A 01D9 E603 ANI 3 01DB 87 ADD A 01DC 87 ADD A 01DD 87 ADD A 01DE 87 ADD A 01DF 87 ADD A 01E0 218000 LXI H,80H 01E3 85 ADD L 01E4 6F MOV L,A 01E5 7E MOV A,M 01E6 FEE5 CPI 0E5H 01E8 CACC01 JZ MORDIR 01EB 4F MOV C,A ;SAVE USER 01EC 23 INX H 01ED EB XCHG 01EE 2A3705 LHLD NEXTT 01F1 060B MVI B,11 ; NAME 01F3 1A TMOVE1: LDAX D 01F4 E67F ANI 7FH 01F6 77 MOV M,A 01F7 13 INX D 01F8 23 INX H 01F9 05 DCR B 01FA C2F301 JNZ TMOVE1 01FD 71 MOV M,C ;USER 01FE 23 INX H 01FF 0614 MVI B,20 ;OTHER BYTES 0201 1A TMOVE2: LDAX D 0202 77 MOV M,A 0203 13 INX D 0204 23 INX H 0205 05 DCR B 0206 C20102 JNZ TMOVE2 0209 223705 SHLD NEXTT 020C 2A3905 LHLD COUNT 020F 23 INX H 0210 223905 SHLD COUNT 0213 C3CC01 JMP MORDIR ; 0216 2A3905 SPRINT: LHLD COUNT 0219 224805 SHLD OCOUNT 021C 224605 SHLD SCOUNT 021F 7C MOV A,H 0220 B5 ORA L 0221 CADD03 JZ NFEXIT 0224 217005 LXI H,ORDER 0227 117007 LXI D,TABLE 022A 012000 LXI B,32 022D 73 BLDORD: MOV M,E 022E 23 INX H 022F 72 MOV M,D 0230 23 INX H 0231 EB XCHG 0232 09 DAD B 0233 EB XCHG 0234 E5 PUSH H 0235 2A4805 LHLD OCOUNT 0238 2B DCX H 0239 224805 SHLD OCOUNT 023C 7C MOV A,H 023D B5 ORA L 023E E1 POP H 023F C22D02 JNZ BLDORD 0242 2A3905 LHLD COUNT 0245 2B DCX H 0246 7C MOV A,H 0247 B5 ORA L 0248 CA7E02 JZ DONE 024B AF SORT: XRA A 024C 324B05 STA SWITCH 024F 2A4605 LHLD SCOUNT 0252 2B DCX H 0253 227004 SHLD TEMP 0256 224605 SHLD SCOUNT 0259 7C MOV A,H 025A B5 ORA L 025B CA7E02 JZ DONE 025E 217005 LXI H,ORDER 0261 CDEB04 SORTLP: CALL COMPR 0264 FCFD04 CM SWAP 0267 23 INX H 0268 23 INX H 0269 E5 PUSH H 026A 2A7004 LHLD TEMP 026D 2B DCX H 026E 227004 SHLD TEMP 0271 7C MOV A,H 0272 B5 ORA L 0273 E1 POP H 0274 C26102 JNZ SORTLP 0277 3A4B05 LDA SWITCH 027A B7 ORA A 027B C24B02 JNZ SORT 027E 217005 DONE: LXI H,ORDER 0281 223705 SHLD NEXTT 0284 3A4A05 LDA CDSK 0287 5F MOV E,A 0288 0E0E MVI C,14 ;SEL DSK 028A CD0500 CALL BDOS ;ORIG DRIVE 028D 3A4C05 LDA FILESW 0290 FE46 CPI 'F' ;46H 0292 C2BE02 JNZ ENTRY 0295 114F05 LXI D,MYFCB 0298 0E13 MVI C,13H 029A CD0500 CALL BDOS 029D 114F05 LXI D,MYFCB 02A0 0E16 MVI C,16H 02A2 CD0500 CALL BDOS 02A5 3C INR A 02A6 C2BE02 JNZ ENTRY 02A9 CD7204 CALL ERXIT 02AC 2B2B46494C DB '++FILE MAKE ERROR$' 02BE 0E0B ENTRY: MVI C,11 ;CONS STAT 02C0 CD0500 CALL BDOS 02C3 3D DCR A 02C4 CA7804 JZ ABORT 02C7 2A3705 LHLD NEXTT 02CA 5E MOV E,M 02CB 23 INX H 02CC 56 MOV D,M ;DE = ADDR OF ENTRY 02CD 23 INX H 02CE 223705 SHLD NEXTT 02D1 210B00 LXI H,11 ;USER OFFSET 02D4 19 DAD D 02D5 7E MOV A,M ;USER BYTE 02D6 C690 ADI 90H 02D8 27 DAA 02D9 CE40 ACI 40H 02DB 27 DAA 02DC 77 MOV M,A ;NOW ASCII 02DD 23 INX H 02DE 7E MOV A,M 02DF A7 ANA A 02E0 CAEA02 JZ ENTRY2 02E3 214C05 LXI H,FILESW 02E6 7E MOV A,M 02E7 F601 ORI 1 02E9 77 MOV M,A 02EA EB ENTRY2: XCHG 02EB C3F702 JMP PTONE3 ; 02EE 23 WRDEXT: INX H 02EF 04 INR B 02F0 7E MOV A,M 02F1 CD1C04 CALL XOB 02F4 C33203 JMP NXCLUS ; 02F7 0608 PTONE3: MVI B,8 02F9 CD4804 CALL TYPEIT 02FC CDC904 CALL PERIOD 02FF 0603 MVI B,3 0301 CD4804 CALL TYPEIT 0304 CDD104 CALL SEMIC 0307 0601 MVI B,1 0309 CD4804 CALL TYPEIT 030C CDD604 CALL FILECR 030F 7E MOV A,M 0310 CD1C04 CALL XOB 0313 23 INX H 0314 23 INX H 0315 23 INX H 0316 7E MOV A,M 0317 CD1C04 CALL XOB 031A 23 INX H 031B 011000 LXI B,16 ;BYTES & SPACE FLG 031E 7E EXTLP: MOV A,M 031F 5F MOV E,A 0320 CD2204 CALL XO 0323 3A3B05 LDA EXTMSK 0326 B7 ORA A 0327 C2EE02 JNZ WRDEXT 032A 0C INR C 032B 79 MOV A,C 032C E601 ANI 1 032E 4F MOV C,A 032F CC5504 CZ SPACE 0332 23 NXCLUS: INX H 0333 05 DCR B 0334 C21E03 JNZ EXTLP 0337 E5 PUSH H 0338 213105 LXI H,NFILE 033B 34 INR M 033C CD6204 CALL CR 033F 3A4C05 LDA FILESW 0342 E6FE ANI 0FEH 0344 324C05 STA FILESW 0347 2A3905 LHLD COUNT 034A 2B DCX H 034B 223905 SHLD COUNT 034E 7C MOV A,H 034F B5 ORA L 0350 E1 POP H 0351 C2BE02 JNZ ENTRY ; 0354 0602 DFEXIT: MVI B,2 0356 213C05 LXI H,ROOM1 0359 CD4804 CALL TYPEIT 035C 2A3405 LHLD BLKCNT 035F 54 MOV D,H 0360 5D MOV E,L ;TOTAL COUNTER IN DE 0361 E5 PUSH H ;LEFT COUNTER ON STK 0362 2A3205 LHLD ALLADR 0365 0608 LP3: MVI B,8 ;BIT COUNT 0367 7E MOV A,M ;ALLOC BYTE 0368 E3 XTHL ;SAVE PTR,GET LEFT CNT 0369 07 LP2: RLC ;BIT TO CY 036A D26E03 JNC LP1 ;UNUSED BLK 036D 2B DCX H ;COUNT OFF 036E 1B LP1: DCX D ;DECR TOTAL 036F 4F MOV C,A 0370 7A MOV A,D 0371 B3 ORA E 0372 CA7F03 JZ CNTDUN ;FINISHED SCAN 0375 79 MOV A,C ;RESTORE 0376 05 DCR B 0377 C26903 JNZ LP2 037A E3 XTHL 037B 23 INX H ;STEP TBL PTR 037C C36503 JMP LP3 ; 037F EB CNTDUN: XCHG ;COUNT IN DE 0380 E1 POP H ;CLEAR UP STACK 0381 3A3605 LDA BLKSIZ 0384 CDF403 CALL MPY8 ;CALC IN KB 0387 CD0404 CALL OUTNUM 038A 0608 MVI B,8 038C 213E05 LXI H,ROOM2 038F CD4804 CALL TYPEIT 0392 CDD604 CALL FILECR 0395 CD6204 CALL CR 0398 3A3105 LDA NFILE 039B 6F MOV L,A 039C 2600 MVI H,0 039E CD0404 CALL OUTNUM 03A1 11C703 LXI D,NMSG 03A4 CD4304 CALL WRCON 03A7 3A4C05 LDA FILESW 03AA E6FE ANI 0FEH 03AC FE46 CPI 'F' ;46H 03AE 324C05 STA FILESW 03B1 C27D04 JNZ EXIT 03B4 3E1A MVI A,1AH 03B6 CD8204 CALL FILCHR 03B9 CDA104 CALL WRSEC 03BC 114F05 LXI D,MYFCB 03BF 0E10 MVI C,10H 03C1 CD0500 CALL BDOS 03C4 C37D04 JMP EXIT ; 03C7 2044495245NMSG: DB ' DIRECT. ENTRIES USED$' ; 03DD AF NFEXIT: XRA A 03DE 324C05 STA FILESW 03E1 C35403 JMP DFEXIT ; 03E4 AF DIVIDE: XRA A 03E5 0610 MVI B,10H 03E7 29 DIV01: DAD H 03E8 17 RAL 03E9 B9 CMP C 03EA DAEF03 JC DIV02 03ED 91 SUB C 03EE 23 INX H 03EF 05 DIV02: DCR B 03F0 C2E703 JNZ DIV01 03F3 C9 RET ; 03F4 210000 MPY8: LXI H,0 03F7 B7 MPY81: ORA A 03F8 C8 RZ 03F9 1F RAR 03FA D2FE03 JNC MPY01 03FD 19 DAD D 03FE EB MPY01: XCHG 03FF 29 DAD H 0400 EB XCHG 0401 C3F703 JMP MPY81 ; 0404 1600 OUTNUM: MVI D,0 0406 0E0A MVI C,10 ;RADIX 0408 CDE403 OUTN01: CALL DIVIDE 040B F5 PUSH PSW 040C 14 INR D 040D 7C MOV A,H 040E B5 ORA L 040F C20804 JNZ OUTN01 0412 42 MOV B,D 0413 F1 OUTN02: POP PSW 0414 CD2B04 CALL NIBBL 0417 05 DCR B 0418 C21304 JNZ OUTN02 041B C9 RET ; 041C CD2204 XOB: CALL XO 041F C35504 JMP SPACE ; 0422 F5 XO: PUSH PSW 0423 1F RAR 0424 1F RAR 0425 1F RAR 0426 1F RAR 0427 CD2B04 CALL NIBBL 042A F1 POP PSW ; 042B E60F NIBBL: ANI 0FH 042D C690 ADI 90H 042F 27 DAA 0430 CE40 ACI 40H 0432 27 DAA 0433 C35C04 JMP FILC ; 0436 C5 TYPE: PUSH B 0437 D5 PUSH D 0438 E5 PUSH H 0439 5F MOV E,A 043A 0E02 MVI C,2 043C CD0500 CALL BDOS 043F E1 POP H 0440 D1 POP D 0441 C1 POP B 0442 C9 RET ; 0443 0E09 WRCON: MVI C,9 0445 C30500 JMP BDOS ; 0448 7E TYPEIT: MOV A,M 0449 CD8204 CALL FILCHR 044C CD3604 CALL TYPE 044F 23 INX H 0450 05 DCR B 0451 C24804 JNZ TYPEIT 0454 C9 RET ; 0455 3E20 SPACE: MVI A,' ' ;20H 0457 C33604 JMP TYPE ; 045A 3E20 SPACF: MVI A,' ' ;20H 045C CD8504 FILC: CALL FILCHS 045F C33604 JMP TYPE ; 0462 1E0D CR: MVI E,0DH 0464 0E02 MVI C,2 0466 CD0500 CALL BDOS 0469 1E0A MVI E,0AH 046B 0E02 MVI C,2 046D C30500 JMP BDOS ; 0470 TEMP: DS 2 ; 0472 D1 ERXIT: POP D 0473 0E09 MVI C,9 0475 C37A04 JMP CALLB ; 0478 0E01 ABORT: MVI C,1 047A CD0500 CALLB: CALL BDOS 047D 2A2F05 EXIT: LHLD STACK 0480 F9 SPHL 0481 C9 RET ; 0482 FE20 FILCHR: CPI ' ' ;20H 0484 C8 RZ 0485 F5 FILCHS: PUSH PSW 0486 3A4C05 LDA FILESW 0489 FE46 CPI 'F' ;46H 048B C29F04 JNZ NOFILE 048E F1 POP PSW 048F F5 PUSH PSW 0490 E5 PUSH H 0491 2A4D05 LHLD BUFAD 0494 77 MOV M,A 0495 23 INX H 0496 224D05 SHLD BUFAD 0499 7C MOV A,H 049A 3D DCR A 049B CCA104 CZ WRSEC 049E E1 POP H 049F F1 NOFILE: POP PSW 04A0 C9 RET ; 04A1 C5 WRSEC: PUSH B 04A2 D5 PUSH D 04A3 114F05 LXI D,MYFCB 04A6 0E15 MVI C,15H 04A8 CD0500 CALL BDOS 04AB B7 ORA A 04AC CAC004 JZ WROK 04AF CD7204 CALL ERXIT 04B2 2B2B575249 DB '++WRITE ERROR$' 04C0 218000 WROK: LXI H,80H 04C3 224D05 SHLD BUFAD 04C6 D1 POP D 04C7 C1 POP B 04C8 C9 RET ; 04C9 3E2E PERIOD: MVI A,'.' ;2EH 04CB CD8204 CHCOM: CALL FILCHR 04CE C35504 JMP SPACE ; 04D1 3E3B SEMIC: MVI A,';' 04D3 C3CB04 JMP CHCOM ; 04D6 3E0D FILECR: MVI A,0DH 04D8 CD8204 CALL FILCHR 04DB 3E0A MVI A,0AH 04DD CD8204 CALL FILCHR 04E0 3A4C05 LDA FILESW 04E3 F601 ORI 1 04E5 324C05 STA FILESW 04E8 C35504 JMP SPACE ; 04EB E5 COMPR: PUSH H 04EC 5E MOV E,M 04ED 23 INX H 04EE 56 MOV D,M 04EF 23 INX H 04F0 4E MOV C,M 04F1 23 INX H 04F2 46 MOV B,M 04F3 EB XCHG 04F4 0A CMPLP: LDAX B 04F5 BE CMP M 04F6 23 INX H 04F7 03 INX B 04F8 CAF404 JZ CMPLP 04FB E1 POP H 04FC C9 RET ; 04FD 3E01 SWAP: MVI A,1 04FF 324B05 STA SWITCH 0502 4E MOV C,M 0503 23 INX H 0504 E5 PUSH H 0505 46 MOV B,M 0506 23 INX H 0507 5E MOV E,M 0508 71 MOV M,C 0509 23 INX H 050A 56 MOV D,M 050B 70 MOV M,B 050C E1 POP H 050D 72 MOV M,D 050E 2B DCX H 050F 73 MOV M,E 0510 C9 RET ; 0511 DS 30 052F STACK: DS 2 0531 00 NFILE: DB 0 0532 0000 ALLADR: DW 0 ;ALLOC VECT PTR 0534 0000 BLKCNT: DW 0 0536 01 BLKSIZ: DB 1 ;1.4 DEFAULT 0537 7007 NEXTT: DW TABLE 0539 0000 COUNT: DW 0 053B 07 EXTMSK: DB 7 ;1.4 DEFAULT 053C 5B5B ROOM1: DB '[[' 053E 5D5D2E4C46ROOM2: DB ']].LFT;0' 0546 0000 SCOUNT: DW 0 0548 0000 OCOUNT: DW 0 054A 00 CDSK: DB 0 054B 00 SWITCH: DB 0 054C C9 FILESW: DB 0C9H 054D 8000 BUFAD: DW 80H 054F 01 MYFCB: DB 1 ;DRIVE A DEFAULT 0550 4E414D4553 DB 'NAMES SUB' 055B 00 DB 0 055C DS 19 056F 00 DB 0 0570 ORDER: DS 512 ; 0770 TABLE: END