;:open4,4
;:sys36864; assembler starten
	;.opt p4	; assembler - option
	*= $c000	; startadresse

	
; inform - routine
; nh-230890-arr
; syntax = sys 49152, len, var$

	
getx	=$b7f1	; holt wert nach sys
komma	=$aefd	; holt komma nach sys
frestr	=$b6a3	; string vorbereiten
strres	=$b475	; platz fuer string reservieren
findvar	=$b08b	; variable nach sys holen
tmp	=2	; eingabezaehler
len	=3	; maximale laenge
strout	=$ab1e	; text ausgeben
para	=$61	; stringparameter
varadr	=$49	; adresse der variablen
crs1	=$cc	; cursor on/off
crs2	=$cd	; cursor blinkstatus
crs3	=$cf	; cursor hell/dunkel
latch	=$334	; eingabepuffer
get	=$ffe4	; gedrueckte taste holen
print	=$ffd2	; zeichen ausgeben
quote	=212	; hochkommamodus
ret	=$aad7	; crlf ausgeben

	
inform	jsr getx	; maximale eingabelaenge nach x holen
	stx len	; und merken
	jsr komma	; komma holen
	jsr findvar	; variable holen
	sta varadr	; adresse low
	sty varadr+1	; und high merken
	jsr frestr	; auf string testen
	ldx #0	; eingabe vorbereiten
	stx tmp	; zeichenzaehler
keylp	lda #0
	sta crs1	; cursor einschalten
wait	jsr get	; taste holen
	beq wait	; auf taste warten
	ldx #1	; cursor
	stx crs2	; dunkelschalten
coff	ldx crs3	; warten, bis cursor
	bne coff	; ausgeblinkt hat
	inc crs1	; cursor ausschalten
	cmp #13	; return-taste pruefen
	bne text	; nein, dann unten weiter
; return-taste beendet eingabe
	lda tmp	; anzahl der eingegebenen zeichen
	jsr strres	; platz fuer text im speicher
	ldy #2	; descriptor kopieren
setpar	lda para,y
	sta (varadr),y	; in variable schreiben
	dey	; weiter
	bpl setpar	; noch nicht null
	iny	; ergibt null
settxt	cpy tmp	; schon alle zeichen kopiert
	beq carried	; ja, dann fertig
	lda latch,y	; ein zeichen der eingabe lesen
	sta (para+1),y	; in string schreiben
	iny	; naechstes zeichen
	bne settxt	; unbedingter sprung
carried	jmp ret	; fertig, neue bildschirmzeile
; eingabe auswerten
text	cmp #20	; del-taste pruefen
	beq del	; ja, dann ein zeichen loeschen
; pruefen, ob eingabe druckbar
	cmp #32	; kleiner als 32
	bcs ok1	; nein, ok
; zeichen nicht druckbar
wrong	jmp keylp	; dann eingabe ignorieren
ok1	tax	; n-flag setzen
	bpl ok	; kleiner 128, dann ok
	cmp #149	; kleiner 149,
	bcc wrong	; dann falsch
	cmp #156	; kleiner 156,
	bcc ok	; dann ok
	cmp #160	; kleiner 160,
	bcc wrong	; dann ok
; zeichen druckbar
ok	ldx tmp	; nr. des zeichens in text
	cpx len	; maximale laenge pruefen
	bcs wrong	; eingabe zu lang
	sta latch,x	; eingabe speichern
	jsr print	; und ausgeben
	lda #0	; quotemodus loeschen
	sta quote	; (falls anf.zeichen)
	inc tmp	; nummer erhoehen
	jmp keylp	; naechste eingabe
; delete-taste
del	ldx tmp	; erstes zeichen
	beq wrong	; dann ungueltig
	lda #<delt	; delete-text
	ldy #>delt	; ausgeben
	jsr strout	; string ausgeben
	dec tmp	; und zeichen loeschen
	jmp keylp	; naechste eingabe
; delete-text
delt	.byte "\x9d \x9d"	; crsr links, space, crsr links
	.byt 0	; stringende
;
	.end
