home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / UTILS / HDUTL / BIGBURST.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  12KB  |  610 lines

  1. ; BIGBURST--BIG FILE BACKUP/RESTORE
  2. ; COPYRIGHT 1982, G. YOUNG, INC. 
  3. ; UPDATED 10/9/82
  4. * TO EXECUTE, ENTER THE PROGRAM NAME FOLLOWED BY THE FILE MASK:
  5. *       A>BIGBURST FILENAME.TYP/B (FOR BACKUP) OR
  6. *       A>BIGBURST FILENAME.TYP/R (FOR RESTORE)
  7. * THE PURPOSE OF THIS PROGRAM IS TO BACKUP AND RESTORE FILES FROM/TO
  8. * A HARD DISK WHERE THE FILE IS TOO BIG TO FIT ON ONE FLOPPY DISK.
  9. * IT BACKS UP BY COPYING THE LARGE FILE TO MULTIPLE SMALL FILES
  10. * WHICH WILL FIT ON THE FLOPPY.  THE FILE TYPE OF EACH OF THESE SMALL
  11. * FILES IS A SEQUENTIAL NUMBER FROM 001 TO 255 WITH THE LAST RECORD
  12. * ON THE LAST FILE CONTAINING AN INDICATOR THAT THIS IS THE LAST FILE.
  13. * THE RESTORE PROCESS IS DONE BY COMBINING THESE SMALL FILES BACK INTO
  14. * THE LARGE FILE.
  15. * CHANGED 10/9/82 TO ASK QUESTIONS ON FLOPPY DRIVE #
  16.  
  17. * WRITTEN BY GARY YOUNG, BOX 3218, NO. HOLLYWOOD, CA 91609
  18.  
  19.     TITLE    '*** BIG FILE BACKUP/RESTORE ***'
  20. BDOS    EQU    5
  21. CR    EQU    0DH
  22. LF    EQU    0AH
  23. TBUF    EQU    80H
  24. TFCB    EQU    5CH
  25. BOOT    EQU    0
  26.     ORG    100H
  27.     JMP    START
  28.     DB    'COPYRIGHT 1982, G. YOUNG, INC.'
  29. START    LXI    SP,STACK+80
  30.     LDA    TFCB+1        ;SEE IF A MASK WAS ENTERED
  31.     CPI    20H        ;BUFFER WILL BE BLANK IF NOT
  32.     JZ    INPUTERR
  33.     LXI    H,TFCB        ;SAVE THE INPUT FILE NAME
  34.     LXI    D,HOLDFCB
  35.     MVI    B,16
  36.     CALL    MOVE
  37.     LXI    D,HOLDFCB+16
  38.     MVI    B,20
  39.     CALL    CLEAR
  40.     LXI    H,TBUF        ;SEARCH FOR /B OR /R
  41.     MVI    B,80
  42. FINDSLSH MOV    A,M
  43.     CPI    '/'
  44.     JZ    BORR
  45.     INX    H
  46.     DCR    B
  47.     JNZ    FINDSLSH
  48. INPUTERR LXI    D,ERROR1
  49. ERROR    CALL    OUTPUT
  50.     JMP    BOOT
  51. BORR    INX    H        ;NEXT CHAR MUST BE A B OR R
  52.     MOV    A,M
  53.     CPI    'B'
  54.     JZ    QUEST1
  55.     CPI    'R'
  56.     JNZ    INPUTERR
  57. QUEST2    LXI    D,SRCFLPMSG
  58.     CALL    QUESTION
  59.     ORA    A
  60.     JNZ    QUEST2A
  61.     LDA    SRCFLP
  62.     JMP    QUEST2B
  63. QUEST2A LDA    INREC
  64. QUEST2B    STA    FLOPPY
  65.     JMP    RESTORE
  66.  
  67. QUEST1    LXI    D,DESTFLPMSG
  68.     CALL    QUESTION
  69.     ORA    A
  70.     JNZ    QUEST1A
  71.     LDA    DESTFLP
  72.     JMP    QUEST1B
  73. QUEST1A    LDA    INREC
  74. QUEST1B    STA    FLOPPY
  75.     JMP    BACKUP
  76.  
  77. RESTORE LXI    H,TFCB
  78.     LXI    D,HDFCB
  79.     MVI    B,12        ;CREATE A HARD DISK FCB
  80.     CALL    MOVE
  81.     LXI    D,HDFCB+12
  82.     MVI    B,24
  83.     CALL    CLEAR
  84.     LXI    H,0000
  85.     SHLD    RECCNT
  86.     XRA    A
  87.     STA    FILECNT
  88.     MVI    A,'$'        ;CREATE A TEMPORARY FILE
  89.     STA    HDFCB+9
  90.     STA    HDFCB+10
  91.     STA    HDFCB+11
  92.     LXI    H,MSG3A        ;MARK AS "RESTORE" IN MESSAGE
  93.     LXI    D,MSG3
  94.     MVI    B,8
  95.     CALL    MOVE
  96.     LXI    H,MSG0A
  97.     LXI    D,MSG0        ;CHANGE THE PROMPT MESSAGE
  98.     MVI    B,10
  99.     CALL    MOVE
  100.     LXI    D,HDFCB        ;SEE IF THE TEMP FILE IS THERE ON
  101.     MVI    C,0FH        ;THE HARD DISK
  102.     CALL    BDOS
  103.     INR    A
  104.     JZ    MAKEHD
  105.     LXI    D,HDFCB        ;DELETE IT IF IT IS
  106.     MVI    C,13H
  107.     CALL    BDOS
  108. MAKEHD    LXI    D,HDFCB        ;MAKE THE HARD DISK FILE
  109.     MVI    C,16H
  110.     CALL    BDOS
  111.     LXI    D,ERROR4    ;ERROR IF DIRECTORY FULL
  112.     INR    A
  113.     JZ    ERROR
  114. LOADFLP    CALL    GENFCB
  115. LOAD2    CALL    MOUNT
  116.     LXI    D,FLPFCB    ;SEE IF FLOPPY FILE IS ON THAT DISK
  117.     MVI    C,0FH
  118.     CALL    BDOS
  119.     INR    A
  120.     JNZ    OPEN2        ;YES, THE RIGHT ONE IS MOUNTED
  121.     LXI    D,MESSAGE2    ;NO, WRONG DISK IS MOUNTED
  122.     CALL    OUTPUT
  123.     JMP    LOAD2
  124. OPEN2    LXI    D,HDFCB+12    ;OPEN THE HARD DISK AGAIN
  125.     MVI    B,24
  126.     CALL    CLEAR
  127.     LXI    D,HDFCB
  128.     MVI    C,0FH
  129.     CALL    BDOS
  130.     LHLD    RECCNT        ;POSITION TO END OF FILE
  131.     SHLD    HDFCB+33
  132.     LXI    D,HDFCB        ;RANDOM READ
  133.     MVI    C,21H
  134.     CALL    BDOS
  135. COPYLOOP2 CALL    LOADBUFF2    ;ACTUAL COPY IS DONE HERE
  136.     CALL    WRITEBUF2
  137.     CALL    DEBUG
  138.     LDA    EOF
  139.     CPI    2
  140.     JZ    ENDOFFILE2
  141.     CPI    1
  142.     JZ    DISKMPTY
  143.     JMP    COPYLOOP2
  144. ENDOFFILE2 LXI    D,HDFCB        ;CLOSE HARD DISK
  145.     MVI    C,10H
  146.     CALL    BDOS
  147.     LXI    D,HOLDFCB    ;SEE IF THE FILE IS THERE
  148.     MVI    C,0FH
  149.     CALL    BDOS
  150.     INR    A
  151.     JZ    RENAME        ;NO, RENAME THE TEMP VERSION AS THE FINAL NAME
  152.     LXI    D,BAKFCB    ;SEE IF THERE IS A BACKUP FILE NAME THERE
  153.     MVI    B,36
  154.     CALL    CLEAR
  155.     LXI    H,HOLDFCB
  156.     LXI    D,BAKFCB
  157.     MVI    B,36
  158.     CALL    MOVE
  159.     LXI    H,BAK
  160.     LXI    D,BAKFCB+9
  161.     MVI    B,3
  162.     CALL    MOVE        ;CREATE THE BACKUP FILE NAME
  163.     LXI    D,BAKFCB    ;DELETE IT IF IT IS THERE
  164.     MVI    C,13H
  165.     CALL    BDOS
  166.     LXI    H,BAKFCB
  167.     LXI    D,HOLDFCB+16
  168.     MVI    B,16
  169.     CALL    MOVE
  170.     LXI    D,HOLDFCB    ;RENAME THE FINAL FILE NAME AS .BAK
  171.     MVI    C,17H
  172.     CALL    BDOS
  173. RENAME    LXI    H,HOLDFCB
  174.     LXI    D,HDFCB+16    ;RENAME THE TEMP FILE TO THE PERMANENT NAME
  175.     MVI    B,16
  176.     CALL    MOVE
  177.     LXI    D,HDFCB
  178.     MVI    C,17H        ;RENAME .$$$ AS .XXX (FINAL NAME)
  179.     CALL    BDOS
  180.     LXI    D,ERROR5    ;FINISHED
  181.     JMP    ERROR
  182. DISKMPTY    LXI    D,FLPFCB    ;CLOSE THE CURRENT FLOPPY FILE
  183.     MVI    C,10H
  184.     CALL    BDOS
  185.     LXI    D,HDFCB        ;CLOSE THE HARD DISK FILE ALSO, WILL OPEN
  186.     MVI    C,10H        ;AGAIN LATER, BUT MOUNTING THE NEW FLOPPY
  187.     CALL    BDOS        ;REQUIRES A RESET WHICH ASSUMES ALL CLOSED
  188.     JMP    LOADFLP
  189.  
  190.  
  191.  
  192. BACKUP LXI    H,TFCB
  193.     LXI    D,HDFCB
  194.     MVI    B,12
  195.     CALL    MOVE
  196.     LXI    D,HDFCB+12
  197.     MVI    B,24
  198.     CALL    CLEAR
  199.     LXI    H,0000
  200.     SHLD    RECCNT
  201.           LXI    D,HDFCB        ;MAKE SURE HARD DISK FILE IS THERE
  202.     MVI    C,0FH
  203.     CALL    BDOS
  204.     INR    A
  205.     JNZ    CLEARCNT
  206.     LXI    D,ERROR2    ;FILE NOT FOUND
  207.     JMP    ERROR
  208. CLEARCNT XRA    A
  209.     STA    FILECNT
  210. CREATEFLP CALL    GENFCB        ;CREATE FLOPPY FCB
  211.     CALL    MOUNT
  212.           LHLD    RECCNT        ;POSITION FILE
  213.     SHLD    HDFCB+33
  214.     LXI    D,HDFCB        ;RANDOM READ
  215.     MVI    C,21H
  216.     CALL    BDOS
  217.     LXI    D,FLPFCB    ;LOOK FOR FLOPPY NAME
  218.     MVI    C,0FH
  219.     CALL    BDOS
  220.     INR    A
  221.     JZ    MAKEFLOP
  222.     LXI    D,FLPFCB    ;DELETE IT IF IT IS THERE
  223.     MVI    C,13H
  224.     CALL    BDOS
  225. MAKEFLOP LXI    D,FLPFCB    ;CREATE THE FILE
  226.     MVI    C,16H
  227.     CALL    BDOS
  228.     LXI    D,ERROR4
  229.     INR    A
  230.     JZ    ERROR        ;DIRECTORY FULL
  231. COPYLOOP1 CALL    LOADBUFF1    ;DO ACTUAL COPYING HERE
  232.     CALL    WRITEBUF1
  233.     CALL    DEBUG
  234.     LDA    EOF
  235.     CPI    1
  236.     JZ    ENDOFFILE1
  237.     CPI    2
  238.     JZ    DISKFULL
  239.     JMP    COPYLOOP1
  240. ENDOFFILE1    LXI    D,LASTREC    ;ADD END OF ALL FILES RECORD
  241.     MVI    C,1AH
  242.     CALL    BDOS
  243.     LXI    D,FLPFCB
  244.     MVI    C,15H        ;WRITE IT
  245.     CALL    BDOS
  246.     LXI    D,FLPFCB
  247.     MVI    C,10H        ;CLOSE FLOPPY
  248.     CALL    BDOS
  249.     LXI    D,ERROR5
  250.     JMP    ERROR        ;FINISHED
  251. DISKFULL LXI    D,FLPFCB
  252.     MVI    C,10H        ;CLOSE FLOPPY
  253.     CALL    BDOS
  254.     JMP    CREATEFLP 
  255.  
  256. GENFCB    LXI    D,FLPFCB    ;CREATE THE FLOPPY NAME
  257.     MVI    B,36
  258.     CALL    CLEAR
  259.     LXI    H,HOLDFCB+1
  260.     LXI    D,FLPFCB+1
  261.     MVI    B,11
  262.     CALL    MOVE
  263.     LDA    FLOPPY
  264.     ANI    0FH
  265.     STA    FLPFCB
  266.     LXI    D,ERROR3
  267.     LDA    FILECNT
  268.     INR    A
  269.     STA    FILECNT
  270.     JZ    ERROR        ;TOO MANY FLOPPIES
  271.     MVI    H,0
  272.     MOV    L,A
  273.     SHLD    MPTY
  274.     LXI    D,FLPFCB+9    ;SET FILE TYPE TO SEQUENCE NUMBER
  275.     LXI    H,64H
  276.     SHLD    TEMP2
  277.     CALL    DIVID2
  278.     LXI    H,0AH
  279.     SHLD    TEMP2
  280.     CALL    DIVID2
  281.     LDA    MPTY
  282.     ADI    '0'
  283.     STAX    D
  284.     RET
  285.  
  286. DEBUG    LHLD    RECCNT        ;THIS PRINTS THE RECORD # JUST WRITTEN
  287.     SHLD    MPTY        ;FOR DEBUG PURPOSES
  288.     LXI    D,DBMSG+2
  289.     LXI    H,2710H
  290.     SHLD    TEMP2
  291.     CALL    DIVID2
  292.     LXI    H,03E8H
  293.     SHLD    TEMP2
  294.     CALL    DIVID2
  295.     LXI    H,64H
  296.     SHLD    TEMP2
  297.     CALL    DIVID2
  298.     LXI    H,0AH
  299.     SHLD    TEMP2
  300.     CALL    DIVID2
  301.     LDA    MPTY
  302.     ADI    '0'
  303.     STAX    D
  304.     LXI    D,DBMSG
  305.     CALL    OUTPUT
  306.     RET
  307.  
  308. DIVID2    PUSH    D
  309.     MVI    E,0
  310.     LHLD    MPTY
  311.     SHLD    TEMP
  312. SB22    LXI    B,TEMP
  313.     LXI    H,TEMP2
  314.     XRA    A
  315.     LDAX    B
  316.     SBB    M
  317.     STAX    B
  318.     INX    B
  319.     INX    H
  320.     LDAX    B
  321.     SBB    M
  322.     STAX    B
  323.     JC    NEG2
  324.     INR    E
  325.     PUSH    H
  326.     LHLD    TEMP
  327.     SHLD    MPTY
  328.     POP    H
  329.     JMP    SB22
  330. NEG2    MOV    A,E
  331. DIV2    ADI    '0'
  332.     POP    D
  333.     STAX    D
  334.     INX    D
  335.     RET
  336.  
  337. MOUNT    LXI    H,FLPFCB+1
  338.     LXI    D,MSG1
  339.     MVI    B,8
  340.     CALL    MOVE
  341.     LXI    D,MSG4
  342.     CALL    MOVE
  343.     LXI    H,FLPFCB+9
  344.     LXI    D,MSG2
  345.     MVI    B,3
  346.     CALL    MOVE
  347.     LXI    D,MSG5
  348.     CALL    MOVE
  349.     LXI    D,MESSAGE1
  350.     CALL    OUTPUT
  351.     LXI    D,INBUF
  352.     MVI    C,0AH
  353.     CALL    BDOS
  354.     MVI    C,0DH        ;RESET THE DISK SYSTEM
  355.     CALL    BDOS
  356.     RET
  357.  
  358. CLEAR    XRA    A
  359. CLEAR2    STAX    D
  360.     INX    D
  361.     DCR    B
  362.     JNZ    CLEAR2
  363.     RET
  364.  
  365. ;FOR BACKUP...LOAD FROM HARD DISK, WRITE TO FLOPPY
  366. LOADBUFF1 EQU    $    ;THIS ROUTINE LOADS AS MUCH OF
  367.     LXI    H,0000        ;MEMORY WITH THE FILE AS POSSIBLE
  368.     SHLD    MAX1
  369.     LXI    H,ADDR3
  370.     SHLD    TEMP
  371.     XRA    A
  372.     STA    EOF        ;CLEAR EOF FLAG
  373. LOADNEXT    LHLD    TEMP
  374.     XCHG            ;SET DMA ADDRESS
  375.     MVI    C,1AH
  376.     CALL    BDOS
  377.     LXI    D,HDFCB        ;READ HARD DISK
  378.     MVI    C,14H
  379.     CALL    BDOS
  380.     ORA    A
  381.     JNZ    HDEOF        ;EOF?
  382.     LHLD    MAX1
  383.     INX    H        ;INCREMENT RECORD COUNT
  384.     SHLD    MAX1
  385.     LHLD    TEMP        ;SEE IF NEXT RECORD WOULD EXCEED THE
  386.     LXI    D,128        ;TPA AREA
  387.     DAD    D
  388.     SHLD    TEMP
  389.     DAD    D        ;WILL THE NEXT RECORD OVERWRITE BDOS?
  390.     XCHG
  391.     LHLD    BDOS+1        ;FIND THE TOP OF MEMORY
  392.     CALL    COMPREG        ;COMPARE REGISTERS
  393.     RC            ;RETURN IF MEMORY ALREADY FULL
  394.     JMP    LOADNEXT    ;GET ANOTHER RECORD
  395. HDEOF    MVI    A,1        ;SET FILE EOF
  396.     STA    EOF
  397.     RET
  398.  
  399. WRITEBUF1 EQU    $    ;WRITE FROM THE MEMORY BUFFER
  400.     LXI    H,ADDR3
  401.     SHLD    TEMP
  402.     LHLD    MAX1        ;ALLOW FOR FILES THAT HAVE NO 
  403.     LXI    D,0000        ;RECORDS SUCH AS RESTART
  404.     CALL    COMPREG
  405.     RZ
  406. WRITENEXT    LHLD    TEMP
  407.     XCHG            ;SET DMA ADDRESS
  408.     MVI    C,1AH
  409.     CALL    BDOS
  410.     LXI    D,FLPFCB
  411.     MVI    C,15H        ;WRITE SEQUENTIAL
  412.     CALL    BDOS
  413.     ORA    A
  414.     JNZ    FPFULL2
  415.     LHLD    RECCNT
  416.     INX    H
  417.     SHLD    RECCNT
  418.     LHLD    MAX1        ;DECREASE RECORD COUNT
  419.     DCX    H
  420.     SHLD    MAX1
  421.     LXI    D,0000        ;CHECK FOR NO MORE TO WRITE
  422.     CALL    COMPREG
  423.     RZ
  424.     LHLD    TEMP
  425.     LXI    D,128        ;INCREMENT WRITE ADDRESS
  426.     DAD    D
  427.     SHLD    TEMP
  428.     JMP    WRITENEXT
  429. FPFULL2    MVI    A,2        ;FULL DISKETTE
  430.     STA    EOF
  431.     RET
  432.  
  433. ;FOR RESTORE, LOAD FROM FLOPPY, WRITE TO HARD DISK
  434. LOADBUFF2 EQU    $    ;THIS ROUTINE LOADS AS MUCH OF
  435.     LXI    H,0000        ;MEMORY WITH THE FILE AS POSSIBLE
  436.     SHLD    MAX1
  437.     LXI    H,ADDR3
  438.     SHLD    TEMP
  439.     XRA    A
  440.     STA    EOF        ;CLEAR EOF FLAG
  441. LOADNEXT2 LHLD    TEMP
  442.     XCHG            ;SET DMA ADDRESS
  443.     MVI    C,1AH
  444.     CALL    BDOS
  445.     LXI    D,FLPFCB    ;READ THE FLOPPY
  446.     MVI    C,14H
  447.     CALL    BDOS
  448.     ORA    A
  449.     JNZ    HDEOF2        ;EOF?
  450.     LHLD    TEMP
  451.     LXI    D,LASTREC
  452.     MVI    B,26        ;SEE IF THIS IS THE LASTREC OF LAST FILE
  453.     CALL    COMPARE
  454.     JZ    EOFHD 
  455.     LHLD    MAX1
  456.     INX    H        ;INCREMENT RECORD COUNT
  457.     SHLD    MAX1
  458.     LHLD    TEMP        ;SEE IF NEXT RECORD WOULD EXCEED THE
  459.     LXI    D,128        ;TPA AREA
  460.     DAD    D
  461.     SHLD    TEMP
  462.     DAD    D        ;WILL THE NEXT RECORD OVERWRITE BDOS?
  463.     XCHG
  464.     LHLD    BDOS+1        ;FIND THE TOP OF MEMORY
  465.     CALL    COMPREG        ;COMPARE REGISTERS
  466.     RC            ;RETURN IF MEMORY ALREADY FULL
  467.     JMP    LOADNEXT2    ;GET ANOTHER RECORD
  468. EOFHD    MVI    A,2
  469.     STA    EOF
  470.     RET
  471. HDEOF2    MVI    A,1        ;SET FILE EOF
  472.     STA    EOF
  473.     RET
  474.  
  475. WRITEBUF2 EQU    $    ;WRITE FROM THE MEMORY BUFFER
  476.     LXI    H,ADDR3
  477.     SHLD    TEMP
  478.     LHLD    MAX1        ;ALLOW FOR FILES THAT HAVE NO 
  479.     LXI    D,0000        ;RECORDS SUCH AS RESTART
  480.     CALL    COMPREG
  481.     RZ
  482. WRITENEXT2 LHLD    TEMP
  483.     XCHG            ;SET DMA ADDRESS
  484.     MVI    C,1AH
  485.     CALL    BDOS
  486.     LXI    D,HDFCB
  487.     MVI    C,15H        ;WRITE SEQUENTIAL
  488.     CALL    BDOS
  489.     ORA    A
  490.     JNZ    FPFULL        ;FLOPPY DISK FULL
  491.     LHLD    RECCNT
  492.     INX    H
  493.     SHLD    RECCNT
  494.     LHLD    MAX1        ;DECREASE RECORD COUNT
  495.     DCX    H
  496.     SHLD    MAX1
  497.     LXI    D,0000        ;CHECK FOR NO MORE TO WRITE
  498.     CALL    COMPREG
  499.     RZ
  500.     LHLD    TEMP
  501.     LXI    D,128        ;INCREMENT WRITE ADDRESS
  502.     DAD    D
  503.     SHLD    TEMP
  504.     JMP    WRITENEXT2
  505. FPFULL    MVI    A,2        ;FULL DISKETTE
  506.     STA    EOF
  507.     RET
  508.  
  509. COMPREG    MOV    A,H        ;COMPARE HL TO DE
  510.     CMP    D
  511.     RNZ
  512.     MOV    A,L
  513.     CMP    E
  514.     RET
  515.  
  516. OUTPUT    PUSH    D        ;PUT OUT A CRLF
  517.     LXI    D,CRLF
  518.     MVI    C,09
  519.     CALL    BDOS
  520.     POP    D        ;NOW PUT OUT THE MESSAGE
  521. OUT1    MVI    C,09
  522.     JMP    BDOS
  523.  
  524.  
  525. QUESTION    CALL    OUTPUT    ;PUT OUT THE QUESTION
  526.     LXI    D,INBUF
  527.     MVI    C,0AH        ;INPUT THE REPLY
  528.     CALL    BDOS
  529.     LDA    INCNT
  530.     RET
  531.  
  532. MOVE    PUSH    H        ;MOVE DATA POINTED TO IN HL
  533.     PUSH    D        ;TO THE AREA POINTED TO IN DE
  534.     PUSH    B        ;BY THE BYTE COUNT IN B
  535. MOVE1    MOV    A,M
  536.     STAX    D
  537.     INX    H
  538.     INX    D
  539.     DCR    B
  540.     JNZ    MOVE1
  541.     POP    B        ;RESTORE THE TOTAL ENVIRONMENT
  542.     POP    D
  543.     POP    H
  544.     RET
  545.  
  546. COMPARE    PUSH    H        ;COMPARE THE STRINGS POINTED TO IN HL
  547.     PUSH    D        ;TO THE STRING POINTED TO IN DE
  548.     PUSH    B        ;FOR A LENGTH OF B CHARACTERS
  549. COMP1    LDAX    D        ; JC IF HL > DE
  550.     CMP    M        ; JZ IF HL = DE
  551.     JNZ    COMP2        ;JNC IF HL < DE
  552.     INX    H
  553.     INX    D
  554.     DCR    B
  555.     JNZ    COMP1
  556. COMP2    POP    B
  557.     POP    D
  558.     POP    H
  559.     RET
  560.  
  561.  
  562. CRLF    DB    CR,LF,'$'
  563. ERROR1    DB    'INPUT ERROR...ENTER FILENAME.TYP/B OR /R',CR,LF,LF,'$'
  564. ERROR2    DB    'FILE NOT FOUND',CR,LF,LF,'$'
  565. ERROR3    DB    'NEEDS MORE THAN 255 FLOPPY DISKS',CR,LF,LF,'$'
  566. ERROR4    DB    'DIRECTORY FULL',CR,LF,LF,'$'
  567. ERROR5    DB    'FINISHED',CR,LF,LF,'$'
  568. MSG0A    DB    'CONTAINING'
  569. BAK    DB    'BAK'
  570. MSG3A    DB    'RESTORE '
  571. LASTREC    DB    'ENDENDENDBIGBURSTENDENDEND'
  572. MESSAGE1 DB    CR,LF,LF,'MOUNT THE DISKETTE '
  573. MSG0    DB    'TO CONTAIN '
  574. MSG1    DS    8
  575.     DB    '.'
  576. MSG2    DS    3
  577.     DB    ' FOR '
  578. MSG3    DB    'BACKUP  '
  579.     DB    'AND HIT RETURN$'
  580. MESSAGE2 DB    CR,LF,'FILE '
  581. MSG4    DS    8
  582.     DB    '.'
  583. MSG5    DS    3
  584.     DB    ' IS NOT ON THIS DISKETTE$'
  585. SRCFLPMSG DB    'SOURCE FLOPPY DRIVE (DEFAULT='
  586. SRCFLP    DB    'D) $'
  587. DESTFLPMSG DB    'DESTINATION FLOPPY DRIVE (DEFAULT='
  588. DESTFLP    DB    'D) $'
  589. DBMSG    DB    CR,LF
  590.     DB    '00000$'
  591. INBUF    DB    30
  592. INCNT    DS    1
  593. INREC    DS    30
  594. FLOPPY    DS    1
  595. RECCNT    DS    2
  596. HOLDFCB    DS    36
  597. HDFCB    DS    36
  598. BAKFCB    DS    48
  599. FILECNT    DS    1
  600. FLPFCB    DS    36
  601. TEMP    DS    2
  602. TEMP2    DS    2
  603. MPTY    DS    2
  604. MAX1    DS    2
  605. EOF    DS    1
  606. STACK    DS    90
  607. ADDR3    EQU    $
  608.     END    100H
  609.