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

  1.                 ; WARD CHRISTENSON'S FMAP FROM CP/M UG VOL 8
  2.                 ; MODIFIED BY TREVOR MARSHALL
  3.                 ;        UNI W A
  4.                 ;        DEPT ELEC ENG
  5.                 ; TO REFLECT HIS MODIFICATIONS ON THE 
  6.                 ;    CACHE T7 DISK
  7.                 ; AND TO ALLOW COMPATIBILITY WITH CDOS
  8.                 ;    (UP TO 512 ENTRIES)
  9.                 ;
  10.  0100               ORG    100H
  11.                 ;    JMP    START    ;SKIP PROGRAM ID
  12.  0100 CD1C01        CALL    START
  13.  0103 43444F5320ID:    DB    'CDOS 2.35 FMAP Sept 80',0DH,0AH,'$' 
  14.                 ;SORTED DIRECTORY MAP PROGRAM
  15.                 ;WITH OPTION OF WRITING FILE OF NAMES
  16.                 ;
  17.                 ;FMAP FN.FT OR JUST MAP
  18.                 ;FMAP FN.FT F   TO WRITE A FILE
  19.                 ;ALLOWS '*' OR '?' TYPE SPECIFICATIONS
  20.  005C =         FCB    EQU    5CH    ;SYSTEM FCB
  21.                 ;SAVE THE STACK
  22.  011C D1        START    POP    D
  23.  011D 0E09          MVI    C,9
  24.  011F CD0500        CALL    BDOS
  25.  0122 210000        LXI    H,0
  26.  0125 39            DAD    SP    ;H=STACK
  27.  0126 227204        SHLD    STACK    ;SAVE IT
  28.  0129 317204        LXI    SP,STACK ;GET NEW STACK
  29.                 ;SAVE FILE WRITE REQUEST CHAR
  30.  012C 3A6D00        LDA    FCB+17
  31.  012F 327B04        STA    FILESW
  32.                 ;NO FCB SPECIFIED?
  33.  0132 215D00        LXI    H,FCB+1
  34.  0135 7E            MOV    A,M
  35.  0136 FE20          CPI    ' '
  36.  0138 C24401        JNZ    GOTFCB
  37.                 ;NO FCB - MAKE FCB ALL '?'
  38.  013B 060B          MVI    B,11    ;FN+FT COUNT
  39.  013D 363F      QLOOP    MVI    M,'?'    ;STORE '?' IN FCB
  40.  013F 23            INX    H
  41.  0140 05            DCR    B
  42.  0141 C23D01        JNZ    QLOOP
  43.                 ;MOD #2
  44.  0144 3E3F      GOTFCB    MVI    A,'?'
  45.  0146 326800        STA    68H
  46.                 ;LOOK UP THE FCB IN THE DIRECTORY
  47.  0149 0E11          MVI    C,FSRCHF ;GET 'SEARCH FIRST' FNC
  48.  014B 115C00        LXI    D,FCB
  49.  014E CD0500        CALL    BDOS    ;READ FIRST
  50.  0151 3C            INR    A    ;WERE THERE ANY?
  51.  0152 32BA03        STA    TEMP    ;SAVE
  52.  0155 C27A01        JNZ    PRTTL1    ;GOT SOME - PRT TITLE, CONT
  53.  0158 116101        LXI    D,NONMSG
  54.  015B CD7003        CALL    WRCON
  55.  015E C3C603        JMP    EXIT
  56.  0161 2A2A2A204ENONMSG    DB    '*** No Entries Found ***$'
  57.                 ; MOD #3
  58.  017A 3A7B04    PRTTL1    LDA    FILESW
  59.  017D FE51          CPI    'Q'
  60.  017F CA9501        JZ    JMP1
  61.  0182 FE44          CPI    'D'
  62.  0184 CA9501        JZ    JMP1
  63.  0187 FE4D          CPI    'M'
  64.  0189 CA9501        JZ    JMP1
  65.                 ;PRINT TITLE
  66.  018C 119B01    PRTTL    LXI    D,TTL
  67.  018F CD7003        CALL    WRCON
  68.  0192 CDAF03        CALL    CR
  69.  0195 3ABA03    JMP1:    LDA    TEMP    ;RELOAD EXTENT
  70.  0198 C3CB01        JMP    SOME
  71.  019B 46494C454ETTL    DB    'FILENAME TYP EX RC -----EXTENT-----$'
  72.                 ;READ MORE DIRECTORY ENTRIES
  73.  01BF 0E12      MOREDIR    MVI    C,FSRCHN ;SEARCH NEXT
  74.  01C1 115C00        LXI    D,FCB
  75.  01C4 CD0500        CALL    BDOS    ;READ DIR ENTRY
  76.  01C7 3C            INR    A    ;CHECK FOR END (0FFH)
  77.  01C8 CAF301        JZ    SPRINT    ;NO MORE - SORT & PRINT
  78.                 ;POINT TO DIRECTORY ENTRY 
  79.  01CB 3D        SOME    DCR    A    ;UNDO PREV 'INR A'
  80.  01CC E603          ANI    3    ;MAKE MODULUS 4
  81.  01CE 87            ADD    A    ;MULTIPLY...
  82.  01CF 87            ADD    A    ;..BY 32 BECAUSE
  83.  01D0 87            ADD    A    ;..EACH DIRECTORY
  84.  01D1 87            ADD    A    ;..ENTRY IS 32
  85.  01D2 87            ADD    A    ;..BYTES LONG
  86.  01D3 218100        LXI    H,81H    ;POINT TO BUFFER
  87.                             ;(SKIP TO FN/FT)
  88.  01D6 85            ADD    L    ;POINT TO ENTRY
  89.  01D7 6F            MOV    L,A    ;SAVE (CAN'T CARRY TO H)
  90.                 ;MOVE ENTRY TO TABLE
  91.  01D8 EB            XCHG        ;ENTRY TO DE
  92.  01D9 2A7504        LHLD    NEXTT    ;NEXT TABLE ENTRY TO HL
  93.  01DC 061F          MVI    B,31    ;ENTRY LENGTH
  94.  01DE 1A        TMOVE    LDAX    D    ;GET ENTRY CHAR
  95.  01DF 77            MOV    M,A    ;STORE IN TABLE
  96.  01E0 13            INX    D
  97.  01E1 23            INX    H
  98.  01E2 05            DCR    B    ;MORE?
  99.  01E3 C2DE01        JNZ    TMOVE
  100.  01E6 227504        SHLD    NEXTT    ;SAVE UPDATED TABLE ADDR
  101.  01E9 3A7804        LDA    COUNT    ;GET PREV COUNT
  102.  01EC 3C            INR    A
  103.  01ED 327804        STA    COUNT
  104.  01F0 C3BF01        JMP    MOREDIR
  105.                 ;SORT AND PRINT
  106.  01F3 3A7804    SPRINT    LDA    COUNT    ;INIT THE ORDER TABLE
  107.  01F6 219F04        LXI    H,ORDER
  108.  01F9 119F08        LXI    D,TABLE
  109.  01FC 011F00        LXI    B,31    ;ENTRY LENGTH
  110.  01FF 73        BLDORD    MOV    M,E    ;SAVE LO ORD ADDR
  111.  0200 23            INX    H
  112.  0201 72            MOV    M,D    ;SAVE HI ORD ADDR
  113.  0202 23            INX    H
  114.  0203 EB            XCHG        ;TABLE ADDR TO HL
  115.  0204 09            DAD    B    ;POINT TO NEXT ENTRY
  116.  0205 EB            XCHG
  117.  0206 3D            DCR    A    ;MORE?
  118.  0207 C2FF01        JNZ    BLDORD    ;..YES
  119.  020A 3A7804        LDA    COUNT    ;GET COUNT
  120.  020D 327904        STA    SCOUNT    ;SAVE AS # TO SORT
  121.  0210 3D            DCR    A    ;ONLY 1 ENTRY?
  122.  0211 CA4102        JZ    DONE    ;..YES, SO SKIP SORT
  123.  0214 AF        SORT    XRA    A    ;GET A ZERO
  124.  0215 327A04        STA    SWITCH    ;SHOW NONE SWITCHED
  125.  0218 3A7904        LDA    SCOUNT    ;GET COUNT
  126.  021B 3D            DCR    A    ;USE 1 LESS
  127.  021C 32BA03        STA    TEMP    ;SAVE # TO COMPARE
  128.  021F 327904        STA    SCOUNT    ;SAVE HIGHEST ENTRY
  129.  0222 CA4102        JZ    DONE    ;EXIT IF NO MORE
  130.  0225 219F04        LXI    H,ORDER ;POINT TO ORDER TABLE
  131.  0228 CD2E04    SORTLP    CALL    COMPR    ;COMPARE 2 ENTRIES
  132.  022B FC4004        CM    SWAP    ;SWAP IF NOT IN ORDER
  133.  022E 23            INX    H    ;BUMP ORDER
  134.  022F 23            INX    H    ;..TABLE POINTER
  135.  0230 3ABA03        LDA    TEMP    ;GET COUNT
  136.  0233 3D            DCR    A
  137.  0234 32BA03        STA    TEMP
  138.  0237 C22802        JNZ    SORTLP    ;CONTINUE
  139.                 ;ONE PASS OF SORT DONE
  140.  023A 3A7A04        LDA    SWITCH    ;ANY SWAPS DONE?
  141.  023D B7            ORA    A
  142.  023E C21402        JNZ    SORT
  143.                 ;SORT IS ALL DONE - PRINT ENTRIES
  144.  0241 219F04    DONE    LXI    H,ORDER
  145.  0244 227504        SHLD    NEXTT
  146.                 ; MOD #4
  147.  0247 3A7B04        LDA    FILESW
  148.  024A FE20          CPI    ' '
  149.  024C CA7802        JZ    ENTRY
  150.                 ;IF WRITING A FILE, OPEN THE FILE
  151.                 ;    LDA    FILESW
  152.                 ;    CPI    'F'
  153.                 ;    JNZ    ENTRY
  154.  024F 117E04        LXI    D,MYFCB
  155.  0252 0E13          MVI    C,ERASE
  156.  0254 CD0500        CALL    BDOS
  157.  0257 117E04        LXI    D,MYFCB
  158.  025A 0E16          MVI    C,FMAKE    ;MAKE THE FILE
  159.  025C CD0500        CALL    BDOS
  160.  025F 3C            INR    A
  161.  0260 C27802        JNZ    ENTRY
  162.                 ;MAKE ERROR
  163.  0263 CDBB03        CALL    ERXIT
  164.  0266 2B2B46494C    DB    '++FILE MAKE ERROR$'
  165.                 ;PRINT AN ENTRY
  166.  0278 0E0B      ENTRY    MVI    C,CONST    ;CK STATUS OF KB
  167.  027A CD0500        CALL    BDOS    ;ANY KEY PRESSED?
  168.  027D 3D            DCR    A
  169.  027E CAC103        JZ    ABORT    ;YES, ABORT
  170.  0281 2A7504        LHLD    NEXTT    ;GET ORDER TABLE POINTER
  171.  0284 5E            MOV    E,M    ;GET LO ADDR
  172.  0285 23            INX    H
  173.  0286 56            MOV    D,M    ;GET HI ADDR
  174.  0287 23            INX    H
  175.  0288 227504        SHLD    NEXTT    ;SAVE UPDATED TABLE POINTER
  176.                 ; MOD #5
  177.  028B 210B00        LXI    H,0BH
  178.  028E 19            DAD    D
  179.  028F 7E            MOV    A,M
  180.  0290 327704        STA    NEWONE
  181.  0293 EB            XCHG        ;TABLE ENTRY TO HL
  182.  0294 3A7B04        LDA    FILESW
  183.  0297 FE44          CPI    'D'
  184.  0299 CC7503        CZ    ADDSUB
  185.  029C 3A7B04        LDA    FILESW
  186.  029F FE4D          CPI    'M'
  187.  02A1 F5            PUSH    PSW
  188.  02A2 CC7503        CZ    ADDSUB
  189.  02A5 F1            POP    PSW
  190.  02A6 CC8E03        CZ    ADDSUB2
  191.  02A9 0608          MVI    B,8    ;FILE NAME LENGTH
  192.  02AB CD9D03        CALL    TYPEIT    ;TYPE FILENAME
  193.  02AE CD1904        CALL    PERIOD    ;SPACE AFTER FN
  194.  02B1 0603          MVI    B,3    ;GET THE FILETYPE
  195.  02B3 CD9D03        CALL    TYPEIT
  196.                 ;MOD #6
  197.  02B6 3A7B04        LDA    FILESW
  198.  02B9 FE44          CPI    'D'
  199.  02BB CC8E03        CZ    ADDSUB2
  200.  02BE CD2104        CALL    FILECR
  201.  02C1 7E            MOV    A,M
  202.  02C2 CD3F03        CALL    XOB
  203.  02C5 23            INX    H    ;SKIP EXTENT
  204.  02C6 23            INX    H    ;SKIP
  205.  02C7 23            INX    H    ;UNUSED
  206.  02C8 7E            MOV    A,M    ;GET REC COUNT
  207.  02C9 3D            DCR    A    ;FUDGE
  208.  02CA 1F            RAR        ;DIVIDE
  209.  02CB 1F            RAR        ;..BY 8
  210.  02CC 1F            RAR
  211.  02CD E61F          ANI    1FH    ;DELETE GARBAGE
  212.  02CF 3C            INR    A    ;MAKE RELATIVE TO 1, NOT 0
  213.  02D0 47            MOV    B,A    ;SAVE AS # EXTENTS
  214.  02D1 7E            MOV    A,M    ;RELOAD RECORD COUNT
  215.  02D2 CD3F03        CALL    XOB    ;PRINT RECORD COUNT
  216.  02D5 23            INX    H    ;SKIP RECORD COUNT
  217.  02D6 0E00          MVI    C,0    ;FOR EXTENT SKIP CTL
  218.  02D8 7E        EXTLP    MOV    A,M    ;GET EXTENT BYTE
  219.  02D9 B7            ORA    A    ;EMPTY?
  220.  02DA CAEC02        JZ    ENDEXT    ;..YES
  221.  02DD CD4503        CALL    XO    ;..NO, PRINT IT
  222.  02E0 0C            INR    C    ;INCR COUNT
  223.  02E1 79            MOV    A,C    ;TIME TO SPACE?
  224.  02E2 E603          ANI    3
  225.  02E4 CCAA03        CZ    SPACE
  226.  02E7 23            INX    H    ;POINT TO NEXT CHR
  227.  02E8 05            DCR    B    ;MORE IN EXTENT?
  228.  02E9 C2D802        JNZ    EXTLP    ;YES
  229.                 ;BUMP TOTAL FILE COUNT
  230.  02EC 3A7404    ENDEXT    LDA    NFILE    ;GET # FILES
  231.  02EF 3C            INR    A    ;BUMP
  232.  02F0 27            DAA        ;MAKE DECIMAL
  233.  02F1 327404        STA    NFILE    ;SAVE IT BACK
  234.  02F4 CDAF03        CALL    CR    ;END, TYPE C/R
  235.                 ;SEE IF MORE ENTRIES
  236.  02F7 3A7804        LDA    COUNT
  237.  02FA 3D            DCR    A
  238.  02FB 327804        STA    COUNT
  239.  02FE C27802        JNZ    ENTRY    ;YES, MORE
  240.                 ; MOD #7
  241.  0301 3A7B04        LDA    FILESW
  242.  0304 FE20          CPI    ' '
  243.  0306 CA0E03        JZ    NXT1
  244.  0309 3E46          MVI    A,'F'
  245.  030B 327B04        STA    FILESW
  246.                 ;ALL DONE - PRINT # FILES
  247.  030E 3A7404    NXT1:    LDA    NFILE
  248.  0311 CD3F03        CALL    XOB
  249.  0314 113903        LXI    D,NMSG
  250.  0317 CD7003        CALL    WRCON
  251.                 ;CLOSE FILE IF NECESSARY
  252.  031A 3A7B04        LDA    FILESW
  253.                 ; MOD #8
  254.                 ;    CPI    'F'
  255.                 ;    JNZ    EXIT
  256.  031D FE20          CPI    ' '
  257.  031F CAC603        JZ    EXIT
  258.  0322 AF            XRA    A
  259.  0323 327704        STA    NEWONE
  260.                 ;
  261.  0326 3E1A          MVI    A,'Z'-40H ;EOF CHAR
  262.  0328 CDCB03        CALL    FILCHR    ;WRITE IT
  263.  032B CDF103        CALL    WRSEC    ;WRITE FINAL SECTOR
  264.  032E 117E04        LXI    D,MYFCB
  265.  0331 0E10          MVI    C,FCLOSE
  266.  0333 CD0500        CALL    BDOS
  267.  0336 C3C603        JMP    EXIT
  268.  0339 46494C4553NMSG    DB    'FILES$'
  269.                 ;HEX OUTPUT W/BLANK
  270.  033F CD4503    XOB    CALL    XO
  271.  0342 C3AA03        JMP    SPACE
  272.                 ;HEX OUTPUT 
  273.  0345 F5        XO    PUSH    PSW    ;SAVE CHAR
  274.  0346 1F            RAR
  275.  0347 1F            RAR
  276.  0348 1F            RAR
  277.  0349 1F            RAR
  278.  034A CD4E03        CALL    NIBBL    ;PRINT LEFT NIBBLE
  279.  034D F1            POP    PSW    ;GET VALUE BACK
  280.  034E E60F      NIBBL    ANI    0FH    ;ISOLATE NIBBLE
  281.  0350 FE0A          CPI    10    ;NUMBER?
  282.  0352 DA5703        JC    XNUM    ;YES
  283.  0355 C607          ADI    7    ;FUDGE ALPHA HEX
  284.  0357 C630      XNUM    ADI    '0'    ;MAKE PRINTABLE
  285.                 ;TYPE CHAR IN A
  286.  0359 C5        TYPE    PUSH    B
  287.  035A D5            PUSH    D
  288.  035B E5            PUSH    H
  289.  035C 5F            MOV    E,A
  290.                 ;MOD #9
  291.  035D 0E02          MVI    C,WRCHR
  292.  035F 3A7B04        LDA    FILESW
  293.  0362 FE46          CPI    'F'
  294.  0364 CA6903        JZ    NXT2
  295.  0367 FE20          CPI    ' '
  296.  0369 CC0500    NXT2    CZ    BDOS
  297.  036C E1            POP    H
  298.  036D D1            POP     D
  299.  036E C1            POP    B
  300.  036F C9            RET
  301.  0370 0E09      WRCON    MVI    C,PRINT
  302.  0372 C30500        JMP    BDOS
  303.                 ; MOD #10
  304.  0375 3E24      ADDSUB    MVI    A,'$'
  305.  0377 CDCB03        CALL    L03B7
  306.  037A 3E31          MVI    A,'1'
  307.  037C CDCB03        CALL    L03B7
  308.  037F 3E20          MVI    A,' '
  309.  0381 CDCE03        CALL    L03BA
  310.  0384 3E24          MVI    A,'$'
  311.  0386 CDCB03        CALL    L03B7
  312.  0389 3E32          MVI    A,'2'
  313.  038B C3CB03        JMP    L03B7
  314.  038E 3E20      ADDSUB2 MVI    A,' '
  315.  0390 CDCE03        CALL    L03BA
  316.  0393 3E24          MVI    A,'$'
  317.  0395 CDCB03        CALL    L03B7
  318.  0398 3E33          MVI    A,'3'
  319.  039A C3CB03        JMP    L03B7
  320.                 ;
  321.  039D 7E        TYPEIT    MOV    A,M
  322.  039E CDCB03        CALL    FILCHR    ;TO DISK IF REQ'D
  323.  03A1 CD5903        CALL    TYPE
  324.  03A4 23            INX    H
  325.  03A5 05            DCR    B
  326.  03A6 C29D03        JNZ    TYPEIT
  327.  03A9 C9            RET
  328.  03AA 3E20      SPACE    MVI    A,' '
  329.  03AC C35903        JMP    TYPE
  330.  03AF 3E0D      CR    MVI    A,0DH
  331.  03B1 CD5903        CALL    TYPE
  332.  03B4 3E0A          MVI    A,0AH
  333.  03B6 CD5903        CALL    TYPE
  334.  03B9 C9            RET
  335.                 ;CR    MVI    E,13    ;PRINT
  336.                 ;    MVI    C,2    ;C/R
  337.                 ;    CALL    BDOS
  338.                 ;    MVI    E,10    ;LF
  339.                 ;    MVI    C,2
  340.                 ;    JMP    BDOS
  341.  03BA           TEMP    DS    1    ;SAVE DIR ENTRY
  342.                 ;ERROR EXIT
  343.  03BB D1        ERXIT    POP    D    ;GET MSG
  344.  03BC 0E09          MVI    C,PRINT
  345.  03BE C3C303        JMP    CALLB    ;PRINT MSG, EXIT
  346.                 ;ABORT - READ CHAR ENTERED
  347.  03C1 0E01      ABORT    MVI    C,RDCHR
  348.  03C3 CD0500    CALLB    CALL    BDOS    ;DELETE THE CHAR
  349.                 ;FALL INTO EXIT
  350.                 ;EXIT - ALL DONE , RESTORE STACK
  351.  03C6 2A7204    EXIT    LHLD    STACK    ;GET OLD STACK
  352.  03C9 F9            SPHL        ;MOVE TO STACK
  353.  03CA C9            RET        ;..AND RETURN
  354.                 ;ROUTINES FOR CREATING FILE
  355.                 ;
  356.                 ; MOD #11
  357.                 ;WRITE CHAR IN A TO FILE
  358.                 ;(SAVES ALL REGS INCLUDING A)
  359.                 L03B7:        ;
  360.  03CB FE20      FILCHR    CPI    ' '
  361.  03CD C8            RZ        ;DON'T WRITE BLANKS
  362.  03CE F5        L03BA:    PUSH    PSW
  363.  03CF 3A7B04        LDA    FILESW    ;WRITING A FILE?
  364.                 ;    CPI    'F'
  365.                 ;    JNZ    NOFILE
  366.  03D2 FE20          CPI    ' '
  367.  03D4 CAEF03        JZ    NOFILE
  368.  03D7 3A7704        LDA    NEWONE
  369.  03DA B7            ORA    A
  370.  03DB C2EF03        JNZ    NOFILE
  371.                 ;
  372.  03DE F1            POP    PSW    ;GET CHAR
  373.  03DF F5            PUSH    PSW    ;SAVE IT BACK
  374.  03E0 E5            PUSH    H
  375.  03E1 2A7C04        LHLD    BUFAD    ;CURRENT BUFFER ADDR
  376.  03E4 77            MOV    M,A
  377.  03E5 23            INX    H
  378.  03E6 227C04        SHLD    BUFAD
  379.  03E9 7C            MOV    A,H    ;SEE IF FULL BUFF
  380.  03EA 3D            DCR    A
  381.  03EB CCF103        CZ    WRSEC    ;YES, WRITE SECTOR
  382.  03EE E1            POP    H
  383.  03EF F1        NOFILE    POP    PSW    ;RESTORE CHAR
  384.  03F0 C9            RET
  385.                 ;WRITE A SECTOR
  386.  03F1 C5        WRSEC    PUSH    B
  387.  03F2 D5            PUSH    D
  388.  03F3 117E04        LXI    D,MYFCB
  389.  03F6 0E15          MVI    C,FWRTE
  390.  03F8 CD0500        CALL    BDOS
  391.  03FB B7            ORA    A
  392.  03FC CA1004        JZ    WROK
  393.  03FF CDBB03        CALL    ERXIT
  394.  0402 2B2B575249    DB    '++WRITE ERROR$'
  395.  0410 218000    WROK    LXI    H,80H    ;START OF BUFF
  396.  0413 227C04        SHLD    BUFAD
  397.  0416 D1            POP    D
  398.  0417 C1            POP    B
  399.  0418 C9            RET
  400.                 ;TYPE A PERIOD INTO THE FILE
  401.  0419 3E2E      PERIOD    MVI    A,'.'    ;GET PERIOD
  402.  041B CDCB03        CALL    FILCHR    ;WRITE TO FILE
  403.  041E C3AA03        JMP    SPACE
  404.                 ;WRITE CR/LF INTO FILE
  405.  0421 3E0D      FILECR    MVI    A,13
  406.  0423 CDCB03        CALL    FILCHR
  407.  0426 3E0A          MVI    A,10
  408.  0428 CDCB03        CALL    FILCHR
  409.  042B C3AA03        JMP    SPACE
  410.                 ;COMPARE ROUTINE FOR SORT
  411.  042E E5        COMPR    PUSH    H    ;SAVE TABLE ADDR
  412.  042F 5E            MOV    E,M    ;LOAD LO
  413.  0430 23            INX    H
  414.  0431 56            MOV    D,M    ;LOAD HI
  415.  0432 23            INX    H
  416.  0433 4E            MOV    C,M
  417.  0434 23            INX    H
  418.  0435 46            MOV    B,M
  419.                 ;BC, DE NOW POINT TO ENTRIES TO BE COMPARED
  420.  0436 EB            XCHG
  421.  0437 0A        CMPLP    LDAX    B
  422.  0438 BE            CMP    M
  423.  0439 23            INX    H
  424.  043A 03            INX    B
  425.  043B CA3704        JZ    CMPLP
  426.  043E E1            POP    H
  427.  043F C9            RET        ;COND CODE TELLS ALL
  428.                 ;SWAP ENTRIES IN THE ORDER TABLE
  429.  0440 3E01      SWAP    MVI    A,1
  430.  0442 327A04        STA    SWITCH    ;SHOW A SWAP WAS MADE
  431.  0445 4E            MOV    C,M
  432.  0446 23            INX    H
  433.  0447 E5            PUSH    H    ;SAVE TABLE ADDR+1
  434.  0448 46            MOV    B,M
  435.  0449 23            INX    H
  436.  044A 5E            MOV    E,M
  437.  044B 71            MOV    M,C
  438.  044C 23            INX    H
  439.  044D 56            MOV    D,M
  440.  044E 70            MOV    M,B
  441.  044F E1            POP    H
  442.  0450 72            MOV    M,D
  443.  0451 2B            DCX    H    ;BACK POINTER TO CORRECT LOC'N
  444.  0452 73            MOV    M,E
  445.  0453 C9            RET
  446.  0454               DS    30    ;STACK AREA
  447.  0472           STACK    DS    2    ;SAVE OLD STACK HERE
  448.  0474 00        NFILE    DB    0    ;NUMBER OF FILES PRINTED
  449.                 ;
  450.                 ; BDOS EQUATES
  451.                 ;
  452.  0001 =         RDCHR    EQU    1    ;READ CHAR FROM CONSOLE
  453.  0002 =         WRCHR    EQU    2    ;WRITE CHR TO CONSOLE
  454.  0009 =         PRINT    EQU    9    ;PRINT CONSOLE BUFF
  455.  000B =         CONST    EQU    11    ;CHECK CONS STAT
  456.  000F =         FOPEN    EQU    15    ;0FFH=NOT FOUND
  457.  0010 =         FCLOSE    EQU    16    ;   "    "
  458.  0011 =         FSRCHF    EQU    17    ;   "    "
  459.  0012 =         FSRCHN    EQU    18    ;   "    "
  460.  0013 =         ERASE    EQU    19    ;NO RET CODE
  461.  0014 =         FREAD    EQU    20    ;0=OK, 1=EOF
  462.  0015 =         FWRTE    EQU    21    ;0=OK, 1=ERR, 2=?, 255=NO DIR SPC
  463.  0016 =         FMAKE    EQU    22    ;255=BAD
  464.  0017 =         FREN    EQU    23    ;255=BAD
  465.  001A =         FDMA    EQU    26
  466.  0005 =         BDOS    EQU    5
  467.  0000 =         REBOOT    EQU    0
  468.  0475 9F08      NEXTT    DW    TABLE    ;NEXT TABLE ENTRY
  469.  0477           NEWONE    DS    1    ;******I THINK
  470.  0478 00        COUNT    DB    0    ;ENTRY COUNT
  471.  0479 00        SCOUNT    DB    0    ;# TO SORT
  472.  047A 00        SWITCH    DB    0    ;SWAP SWITCH FOR SORT
  473.  047B           FILESW    DS    1    ;'F' IF WRITING FILE
  474.  047C 8000      BUFAD    DW    80H    ;OUTPUT ADDR
  475.  047E 004E414D45MYFCB    DB    0,'NAMES   SUB',0
  476.  048B               DS    19
  477.  049E 00            DB    0
  478.                 ;MODIFIED TABLE SIZE FOR 512 DIRECTORY ENTRIES
  479.  049F           ORDER    DS    1024    ;ORDER TABLE
  480.  089F =         TABLE    EQU    $    ;READ ENTRIES IN HERE
  481.  089F               END    100H
  482.