home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
progm
/
dpl.zip
/
FSTRNG.D
< prev
next >
Wrap
Text File
|
1988-07-11
|
2KB
|
80 lines
; Doug's Programming Language -- DPL, Version 2.22
; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
;-------------------------------------------
; F S T R N G -- FIND A MATCH IN A SUBSTRING
;
; Entry Conditions:
; AX holds the match string offset
; BX holds the target string offset
; Exit conditions:
; Assume all working registers modified
; CARRY set = no match
; clear = match found
; AX holds the offset from the start
; of the target string to the match
;
; Calling Example:
;
; DEFINE M00,'this is a test'
; DEFINE M01,'is'
; ;
; CALL FSTRNG M01 M00
;
; Calling results:
;
; CARRY clear & AX = 2
;
; 'this is a test'
; ^OFFSET M00+AX
;
SUBPGM FSTRNG
BEGIN FSTRNG
EXTRN _STRLEN:NEAR
PUSH ES ; SAVE ALL SEGMENTS & INDEX REGISTERS
PUSH BP
PUSH SI
PUSH DI
;
PUSH DS
POP ES ; ES = DATA SEGMENT
CLD
;
MOV SI,AX ; GET THE MATCHING STRING
CALL _STRLEN ; GET THE LENGTH
MOV DX,CX ; DX HOLDS THE MATCH LENGTH
MOV AX,SI ; RESTORE THE MATCH ADDRESS
MOV DI,BX ; DI POINTS TO THE TARGET
PUSH BX ; SAVE A COPY FOR LATER
;
FSTR_05:
CMP BYTE PTR [DI],0 ; AT THE END?
JZ FSTR_20 ; YES, EXIT BAD
REPE CMPSB ; COMPARE TILL MISMATCH/EOL
JE FSTR_10 ; EXIT IF EQUAL
INC BX ; ADVANCE THE TARGET TO THE NEXT POSITION
MOV DI,BX ; SETUP FOR THE NEXT TRY
MOV SI,AX ; POINT TO THE BEGINNING OF THE SOURCE
MOV CX,DX ; GET THE LENGTH
JMP SHORT FSTR_05 ; TRY AGAIN...
;
FSTR_10:
MOV AX,BX ; BX POINTS TO THE START OF THE MATCH
POP BX ; GET THE ORIGINAL AGAIN...
SUB AX,BX ; AX HOLDS THE OFFSET COUNT
CLC
;
FSTR_15:
POP DI
POP SI
POP BP
POP ES
RET
;
FSTR_20:
POP AX ; FLUSH THE STACK...
STC ; EXIT BAD
JMP SHORT FSTR_15
;
ENDPGM FSTRNG
;