home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
norge.freeshell.org (192.94.73.8)
/
192.94.73.8.tar
/
192.94.73.8
/
pub
/
computers
/
cpm
/
alphatronic
/
PASCALZ4.ZIP
/
D3
/
STRLOP.SRC
< prev
next >
Wrap
Text File
|
1999-04-05
|
2KB
|
104 lines
;STRING RELATIVE OPERATIONS
;
NAME STRLOP
ENTRY .STREQL,.STRNQL,.STRGRT,.STRGEQ,.STRLSS,.STRLEQ
;
LTIND EQU 1 ;< INDIC.
GEIND EQU 2 ;>= INDIC.
EQIND EQU 3 ;= INDIC.
LEIND EQU 4 ;<= INDIC.
GTIND EQU 5 ;> INDIC.
.STREQL CALL STRCMP ;EQUAL
CPI EQIND
JRNZ NTTRU
JR TRU
.STRNQL CALL STRCMP ;NOT EQUAL
CPI EQIND
JRZ NTTRU
JR TRU
.STRGRT CALL STRCMP ;GREATER THAN
CPI GTIND
JRNZ NTTRU
JR TRU
.STRLSS CALL STRCMP ;LESS THAN
CPI LTIND
JRNZ NTTRU
JR TRU
.STRGEQ CALL STRCMP ;GREATER THAN OR EQUAL
CPI GEIND
JRC NTTRU
JR TRU
.STRLEQ CALL STRCMP ;LESS THAN OR EQUAL
CPI LEIND
JRNC NTTRU
JR TRU
TRU: XRA A
STC
RET
NTTRU XRA A
RET
STRCMP: LXI H,3
DAD S ;SKIP 2 RETURN ADDRESSES
MVI D,0
MOV E,C ;SIZE OF SECOND STRING - 1
DAD D
INX H ;TOP OF SECOND STRING
PUSH H
MOV E,B ;SIZE OF FIRST STRING - 1
DAD D
INX H ;TOP OF FIRST STRING
POP D
PUSH H ;HL <- TOP OF FIRST STRING
PUSH D ;DE <- TOP OF SECOND STRING
MOV A,M ;ACTUAL LENGTH OF FIRST STRING
CPI 0 ;ZERO LENGTH?
JRZ ST1ZER ;YES, CHECK SECOND STRING
LDAX D ;ACTUAL LENGTH OF SECOND STRING
CPI 0 ;ZERO LENGTH?
JRZ HGRT ;FIRST NOT ZERO, SECOND IS- FIRST GREATER
CMP M ;NEITHER IS ZERO LENGTH
JRC DCNTR
MOV B,M ;B <- SHORTER ACT. LENGTH FOR COUNTING
JR CMPR
DCNTR: MOV B,A
CMPR: DCX H ;CHAR OF FIRST STRING
DCX D ;CHAR OF SECOND STRING
DCR B ;CHAR. COUNTER
LDAX D
CMP M ;COMPARE THEM
JRC HGRT ;FIRST IS GREATER
JRNZ DGRT ;SECOND IS GREATER
XRA A ;CHARS. EQUAL - LAST CHAR?
CMP B
JRNZ CMPR ;NO, TRY NEXT CHARS
POP D ;LAST CHARS EQUAL
POP H
LDAX D ;WHICH IS LONGER STRING?
CMP M
JRC HLONG
JRNZ DLONG
STREQU: MVI A,EQIND ;EQUAL STRINGS
JR CLNUP
HGRT POP D
POP H
HLONG MVI A,GTIND ;FIRST IS LONGER
JR CLNUP
DGRT POP D
POP H
DLONG MVI A,LTIND ;SECOND IS LONGER
CLNUP POP D ;CLEAN UP STACK
POP B
INX H
SPHL
PUSH B
XCHG
PCHL ;AND RETURN
ST1ZER: LDAX D ;LENGTH OF SECOND STRING
CPI 0
JRNZ DGRT ;SECOND STRING NOT ZERO, 2ND IS GREATER THAN 1ST
POP D ;BOTH HAVE ZERO LENGTH, EQUAL
POP H
JR STREQU