home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
pascal
/
tplib21.zip
/
INSTALL.EXE
/
SUTRIM.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-06-24
|
4KB
|
86 lines
; TURBO PASCAL LIBRARY 2.1
; Trim blanks module
TITLE UNIT STRINGS: Trim blanks module
PAGE 66,132
%BIN 12
CODE SEGMENT WORD
ASSUME CS:CODE
LOCALS
PUBLIC TRIML, TRIMR
; FUNCTION TrimL (s: STRING): STRING
; Trim leading blanks from string
TRIML PROC FAR
PUSH BP
MOV BP,SP ; Set up stack frame pointer
PUSH DS
LDS SI,DWORD PTR [BP+6] ; Point DS:SI to input string
LES DI,DWORD PTR [BP+10] ; Point ES:DI to output string
CLD
MOV BX,DI ; ES:BX points to output length byte
LODSB ; Get input-string length in CX
MOV CL,AL
XOR CH,CH
INC DI ; Skip output-length byte
MOV DL,CL ; Copy of input length in DL
JCXZ @@L4 ; Skip if null-string input
@@L1: LODSB ; Get next character
CMP AL,32 ; Check for blank
JE @@L2
CMP AL,9
JNE @@L3
@@L2: DEC DL ; If blank, dec. output length
LOOP @@L1 ; Go to next character
JMP SHORT @@L4
@@L3: STOSB ; If not blank, store in output
DEC CL
REP MOVSB ; Transfer remainder of string
@@L4: MOV ES:[BX],DL ; Store output length byte
POP DS
POP BP
RET 4
TRIML ENDP
PAGE
; FUNCTION TrimR (s: STRING): STRING
; Trim trailing blanks from string
TRIMR PROC FAR
PUSH BP
MOV BP,SP ; Set up stack frame pointer
PUSH DS
LDS SI,DWORD PTR [BP+6] ; Point DS:SI to input string
LES DI,DWORD PTR [BP+10] ; Point ES:DI to output string
STD
MOV CL,[SI] ; Get input length in CX
XOR CH,CH
JCXZ @@L3 ; Skip if null input string
ADD SI,CX ; Move SI to last character
@@L1: LODSB ; Get next character
CMP AL,32 ; Check for blank
JE @@L2
CMP AL,9
JNE @@L4
@@L2: LOOP @@L1 ; If blank, do next character
@@L3: MOV ES:[DI],CL ; Store zero length byte
JMP SHORT @@L5
@@L4: MOV ES:[DI],CL ; Store output length byte
INC SI ; DS:SI to last char. required
ADD DI,CX ; ES:DI to equivalent position
REP MOVSB ; Copy characters
@@L5: POP DS
POP BP
RET 4
TRIMR ENDP
CODE ENDS
END