; more source code at http://www.ahjoe.com/source/srcdown.asp .286 PUBLIC REPLACE, SEARCHB, SEARCHW, GETSTR, OUTSTR, STRLEN PUBLIC COPYSTR, SRCHSTR CODE SEGMENT ASSUME CS:CODE REPLACE PROC FAR ; IN: ; DS:DX=STRING ; AL=OLD CHAR ; BL=NEW CHAR ; OUT: ; CF=0 OK ; CF=1 ERROR PUSH DI MOV DI, DX REPLR0: CMP [DI], AL JZ REPLOK0 INC DI JC REPLAERR JMP REPLR0 REPLOK0: MOV [DI], BL REPLAERR: POP DI RETF REPLACE ENDP STRLEN PROC FAR ; IN: ; DS:DX=STRING ; OUT: ; CF=0 AX=STRING LENGTH ; CF=1 ERROR PUSH DI MOV DI, DX XOR AX, AX STRLENREP: CMP BYTE PTR [DI], 0 JZ STRLENOK INC DI JC STRLENOK INC AX JC STRLENOK JMP STRLENREP STRLENOK: POP DI RETF STRLEN ENDP SEARCHB PROC FAR ; IN: ; DS:DX=STRING ; AL=CHAR ; OUT: ; CF=0 ZF=1 DS:DX=STRING END (NULL) ; CF=0 ZF=0 DS:DX=CHAR POSITION ; CF=1 ERROR PUSH DI MOV DI, DX DEC DI CLD RESCHB: INC DI JC SCHBOVER CMP BYTE PTR [DI], 00 JZ SCHBOVER CMP BYTE PTR [DI], AL JNZ RESCHB OR AL, AL SCHBOVER: MOV DX, DI POP DI RETF SEARCHB ENDP SEARCHW PROC FAR ; IN: ; DS:DX=STRING ; AX=CHAR WORD ; OUT: ; CF=0 ZF=1 DS:DX=STRING END (NULL) ; CF=0 ZF=0 DS:DX=CHAR POSITION ; CF=1 ERROR PUSH DI MOV DI, DX DEC DI CLD RESCHW: INC DI JC SCHWOVER CALL SEARCHB MOV DI, DX JZ SCHWOVER CMP [DI+1], AH JNZ RESCHW OR AX, AX SCHWOVER: MOV DX, DI POP DI RETF SEARCHW ENDP GETSTR PROC FAR ; IN: ; DS:DX=BUFFER [DX]=MAX LENGTH ; OUT: ; DS:DX=BUFFER WITH STRING (NULL END) [DX+1]=REALITY LENGTH PUSH BX MOV AH, 0AH INT 21H MOV AL, 0DH MOV BL, 0 ADD DX, 2 CALL REPLACE SUB DX, 2 POP BX RETF GETSTR ENDP OUTSTR PROC FAR ; IN: ; DS:DX=BUFFER WITH STRING (NULL END) ; BL=COLOR ; BH=0 OUT AT CURRENT POSITION ; 1 CH=X_CORD CL=Y_CORD PUSH AX PUSH BX PUSH CX PUSH DI MOV DI, DX MOV DX, CX XCHG DH, DL CMP BH, 0 JNZ OUTNEX MOV AH, 03 INT 10H OUTNEX: MOV BH, 0 MOV AH, 02 INT 10H OUTREP: MOV AL, [DI] INC DI OR AL, AL JZ OUTEND MOV AH, 09H CMP AL, 20H JA OUTJ0 CMP AL, 09H JZ TABCHA MOV AH, 0EH INT 10H MOV AH, 3 INT 10H JMP OUTREP TABCHA: ADD DL, 8 AND DL, NOT 07H DEC DL JMP INCDL OUTJ0: MOV CX, 1 INT 10H MOV AH, 03 INT 10H INCDL: INC DL CMP DL, 50H JB OUTJ2 MOV AX, 0E0DH INT 10H MOV AX, 0E0AH INT 10H JMP OUTJ3 OUTJ2: MOV AH, 02 INT 10H OUTJ3: JMP OUTREP OUTEND: POP DI POP CX POP BX POP AX RETF OUTSTR ENDP COPYSTR PROC FAR ; IN: ; DS:SI = SOURCE STRING(NULL END) ; ES:DI = DEST STRING CLD COPYREP: LODSB STOSB OR AL, AL JNZ COPYREP COPYOK: RETF COPYSTR ENDP SRCHSTR PROC FAR ; IN: ; DS:SI = SUB_STRING ; ES:DI = MAIN_STRING ; OUT: ; ZF=0 FOUND, ES:BX = FOUND POSITION ; ZF=1 NOT FOUND PUSH SI PUSH DI PUSH CX PUSH DX MOV CX, SI MOV DX, DI CLD REPEA0: CMPREPEA: CMP BYTE PTR DS:[SI], 0 JZ FOUNDSTR CMP BYTE PTR ES:[DI], 0 JZ FOUNDOVER CMPSB JZ CMPREPEA INC DX MOV SI, CX MOV DI, DX JMP REPEA0 FOUNDOVER: CMP BYTE PTR ES:[DI], 1 JMP FOUNDSTR RETF FOUNDSTR: MOV BX, DX POP DX POP CX POP DI POP SI RETF SRCHSTR ENDP CODE ENDS END REPLACE