;**************************************************************************
;
; Filename : TELBUCH.ASM
; ----------------------
;
; (c) 1991 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; elektronisches Telefonbuch
;
;
;**************************************************************************

MODUL_START	set	*	; Größe des Moduls berechnen



; =========================================================================
;
; Funktion	: Taste elektronisches Telefonbuch
;
; Eingang	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert im Accu
;
; Ausgang	: -------
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1993
;
; =========================================================================

key_telbuch	ldx #NTFKT_TELB	; NT Sonderfkt. TeleBuch
	cpx namsp_fkt
	bne key_tel_1	; Telebuch Taste wurde das erste Mal betätigt


	; ausgewählte Rufnummer wählen
	; ============================
	jsr key_ende	; alles andere beenden
	jsr telb_getnt	; NT Speicher Nr. holen
	jsr put_nt	; TMP Rufnummer wählen
	rmb ST_2SP,feap_stat	; 2.SP wieder deaktivieren
	rts	


	; Abrufmodus einschalten, Namen suchen
	; ====================================
key_tel_1	jsr key_ende	; alles andere beenden
	stx namsp_fkt	; NT Sonderfkt. TeleBuch
	ldy #LD_L|LD_ON	; LED-Wert laden
	jsr set_prgled	; und LED einschalten

	stz input_po	; Pointer auf 1. Input setzen
	smb MOD_TXT,modus	; Tasten haben Textfunktion eintragen
	ldy #KEYTXT_TELB	; Prg. Nr. für Textfunktion
	sty keytxt_prg	; und bei Text Taste ausführen

	ldx #<abr_tel_txt	; Abruf Text ausgeben
	ldy #>abr_tel_txt
	jmp puttxt


abr_tel_txt	byte DSP_CLR|CURS_ON
	shift "Name ?"



	; =======================================================
	; Einsprung bei Taste mit Textfuntion, ASCII Wert im Accu
	; =======================================================
telb_name
	block
	ldx input_po	; Pointer auf Buffer laden
	cpx #MAX_TEL_CHAR	; max. Anzahl Textzeichen eingegeben ?
	bcs end

	sta input_buff,x	; Tastenwert ablegen
	inc input_po	; Pointer auf Buffer+1


	; Eintrag der auf Eingabe passt suchen
	; ------------------------------------
	stz ntspec_nr	; 1. Telefonbuch Nr. einstellen
	ldx #0

nxt_telb	lda ntspec_nr	; akt. Telefonbuch Nr. laden
	cpx #0		; ist Text im akt. TelBuch gespeichert ?
	bne nxt_telb_1	; ja, kein freier Eintrag

	sta telb_free	; letzten freien Telbuch Eintrag merken
nxt_telb_1	jsr telb_settxt	; Text Adr. einstellen
	bcs no_telb	; Text Nr. ungültig

	inc ntspec_nr	; nächste Telefonbuch Nr. einstellen
	ldy #00		; Text Zeichen Cnt.
	ldx #00
loop	lda (ind_adr),y	; Zeichen aus TeleBuch Text Buffer holen
	beq nxt_telb	; keine weiteren Zeichen gespeichert

	inx
	cmp input_buff,y	; passt es zur Eingabe ?
	bne nxt_telb	; nö, nächsten Eintrag testen

	iny
	cpy input_po	; alle eingegebenen Zeichen verglichen ?
	bcc loop	; nö, weiter testen


	lda #"1"
	jsr putchar
	lda ntspec_nr	; akt. gefundenen Telbuch Eintrag holen
	dec a
	pha
	jsr putdez
	pla
	jsr telb_settxt	; Text Adr. einstellen
	bcs end

	jsr space
	lda (ind_adr)
	jsr putdez

	jmp puts	; akt. passenden Text ausgeben


;	smb MOD_NT_SPEC,modus	; NT-Speicher hat Sonderfkt.
;	stz ntspec_nr	; akt. Telefonbuch Nr.
;	jsr telb_getnt	; akt. NT Speicher Nr. holen
;	sta last_nt	; vorgaukeln das Taste bereits gedrückt wurde
; bra telbuch_out	; und ins Display


no_telb
	lda #"2"
	jsr putchar
	lda telb_free	; letzten freien Telbuch Eintrag holen
	pha
	jsr putdez
	pla

	jsr telb_settxt	; Text Adr. einstellen
	bcs end

	ldy input_po	; Pointer auf Buffer laden
	lda #0
	sta (ind_adr),y	; Tastenwert ablegen
	dey
	lda input_buff,y	; Text Eingabe holen
	sta (ind_adr),y	; Tastenwert ablegen
	jmp puts

end	rts
	bend



	; =====================================
	; Telbuch Text Nr. im Accu
	; Ausgang: SEC == ungültige Eintrag Nr.
	; =====================================
telb_settxt
	block
	cmp #MAX_TEL	; max. Anzahl der Einträge im Telefonbuch
	bcs end

	tax		; low Byte Mult
	lda #0		; high Byte Mult
	ldy #MAX_TEL_CHAR	; Anzahl Textzeichen je Eintrag
	jsr mul16_8	; Offset auf Textspeicher

	ldy #>teltxt_buff	; Adr. der Telbuch Texte einstellen
	sty hlp_reg
	ldy #<teltxt_buff
	jsr add16_16
	sta ind_adr+1
	stx ind_adr
	clc
end	rts
	bend



telbuch_out lda last_nt	; akt. NT Speicher Nr. laden
	rmb EDIT_NT,allg_stat	; Rufnr. ist zum editieren ausgegeben
	jmp keynam_sp	; Rufnr. der NT ausgeben und speichern




	; akt. gespeicherte Telefonbuch Nummer ausgeben
	; wird über namsp_fkt von keynam_sp aufgerufen
	; --------------------------------------------
put_telnt
	ldx #<telnt_txt	; Text ausgeben
	ldy #>telnt_txt
	jsr puttxt
	lda ntspec_nr	; akt. Nr. laden
	jsr putdez9	; und ausgeben
	jsr space
	lda last_nt	; akt. NT Speicher holen
	jmp put_nt	; Rufnummer der NT ausgeben/wählen


telnt_txt	byte CURS_ON
	shift "TelNT"






	; =====================================
	; Nr. der akt. NT für Telefonbuch holen
	; =====================================
telb_getnt	rmb ST_2SP,feap_stat	; erstmal 1.SP aktivieren
	lsr		; 2 Speicher je NT
	bcc telb_frstsp	; NT im 1. Speicher

	smb ST_2SP,feap_stat	; 2.SP ist aktiv
	clc 
telb_frstsp	adc #NT_TELBUCH	; 1. Telefonbuch NT
	rts





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

HLP	set	*
_TELBUCH	equ	HLP-MODUL_START		; Größe des Moduls

