home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / as65 / demo / s2 / telbuch.asm < prev    next >
Assembly Source File  |  1995-02-27  |  5KB  |  237 lines

  1. ;**************************************************************************
  2. ;
  3. ; Filename : TELBUCH.ASM
  4. ; ----------------------
  5. ;
  6. ; (c) 1991 by Thomas Lehmann
  7. ;
  8. ;
  9. ; Jackophone V5.00
  10. ;
  11. ;
  12. ; elektronisches Telefonbuch
  13. ;
  14. ;
  15. ;**************************************************************************
  16.  
  17. MODUL_START    set    *    ; Größe des Moduls berechnen
  18.  
  19.  
  20.  
  21. ; =========================================================================
  22. ;
  23. ; Funktion    : Taste elektronisches Telefonbuch
  24. ;
  25. ; Eingang    : Offset auf Tastaturtabelle in X-Reg.
  26. ;    : Tastenwert im Accu
  27. ;
  28. ; Ausgang    : -------
  29. ;
  30. ; Register    : Accu, X, Y
  31. ;
  32. ; (c) by Thomas Lehmann März 1993
  33. ;
  34. ; =========================================================================
  35.  
  36. key_telbuch    ldx #NTFKT_TELB    ; NT Sonderfkt. TeleBuch
  37.     cpx namsp_fkt
  38.     bne key_tel_1    ; Telebuch Taste wurde das erste Mal betätigt
  39.  
  40.  
  41.     ; ausgewählte Rufnummer wählen
  42.     ; ============================
  43.     jsr key_ende    ; alles andere beenden
  44.     jsr telb_getnt    ; NT Speicher Nr. holen
  45.     jsr put_nt    ; TMP Rufnummer wählen
  46.     rmb ST_2SP,feap_stat    ; 2.SP wieder deaktivieren
  47.     rts    
  48.  
  49.  
  50.     ; Abrufmodus einschalten, Namen suchen
  51.     ; ====================================
  52. key_tel_1    jsr key_ende    ; alles andere beenden
  53.     stx namsp_fkt    ; NT Sonderfkt. TeleBuch
  54.     ldy #LD_L|LD_ON    ; LED-Wert laden
  55.     jsr set_prgled    ; und LED einschalten
  56.  
  57.     stz input_po    ; Pointer auf 1. Input setzen
  58.     smb MOD_TXT,modus    ; Tasten haben Textfunktion eintragen
  59.     ldy #KEYTXT_TELB    ; Prg. Nr. für Textfunktion
  60.     sty keytxt_prg    ; und bei Text Taste ausführen
  61.  
  62.     ldx #<abr_tel_txt    ; Abruf Text ausgeben
  63.     ldy #>abr_tel_txt
  64.     jmp puttxt
  65.  
  66.  
  67. abr_tel_txt    byte DSP_CLR|CURS_ON
  68.     shift "Name ?"
  69.  
  70.  
  71.  
  72.     ; =======================================================
  73.     ; Einsprung bei Taste mit Textfuntion, ASCII Wert im Accu
  74.     ; =======================================================
  75. telb_name
  76.     block
  77.     ldx input_po    ; Pointer auf Buffer laden
  78.     cpx #MAX_TEL_CHAR    ; max. Anzahl Textzeichen eingegeben ?
  79.     bcs end
  80.  
  81.     sta input_buff,x    ; Tastenwert ablegen
  82.     inc input_po    ; Pointer auf Buffer+1
  83.  
  84.  
  85.     ; Eintrag der auf Eingabe passt suchen
  86.     ; ------------------------------------
  87.     stz ntspec_nr    ; 1. Telefonbuch Nr. einstellen
  88.     ldx #0
  89.  
  90. nxt_telb    lda ntspec_nr    ; akt. Telefonbuch Nr. laden
  91.     cpx #0        ; ist Text im akt. TelBuch gespeichert ?
  92.     bne nxt_telb_1    ; ja, kein freier Eintrag
  93.  
  94.     sta telb_free    ; letzten freien Telbuch Eintrag merken
  95. nxt_telb_1    jsr telb_settxt    ; Text Adr. einstellen
  96.     bcs no_telb    ; Text Nr. ungültig
  97.  
  98.     inc ntspec_nr    ; nächste Telefonbuch Nr. einstellen
  99.     ldy #00        ; Text Zeichen Cnt.
  100.     ldx #00
  101. loop    lda (ind_adr),y    ; Zeichen aus TeleBuch Text Buffer holen
  102.     beq nxt_telb    ; keine weiteren Zeichen gespeichert
  103.  
  104.     inx
  105.     cmp input_buff,y    ; passt es zur Eingabe ?
  106.     bne nxt_telb    ; nö, nächsten Eintrag testen
  107.  
  108.     iny
  109.     cpy input_po    ; alle eingegebenen Zeichen verglichen ?
  110.     bcc loop    ; nö, weiter testen
  111.  
  112.  
  113.     lda #"1"
  114.     jsr putchar
  115.     lda ntspec_nr    ; akt. gefundenen Telbuch Eintrag holen
  116.     dec a
  117.     pha
  118.     jsr putdez
  119.     pla
  120.     jsr telb_settxt    ; Text Adr. einstellen
  121.     bcs end
  122.  
  123.     jsr space
  124.     lda (ind_adr)
  125.     jsr putdez
  126.  
  127.     jmp puts    ; akt. passenden Text ausgeben
  128.  
  129.  
  130. ;    smb MOD_NT_SPEC,modus    ; NT-Speicher hat Sonderfkt.
  131. ;    stz ntspec_nr    ; akt. Telefonbuch Nr.
  132. ;    jsr telb_getnt    ; akt. NT Speicher Nr. holen
  133. ;    sta last_nt    ; vorgaukeln das Taste bereits gedrückt wurde
  134. ; bra telbuch_out    ; und ins Display
  135.  
  136.  
  137. no_telb
  138.     lda #"2"
  139.     jsr putchar
  140.     lda telb_free    ; letzten freien Telbuch Eintrag holen
  141.     pha
  142.     jsr putdez
  143.     pla
  144.  
  145.     jsr telb_settxt    ; Text Adr. einstellen
  146.     bcs end
  147.  
  148.     ldy input_po    ; Pointer auf Buffer laden
  149.     lda #0
  150.     sta (ind_adr),y    ; Tastenwert ablegen
  151.     dey
  152.     lda input_buff,y    ; Text Eingabe holen
  153.     sta (ind_adr),y    ; Tastenwert ablegen
  154.     jmp puts
  155.  
  156. end    rts
  157.     bend
  158.  
  159.  
  160.  
  161.     ; =====================================
  162.     ; Telbuch Text Nr. im Accu
  163.     ; Ausgang: SEC == ungültige Eintrag Nr.
  164.     ; =====================================
  165. telb_settxt
  166.     block
  167.     cmp #MAX_TEL    ; max. Anzahl der Einträge im Telefonbuch
  168.     bcs end
  169.  
  170.     tax        ; low Byte Mult
  171.     lda #0        ; high Byte Mult
  172.     ldy #MAX_TEL_CHAR    ; Anzahl Textzeichen je Eintrag
  173.     jsr mul16_8    ; Offset auf Textspeicher
  174.  
  175.     ldy #>teltxt_buff    ; Adr. der Telbuch Texte einstellen
  176.     sty hlp_reg
  177.     ldy #<teltxt_buff
  178.     jsr add16_16
  179.     sta ind_adr+1
  180.     stx ind_adr
  181.     clc
  182. end    rts
  183.     bend
  184.  
  185.  
  186.  
  187. telbuch_out lda last_nt    ; akt. NT Speicher Nr. laden
  188.     rmb EDIT_NT,allg_stat    ; Rufnr. ist zum editieren ausgegeben
  189.     jmp keynam_sp    ; Rufnr. der NT ausgeben und speichern
  190.  
  191.  
  192.  
  193.  
  194.     ; akt. gespeicherte Telefonbuch Nummer ausgeben
  195.     ; wird über namsp_fkt von keynam_sp aufgerufen
  196.     ; --------------------------------------------
  197. put_telnt
  198.     ldx #<telnt_txt    ; Text ausgeben
  199.     ldy #>telnt_txt
  200.     jsr puttxt
  201.     lda ntspec_nr    ; akt. Nr. laden
  202.     jsr putdez9    ; und ausgeben
  203.     jsr space
  204.     lda last_nt    ; akt. NT Speicher holen
  205.     jmp put_nt    ; Rufnummer der NT ausgeben/wählen
  206.  
  207.  
  208. telnt_txt    byte CURS_ON
  209.     shift "TelNT"
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.     ; =====================================
  217.     ; Nr. der akt. NT für Telefonbuch holen
  218.     ; =====================================
  219. telb_getnt    rmb ST_2SP,feap_stat    ; erstmal 1.SP aktivieren
  220.     lsr        ; 2 Speicher je NT
  221.     bcc telb_frstsp    ; NT im 1. Speicher
  222.  
  223.     smb ST_2SP,feap_stat    ; 2.SP ist aktiv
  224.     clc 
  225. telb_frstsp    adc #NT_TELBUCH    ; 1. Telefonbuch NT
  226.     rts
  227.  
  228.  
  229.  
  230.  
  231.  
  232. ; --------------------------------------------------------------------------
  233.  
  234. HLP    set    *
  235. _TELBUCH    equ    HLP-MODUL_START        ; Größe des Moduls
  236.  
  237.