home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
pascal
/
tplib21.zip
/
INSTALL.EXE
/
SUPAD.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-06-24
|
3KB
|
80 lines
; TURBO PASCAL LIBRARY 2.1
; Pad string module
TITLE UNIT STRINGS: Pad string module
PAGE 66,132
%BIN 12
CODE SEGMENT WORD
ASSUME CS:CODE
LOCALS
PUBLIC PADL, PADR
; FUNCTION PadL (s: STRING; width: BYTE): STRING
; Pad string with leading blanks to specified width
PADL PROC FAR
PUSH BP
MOV BP,SP ; Set up stack frame pointer
PUSH DS
LDS SI,DWORD PTR [BP+8] ; Point DS:SI to input string
LES DI,DWORD PTR [BP+12] ; Point ES:DI to output string
MOV CX,[BP+6] ; Get requested width in CX
XOR CH,CH
MOV BX,DI ; Keep copy of output address
CLD
LODSB
STOSB ; Transfer length to output
MOV DL,AL ; Keep input string length
CMP CL,AL
JBE @@L1 ; Skip if req len<=input length
MOV ES:[BX],CL ; Store req len as output len.
SUB CL,AL ; Calc. no. of blanks to add
MOV AL,20H
REP STOSB ; Store blanks in output string
@@L1: MOV CL,DL
XOR CH,CH ; Set CX to input-string length
REP MOVSB ; Transfer input to output
POP DS ; Restore and return
POP BP
RET 6
PADL ENDP
PAGE
; FUNCTION PadR (s: STRING; width: BYTE): STRING
; Pad string with trailing blanks to specified width
PADR PROC FAR
PUSH BP
MOV BP,SP ; Set up stack frame pointer
PUSH DS
LDS SI,DWORD PTR [BP+8] ; Point DS:SI to input string
LES DI,DWORD PTR [BP+12] ; Point ES:DI to output string
MOV CL,[SI]
XOR CH,CH ; Get input length in CX
MOV DX,CX ; Keep copy of input length
INC CX
MOV BX,DI ; Keep output length address
CLD
REP MOVSB ; Tranfer input to output
MOV CX,[BP+6] ; Get requested width in CX
XOR CH,CH
CMP CL,DL
JBE @@L1 ; Skip if no extra blanks
MOV ES:[BX],CL ; Store req width as output len
SUB CL,DL ; Number of blanks to add in CX
MOV AL,20H
REP STOSB ; Write blanks to output string
@@L1: POP DS ; Restore registers
POP BP
RET 6
PADR ENDP
CODE ENDS
END