; Doug's Programming Language  -- DPL, Version 2.22
; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
;----------------------------------------
; C M P R S S  -- COMPRESS THE SOURCE STRING & CONVERT TO UPPERCASE
;
; Entry conditions:
;	AX holds offset to source string
; Exit conditions:
;	DI,SI,AX,CX,FLAGS modified
;
; Calling Example:
;
;	DEFINE	M00,'This is "A test of THE" AMERICAN...'
;	;
;	CALL	CMPRSS M00
;
; Calling results:
;
;	M00 = 'THISIS"A test of THE"AMERICA...'
;
SUBPGM	CMPRSS
BEGIN	CMPRSS
	EXTRN	_STREND:NEAR
	PUSH	ES
	PUSH	DS
	POP	ES
	MOV	DI,AX
	MOV	SI,AX
	CALL	_STREND			; CX = LENGTH
	MOV	SI,DI			; RESTORE THE POINTER
;
CMP_05:
	LODSB				; FETCH THE CHARACTER
	OR	AL,AL			; TERMINATOR? 
	JZ	CMP_25			; YES, EXIT HOME
	CMP	AL,'a'			; LESS THAN 'a'?
	JL	CMP_07			; YES
	CMP	AL,'z'			; GT 'Z'?
	JG	CMP_08			; YES
	AND	AL,0DFH			; CONVERT THE CASE
	JMP	SHORT CMP_08
;
CMP_07:
	CMP	AL,' '			; BLANK?
	JE	CMP_05			; YES - TOSS IT
	CMP	AL,'I'-64		; TAB?
	JE	CMP_05			; YES - TOSS IT
;
CMP_08:
	STOSB
;
CMP_10:
	CMP	AL,'"'			; DOUBLE QUOTE MARK?
	JE	CMP_19			; NO, CONTINUE THE SEARCH
	CMP	AL,27H			; SINGLE QUOTE MARK?
	JNZ	CMP_05			; NO, CONTINUE THE SEARCH
;
CMP_19:
	MOV	AH,AL			; AH HOLDS THE MATCH
;
CMP_20:
	LODSB				; FETCH LITERAL STRING CHR
	STOSB
	OR	AL,AL
	JZ	CMP_25			; END, SO EXIT
	CMP	AL,AH			; CLOSING QUOTE?
	JNE	CMP_20			; NO, CONTINUE LOOPING
	JMP	SHORT CMP_05		; YES, CONTINUE WITH THE COMPRESS
;
CMP_25:
	MOV	[DI],AL			; SET THE TERMINATOR
	POP	ES
	RET
;
ENDPGM	CMPRSS
;


