home *** CD-ROM | disk | FTP | other *** search
/ Software Du Jour / SoftwareDuJour.iso / BUSINESS / DBASE / DBAPG.ARC / DOS-COPY.A86 < prev    next >
Text File  |  1984-06-26  |  2KB  |  94 lines

  1. ; Subroutine.: DOS-COPY.A86
  2. ; Author.....: Kelly Mc Tiernan
  3. ; Date.......: 12/12/83
  4. ; Notice.....: Copyright 1983, All Rights Reserved.
  5. ; Notes......: MS-DOS 2.0X COPY function.
  6. ;
  7. ;
  8.     ORG    DE00H        ; 56832 DECIMAL=TOP OF DBASE
  9. ;
  10. START:    PUSH    AX        ; SAVE MACHINE STATE.
  11.     PUSH    BX        ; PROBLEMS WILL ARISE IF
  12.     PUSH    CX        ; THESE ARE NOT SAVED.
  13.     PUSH    DX
  14.     PUSHF            ; SAVE FLAGS
  15.     MOV    [SAVSTK],SP    ; SAVE STACK POINTER
  16. ;
  17.     MOV    AH,3CH        ; CREATE DESTINATION FILE
  18.     MOV    DX,[DEST]    ; ASCIIZ (zero-terminated)
  19.                 ; PATHNAME
  20.     MOV    CX,0020H    ; FILE ATTRIBUTE
  21.     INT    21H        ; DOS FUNCTION CALL
  22.     JC    ERROR        ; ERROR HANDLING ROUTINE
  23.     MOV    [SAVHNDLE],AX    ; SAVE NEW FILE HANDLE    
  24. ;
  25.     MOV    AH,3DH        ; OPEN FILE (SOURCE FILE)
  26.     MOV    AL,00        ; READ ONLY
  27.     MOV    DX,SRCE        ; ASCIIZ PATHNAME
  28.     INT    21H        ; FUNCTION CALL
  29.     JC    ERROR
  30.     MOV    BX,AX        ; GET NEW HANDLE WHERE WE CAN
  31.                 ; USE IT
  32. ;
  33. RDWRTE:    MOV    CX,0010H    ; BYTES TO R/W (BUFFER)
  34.     MOV    AH,3FH        ; READ SOURCE FILE
  35.     INT    21H        ; READ IT
  36.     JC    ERROR        ; CARRY=FILE ERROR, ALL TREATED
  37.                 ; THE SAME WAY
  38.     OR    AX,AX        ; CHECK FOR ZERO=EOF
  39.     JZ    DONE        ; IF SO GO CLOSE FILES
  40.     MOV    CX,0010H    ; BYTES TO WRITE ( =READ )
  41.                 ; THIS IS A 16-BYTE BUFFER.
  42.                 ; IT CAN BE INCREASED TO ?KELLY?
  43.                 ;
  44.     MOV    AH,40H        ; WRITE FUNCTION
  45.     MOV    DX,SRCE        ; OLD ASCIIZ SOURCE PATH=BUFFER
  46.     XCHG    [SAVHNDLE],BX    ; GET DESTINATION FILE HANDLE
  47.     INT    21H        ; WRITE TO FILE
  48.     JC    ERROR
  49. ;
  50.     XCHG    [SAVHNDLE],BX    ; GET BACK SOURCE HANDLE
  51.     JMP    RDWRTE        ; DO NEXT READ/WRITE
  52. ;
  53. DONE:    MOV    AH,3EH        ; CLOSE FILES
  54.     INT    21H        ; FIRST FILE
  55.     JC    ERROR
  56. ;
  57.     XCHG    [SAVHNDLE],BX    ; NEXT FILE HANDLE
  58.     MOV    AH,3EH
  59.     INT    21H
  60.     JC    ERROR
  61. ;
  62.     MOV    SP,[SAVSTK]    ; RESTORE MACHINE STATE
  63.     POPF            ; RESTORE FLAGS
  64.     POP    DX
  65.     POP    CX
  66.     POP    BX
  67.     POP    AX
  68.     RET            ; RETURN TO DBASE
  69. ;
  70. ERROR:    MOV    AH,3EH        ; FIRST TRY TO CLOSE FILES
  71.     INT    21H
  72.     XCHG    [SAVHNDLE],BX
  73.     MOV    AH,3EH
  74.     INT    21H
  75. ;
  76.     MOV    SP,[SAVSTK]    ; RESTORE MACHINE STATE
  77.     POPF            ; RESTORE FLAGS
  78.     POP    DX
  79.     POP    CX
  80.     POP    BX
  81.     POP    AX
  82. ;
  83.     INC    BX        ; POINT TO FIRST CHAR. OF "ERROR"
  84.     MOV    BYTE PTR[BX],'E'; 'E' IS ERROR CODE TO DBASE PRG.
  85.     DEC    BX        ; RESTORE POINTER
  86.     RET            ; RETURN TO DBASE
  87. ;
  88. SAVSTK      RS    02
  89. SAVHNDLE  RS    01
  90. SRCE      RS    64        ; SOURCE FILE POKED FROM DBASE
  91. DEST      RS    64        ; DESTINATION FILE POKED 
  92. ;                ; FROM DBASE
  93. END.
  94.