ORG 100H BDOS EQU 5H FCB EQU 5CH BUFF EQU 80H COMIN EQU 3 COMOUT EQU 4 PSTRNG EQU 9 OPEN EQU 15 CLOSE EQU 16 DELETE EQU 19 READS EQU 20 WRITES EQU 21 MAKEF EQU 22 LPDL EQU 256 CMDBLK EQU 0 CMDACK EQU 2 CMDWAK EQU 3 CMDEOF EQU 4 CMDNAK EQU 5 START: LXI SP,PDL+LPDL LXI D,FCB MVI C,DELETE CALL BDOS LXI D,FCB MVI C,MAKEF CALL BDOS LXI D,BADOPN INR A JZ FINISH LOOP: CALL CMDGET CPI CMDEOF JZ EOF CPI CMDBLK JNZ LOOP CALL GETWRD SHLD COUNT CALL GETWRD LHLD COUNT XCHG LXI H,RBUF LOOP1: CALL GETBYT MOV M,A INX H DCX D MOV A,D ORA E JNZ LOOP1 CALL GETWRD PUSH H LHLD COUNT XCHG LXI B,RBUF LXI H,0 LOOP2: PUSH D LDAX B MVI D,0 MOV E,A DAD D POP D INX B DCX D MOV A,D ORA E JNZ LOOP2 POP D MOV A,D CMP H JNZ RETRAN MOV A,E CMP L JNZ RETRAN CALL WRTDSK MVI B,CMDACK CALL SNDCMD JMP LOOP RETRAN: LXI D,RETRNM MVI C,PSTRNG CALL BDOS MVI B,CMDNAK CALL SNDCMD JMP LOOP CMDGET: CALL GETBYT ANI 7FH CPI 7EH JNZ CMDGET JMP GETBYT GETWRD: CALL GETBYT MOV H,A CALL GETBYT MOV L,A RET GETBYT: MVI C,COMIN PUSH B PUSH D PUSH H CALL BDOS POP H POP D POP B RET SNDCMD: MVI C,7EH PUSH B CALL SNDBYT POP B MOV C,B SNDBYT: MOV E,C MVI C,COMOUT PUSH D PUSH H CALL BDOS POP H POP D RET EOF: LXI D,FCB MVI C,CLOSE CALL BDOS MVI B,CMDACK CALL SNDCMD LXI D,GOOD FINISH: MVI C,PSTRNG CALL BDOS JMP 0 WRTDSK: LXI D,RBUF LXI H,BUFF MVI C,128 CALL MOVIT LXI D,FCB MVI C,WRITES CALL BDOS LXI D,BADWRT ORA A JNZ FINISH LXI D,RBUF+128 LXI H,BUFF MVI C,128 CALL MOVIT LXI D,FCB MVI C,WRITES CALL BDOS LXI D,BADWRT ORA A JNZ FINISH RET MOVIT: LDAX D MOV M,A INX D INX H DCR C JNZ MOVIT RET BADWRT: DB 0DH,0AH,'BAD WRITE$' RETRNM: DB 0DH,0AH,'RETRANSMITTING$' BADOPN: DB 0DH,0AH,'BAD OPEN$' GOOD: DB 0DH,0AH,'COMPLETED$' PDL: DS LPDL COUNT: DW 0 RBUF: DS 256 END START