home *** CD-ROM | disk | FTP | other *** search
- ;MASTER CATALOG UPDATE - UCAT.ASM
- ;01/07/78 BY WARD CHRISTENSEN
- ;01/10/78 ADD:
- ; (RUN UCAT)
- ; ERA MAST.BAK
- ; REN MAST.BAK=MAST.CAT
- ; REN MAST.CAT=NEW.CAT
- ; ERA NAMES.SUB
- ; 4 SEPT 80 MODIFIED BY TREVOR MARSHALL
- ; UNI W A
- ; DEPT ELEC ENG
- ; UPDATES ON TUG DISCS ADDED,
- ; WILDCARD IGNORE CAPABILITY
- 0100 ORG 100H
- 1400 = BSIZE EQU 1400H ;DK BUF SIZE (TIMES 3)
- ; BSIZE WAS 1000H ORIGINALLY
- 0400 = IGNSIZE EQU 1024 ;BUFF FOR IGNORED NAMES
- 0000 = TEST EQU 0 ;TESTING?
- MACLIB SEQIO
- 07F6 # FILERR SET EXIT ;EXIT IF ERRORS
- MOVE MACRO ?F,?T,?L
- MVI B,?L
- LXI D,?F
- LXI H,?T
- CALL MOVER
- ENDM
- COMPARE MACRO ?F1,?F2,?L
- MVI B,?L
- LXI D,?F1
- LXI H,?F2
- CALL COMPR
- ENDM
- ;
- ;SAVE CP/M'S STACK
- ;
- 0100 E1 POP H ;GET CP/M RET ADDR
- 0101 22F707 SHLD EXIT+1 ;SAVE IN EXIT JMP
- 0104 312B08 LXI SP,STACK
- FILE INFILE,MASTIN,,MAST,CAT,BSIZE
- 0001+= MASTINTYP EQU INFILE
- 0107+C33101 JMP ??0008
- 010A+00 DB 0
- 010B+4D DB 'M'
- 010C+41 DB 'A'
- 010D+53 DB 'S'
- 010E+54 DB 'T'
- 010F+20 DB ' '
- 0110+20 DB ' '
- 0111+20 DB ' '
- 0112+20 DB ' '
- 0113+43 DB 'C'
- 0114+41 DB 'A'
- 0115+54 DB 'T'
- 010A+= FCBMASTIN EQU $-12
- 0116+00 DB 0
- 0117+ DS 20
- 012B+850C DW MASTINBUF
- 1400+= MASTINSIZ EQU @BS
- 012D+0014 DW @BS
- 012F+ DS 2
- 0131+C3A101 JMP ??0001
- 0134+2A2D01 LHLD MASTINLEN
- 0137+EB XCHG
- 0138+2A2F01 LHLD MASTINPTR
- 013B+7D MOV A,L
- 013C+93 SUB E
- 013D+7C MOV A,H
- 013E+9A SBB D
- 013F+DA8A01 JC ??0007
- 0142+210000 LXI H,0
- 0145+222F01 SHLD MASTINPTR
- 0148+EB XCHG
- 0149+2A2D01 LHLD MASTINLEN
- 014C+7B MOV A,E
- 014D+95 SUB L
- 014E+7A MOV A,D
- 014F+9C SBB H
- 0150+D27C01 JNC ??0006
- 0153+2A2B01 LHLD MASTINADR
- 0156+19 DAD D
- 0157+EB XCHG
- 0158+0E1A MVI C,@DMA
- 015A+CD0500 CALL @BDOS
- 015D+110A01 LXI D,FCBMASTIN
- 0160+0E14 MVI C,@FRD
- 0162+CD0500 CALL @BDOS
- 0165+B7 ORA A
- 0166+C27601 JNZ ??0005
- 0169+118000 LXI D,@SECT
- 016C+2A2F01 LHLD MASTINPTR
- 016F+19 DAD D
- 0170+222F01 SHLD MASTINPTR
- 0173+C34801 JMP ??0004
- 0176+2A2F01 LHLD MASTINPTR
- 0179+222D01 SHLD MASTINLEN
- 017C+118000 LXI D,@TBUF
- 017F+0E1A MVI C,@DMA
- 0181+CD0500 CALL @BDOS
- 0184+210000 LXI H,0
- 0187+222F01 SHLD MASTINPTR
- 018A+EB XCHG
- 018B+2A2B01 LHLD MASTINADR
- 018E+19 DAD D
- 018F+EB XCHG
- 0190+2A2D01 LHLD MASTINLEN
- 0193+7D MOV A,L
- 0194+B4 ORA H
- 0195+3E1A MVI A,EOF
- 0197+C8 RZ
- 0198+1A LDAX D
- 0199+2A2F01 LHLD MASTINPTR
- 019C+23 INX H
- 019D+222F01 SHLD MASTINPTR
- 01A0+C9 RET
- 01A1+AF XRA A
- 01A2+321601 STA FCBMASTIN+12
- 01A5+322A01 STA FCBMASTIN+32
- 01A8+210014 LXI H,MASTINSIZ
- 01AB+222D01 SHLD MASTINLEN
- 01AE+222F01 SHLD MASTINPTR
- 01B1+0E0F MVI C,@OPN
- 01B3+110A01 LXI D,FCBMASTIN
- 01B6+CD0500 CALL @BDOS
- 01B9+3C INR A
- 01BA+C2D901 JNZ ??0003
- 01BD+0E09 MVI C,@MSG
- 01BF+11C801 LXI D,??0002
- 01C2+CD0500 CALL @BDOS
- 01C5+C3F607 JMP FILERR
- 01C8+0D0A ??0002: DB CR,LF
- 01CA+4E4F204D41 DB 'NO MASTIN FILE'
- 01D8+24 DB '$'
- FILE INFILE,NAMES,,NAMES,SUB,BSIZE
- 0001+= NAMESTYP EQU INFILE
- 01D9+C30302 JMP ??0016
- 01DC+00 DB 0
- 01DD+4E DB 'N'
- 01DE+41 DB 'A'
- 01DF+4D DB 'M'
- 01E0+45 DB 'E'
- 01E1+53 DB 'S'
- 01E2+20 DB ' '
- 01E3+20 DB ' '
- 01E4+20 DB ' '
- 01E5+53 DB 'S'
- 01E6+55 DB 'U'
- 01E7+42 DB 'B'
- 01DC+= FCBNAMES EQU $-12
- 01E8+00 DB 0
- 01E9+ DS 20
- 01FD+8520 DW NAMESBUF
- 1400+= NAMESSIZ EQU @BS
- 01FF+0014 DW @BS
- 0201+ DS 2
- 0203+C37302 JMP ??0009
- 0206+2AFF01 LHLD NAMESLEN
- 0209+EB XCHG
- 020A+2A0102 LHLD NAMESPTR
- 020D+7D MOV A,L
- 020E+93 SUB E
- 020F+7C MOV A,H
- 0210+9A SBB D
- 0211+DA5C02 JC ??0015
- 0214+210000 LXI H,0
- 0217+220102 SHLD NAMESPTR
- 021A+EB XCHG
- 021B+2AFF01 LHLD NAMESLEN
- 021E+7B MOV A,E
- 021F+95 SUB L
- 0220+7A MOV A,D
- 0221+9C SBB H
- 0222+D24E02 JNC ??0014
- 0225+2AFD01 LHLD NAMESADR
- 0228+19 DAD D
- 0229+EB XCHG
- 022A+0E1A MVI C,@DMA
- 022C+CD0500 CALL @BDOS
- 022F+11DC01 LXI D,FCBNAMES
- 0232+0E14 MVI C,@FRD
- 0234+CD0500 CALL @BDOS
- 0237+B7 ORA A
- 0238+C24802 JNZ ??0013
- 023B+118000 LXI D,@SECT
- 023E+2A0102 LHLD NAMESPTR
- 0241+19 DAD D
- 0242+220102 SHLD NAMESPTR
- 0245+C31A02 JMP ??0012
- 0248+2A0102 LHLD NAMESPTR
- 024B+22FF01 SHLD NAMESLEN
- 024E+118000 LXI D,@TBUF
- 0251+0E1A MVI C,@DMA
- 0253+CD0500 CALL @BDOS
- 0256+210000 LXI H,0
- 0259+220102 SHLD NAMESPTR
- 025C+EB XCHG
- 025D+2AFD01 LHLD NAMESADR
- 0260+19 DAD D
- 0261+EB XCHG
- 0262+2AFF01 LHLD NAMESLEN
- 0265+7D MOV A,L
- 0266+B4 ORA H
- 0267+3E1A MVI A,EOF
- 0269+C8 RZ
- 026A+1A LDAX D
- 026B+2A0102 LHLD NAMESPTR
- 026E+23 INX H
- 026F+220102 SHLD NAMESPTR
- 0272+C9 RET
- 0273+AF XRA A
- 0274+32E801 STA FCBNAMES+12
- 0277+32FC01 STA FCBNAMES+32
- 027A+210014 LXI H,NAMESSIZ
- 027D+22FF01 SHLD NAMESLEN
- 0280+220102 SHLD NAMESPTR
- 0283+0E0F MVI C,@OPN
- 0285+11DC01 LXI D,FCBNAMES
- 0288+CD0500 CALL @BDOS
- 028B+3C INR A
- 028C+C2AA02 JNZ ??0011
- 028F+0E09 MVI C,@MSG
- 0291+119A02 LXI D,??0010
- 0294+CD0500 CALL @BDOS
- 0297+C3F607 JMP FILERR
- 029A+0D0A ??0010: DB CR,LF
- 029C+4E4F204E41 DB 'NO NAMES FILE'
- 02A9+24 DB '$'
- IF NOT TEST
- FILE OUTFILE,MASTOUT,,NEW,CAT,BSIZE
- 0002+= MASTOUTTYP EQU OUTFILE
- 02AA+C3D402 JMP ??0024
- 02AD+00 DB 0
- 02AE+4E DB 'N'
- 02AF+45 DB 'E'
- 02B0+57 DB 'W'
- 02B1+20 DB ' '
- 02B2+20 DB ' '
- 02B3+20 DB ' '
- 02B4+20 DB ' '
- 02B5+20 DB ' '
- 02B6+43 DB 'C'
- 02B7+41 DB 'A'
- 02B8+54 DB 'T'
- 02AD+= FCBMASTOUT EQU $-12
- 02B9+00 DB 0
- 02BA+ DS 20
- 02CE+8534 DW MASTOUTBUF
- 1400+= MASTOUTSIZ EQU @BS
- 02D0+0014 DW @BS
- 02D2+ DS 2
- 02D4+C35903 JMP ??0017
- 02D7+F5 PUSH PSW
- 02D8+2AD002 LHLD MASTOUTLEN
- 02DB+EB XCHG
- 02DC+2AD202 LHLD MASTOUTPTR
- 02DF+7D MOV A,L
- 02E0+93 SUB E
- 02E1+7C MOV A,H
- 02E2+9A SBB D
- 02E3+DA4903 JC ??0023
- 02E6+210000 LXI H,0
- 02E9+22D202 SHLD MASTOUTPTR
- 02EC+EB XCHG
- 02ED+2AD002 LHLD MASTOUTLEN
- 02F0+7B MOV A,E
- 02F1+95 SUB L
- 02F2+7A MOV A,D
- 02F3+9C SBB H
- 02F4+D23B03 JNC ??0022
- 02F7+2ACE02 LHLD MASTOUTADR
- 02FA+19 DAD D
- 02FB+EB XCHG
- 02FC+0E1A MVI C,@DMA
- 02FE+CD0500 CALL @BDOS
- 0301+11AD02 LXI D,FCBMASTOUT
- 0304+0E15 MVI C,@FWR
- 0306+CD0500 CALL @BDOS
- 0309+B7 ORA A
- 030A+C21A03 JNZ ??0021
- 030D+118000 LXI D,@SECT
- 0310+2AD202 LHLD MASTOUTPTR
- 0313+19 DAD D
- 0314+22D202 SHLD MASTOUTPTR
- 0317+C3EC02 JMP ??0020
- 031A+0E09 MVI C,@MSG
- 031C+112603 LXI D,??0025
- 031F+CD0500 CALL @BDOS
- 0322+F1 POP PSW
- 0323+C3F607 JMP FILERR
- 0326+0D0A ??0025: DB CR,LF
- 0328+4449534B20 DB 'DISK FULL: MASTOUT'
- 033A+24 DB '$'
- 033B+118000 LXI D,@TBUF
- 033E+0E1A MVI C,@DMA
- 0340+CD0500 CALL @BDOS
- 0343+210000 LXI H,0
- 0346+22D202 SHLD MASTOUTPTR
- 0349+EB XCHG
- 034A+2ACE02 LHLD MASTOUTADR
- 034D+19 DAD D
- 034E+EB XCHG
- 034F+F1 POP PSW
- 0350+12 STAX D
- 0351+2AD202 LHLD MASTOUTPTR
- 0354+23 INX H
- 0355+22D202 SHLD MASTOUTPTR
- 0358+C9 RET
- 0359+AF XRA A
- 035A+32B902 STA FCBMASTOUT+12
- 035D+32CD02 STA FCBMASTOUT+32
- 0360+210014 LXI H,MASTOUTSIZ
- 0363+22D002 SHLD MASTOUTLEN
- 0366+210000 LXI H,0
- 0369+22D202 SHLD MASTOUTPTR
- 036C+0E13 MVI C,@DEL
- 036E+11AD02 LXI D,FCBMASTOUT
- 0371+CD0500 CALL @BDOS
- 0374+0E16 MVI C,@MAK
- 0376+11AD02 LXI D,FCBMASTOUT
- 0379+CD0500 CALL @BDOS
- 037C+3C INR A
- 037D+C2A303 JNZ ??0019
- 0380+0E09 MVI C,@MSG
- 0382+118B03 LXI D,??0018
- 0385+CD0500 CALL @BDOS
- 0388+C3F607 JMP FILERR
- 038B+0D0A ??0018: DB CR,LF
- 038D+4E4F204449 DB 'NO DIR SPACE: MASTOUT'
- 03A2+24 DB '$'
- ENDIF
- FILE SETFILE,BAK,,MAST,BAK
- 0003+= BAKTYP EQU SETFILE
- 03A3+C3C703 JMP ??0033
- 03A6+00 DB 0
- 03A7+4D DB 'M'
- 03A8+41 DB 'A'
- 03A9+53 DB 'S'
- 03AA+54 DB 'T'
- 03AB+20 DB ' '
- 03AC+20 DB ' '
- 03AD+20 DB ' '
- 03AE+20 DB ' '
- 03AF+42 DB 'B'
- 03B0+41 DB 'A'
- 03B1+4B DB 'K'
- 03A6+= FCBBAK EQU $-12
- 03B2+00 DB 0
- 03B3+ DS 20
- ;
- ;SETUP THE FILES
- ;
- 03C7 CDD105 INITRD CALL READNA ;READ NAMES FILE
- ;
- ;IF NAME IS $$$.SUB THEN SKIP IT
- ;
- COMPARE NADAT,SUBNAME,12
- 03CA+060C MVI B,12
- 03CC+112D08 LXI D,NADAT
- 03CF+217808 LXI H,SUBNAME
- 03D2+CD4607 CALL COMPR
- 03D5 CAC703 JZ INITRD
- ;
- ;CHECK FOR '-DISKNAME' HAVING BEEN READ
- ;
- 03D8 3A2D08 LDA NADAT
- 03DB FE2D CPI '-'
- 03DD CA6204 JZ NAMEOK
- ;THE FOLLOWING CODE IS PATCHED VIA DISASSEMBLY
- 03E0 3A5D00 LDA 5DH
- 03E3 FE2D CPI '-'
- 03E5 C22604 JNZ ERRXIT
- 03E8 3A6700 LDA 67H
- 03EB FE20 CPI ' '
- 03ED C20D04 JNZ NEWSUB
- 03F0 CDF007 CALL MSGXIT
- 03F3 2B2B534552 DB '++SERIAL MUST'
- 0400 2042452033 DB ' BE 3 DIGITS$'
- ;
- 040D 0607 NEWSUB MVI B,7
- 040F 115E00 LXI D,5EH
- 0412 213A08 LXI H,DKNAME
- 0415 CD3D07 CALL MOVER
- 0418 0603 MVI B,3
- 041A 116500 LXI D,65H
- 041D 214308 LXI H,NEW
- 0420 CD3D07 CALL MOVER
- 0423 C37804 JMP NXT1
- ;
- 0426 CDF007 ERRXIT CALL MSGXIT
- 0429 2B2B4E4F20 DB '++NO "-NAME.NNN" IN NAMES.SUB'
- 0446 0D0A2B2B52 DB 0DH,0AH,'++REISSUE: UCAT '
- 0458 2D6E616D65 DB '-name.nnn$'
- ; CALL MSGXIT
- ; DB '++NO ''-NAME'' IN DIRECTORY$'
- ;
- NAMEOK MOVE NADAT+1,DKNAME,7
- 0462+0607 MVI B,7
- 0464+112E08 LXI D,NADAT+1
- 0467+213A08 LXI H,DKNAME
- 046A+CD3D07 CALL MOVER
- MOVE NADAT+9,DKNAME+9,3
- 046D+0603 MVI B,3
- 046F+113608 LXI D,NADAT+9
- 0472+214308 LXI H,DKNAME+9
- 0475+CD3D07 CALL MOVER
- ;
- ;READ IN THE NAMES TO BE IGNORED (I.E. NOT
- ;CATALOGED). THEY ARE AT THE FRONT OF MAST CAT.
- ;THEY ARE SIMPLY A LIST OF FILENAME.FILETYPE (CR/LF)
- ;WITH THE FIRST HAVING A ( BEFORE IT, AND THE
- ;LAST HAVING A ) AFTER IT.
- ;
- NXT1 GET MASTIN ;GET THE LEADING '('
- 0478+CD3401 CALL GETMASTIN
- 047B CACD04 JZ NOIGN ;IF EOF
- 047E FE28 CPI '('
- 0480 C2CD04 JNZ NOIGN
- PUT MASTOUT
- 0483+CDD702 CALL PUTMASTOUT
- 0486 218408 LXI H,IGNORE ;POINT TO BUFFER
- 0489 010004 LXI B,IGNSIZE ;FOR BUFFER OVERFLOW TEST
- 048C C5 IGNRD PUSH B
- 048D E5 PUSH H
- GET MASTIN
- 048E+CD3401 CALL GETMASTIN
- 0491 CAEE04 JZ IGNEOF ;UNEXPECTED EOF
- 0494 F5 PUSH PSW ;SAVE CHAR
- PUT MASTOUT
- 0495+CDD702 CALL PUTMASTOUT
- 0498 F1 POP PSW
- 0499 E1 POP H
- 049A C1 POP B
- 049B 77 MOV M,A
- 049C 23 INX H
- 049D FE29 CPI ')'
- 049F CA3405 JZ IGNEND ;TABLE IS LOADED
- 04A2 0B DCX B ;MORE ROOM IN TABLE?
- 04A3 78 MOV A,B
- 04A4 B1 ORA C
- 04A5 C28C04 JNZ IGNRD
- ;TABLE OVERFLOW
- 04A8 CDF007 CALL MSGXIT
- 04AB 2B2B544F4F DB '++TOO MANY IGNORE NAMES FOR TABLE$'
- 04CD CDF007 NOIGN CALL MSGXIT
- 04D0 2B2B4E4F20 DB '++NO IGNORE NAMES IN MAST.CAT$'
- 04EE CDF007 IGNEOF CALL MSGXIT
- 04F1 2B2B454F46 DB '++EOF READING FOR IGNORE NAMES.'
- 0510 0D0A4D4159 DB 0DH,0AH,'MAY BE MISSING ) AFTER LAST NAME.$'
- IGNEND GET MASTIN
- 0534+CD3401 CALL GETMASTIN
- 0537 CAEE04 JZ IGNEOF
- 053A F5 PUSH PSW
- PUT MASTOUT
- 053B+CDD702 CALL PUTMASTOUT
- 053E F1 POP PSW
- 053F FE0A CPI 0AH
- 0541 C23405 JNZ IGNEND ;DELETE CR/LF
- 0544 C34A05 JMP MASTLP
- ;PRIME THE BUFFERS
- ;
- 0547 CDD105 NAMELP CALL READNA ;READ NAME INTO NADAT
- 054A CD6506 MASTLP CALL READMI ;READ MASTER INTO MIDAT
- ;IF EOF ON BOTH FILES, WE ARE ALL DONE
- 054D 3A2B08 COMPLP LDA NAEOFLG ;NAME FILE EOF?
- 0550 B7 ORA A
- 0551 CA5B05 JZ NOTEOF ;..NO
- 0554 3A2C08 LDA MIEOFLG ;MASTER IN EOF?
- 0557 B7 ORA A
- 0558 C25007 JNZ ALLDONE ;YES, THAT'S IT.
- NOTEOF COMPARE NADAT,MIDAT,25
- 055B+0619 MVI B,25
- 055D+112D08 LXI D,NADAT
- 0560+214608 LXI H,MIDAT
- 0563+CD4607 CALL COMPR
- 0566 CAC005 JZ EQUAL
- 0569 DA9D05 JC WRITEN
- ;
- ;MASTER IS LOWER - WRITE IT IF FOR ANOTHER DISK
- ;
- COMPARE MIDSK,DKNAME,12 ;SAME DISK?
- 056C+060C MVI B,12
- 056E+115308 LXI D,MIDSK
- 0571+213A08 LXI H,DKNAME
- 0574+CD4607 CALL COMPR
- 0577 CA8B05 JZ DELMI ;DELETING MIDAT
- MOVE MIDAT,MODAT,25
- 057A+0619 MVI B,25
- 057C+114608 LXI D,MIDAT
- 057F+215F08 LXI H,MODAT
- 0582+CD3D07 CALL MOVER
- 0585 CDCE06 CALL WRITEMO
- 0588 C34A05 JMP MASTLP
- ;
- ;DELETE MASTER IN
- ;
- 058B 119705 DELMI LXI D,DELMSG
- 058E 214608 LXI H,MIDAT
- 0591 CD0807 CALL MESG
- 0594 C34A05 JMP MASTLP
- 0597 44454C3A20DELMSG DB 'DEL: $'
- ;
- ;NAME IS LOWER - WRITE IT
- ;
- WRITEN MOVE NADAT,MODAT,25
- 059D+0619 MVI B,25
- 059F+112D08 LXI D,NADAT
- 05A2+215F08 LXI H,MODAT
- 05A5+CD3D07 CALL MOVER
- 05A8 CDCE06 CALL WRITEMO
- ;
- ;PRINT THAT NAME WAS ADDED
- ;
- 05AB 11BA05 LXI D,ADDMSG
- 05AE 212D08 LXI H,NADAT
- 05B1 CD0807 CALL MESG
- 05B4 CDD105 CALL READNA ;READ NEXT NAME
- 05B7 C34D05 JMP COMPLP
- 05BA 4144443A20ADDMSG DB 'ADD: $'
- ;
- ;BOTH FILES EQUAL
- ;
- EQUAL MOVE MIDAT,MODAT,25
- 05C0+0619 MVI B,25
- 05C2+114608 LXI D,MIDAT
- 05C5+215F08 LXI H,MODAT
- 05C8+CD3D07 CALL MOVER
- 05CB CDCE06 CALL WRITEMO ;WRITE OUT MASTER
- 05CE C34705 JMP NAMELP ;READ BOTH
- ;
- ;READ NAME FILE
- ;
- 05D1 212D08 READNA LXI H,NADAT
- 05D4 0608 MVI B,8
- 05D6 CD1A06 CALL READNAC ;READ CHARACTERS
- 05D9 362E MVI M,'.'
- 05DB 23 INX H
- 05DC 0603 MVI B,3 ;TYPE LENGTH
- 05DE CD1A06 CALL READNAC
- 05E1 362C MVI M,','
- ;
- ;IF THIS IS A NAME NOT TO BE CATALOGED,
- ;READ THE NEXT
- ;
- 05E3 118408 LXI D,IGNORE ;GET IGNORE TABLE
- 05E6 212D08 IGNLP LXI H,NADAT
- 05E9 060C MVI B,12 ;# OF CHARS TO MATCH
- 05EB 1A IGNCLP LDAX D ;GET IGNORE CHAR INTO A
- 05EC FE3F CPI '?' ;IS IT WILDCARD?
- 05EE CA0806 JZ IGNMAT ;IF SO, CONSIDER MATCHED
- 05F1 BE CMP M ;IS IT THE SAME?
- 05F2 CA0806 JZ IGNMAT ;YES, MATCHED
- 05F5 7E MOV A,M ;GET CHAR
- 05F6 FE20 CPI ' ' ;SPACE?
- 05F8 CA1106 JZ IGNMAT1 ;MATCH NOT NECESSARY
- ; THE PREVIOUS CODE FAILED WITH AN FCB OF THE FORM DUMMY
- ; (W/O .EXT), AS THE BLANKS WERE NOT REQUIRED TO
- ; MATCH IN THE EXTENSION
- ; FIX: ENSURE THAT IF THE BLANK SKIP PATH IS FOLLOWED
- ; THAT THE CHARACTER COUNT IS NOT 9
- ;
- ;GET NEXT ENTRY
- ;
- 05FB 1A IGNEXTE LDAX D
- 05FC 13 INX D
- 05FD FE29 CPI ')' ;END OF TABLE?
- 05FF C8 RZ ;..YES, RETURN
- 0600 FE0A CPI 0AH ;NEXT LINE?
- 0602 C2FB05 JNZ IGNEXTE
- 0605 C3E605 JMP IGNLP
- ;
- ;CHAR MATCHED
- ;
- 0608 13 IGNMAT INX D ;SKIP MATCH CHAR
- 0609 23 IGNMAT2 INX H
- 060A 05 DCR B
- 060B C2EB05 JNZ IGNCLP ;LOOP UNTIL DONE
- ;
- ;NAME IS TO BE DELETED
- ;
- 060E C3D105 JMP READNA ;READ NEXT NAME
- ;
- ; CHECK IF CHARACTER COUNT IS 9 ( .EXT)
- 0611 78 IGNMAT1 MOV A,B ;FETCH COUNT
- 0612 FE03 CPI 3
- 0614 CAFB05 JZ IGNEXTE ;IF 9, DONT SKIP
- 0617 C30906 JMP IGNMAT2
- ;
- ;READ CHARACTERS INTO NAME BUFFER
- ;
- 061A 3A2B08 READNAC LDA NAEOFLG ;EOF ON NAMES?
- 061D B7 ORA A
- 061E C25806 JNZ NAEOF ;YES, PAD W/0FFH
- 0621 E5 PUSH H
- 0622 C5 PUSH B
- GETNA GET NAMES
- 0623+CD0602 CALL GETNAMES
- 0626 FE0A CPI 0AH
- 0628 CA2306 JZ GETNA ;IGNORE LF
- 062B C1 POP B
- 062C E1 POP H
- 062D FE2E CPI '.' ;END?
- 062F CA5006 JZ NAEND
- 0632 FE0D CPI 0DH ;END?
- 0634 CA5006 JZ NAEND
- 0637 FE1A CPI 'Z'-40H ;EOF?
- 0639 CA5806 JZ NAEOF
- 063C 77 MOV M,A
- 063D 23 INX H
- 063E 05 DCR B
- 063F C21A06 JNZ READNAC
- 0642 C5 PUSH B
- 0643 E5 PUSH H
- GET NAMES ;KILL DELIMITER CHAR
- 0644+CD0602 CALL GETNAMES
- 0647 E1 POP H
- 0648 C1 POP B
- 0649 FE1A CPI 'Z'-40H ;EOF?
- 064B C0 RNZ
- 064C 322B08 STA NAEOFLG
- 064F C9 RET
- 0650 3620 NAEND MVI M,' '
- 0652 23 INX H
- 0653 05 DCR B
- 0654 C25006 JNZ NAEND
- 0657 C9 RET
- 0658 36FF NAEOF MVI M,0FFH
- 065A 23 INX H
- 065B 05 DCR B
- 065C C25806 JNZ NAEOF
- 065F 3E01 MVI A,1
- 0661 322B08 STA NAEOFLG
- 0664 C9 RET
- ;
- ;READ MASTER IN NAME
- ;
- 0665 214608 READMI LXI H,MIDAT
- 0668 CD7206 CALL MINAME ;GET FILE NAME
- 066B 362C MVI M,',' ;SEPARATOR
- 066D 23 INX H
- 066E CD7206 CALL MINAME ;GET DISK NAME
- 0671 C9 RET
- ;
- ;READ MASTER IN, 1 FIELD
- ;
- 0672 0608 MINAME MVI B,8
- 0674 CD8006 CALL READMIC ;GET CHARS
- 0677 362E MVI M,'.'
- 0679 23 INX H
- 067A 0603 MVI B,3
- 067C CD8006 CALL READMIC ;GET TYPE
- 067F C9 RET
- ;
- ;READ CHARS INTO MASTER NAME
- ;
- 0680 3A2C08 READMIC LDA MIEOFLG
- 0683 B7 ORA A
- 0684 C2C306 JNZ MIEOF
- 0687 E5 PUSH H
- 0688 C5 PUSH B
- GETMI GET MASTIN
- 0689+CD3401 CALL GETMASTIN
- 068C FE0A CPI 0AH ;IGNORE LF
- 068E CA8906 JZ GETMI ;L/F'S
- 0691 C1 POP B
- 0692 E1 POP H
- 0693 FE2C CPI ','
- 0695 CABB06 JZ MIEND
- 0698 FE2E CPI '.'
- 069A CABB06 JZ MIEND
- 069D FE0D CPI 0DH
- 069F CABB06 JZ MIEND
- 06A2 FE1A CPI 'Z'-40H ;EOF?
- 06A4 CAC306 JZ MIEOF
- 06A7 77 MOV M,A
- 06A8 23 INX H
- 06A9 05 DCR B
- 06AA C28006 JNZ READMIC
- 06AD C5 PUSH B
- 06AE E5 PUSH H
- GET MASTIN ;GET DELIMITER
- 06AF+CD3401 CALL GETMASTIN
- 06B2 E1 POP H
- 06B3 C1 POP B
- 06B4 FE1A CPI 'Z'-40H ;EOF?
- 06B6 C0 RNZ
- 06B7 322C08 STA MIEOFLG
- 06BA C9 RET
- 06BB 3620 MIEND MVI M,' '
- 06BD 23 INX H
- 06BE 05 DCR B
- 06BF C2BB06 JNZ MIEND
- 06C2 C9 RET
- 06C3 36FF MIEOF MVI M,0FFH
- 06C5 23 INX H
- 06C6 05 DCR B
- 06C7 C2C306 JNZ MIEOF
- 06CA 322C08 STA MIEOFLG ;SHOW EOF
- 06CD C9 RET
- ;
- ;WRITE AN ENTRY TO MASTER OUT
- ;ALSO BUMP COUNT OF ENTRIES WRITTEN
- ;
- 06CE 21E507 WRITEMO LXI H,COUNT+3
- 06D1 7E BUMP MOV A,M ;GET COUNT DIGIT
- 06D2 FE20 CPI ' '
- 06D4 C2D906 JNZ BUMPNB
- 06D7 3E30 MVI A,'0'
- 06D9 3C BUMPNB INR A
- 06DA 77 MOV M,A
- 06DB FE3A CPI '9'+1 ;TIME TO CARRY?
- 06DD C2E606 JNZ BUMPD ;..NO, DONE
- 06E0 3630 MVI M,'0'
- 06E2 2B DCX H
- 06E3 C3D106 JMP BUMP
- 06E6 215F08 BUMPD LXI H,MODAT
- 06E9 0619 MVI B,25
- 06EB 7E WRMOL MOV A,M
- 06EC FE20 CPI ' ' ;NULL CHAR?
- 06EE CAF806 JZ WRSKIP
- 06F1 C5 PUSH B
- 06F2 E5 PUSH H
- IF NOT TEST
- PUT MASTOUT
- 06F3+CDD702 CALL PUTMASTOUT
- ELSE
- PUT CON
- ENDIF
- 06F6 E1 POP H
- 06F7 C1 POP B
- 06F8 23 WRSKIP INX H ;POINT TO NEXT CHAR
- 06F9 05 DCR B
- 06FA C2EB06 JNZ WRMOL ;LOOP UNTIL DONE
- 06FD 3E0D MVI A,0DH
- IF NOT TEST
- PUT MASTOUT
- 06FF+CDD702 CALL PUTMASTOUT
- ELSE
- PUT CON
- ENDIF
- 0702 3E0A MVI A,0AH
- IF NOT TEST
- PUT MASTOUT
- 0704+CDD702 CALL PUTMASTOUT
- ELSE
- PUT CON
- ENDIF
- 0707 C9 RET
- ;
- ;PRINT MESSAGE IN DE, THEN NAME IN HL
- ;
- 0708 E5 MESG PUSH H
- 0709 0E09 MVI C,@MSG
- 070B CD0500 CALL @BDOS
- 070E E1 POP H
- 070F 060C MVI B,12 ;NAME + '.' + TYPE
- 0711 E5 MESGL PUSH H
- 0712 C5 PUSH B
- 0713 7E MOV A,M ;GET CHAR
- 0714 FE20 CPI ' '
- 0716 CA2107 JZ MESGS ;SKIP IF ' '
- PUT CON
- 0719+F5 PUSH PSW
- 071A+0E02 MVI C,@CON
- 071C+5F MOV E,A
- 071D+CD0500 CALL @BDOS
- 0720+F1 POP PSW
- 0721 C1 MESGS POP B
- 0722 E1 POP H
- 0723 23 INX H
- 0724 05 DCR B
- 0725 C21107 JNZ MESGL
- 0728 3E0D MVI A,0DH
- PUT CON
- 072A+F5 PUSH PSW
- 072B+0E02 MVI C,@CON
- 072D+5F MOV E,A
- 072E+CD0500 CALL @BDOS
- 0731+F1 POP PSW
- 0732 3E0A MVI A,0AH
- PUT CON
- 0734+F5 PUSH PSW
- 0735+0E02 MVI C,@CON
- 0737+5F MOV E,A
- 0738+CD0500 CALL @BDOS
- 073B+F1 POP PSW
- 073C C9 RET
- ;
- ;MOVE SUBROUTINE (DE)=>(HL), LEN IN (B)
- ;
- 073D 1A MOVER LDAX D
- 073E 77 MOV M,A
- 073F 13 INX D
- 0740 23 INX H
- 0741 05 DCR B
- 0742 C23D07 JNZ MOVER
- 0745 C9 RET
- ;
- ;COMPARE ROUTINE (DE)<=>(HL), LENGTH IN B
- ;
- 0746 1A COMPR LDAX D
- 0747 BE CMP M
- 0748 C0 RNZ ;RET W/NON ZERO SET
- 0749 13 INX D
- 074A 23 INX H
- 074B 05 DCR B
- 074C C24607 JNZ COMPR
- 074F C9 RET ;ZERO SET, SHOWS =
- ;
- ;ALL DONE - WRITE EOF TO OUTPUT, RETURN
- ;
- 0750 = ALLDONE EQU $
- 0750 3E1A MVI A,'Z'-40H ;EOF CHAR
- IF NOT TEST
- PUT MASTOUT
- 0752+CDD702 CALL PUTMASTOUT
- FINIS MASTOUT
- 0755+2AD202 LHLD MASTOUTPTR
- 0758+7D MOV A,L
- 0759+E67F ANI (@SECT-1) AND 0FFH
- 075B+C26107 JNZ ??0035
- 075E+22D002 SHLD MASTOUTLEN
- 0761+3E1A ??0035: MVI A,EOF
- 0763+F5 PUSH PSW
- 0764+CDD702 CALL PUTMASTOUT
- 0767+F1 POP PSW
- 0768+C25507 JNZ ??0034
- 076B+0E10 MVI C,@CLS
- 076D+11AD02 LXI D,FCBMASTOUT
- 0770+CD0500 CALL @BDOS
- 0773+3C INR A
- 0774+C29907 JNZ ??0037
- 0777+0E09 MVI C,@MSG
- 0779+118207 LXI D,??0036
- 077C+CD0500 CALL @BDOS
- 077F+C39907 JMP ??0037
- 0782+0D0A ??0036: DB CR,LF
- 0784+43414E4E4F DB 'CANNOT CLOSE MASTOUT'
- 0798+24 DB '$'
- ENDIF
- ;
- ;RUN WAS SUCCESSFUL - SET FINAL FILE DISPOSITIONS
- ;
- ERASE BAK ;ERA CAT.BAK
- 0799+0E13 MVI C,@DEL
- 079B+11A603 LXI D,FCBBAK
- 079E+CD0500 CALL @BDOS
- ERASE NAMES ;ERA NAMES.SUB
- 07A1+0E13 MVI C,@DEL
- 07A3+11DC01 LXI D,FCBNAMES
- 07A6+CD0500 CALL @BDOS
- RENAME BAK,MASTIN ;REN MAST.BAK=MAST.CAT
- 07A9+C3C007 JMP ??0038
- 07AC+E5 PUSH H
- 07AD+011000 LXI B,16
- 07B0+09 DAD B
- 07B1+1A ??0039: LDAX D
- 07B2+77 MOV M,A
- 07B3+13 INX D
- 07B4+23 INX H
- 07B5+0D DCR C
- 07B6+C2B107 JNZ ??0039
- 07B9+D1 POP D
- 07BA+0E17 MVI C,@REN
- 07BC+CD0500 CALL @BDOS
- 07BF+C9 RET
- 07C0+210A01 LXI H,FCBMASTIN
- 07C3+11A603 LXI D,FCBBAK
- 07C6+CDAC07 CALL @RENS
- RENAME MASTIN,MASTOUT ;REN MAST.CAT=MAST.NEW
- 07C9+21AD02 LXI H,FCBMASTOUT
- 07CC+110A01 LXI D,FCBMASTIN
- 07CF+CDAC07 CALL @RENS
- 07D2 CDF007 CALL MSGXIT
- 07D5 4D4153542E DB 'MAST.CAT HAS '
- 07E2 2020202020COUNT DB ' ENTRIES.$'
- ;
- 07F0 D1 MSGXIT POP D ;GET MSG
- 07F1 0E09 MVI C,@MSG
- 07F3 CD0500 CALL @BDOS
- 07F6 C30000 EXIT JMP $-$ ;TO CP/M RETURN ADDR
- 07F9 DS 32H ;STACK SPACE
- 082B = STACK EQU $
- 082B 00 NAEOFLG DB 0 ;NAME FILE EOF FLAG
- 082C 00 MIEOFLG DB 0 ;MASTER IN EOF FLAG
- 082D 5858585858NADAT DB 'XXXXXXXX.YYY,'
- ;DKNAME DB ' . '
- 083A 2020202020DKNAME DB ' .'
- 0843 202020 NEW DB ' '
- 0846 5858585858MIDAT DB 'XXXXXXXX.YYY,'
- 0853 5858585858MIDSK DB 'XXXXXXXX.YYY'
- 085F 5858585858MODAT DB 'XXXXXXXX.YYY,XXXXXXXX.YYY'
- 0878 2424242020SUBNAME DB '$$$ .SUB'
- ;NAMES TO BE IGNORED READ IN HERE:
- 0884 29 IGNORE DB ')' ;DUMMY END OF TABLE
- 0885 DS IGNSIZE
- 0C85 = BUFFERS EQU $
- 4885 = MEMSIZE EQU BUFFERS+@NXTB
-