home *** CD-ROM | disk | FTP | other *** search
- PAGE 66,132
- ;
- ;
- ;
- ;
- ;
- ; net_string - find a network string from a buffer
- ;
- ;
- ; (c) 1992 University of Waterloo,
- ; Faculty of Engineering,
- ; Engineering Microcomputer Network Development Office
- ;
- ;
- ;
- include masmdefs.hsm
- include model.hsm
-
- codedef net_string
- datadef
-
- cstart net_string
-
- ;*************************************************************************
- ; USAGE: int net_string( byte *buf, int buflen, byte *strbuf, int strbuflen )
- ; ALL POINTERS ASSUMED FAR
- ;*************************************************************************
- cpublic net_string
- push DS
- push ES
- cld
-
- lds SI, +@AB + 0 [BP]
- mov BX, +@AB + 4 [BP]
- les DI, +@AB + 6 [BP]
- mov CX, +@AB + 10 [BP]
-
- cmp CX, BX ; find the lesser, ie. max string len
- ja .0
- mov CX, BX
-
- .0: sub CX, 2 ; must leave room for the '\0'
- mov BX, CX ; need later
-
- .1: lodsb ; check each character to see if
- cmp AL, 0eh ; it is the string terminator
- jb .3 ; a likely suspect is investigated
- .2: stosb
- loop .1
- jcxz .4 ; quite done
- ; (MS-ASM generates phase error if we use JMP
- ; phase-error? Get a life Microsoft, figuring
- ; out the distance is pretty darn trivial,
- ; even DEBUG can do it!)
-
- .3: cmp AL, 0ah ; <lf>
- je .4
- cmp AL, 0dh ; <cr>
- jne .2 ; no, so continue
-
- ; this is still for <cr>, we erase the next character
- jcxz .5 ; no more characters - line incomplete
- dec CX
- jmp .4
-
- ; here we handle case when we didn't find a string
- .5:
-
- .4: xor AL, AL
- stosb
-
- ; now must return length of string to remove
- mov AX, BX
- sub AX, CX
- .6: pop ES
- pop DS
- creturn net_string
- cend net_string
- end
-