; Testprogramm für GVAL-Funktion (Parameterübergabe an Programme)

		cpu	z80

CONBU:		EQU	80H		;CCP ZEICHENKETTENPUFFER
INTLN:		equ	0100h		; interner Zeichenkettenpuffer
OCRLF:		EQU	0F2FEH
OUTA:		EQU	0F305H
OSPAC:		EQU	0F310H
GVAL		equ	0F1EAh
	
		org	300h
		
;-------------------------------------------------------------------------------
; Kommando-Rahmen
;-------------------------------------------------------------------------------

		jp	para		
;		db	"TESTPARA", 0
		db	"T       ", 0
		db	0

;-------------------------------------------------------------------------------
; TESTPARA
;-------------------------------------------------------------------------------

para:		ex	af, af'
		jr	c, ende			; keine weiteren Parameter
		
next_param:	
		call	anz_conbu		; Anzeige CONBU

;nächsten Parameter holen		
		call	gval

; GVAL
; Funktion: Löschen internen Puffer (INTLN).
; 	    Übernahme Parameter aus CONBU nach INTLN
; 	    Test auf Parameterart
; 	    Konvertieren Parameter, wenn dieser ein Wert ist
; Return
; 	Parameter: Z  1 Parameter war Dezimalzahl
; 		      0 Parameter war keine Zahl
; 		   CY  0 kein Fehler
; 		       1 Fehler im Parameter
; 		   A  Konvertierte Dezimalzahl, wenn Z = 1 und CY = 0
; 		   C  den Parameter begrenzendes Trennzeichen
; 		   B  Länge des Parameters
; 		   HL  Adresse des nächsten Zeichens in CONBU
; 		   CY’ 0 weitere Parameter in CONBU (ist in Doku falsch!)
; 		       1 keine weiteren Parameter (ist in Doku falsch!)
; 		   A’ den Parameter begrenzendes Trennzeichen
; 		   INTLN  Länge des Parameters
; 		   INTLN+1. . . übernommener Parameter
; 		   CONBU übernommener Parameter und Trennzeichen gelöscht mit
; 			 Leerzeichen

		jr	z,zahl_parameter
		
		call	prnst
		db	"Text ", 0
		jr	para1
zahl_parameter:		
		push	af
		call	prnst
		db	"Zahl ", 0
		pop	af

		jr	nc, para1		; Fehler in Zahl?
		call	prnst
		db	"mit Fehler! ",0

para1:		call	prnst
		db	"Laenge=", 0
		ld	a, (INTLN)		; Länges des Parameters
		add	a,'0'
		call	OUTA
		call	OSPAC

		ld	a, (INTLN)
		or	A
		jr	z,para2			; bei Länge 0 nicht anzeigen

		ld	de, INTLN+1
		ld	c,9
		call	5			; Anzeige Text	
	
para2		call	OCRLF
		ex	af, af'
		jr	c, ende			; wenn kein Parameter folgt
		jr	next_param
;
;
ende:		call	anz_conbu
		call	prnst
		db	"-- kein weiterer Parameter --"
		db	0dh,0ah,0
;		
		or	a
		ret
;

;------------------------------------------------------------------------------
;Ausgabe String, bis 0
;-------------------------------------------------------------------------------
;
prnst:		EX	(SP),HL			;Adresse hinter CALL
PRS1:		LD	A,(HL)
		INC	HL
		or	A			;Ende (A=0=?
		JR	Z, PRS2			;ja
		CALL	OUTA
		JR	PRS1			;nein
PRS2:		EX	(SP),HL			;neue Returnadresse
		RET


;-------------------------------------------------------------------------------
; Anzeige CONBU
;-------------------------------------------------------------------------------
anz_conbu:	call	prnst
		db	"CONBU >", 0
		
		ld	de, CONBU+2
anz		ld	c,9
		call	5
		ld	a, '<'
		call	outa
		call	OCRLF
		ret

;------------------------------------------------------------------------------


		end
