N DEB2SCR.COM
A
MOV      DX,0187              ; address of buffer
MOV      CX,F000              ; size of buffer
XOR      BX,BX
MOV      AH,3F                ; read text into buffer
INT      21
OR       AX,AX                ; number of bytes read = 0 ?
JNZ      0112                 ; no --> PROCEED
;<0110> FINISH:
INT      20                   ; end
;<0112> PROCEED:
MOV      CX,AX
ADD      CX,DX                ; CX = end of data in buffer
MOV      SI,DX                ; SI = address of byte read from buffer
;<0118> NEWLINE:
CMP      SI,CX                ; end of data reached ?
JNB      0110                 ; yes --> FINISH
MOV      AL,[SI]              ; read character from buffer
CMP      AL,2D                ; is it a '-' ?
JNZ      0125                 ; no --> CONTINUE1
INC      SI                   ; skip the '-'
JMP      016E                 ; --> OUTPUTLINE
;<0125> CONTINUE1:
CMP      AL,3A                ; is it a ':' ?
JNZ      012C                 ; no --> CONTINUE2
INC      SI                   ; skip the ':'
JMP      016E                 ; --> OUTPUTLINE
;<012C> CONTINUE2:
CMP      AL,43                ; is it a 'C' ?
JNZ      0135                 ; no --> CONTINUE3
ADD      SI,09                ; skip 'CX XXXX',CR,LF
JMP      0118                 ; --> NEWLINE
;<0135> CONTINUE3:
CMP      AL,57                ; is it a 'W' ?
JNZ      013E                 ; no --> CONTINUE4
ADD      SI,14                ; skip 'Writing XXXX bytes',CR,LF
JMP      0118                 ; --> NEWLINE
;<013E> CONTINUE4:
CMP      BYTE PTR [SI+04],3A  ; line begins with address ?     (XXXX:YYYY)
JNZ      016B                 ; no --> CONTINUE5
CMP      BYTE PTR [SI+0A],3B  ; does a comment follow ?        (XXXX:YYYY ;)
JNZ      016B                 ; no --> CONTINUE5
CMP      BYTE PTR [SI+0B],3C  ; does comment contain address ? (XXXX:YYYY ;<)
JZ       015F                 ; yes --> CHANGEADDRESS
MOV      WORD PTR [SI+03],3C3B; write ';<' before 'YYYY'
MOV      WORD PTR [SI+09],203E; write '> ' after  'YYYY'
ADD      SI,03                ; skip 'XXX'
JMP      016E                 ; --> OUTPUTLINE
;<015F> CHANGEADDRESS:
MOV      AX,[SI+05]           ; replace address in comment
MOV      [SI+0C],AX
MOV      AX,[SI+07]
MOV      [SI+0E],AX
;<016B> CONTINUE5:
ADD      SI,0A                ; skip 'XXXX:YYYY '
;<016E> OUTPUTLINE:
CLD
LODSB                         ; read character and increment SI
MOV      DL,AL
CMP      DL,0D                ; is it a CR ?
JNZ      017C                 ; no --> CONTINUE6
CMP      [SI],DL              ; a second CR follows ?
JNZ      017C                 ; no --> CONTINUE6
INC      SI                   ; skip it
;<017C> CONTINUE6:
MOV      AH,02                ; output character
INT      21
CMP      DL,0A                ; was it a LF ?
JNZ      016E                 ; no  --> OUTPUTLINE
JMP      0118                 ; yes --> NEWLINE
;<0187> BUFFER:

RCX
87
W
Q
