home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol041 / ucat.prn < prev    next >
Encoding:
Text File  |  1984-04-29  |  27.2 KB  |  897 lines

  1.                 ;MASTER CATALOG UPDATE - UCAT.ASM
  2.                 ;01/07/78 BY WARD CHRISTENSEN
  3.                 ;01/10/78 ADD:
  4.                 ;        (RUN UCAT)
  5.                 ;        ERA MAST.BAK
  6.                 ;        REN MAST.BAK=MAST.CAT
  7.                 ;        REN MAST.CAT=NEW.CAT
  8.                 ;        ERA NAMES.SUB
  9.                 ; 4 SEPT 80 MODIFIED BY TREVOR MARSHALL
  10.                 ;            UNI W A
  11.                 ;            DEPT ELEC ENG
  12.                 ;  UPDATES ON TUG DISCS ADDED,
  13.                 ;  WILDCARD IGNORE CAPABILITY
  14.  0100               ORG    100H
  15.  1400 =         BSIZE    EQU    1400H    ;DK BUF SIZE (TIMES 3)
  16.                 ; BSIZE WAS 1000H ORIGINALLY
  17.  0400 =         IGNSIZE    EQU    1024    ;BUFF FOR IGNORED NAMES
  18.  0000 =         TEST    EQU    0    ;TESTING?
  19.                     MACLIB    SEQIO
  20.  07F6 #         FILERR    SET    EXIT    ;EXIT IF ERRORS
  21.                 MOVE    MACRO    ?F,?T,?L
  22.                     MVI    B,?L
  23.                     LXI    D,?F
  24.                     LXI    H,?T
  25.                     CALL    MOVER
  26.                     ENDM
  27.                 COMPARE    MACRO    ?F1,?F2,?L
  28.                     MVI    B,?L
  29.                     LXI    D,?F1
  30.                     LXI    H,?F2
  31.                     CALL    COMPR
  32.                     ENDM
  33.                 ;
  34.                 ;SAVE CP/M'S STACK
  35.                 ;
  36.  0100 E1            POP    H    ;GET CP/M RET ADDR
  37.  0101 22F707        SHLD    EXIT+1    ;SAVE IN EXIT JMP
  38.  0104 312B08        LXI    SP,STACK
  39.                     FILE    INFILE,MASTIN,,MAST,CAT,BSIZE
  40.  0001+=         MASTINTYP    EQU    INFILE
  41.  0107+C33101        JMP    ??0008
  42.  010A+00            DB    0
  43.  010B+4D            DB    'M'
  44.  010C+41            DB    'A'
  45.  010D+53            DB    'S'
  46.  010E+54            DB    'T'
  47.  010F+20            DB    ' '
  48.  0110+20            DB    ' '
  49.  0111+20            DB    ' '
  50.  0112+20            DB    ' '
  51.  0113+43            DB    'C'
  52.  0114+41            DB    'A'
  53.  0115+54            DB    'T'
  54.  010A+=         FCBMASTIN    EQU    $-12
  55.  0116+00            DB    0
  56.  0117+              DS    20
  57.  012B+850C          DW    MASTINBUF
  58.  1400+=         MASTINSIZ    EQU    @BS
  59.  012D+0014          DW    @BS
  60.  012F+              DS    2
  61.  0131+C3A101        JMP    ??0001
  62.  0134+2A2D01        LHLD    MASTINLEN
  63.  0137+EB            XCHG
  64.  0138+2A2F01        LHLD    MASTINPTR
  65.  013B+7D            MOV    A,L
  66.  013C+93            SUB    E
  67.  013D+7C            MOV    A,H
  68.  013E+9A            SBB    D
  69.  013F+DA8A01        JC    ??0007
  70.  0142+210000        LXI    H,0
  71.  0145+222F01        SHLD    MASTINPTR
  72.  0148+EB            XCHG
  73.  0149+2A2D01        LHLD    MASTINLEN
  74.  014C+7B            MOV    A,E
  75.  014D+95            SUB    L
  76.  014E+7A            MOV    A,D
  77.  014F+9C            SBB    H
  78.  0150+D27C01        JNC    ??0006
  79.  0153+2A2B01        LHLD    MASTINADR
  80.  0156+19            DAD    D
  81.  0157+EB            XCHG
  82.  0158+0E1A          MVI    C,@DMA
  83.  015A+CD0500        CALL    @BDOS
  84.  015D+110A01        LXI    D,FCBMASTIN
  85.  0160+0E14          MVI    C,@FRD
  86.  0162+CD0500        CALL    @BDOS
  87.  0165+B7            ORA    A
  88.  0166+C27601        JNZ    ??0005
  89.  0169+118000        LXI    D,@SECT
  90.  016C+2A2F01        LHLD    MASTINPTR
  91.  016F+19            DAD    D
  92.  0170+222F01        SHLD    MASTINPTR
  93.  0173+C34801        JMP    ??0004
  94.  0176+2A2F01        LHLD    MASTINPTR
  95.  0179+222D01        SHLD    MASTINLEN
  96.  017C+118000        LXI    D,@TBUF
  97.  017F+0E1A          MVI    C,@DMA
  98.  0181+CD0500        CALL    @BDOS
  99.  0184+210000        LXI    H,0
  100.  0187+222F01        SHLD    MASTINPTR
  101.  018A+EB            XCHG
  102.  018B+2A2B01        LHLD    MASTINADR
  103.  018E+19            DAD    D
  104.  018F+EB            XCHG
  105.  0190+2A2D01        LHLD    MASTINLEN
  106.  0193+7D            MOV    A,L
  107.  0194+B4            ORA    H
  108.  0195+3E1A          MVI    A,EOF
  109.  0197+C8            RZ
  110.  0198+1A            LDAX    D
  111.  0199+2A2F01        LHLD    MASTINPTR
  112.  019C+23            INX    H
  113.  019D+222F01        SHLD    MASTINPTR
  114.  01A0+C9            RET
  115.  01A1+AF            XRA    A
  116.  01A2+321601        STA    FCBMASTIN+12
  117.  01A5+322A01        STA    FCBMASTIN+32
  118.  01A8+210014        LXI    H,MASTINSIZ
  119.  01AB+222D01        SHLD    MASTINLEN
  120.  01AE+222F01        SHLD    MASTINPTR
  121.  01B1+0E0F          MVI    C,@OPN
  122.  01B3+110A01        LXI    D,FCBMASTIN
  123.  01B6+CD0500        CALL    @BDOS
  124.  01B9+3C            INR    A
  125.  01BA+C2D901        JNZ    ??0003
  126.  01BD+0E09          MVI    C,@MSG
  127.  01BF+11C801        LXI    D,??0002
  128.  01C2+CD0500        CALL    @BDOS
  129.  01C5+C3F607        JMP    FILERR
  130.  01C8+0D0A      ??0002:    DB    CR,LF
  131.  01CA+4E4F204D41    DB    'NO MASTIN FILE'
  132.  01D8+24            DB    '$'
  133.                     FILE    INFILE,NAMES,,NAMES,SUB,BSIZE
  134.  0001+=         NAMESTYP    EQU    INFILE
  135.  01D9+C30302        JMP    ??0016
  136.  01DC+00            DB    0
  137.  01DD+4E            DB    'N'
  138.  01DE+41            DB    'A'
  139.  01DF+4D            DB    'M'
  140.  01E0+45            DB    'E'
  141.  01E1+53            DB    'S'
  142.  01E2+20            DB    ' '
  143.  01E3+20            DB    ' '
  144.  01E4+20            DB    ' '
  145.  01E5+53            DB    'S'
  146.  01E6+55            DB    'U'
  147.  01E7+42            DB    'B'
  148.  01DC+=         FCBNAMES    EQU    $-12
  149.  01E8+00            DB    0
  150.  01E9+              DS    20
  151.  01FD+8520          DW    NAMESBUF
  152.  1400+=         NAMESSIZ    EQU    @BS
  153.  01FF+0014          DW    @BS
  154.  0201+              DS    2
  155.  0203+C37302        JMP    ??0009
  156.  0206+2AFF01        LHLD    NAMESLEN
  157.  0209+EB            XCHG
  158.  020A+2A0102        LHLD    NAMESPTR
  159.  020D+7D            MOV    A,L
  160.  020E+93            SUB    E
  161.  020F+7C            MOV    A,H
  162.  0210+9A            SBB    D
  163.  0211+DA5C02        JC    ??0015
  164.  0214+210000        LXI    H,0
  165.  0217+220102        SHLD    NAMESPTR
  166.  021A+EB            XCHG
  167.  021B+2AFF01        LHLD    NAMESLEN
  168.  021E+7B            MOV    A,E
  169.  021F+95            SUB    L
  170.  0220+7A            MOV    A,D
  171.  0221+9C            SBB    H
  172.  0222+D24E02        JNC    ??0014
  173.  0225+2AFD01        LHLD    NAMESADR
  174.  0228+19            DAD    D
  175.  0229+EB            XCHG
  176.  022A+0E1A          MVI    C,@DMA
  177.  022C+CD0500        CALL    @BDOS
  178.  022F+11DC01        LXI    D,FCBNAMES
  179.  0232+0E14          MVI    C,@FRD
  180.  0234+CD0500        CALL    @BDOS
  181.  0237+B7            ORA    A
  182.  0238+C24802        JNZ    ??0013
  183.  023B+118000        LXI    D,@SECT
  184.  023E+2A0102        LHLD    NAMESPTR
  185.  0241+19            DAD    D
  186.  0242+220102        SHLD    NAMESPTR
  187.  0245+C31A02        JMP    ??0012
  188.  0248+2A0102        LHLD    NAMESPTR
  189.  024B+22FF01        SHLD    NAMESLEN
  190.  024E+118000        LXI    D,@TBUF
  191.  0251+0E1A          MVI    C,@DMA
  192.  0253+CD0500        CALL    @BDOS
  193.  0256+210000        LXI    H,0
  194.  0259+220102        SHLD    NAMESPTR
  195.  025C+EB            XCHG
  196.  025D+2AFD01        LHLD    NAMESADR
  197.  0260+19            DAD    D
  198.  0261+EB            XCHG
  199.  0262+2AFF01        LHLD    NAMESLEN
  200.  0265+7D            MOV    A,L
  201.  0266+B4            ORA    H
  202.  0267+3E1A          MVI    A,EOF
  203.  0269+C8            RZ
  204.  026A+1A            LDAX    D
  205.  026B+2A0102        LHLD    NAMESPTR
  206.  026E+23            INX    H
  207.  026F+220102        SHLD    NAMESPTR
  208.  0272+C9            RET
  209.  0273+AF            XRA    A
  210.  0274+32E801        STA    FCBNAMES+12
  211.  0277+32FC01        STA    FCBNAMES+32
  212.  027A+210014        LXI    H,NAMESSIZ
  213.  027D+22FF01        SHLD    NAMESLEN
  214.  0280+220102        SHLD    NAMESPTR
  215.  0283+0E0F          MVI    C,@OPN
  216.  0285+11DC01        LXI    D,FCBNAMES
  217.  0288+CD0500        CALL    @BDOS
  218.  028B+3C            INR    A
  219.  028C+C2AA02        JNZ    ??0011
  220.  028F+0E09          MVI    C,@MSG
  221.  0291+119A02        LXI    D,??0010
  222.  0294+CD0500        CALL    @BDOS
  223.  0297+C3F607        JMP    FILERR
  224.  029A+0D0A      ??0010:    DB    CR,LF
  225.  029C+4E4F204E41    DB    'NO NAMES FILE'
  226.  02A9+24            DB    '$'
  227.                     IF    NOT TEST
  228.                     FILE    OUTFILE,MASTOUT,,NEW,CAT,BSIZE
  229.  0002+=         MASTOUTTYP    EQU    OUTFILE
  230.  02AA+C3D402        JMP    ??0024
  231.  02AD+00            DB    0
  232.  02AE+4E            DB    'N'
  233.  02AF+45            DB    'E'
  234.  02B0+57            DB    'W'
  235.  02B1+20            DB    ' '
  236.  02B2+20            DB    ' '
  237.  02B3+20            DB    ' '
  238.  02B4+20            DB    ' '
  239.  02B5+20            DB    ' '
  240.  02B6+43            DB    'C'
  241.  02B7+41            DB    'A'
  242.  02B8+54            DB    'T'
  243.  02AD+=         FCBMASTOUT    EQU    $-12
  244.  02B9+00            DB    0
  245.  02BA+              DS    20
  246.  02CE+8534          DW    MASTOUTBUF
  247.  1400+=         MASTOUTSIZ    EQU    @BS
  248.  02D0+0014          DW    @BS
  249.  02D2+              DS    2
  250.  02D4+C35903        JMP    ??0017
  251.  02D7+F5            PUSH    PSW
  252.  02D8+2AD002        LHLD    MASTOUTLEN
  253.  02DB+EB            XCHG
  254.  02DC+2AD202        LHLD    MASTOUTPTR
  255.  02DF+7D            MOV    A,L
  256.  02E0+93            SUB    E
  257.  02E1+7C            MOV    A,H
  258.  02E2+9A            SBB    D
  259.  02E3+DA4903        JC    ??0023
  260.  02E6+210000        LXI    H,0
  261.  02E9+22D202        SHLD    MASTOUTPTR
  262.  02EC+EB            XCHG
  263.  02ED+2AD002        LHLD    MASTOUTLEN
  264.  02F0+7B            MOV    A,E
  265.  02F1+95            SUB    L
  266.  02F2+7A            MOV    A,D
  267.  02F3+9C            SBB    H
  268.  02F4+D23B03        JNC    ??0022
  269.  02F7+2ACE02        LHLD    MASTOUTADR
  270.  02FA+19            DAD    D
  271.  02FB+EB            XCHG
  272.  02FC+0E1A          MVI    C,@DMA
  273.  02FE+CD0500        CALL    @BDOS
  274.  0301+11AD02        LXI    D,FCBMASTOUT
  275.  0304+0E15          MVI    C,@FWR
  276.  0306+CD0500        CALL    @BDOS
  277.  0309+B7            ORA    A
  278.  030A+C21A03        JNZ    ??0021
  279.  030D+118000        LXI    D,@SECT
  280.  0310+2AD202        LHLD    MASTOUTPTR
  281.  0313+19            DAD    D
  282.  0314+22D202        SHLD    MASTOUTPTR
  283.  0317+C3EC02        JMP    ??0020
  284.  031A+0E09          MVI    C,@MSG
  285.  031C+112603        LXI    D,??0025
  286.  031F+CD0500        CALL    @BDOS
  287.  0322+F1            POP    PSW
  288.  0323+C3F607        JMP    FILERR
  289.  0326+0D0A      ??0025:    DB    CR,LF
  290.  0328+4449534B20    DB    'DISK FULL: MASTOUT'
  291.  033A+24            DB    '$'
  292.  033B+118000        LXI    D,@TBUF
  293.  033E+0E1A          MVI    C,@DMA
  294.  0340+CD0500        CALL    @BDOS
  295.  0343+210000        LXI    H,0
  296.  0346+22D202        SHLD    MASTOUTPTR
  297.  0349+EB            XCHG
  298.  034A+2ACE02        LHLD    MASTOUTADR
  299.  034D+19            DAD    D
  300.  034E+EB            XCHG
  301.  034F+F1            POP    PSW
  302.  0350+12            STAX    D
  303.  0351+2AD202        LHLD    MASTOUTPTR
  304.  0354+23            INX    H
  305.  0355+22D202        SHLD    MASTOUTPTR
  306.  0358+C9            RET
  307.  0359+AF            XRA    A
  308.  035A+32B902        STA    FCBMASTOUT+12
  309.  035D+32CD02        STA    FCBMASTOUT+32
  310.  0360+210014        LXI    H,MASTOUTSIZ
  311.  0363+22D002        SHLD    MASTOUTLEN
  312.  0366+210000        LXI    H,0
  313.  0369+22D202        SHLD    MASTOUTPTR
  314.  036C+0E13          MVI    C,@DEL
  315.  036E+11AD02        LXI    D,FCBMASTOUT
  316.  0371+CD0500        CALL    @BDOS
  317.  0374+0E16          MVI    C,@MAK
  318.  0376+11AD02        LXI    D,FCBMASTOUT
  319.  0379+CD0500        CALL    @BDOS
  320.  037C+3C            INR    A
  321.  037D+C2A303        JNZ    ??0019
  322.  0380+0E09          MVI    C,@MSG
  323.  0382+118B03        LXI    D,??0018
  324.  0385+CD0500        CALL    @BDOS
  325.  0388+C3F607        JMP    FILERR
  326.  038B+0D0A      ??0018:    DB    CR,LF
  327.  038D+4E4F204449    DB    'NO DIR SPACE: MASTOUT'
  328.  03A2+24            DB    '$'
  329.                     ENDIF
  330.                     FILE    SETFILE,BAK,,MAST,BAK
  331.  0003+=         BAKTYP    EQU    SETFILE
  332.  03A3+C3C703        JMP    ??0033
  333.  03A6+00            DB    0
  334.  03A7+4D            DB    'M'
  335.  03A8+41            DB    'A'
  336.  03A9+53            DB    'S'
  337.  03AA+54            DB    'T'
  338.  03AB+20            DB    ' '
  339.  03AC+20            DB    ' '
  340.  03AD+20            DB    ' '
  341.  03AE+20            DB    ' '
  342.  03AF+42            DB    'B'
  343.  03B0+41            DB    'A'
  344.  03B1+4B            DB    'K'
  345.  03A6+=         FCBBAK    EQU    $-12
  346.  03B2+00            DB    0
  347.  03B3+              DS    20
  348.                 ;
  349.                 ;SETUP THE FILES
  350.                 ;
  351.  03C7 CDD105    INITRD    CALL    READNA    ;READ NAMES FILE
  352.                 ;
  353.                 ;IF NAME IS $$$.SUB THEN SKIP IT
  354.                 ;
  355.                     COMPARE    NADAT,SUBNAME,12
  356.  03CA+060C          MVI    B,12
  357.  03CC+112D08        LXI    D,NADAT
  358.  03CF+217808        LXI    H,SUBNAME
  359.  03D2+CD4607        CALL    COMPR
  360.  03D5 CAC703        JZ    INITRD
  361.                 ;
  362.                 ;CHECK FOR '-DISKNAME' HAVING BEEN READ
  363.                 ;
  364.  03D8 3A2D08        LDA    NADAT
  365.  03DB FE2D          CPI    '-'
  366.  03DD CA6204        JZ    NAMEOK
  367.                 ;THE FOLLOWING CODE IS PATCHED VIA DISASSEMBLY
  368.  03E0 3A5D00        LDA    5DH
  369.  03E3 FE2D          CPI    '-'
  370.  03E5 C22604        JNZ    ERRXIT
  371.  03E8 3A6700        LDA    67H
  372.  03EB FE20          CPI    ' '
  373.  03ED C20D04        JNZ    NEWSUB
  374.  03F0 CDF007        CALL    MSGXIT
  375.  03F3 2B2B534552    DB    '++SERIAL MUST'
  376.  0400 2042452033    DB    ' BE 3 DIGITS$'
  377.                 ;
  378.  040D 0607      NEWSUB    MVI    B,7
  379.  040F 115E00        LXI    D,5EH
  380.  0412 213A08        LXI    H,DKNAME
  381.  0415 CD3D07        CALL    MOVER
  382.  0418 0603          MVI    B,3
  383.  041A 116500        LXI    D,65H
  384.  041D 214308        LXI    H,NEW
  385.  0420 CD3D07        CALL    MOVER
  386.  0423 C37804        JMP    NXT1
  387.                 ;
  388.  0426 CDF007    ERRXIT    CALL    MSGXIT
  389.  0429 2B2B4E4F20    DB    '++NO "-NAME.NNN" IN NAMES.SUB'
  390.  0446 0D0A2B2B52    DB    0DH,0AH,'++REISSUE: UCAT '
  391.  0458 2D6E616D65    DB    '-name.nnn$'
  392.                 ;    CALL    MSGXIT
  393.                 ;    DB    '++NO ''-NAME'' IN DIRECTORY$'
  394.                 ;
  395.                 NAMEOK    MOVE    NADAT+1,DKNAME,7
  396.  0462+0607          MVI    B,7
  397.  0464+112E08        LXI    D,NADAT+1
  398.  0467+213A08        LXI    H,DKNAME
  399.  046A+CD3D07        CALL    MOVER
  400.                     MOVE    NADAT+9,DKNAME+9,3
  401.  046D+0603          MVI    B,3
  402.  046F+113608        LXI    D,NADAT+9
  403.  0472+214308        LXI    H,DKNAME+9
  404.  0475+CD3D07        CALL    MOVER
  405.                 ;
  406.                 ;READ IN THE NAMES TO BE IGNORED (I.E. NOT
  407.                 ;CATALOGED).  THEY ARE AT THE FRONT OF MAST CAT.
  408.                 ;THEY ARE SIMPLY A LIST OF FILENAME.FILETYPE (CR/LF)
  409.                 ;WITH THE FIRST HAVING A ( BEFORE IT, AND THE
  410.                 ;LAST HAVING A ) AFTER IT.
  411.                 ;
  412.                 NXT1    GET    MASTIN    ;GET THE LEADING '('
  413.  0478+CD3401        CALL    GETMASTIN
  414.  047B CACD04        JZ    NOIGN    ;IF EOF
  415.  047E FE28          CPI    '('
  416.  0480 C2CD04        JNZ    NOIGN
  417.                     PUT    MASTOUT
  418.  0483+CDD702        CALL    PUTMASTOUT
  419.  0486 218408        LXI    H,IGNORE ;POINT TO BUFFER
  420.  0489 010004        LXI    B,IGNSIZE ;FOR BUFFER OVERFLOW TEST
  421.  048C C5        IGNRD    PUSH    B
  422.  048D E5            PUSH    H
  423.                     GET    MASTIN
  424.  048E+CD3401        CALL    GETMASTIN
  425.  0491 CAEE04        JZ    IGNEOF    ;UNEXPECTED EOF
  426.  0494 F5            PUSH    PSW    ;SAVE CHAR
  427.                     PUT    MASTOUT
  428.  0495+CDD702        CALL    PUTMASTOUT
  429.  0498 F1            POP    PSW
  430.  0499 E1            POP    H
  431.  049A C1            POP    B
  432.  049B 77            MOV    M,A
  433.  049C 23            INX    H
  434.  049D FE29          CPI    ')'
  435.  049F CA3405        JZ    IGNEND    ;TABLE IS LOADED
  436.  04A2 0B            DCX    B    ;MORE ROOM IN TABLE?
  437.  04A3 78            MOV    A,B
  438.  04A4 B1            ORA    C
  439.  04A5 C28C04        JNZ    IGNRD
  440.                 ;TABLE OVERFLOW
  441.  04A8 CDF007        CALL    MSGXIT
  442.  04AB 2B2B544F4F    DB    '++TOO MANY IGNORE NAMES FOR TABLE$'
  443.  04CD CDF007    NOIGN    CALL    MSGXIT
  444.  04D0 2B2B4E4F20    DB    '++NO IGNORE NAMES IN MAST.CAT$'
  445.  04EE CDF007    IGNEOF    CALL    MSGXIT
  446.  04F1 2B2B454F46    DB    '++EOF READING FOR IGNORE NAMES.'
  447.  0510 0D0A4D4159    DB    0DH,0AH,'MAY BE MISSING ) AFTER LAST NAME.$'
  448.                 IGNEND    GET    MASTIN
  449.  0534+CD3401        CALL    GETMASTIN
  450.  0537 CAEE04        JZ    IGNEOF
  451.  053A F5            PUSH    PSW
  452.                     PUT    MASTOUT
  453.  053B+CDD702        CALL    PUTMASTOUT
  454.  053E F1            POP    PSW
  455.  053F FE0A          CPI    0AH
  456.  0541 C23405        JNZ    IGNEND    ;DELETE CR/LF
  457.  0544 C34A05        JMP    MASTLP
  458.                 ;PRIME THE BUFFERS
  459.                 ;
  460.  0547 CDD105    NAMELP    CALL    READNA    ;READ NAME INTO NADAT
  461.  054A CD6506    MASTLP    CALL    READMI    ;READ MASTER INTO MIDAT
  462.                 ;IF EOF ON BOTH FILES, WE ARE ALL DONE
  463.  054D 3A2B08    COMPLP    LDA    NAEOFLG    ;NAME FILE EOF?
  464.  0550 B7            ORA    A
  465.  0551 CA5B05        JZ    NOTEOF    ;..NO
  466.  0554 3A2C08        LDA    MIEOFLG    ;MASTER IN EOF?
  467.  0557 B7            ORA    A
  468.  0558 C25007        JNZ    ALLDONE    ;YES, THAT'S IT.
  469.                 NOTEOF    COMPARE    NADAT,MIDAT,25
  470.  055B+0619          MVI    B,25
  471.  055D+112D08        LXI    D,NADAT
  472.  0560+214608        LXI    H,MIDAT
  473.  0563+CD4607        CALL    COMPR
  474.  0566 CAC005        JZ    EQUAL
  475.  0569 DA9D05        JC    WRITEN
  476.                 ;
  477.                 ;MASTER IS LOWER - WRITE IT IF FOR ANOTHER DISK
  478.                 ;
  479.                     COMPARE    MIDSK,DKNAME,12 ;SAME DISK?
  480.  056C+060C          MVI    B,12
  481.  056E+115308        LXI    D,MIDSK
  482.  0571+213A08        LXI    H,DKNAME
  483.  0574+CD4607        CALL    COMPR
  484.  0577 CA8B05        JZ    DELMI    ;DELETING MIDAT
  485.                     MOVE    MIDAT,MODAT,25
  486.  057A+0619          MVI    B,25
  487.  057C+114608        LXI    D,MIDAT
  488.  057F+215F08        LXI    H,MODAT
  489.  0582+CD3D07        CALL    MOVER
  490.  0585 CDCE06        CALL    WRITEMO
  491.  0588 C34A05        JMP    MASTLP
  492.                 ;
  493.                 ;DELETE MASTER IN
  494.                 ;
  495.  058B 119705    DELMI    LXI    D,DELMSG
  496.  058E 214608        LXI    H,MIDAT
  497.  0591 CD0807        CALL    MESG
  498.  0594 C34A05        JMP    MASTLP
  499.  0597 44454C3A20DELMSG    DB    'DEL: $'
  500.                 ;
  501.                 ;NAME IS LOWER - WRITE IT
  502.                 ;
  503.                 WRITEN    MOVE    NADAT,MODAT,25
  504.  059D+0619          MVI    B,25
  505.  059F+112D08        LXI    D,NADAT
  506.  05A2+215F08        LXI    H,MODAT
  507.  05A5+CD3D07        CALL    MOVER
  508.  05A8 CDCE06        CALL    WRITEMO
  509.                 ;
  510.                 ;PRINT THAT NAME WAS ADDED
  511.                 ;
  512.  05AB 11BA05        LXI    D,ADDMSG
  513.  05AE 212D08        LXI    H,NADAT
  514.  05B1 CD0807        CALL    MESG
  515.  05B4 CDD105        CALL    READNA    ;READ NEXT NAME
  516.  05B7 C34D05        JMP    COMPLP
  517.  05BA 4144443A20ADDMSG    DB    'ADD: $'
  518.                 ;
  519.                 ;BOTH FILES EQUAL
  520.                 ;
  521.                 EQUAL    MOVE    MIDAT,MODAT,25
  522.  05C0+0619          MVI    B,25
  523.  05C2+114608        LXI    D,MIDAT
  524.  05C5+215F08        LXI    H,MODAT
  525.  05C8+CD3D07        CALL    MOVER
  526.  05CB CDCE06        CALL    WRITEMO    ;WRITE OUT MASTER
  527.  05CE C34705        JMP    NAMELP    ;READ BOTH
  528.                 ;
  529.                 ;READ NAME FILE
  530.                 ;
  531.  05D1 212D08    READNA    LXI    H,NADAT
  532.  05D4 0608          MVI    B,8
  533.  05D6 CD1A06        CALL    READNAC    ;READ CHARACTERS
  534.  05D9 362E          MVI    M,'.'
  535.  05DB 23            INX    H
  536.  05DC 0603          MVI    B,3    ;TYPE LENGTH
  537.  05DE CD1A06        CALL    READNAC
  538.  05E1 362C          MVI    M,','
  539.                 ;
  540.                 ;IF THIS IS A NAME NOT TO BE CATALOGED,
  541.                 ;READ THE NEXT
  542.                 ;
  543.  05E3 118408        LXI    D,IGNORE    ;GET IGNORE TABLE
  544.  05E6 212D08    IGNLP    LXI    H,NADAT
  545.  05E9 060C          MVI    B,12    ;# OF CHARS TO MATCH
  546.  05EB 1A        IGNCLP    LDAX    D    ;GET IGNORE CHAR INTO A
  547.  05EC FE3F          CPI    '?'    ;IS IT WILDCARD?
  548.  05EE CA0806        JZ    IGNMAT    ;IF SO, CONSIDER MATCHED
  549.  05F1 BE            CMP    M    ;IS IT THE SAME?
  550.  05F2 CA0806        JZ    IGNMAT    ;YES, MATCHED
  551.  05F5 7E            MOV    A,M    ;GET CHAR
  552.  05F6 FE20          CPI    ' '    ;SPACE?
  553.  05F8 CA1106        JZ    IGNMAT1    ;MATCH NOT NECESSARY
  554.                 ; THE PREVIOUS CODE FAILED WITH AN FCB OF THE FORM DUMMY
  555.                 ; (W/O .EXT), AS THE BLANKS WERE NOT REQUIRED TO
  556.                 ; MATCH IN THE EXTENSION
  557.                 ; FIX: ENSURE THAT IF THE BLANK SKIP PATH IS FOLLOWED
  558.                 ;      THAT THE CHARACTER COUNT IS NOT 9
  559.                 ;
  560.                 ;GET NEXT ENTRY
  561.                 ;
  562.  05FB 1A        IGNEXTE    LDAX    D
  563.  05FC 13            INX    D
  564.  05FD FE29          CPI    ')'    ;END OF TABLE?
  565.  05FF C8            RZ        ;..YES, RETURN
  566.  0600 FE0A          CPI    0AH    ;NEXT LINE?
  567.  0602 C2FB05        JNZ    IGNEXTE
  568.  0605 C3E605        JMP    IGNLP
  569.                 ;
  570.                 ;CHAR MATCHED
  571.                 ;
  572.  0608 13        IGNMAT    INX    D    ;SKIP MATCH CHAR
  573.  0609 23        IGNMAT2    INX    H
  574.  060A 05            DCR    B
  575.  060B C2EB05        JNZ    IGNCLP    ;LOOP UNTIL DONE
  576.                 ;
  577.                 ;NAME IS TO BE DELETED
  578.                 ;
  579.  060E C3D105        JMP    READNA    ;READ NEXT NAME
  580.                 ;
  581.                 ; CHECK IF CHARACTER COUNT IS 9 ( .EXT)
  582.  0611 78        IGNMAT1    MOV    A,B    ;FETCH COUNT
  583.  0612 FE03          CPI    3
  584.  0614 CAFB05        JZ    IGNEXTE ;IF 9, DONT SKIP
  585.  0617 C30906        JMP    IGNMAT2
  586.                 ;
  587.                 ;READ CHARACTERS INTO NAME BUFFER
  588.                 ;
  589.  061A 3A2B08    READNAC    LDA    NAEOFLG    ;EOF ON NAMES?
  590.  061D B7            ORA    A
  591.  061E C25806        JNZ    NAEOF    ;YES, PAD W/0FFH
  592.  0621 E5            PUSH    H
  593.  0622 C5            PUSH    B
  594.                 GETNA    GET    NAMES
  595.  0623+CD0602        CALL    GETNAMES
  596.  0626 FE0A          CPI    0AH
  597.  0628 CA2306        JZ    GETNA    ;IGNORE LF
  598.  062B C1            POP    B
  599.  062C E1            POP    H
  600.  062D FE2E          CPI    '.'    ;END?
  601.  062F CA5006        JZ    NAEND
  602.  0632 FE0D          CPI    0DH    ;END?
  603.  0634 CA5006        JZ    NAEND
  604.  0637 FE1A          CPI    'Z'-40H    ;EOF?
  605.  0639 CA5806        JZ    NAEOF
  606.  063C 77            MOV    M,A
  607.  063D 23            INX    H
  608.  063E 05            DCR    B
  609.  063F C21A06        JNZ    READNAC
  610.  0642 C5            PUSH    B
  611.  0643 E5            PUSH    H
  612.                     GET    NAMES    ;KILL DELIMITER CHAR
  613.  0644+CD0602        CALL    GETNAMES
  614.  0647 E1            POP    H
  615.  0648 C1            POP    B
  616.  0649 FE1A          CPI    'Z'-40H    ;EOF?
  617.  064B C0            RNZ
  618.  064C 322B08        STA    NAEOFLG
  619.  064F C9            RET
  620.  0650 3620      NAEND    MVI    M,' '
  621.  0652 23            INX    H
  622.  0653 05            DCR    B
  623.  0654 C25006        JNZ    NAEND
  624.  0657 C9            RET
  625.  0658 36FF      NAEOF    MVI    M,0FFH
  626.  065A 23            INX    H
  627.  065B 05            DCR    B
  628.  065C C25806        JNZ    NAEOF
  629.  065F 3E01          MVI    A,1
  630.  0661 322B08        STA    NAEOFLG
  631.  0664 C9            RET
  632.                 ;
  633.                 ;READ MASTER IN NAME
  634.                 ;
  635.  0665 214608    READMI    LXI    H,MIDAT
  636.  0668 CD7206        CALL    MINAME    ;GET FILE NAME
  637.  066B 362C          MVI    M,','    ;SEPARATOR
  638.  066D 23            INX    H
  639.  066E CD7206        CALL    MINAME    ;GET DISK NAME
  640.  0671 C9            RET
  641.                 ;
  642.                 ;READ MASTER IN, 1 FIELD
  643.                 ;
  644.  0672 0608      MINAME    MVI    B,8
  645.  0674 CD8006        CALL    READMIC    ;GET CHARS
  646.  0677 362E          MVI    M,'.'
  647.  0679 23            INX    H
  648.  067A 0603          MVI    B,3
  649.  067C CD8006        CALL    READMIC    ;GET TYPE
  650.  067F C9            RET
  651.                 ;
  652.                 ;READ CHARS INTO MASTER NAME
  653.                 ;
  654.  0680 3A2C08    READMIC    LDA    MIEOFLG
  655.  0683 B7            ORA    A
  656.  0684 C2C306        JNZ    MIEOF
  657.  0687 E5            PUSH    H
  658.  0688 C5            PUSH    B
  659.                 GETMI    GET    MASTIN
  660.  0689+CD3401        CALL    GETMASTIN
  661.  068C FE0A          CPI    0AH    ;IGNORE LF
  662.  068E CA8906        JZ    GETMI    ;L/F'S
  663.  0691 C1            POP    B
  664.  0692 E1            POP    H
  665.  0693 FE2C          CPI    ','
  666.  0695 CABB06        JZ    MIEND
  667.  0698 FE2E          CPI    '.'
  668.  069A CABB06        JZ    MIEND
  669.  069D FE0D          CPI    0DH
  670.  069F CABB06        JZ    MIEND
  671.  06A2 FE1A          CPI    'Z'-40H    ;EOF?
  672.  06A4 CAC306        JZ    MIEOF
  673.  06A7 77            MOV    M,A
  674.  06A8 23            INX    H
  675.  06A9 05            DCR    B
  676.  06AA C28006        JNZ    READMIC
  677.  06AD C5            PUSH    B
  678.  06AE E5            PUSH    H
  679.                     GET    MASTIN    ;GET DELIMITER
  680.  06AF+CD3401        CALL    GETMASTIN
  681.  06B2 E1            POP    H
  682.  06B3 C1            POP    B
  683.  06B4 FE1A          CPI    'Z'-40H    ;EOF?
  684.  06B6 C0            RNZ
  685.  06B7 322C08        STA    MIEOFLG
  686.  06BA C9            RET
  687.  06BB 3620      MIEND    MVI    M,' '
  688.  06BD 23            INX    H
  689.  06BE 05            DCR    B
  690.  06BF C2BB06        JNZ    MIEND
  691.  06C2 C9            RET
  692.  06C3 36FF      MIEOF    MVI    M,0FFH
  693.  06C5 23            INX    H
  694.  06C6 05            DCR    B
  695.  06C7 C2C306        JNZ    MIEOF
  696.  06CA 322C08        STA    MIEOFLG    ;SHOW EOF
  697.  06CD C9            RET
  698.                 ;
  699.                 ;WRITE AN ENTRY TO MASTER OUT
  700.                 ;ALSO BUMP COUNT OF ENTRIES WRITTEN
  701.                 ;
  702.  06CE 21E507    WRITEMO    LXI    H,COUNT+3
  703.  06D1 7E        BUMP    MOV    A,M    ;GET COUNT DIGIT
  704.  06D2 FE20          CPI    ' '
  705.  06D4 C2D906        JNZ    BUMPNB
  706.  06D7 3E30          MVI    A,'0'
  707.  06D9 3C        BUMPNB    INR    A
  708.  06DA 77            MOV    M,A
  709.  06DB FE3A          CPI    '9'+1    ;TIME TO CARRY?
  710.  06DD C2E606        JNZ    BUMPD    ;..NO, DONE
  711.  06E0 3630          MVI    M,'0'
  712.  06E2 2B            DCX    H
  713.  06E3 C3D106        JMP    BUMP
  714.  06E6 215F08    BUMPD    LXI    H,MODAT
  715.  06E9 0619          MVI    B,25
  716.  06EB 7E        WRMOL    MOV    A,M
  717.  06EC FE20          CPI    ' '    ;NULL CHAR?
  718.  06EE CAF806        JZ    WRSKIP
  719.  06F1 C5            PUSH    B
  720.  06F2 E5            PUSH    H
  721.                     IF    NOT TEST
  722.                     PUT    MASTOUT
  723.  06F3+CDD702        CALL    PUTMASTOUT
  724.                     ELSE
  725.                     PUT    CON
  726.                     ENDIF
  727.  06F6 E1            POP    H
  728.  06F7 C1            POP    B
  729.  06F8 23        WRSKIP    INX    H    ;POINT TO NEXT CHAR
  730.  06F9 05            DCR    B
  731.  06FA C2EB06        JNZ    WRMOL    ;LOOP UNTIL DONE
  732.  06FD 3E0D          MVI    A,0DH
  733.                     IF    NOT TEST
  734.                     PUT    MASTOUT
  735.  06FF+CDD702        CALL    PUTMASTOUT
  736.                     ELSE
  737.                     PUT    CON
  738.                     ENDIF
  739.  0702 3E0A          MVI    A,0AH
  740.                     IF    NOT TEST
  741.                     PUT    MASTOUT
  742.  0704+CDD702        CALL    PUTMASTOUT
  743.                     ELSE
  744.                     PUT    CON
  745.                     ENDIF
  746.  0707 C9            RET
  747.                 ;
  748.                 ;PRINT MESSAGE IN DE, THEN NAME IN HL
  749.                 ;
  750.  0708 E5        MESG    PUSH    H
  751.  0709 0E09          MVI    C,@MSG
  752.  070B CD0500        CALL    @BDOS
  753.  070E E1            POP    H
  754.  070F 060C          MVI    B,12    ;NAME + '.' + TYPE
  755.  0711 E5        MESGL    PUSH    H
  756.  0712 C5            PUSH    B
  757.  0713 7E            MOV    A,M    ;GET CHAR
  758.  0714 FE20          CPI    ' '
  759.  0716 CA2107        JZ    MESGS    ;SKIP IF ' '
  760.                     PUT    CON
  761.  0719+F5            PUSH    PSW
  762.  071A+0E02          MVI    C,@CON
  763.  071C+5F            MOV    E,A
  764.  071D+CD0500        CALL    @BDOS
  765.  0720+F1            POP    PSW
  766.  0721 C1        MESGS    POP    B
  767.  0722 E1            POP    H
  768.  0723 23            INX    H
  769.  0724 05            DCR    B
  770.  0725 C21107        JNZ    MESGL
  771.  0728 3E0D          MVI    A,0DH
  772.                     PUT    CON
  773.  072A+F5            PUSH    PSW
  774.  072B+0E02          MVI    C,@CON
  775.  072D+5F            MOV    E,A
  776.  072E+CD0500        CALL    @BDOS
  777.  0731+F1            POP    PSW
  778.  0732 3E0A          MVI    A,0AH
  779.                     PUT    CON
  780.  0734+F5            PUSH    PSW
  781.  0735+0E02          MVI    C,@CON
  782.  0737+5F            MOV    E,A
  783.  0738+CD0500        CALL    @BDOS
  784.  073B+F1            POP    PSW
  785.  073C C9            RET
  786.                 ;
  787.                 ;MOVE SUBROUTINE (DE)=>(HL), LEN IN (B)
  788.                 ;
  789.  073D 1A        MOVER    LDAX    D
  790.  073E 77            MOV    M,A
  791.  073F 13            INX    D
  792.  0740 23            INX    H
  793.  0741 05            DCR    B
  794.  0742 C23D07        JNZ    MOVER
  795.  0745 C9            RET
  796.                 ;
  797.                 ;COMPARE ROUTINE (DE)<=>(HL), LENGTH IN B
  798.                 ;
  799.  0746 1A        COMPR    LDAX    D
  800.  0747 BE            CMP    M
  801.  0748 C0            RNZ        ;RET W/NON ZERO SET
  802.  0749 13            INX    D
  803.  074A 23            INX    H
  804.  074B 05            DCR    B
  805.  074C C24607        JNZ    COMPR
  806.  074F C9            RET        ;ZERO SET, SHOWS =
  807.                 ;
  808.                 ;ALL DONE - WRITE EOF TO OUTPUT, RETURN
  809.                 ;
  810.  0750 =         ALLDONE    EQU    $
  811.  0750 3E1A          MVI    A,'Z'-40H ;EOF CHAR
  812.                     IF    NOT TEST
  813.                     PUT    MASTOUT
  814.  0752+CDD702        CALL    PUTMASTOUT
  815.                     FINIS    MASTOUT
  816.  0755+2AD202        LHLD    MASTOUTPTR
  817.  0758+7D            MOV    A,L
  818.  0759+E67F          ANI    (@SECT-1) AND 0FFH
  819.  075B+C26107        JNZ    ??0035
  820.  075E+22D002        SHLD    MASTOUTLEN
  821.  0761+3E1A      ??0035:    MVI    A,EOF
  822.  0763+F5            PUSH    PSW
  823.  0764+CDD702        CALL    PUTMASTOUT
  824.  0767+F1            POP    PSW
  825.  0768+C25507        JNZ    ??0034
  826.  076B+0E10          MVI    C,@CLS
  827.  076D+11AD02        LXI    D,FCBMASTOUT
  828.  0770+CD0500        CALL    @BDOS
  829.  0773+3C            INR    A
  830.  0774+C29907        JNZ    ??0037
  831.  0777+0E09          MVI    C,@MSG
  832.  0779+118207        LXI    D,??0036
  833.  077C+CD0500        CALL    @BDOS
  834.  077F+C39907        JMP    ??0037
  835.  0782+0D0A      ??0036:    DB    CR,LF
  836.  0784+43414E4E4F    DB    'CANNOT CLOSE MASTOUT'
  837.  0798+24            DB    '$'
  838.                     ENDIF
  839.                 ;
  840.                 ;RUN WAS SUCCESSFUL - SET FINAL FILE DISPOSITIONS
  841.                 ;
  842.                     ERASE    BAK        ;ERA CAT.BAK
  843.  0799+0E13          MVI    C,@DEL
  844.  079B+11A603        LXI    D,FCBBAK
  845.  079E+CD0500        CALL    @BDOS
  846.                     ERASE    NAMES        ;ERA NAMES.SUB
  847.  07A1+0E13          MVI    C,@DEL
  848.  07A3+11DC01        LXI    D,FCBNAMES
  849.  07A6+CD0500        CALL    @BDOS
  850.                     RENAME    BAK,MASTIN    ;REN MAST.BAK=MAST.CAT
  851.  07A9+C3C007        JMP    ??0038
  852.  07AC+E5            PUSH    H
  853.  07AD+011000        LXI    B,16
  854.  07B0+09            DAD    B
  855.  07B1+1A        ??0039:    LDAX    D
  856.  07B2+77            MOV    M,A
  857.  07B3+13            INX    D
  858.  07B4+23            INX    H
  859.  07B5+0D            DCR    C
  860.  07B6+C2B107        JNZ    ??0039
  861.  07B9+D1            POP    D
  862.  07BA+0E17          MVI    C,@REN
  863.  07BC+CD0500        CALL    @BDOS
  864.  07BF+C9            RET
  865.  07C0+210A01        LXI    H,FCBMASTIN
  866.  07C3+11A603        LXI    D,FCBBAK
  867.  07C6+CDAC07        CALL    @RENS
  868.                     RENAME    MASTIN,MASTOUT    ;REN MAST.CAT=MAST.NEW
  869.  07C9+21AD02        LXI    H,FCBMASTOUT
  870.  07CC+110A01        LXI    D,FCBMASTIN
  871.  07CF+CDAC07        CALL    @RENS
  872.  07D2 CDF007        CALL    MSGXIT
  873.  07D5 4D4153542E    DB    'MAST.CAT HAS '
  874.  07E2 2020202020COUNT    DB    '     ENTRIES.$'
  875.                 ;
  876.  07F0 D1        MSGXIT    POP    D    ;GET MSG
  877.  07F1 0E09          MVI    C,@MSG
  878.  07F3 CD0500        CALL    @BDOS
  879.  07F6 C30000    EXIT    JMP    $-$    ;TO CP/M RETURN ADDR
  880.  07F9               DS    32H    ;STACK SPACE
  881.  082B =         STACK    EQU    $
  882.  082B 00        NAEOFLG    DB    0    ;NAME FILE EOF FLAG
  883.  082C 00        MIEOFLG    DB    0    ;MASTER IN EOF FLAG
  884.  082D 5858585858NADAT    DB    'XXXXXXXX.YYY,'
  885.                 ;DKNAME    DB    '        .   '
  886.  083A 2020202020DKNAME    DB    '        .'
  887.  0843 202020    NEW    DB    '   '
  888.  0846 5858585858MIDAT    DB    'XXXXXXXX.YYY,'
  889.  0853 5858585858MIDSK    DB    'XXXXXXXX.YYY'
  890.  085F 5858585858MODAT    DB    'XXXXXXXX.YYY,XXXXXXXX.YYY'
  891.  0878 2424242020SUBNAME    DB    '$$$     .SUB'
  892.                 ;NAMES TO BE IGNORED READ IN HERE:
  893.  0884 29        IGNORE    DB    ')'    ;DUMMY END OF TABLE
  894.  0885               DS    IGNSIZE
  895.  0C85 =         BUFFERS    EQU    $
  896.  4885 =         MEMSIZE    EQU    BUFFERS+@NXTB
  897.