DataMuseum.dk

Presents historical artifacts from the history of:

Jet Computer Jet80

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Jet Computer Jet80

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦32b63876d⟧ TextFile

    Length: 2176 (0x880)
    Types: TextFile
    Names: »STRLOP.SRC«

Derivation

└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80)
    └─ ⟦this⟧ »STRLOP.SRC« 

TextFile

;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
	DAD	D	;TOP OF SECOND STRING
	PUSH	H
	MOV	E,B	;SIZE OF FIRST STRING
	DAD	D	;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
«eof»