Write an ALP to simulate COPY command using PSP.

, by Prashant Gunjal

Write an ALP to simulate COPY command using PSP.

DISP MACRO MSG
        LEA DX,MSG
        MOV AH,09H
        INT 21H
ENDM

.MODEL SMALL
.DATA

        MSG1 DB 10,13,"INVALID FILENAME (NO 1) $"
        MSG2 DB 10,13,"INVALID FILENAME (NO 2) $"
        MSG3 DB 10,13,"ERROR IN OPENING FILE (NO 1) $"
        MSG4 DB 10,13,"ERROR IN WRITING (IE: FILE (NO 2)) $"
        MSG5 DB 10,13,"FILE ALREADY EXIST SO WRITING CONTENTS AT END OF FILE $" 
        MSG6 DB 10,13,"FILE 2 IS NOT PRESENT SO CREATING IT N WRITING DATA IN IT$"
        MSG7 DB 10,13,"   TASK COMPLETED SUCCESSFULLY$"

        ARR1 DB 25H DUP(0)
        ARR2 DB 25H DUP(0)
        ARR3 DB 100H DUP(0)

        CNT DW ?
        FH1 DW ?
        FH2 DW ?

.CODE
        MOV AX,@DATA
        MOV DS,AX

        MOV AH,62H  ;STARTING ADDRESS OF PSP
        INT 21H

        MOV ES,BX

        MOV DI,0082H  ;STARTING OFFSET OF PSP
        LEA SI,ARR1
        MOV BH,' '
        MOV CX,0000H

        CALL CHKVALID  ;CHK  NAME IS VALID OR NOT

        CMP CH,08H
        JBE N1
        DISP MSG1
        JMP EXIT
N1:     CMP CL,03H
        JE N2
        DISP MSG1
        JMP EXIT

N2:     MOV CX,0000H
        MOV BH,0DH
        LEA SI,ARR2
        INC DI

        CALL CHKVALID

        CMP CH,08H
        JBE N3
        DISP MSG2
        JMP EXIT
N3:     CMP CL,03H
        JE N4
        DISP MSG2
        JMP EXIT

;********OPEN FILE 1*************
N4:     MOV AH,3DH
        MOV AL,02H
        LEA DX,ARR1
        INT 21H

        MOV FH1,AX
        JNC N5
        DISP MSG3
        JMP EXIT

;******CALC SIZE OF FILE 1 N KEEP IT IN CNT*****
N5:     MOV AH,42H
        MOV AL,02H
        MOV BX,FH1
        MOV CX,0000H
        MOV DX,0000H
        INT 21H

        MOV CNT,AX

;******SET FP ON STARTING OF FILE*********
        MOV AH,42H
        MOV AL,00H
        MOV BX,FH1
        MOV CX,0000H
        MOV DX,0000H
        INT 21H

;****READ CONTENTS OF FILE 1 N KEEP IT IN ARR3****
        MOV AH,3FH
        MOV BX,FH1
        MOV CX,CNT
        LEA DX,ARR3
        INT 21H

        JC EXIT

;******CHK 2ND FILE ALREADY PRESENT OR NOT******
        MOV AH,3DH
        MOV AL,02H
        LEA DX,ARR2
        INT 21H

        MOV FH2,AX
        JC N6
        DISP MSG5

        ;** SET FP AT END OF FILE**

        MOV AH,42H
        MOV AL,02H
        MOV BX,FH2
        MOV CX,0000H
        MOV DX,0000H
        INT 21H

        JMP N7

;*****CREATE FILE2 IF NOT PRESENT*********
N6:     MOV AH,3CH
        LEA DX,ARR2
        MOV CX,0000H
        INT 21H

        JC EXIT
        MOV FH2,AX
        DISP MSG6

;****WRITING CONTENTS IN FILE 2******
N7:     MOV AH,40H
        MOV BX,FH2
        MOV CX,CNT
        LEA DX,ARR3
        INT 21H

        JC EXIT
        DISP MSG7

EXIT:   MOV AH,4CH
        INT 21H

;********PROCEDURE CHECK VALID****************
CHKVALID PROC NEAR
C0:     MOV AH,ES:[DI]
        CMP AH,'.'
        JNE C1
        JMP C2

C1:     MOV [SI],AH
        INC CH
        INC SI
        INC DI
        JMP C0

C2:     MOV [SI],AH
        INC SI
        INC DI

C3:     MOV AH,ES:[DI]
        CMP AH,BH
        JE R
        MOV [SI],AH
        INC CL
        INC SI
        INC DI
        JMP C3

R:      RET
ENDP
END
    

OUTPUT


C:\TASM>TASM P2
Turbo Assembler  Version 2.0  Copyright (c) 1988, 1990 Borland International

Assembling file:   P2.ASM
Error messages:    None
Warning messages:  None
Passes:            1
Remaining memory:  472k


C:\TASM>TLINK P2
Turbo Link  Version 3.0 Copyright (c) 1987, 1990 Borland International
Warning: No stack

C:\TASM>P2 P.TXT A.TXT

FILE ALREADY EXIST SO WRITING CONTENTS AT END OF FILE
   TASK COMPLETED SUCCESSFULLY
C:\TASM>

0 comments: