
//*********************************************************
// Application 4200 HOTEL Terminal for CHECHIN / OUT
// with UA-Set 4034 and AFS
#include        "gdcglob.txt"
//
#define after_offhook   //getting the name after offhook
//#define english
//
//          1         2         3         4
//01234567890123456789012345678901234567890
//ASTORRE.   De --:-- ruh +100.00OES K 101
// Druck   Termin  Ruhe    Vorkas  CheOut>
//
#define _disp_name      0
#define _disp_language  11
#define _disp_dnd       20
#define _disp_mess      35
//
#define checkin_sk      sk_5
#define checkout_sk     sk_2
#define gu_offhook      255
#define gu_onhook       254
#define handsfree       28
//
#define line_key1       1
#define line_key2       2
#define line_key3       3
#define line_key4       4
#define line_key5       5
#define line_key6       6
#define line_key7       7
#define line_key8       8
//
#define sk_1            29
#define sk_2            30
#define sk_3            31
#define sk_4            32
#define sk_5            33
#define pfeil_l         34
#define pfeil_r         35
#define sk_s1           36
#define sk_s2           37
#define sk_s3           38
#define sk_s4           39
#define sk_s5           40
#define info_key        42
#define trenntaste      41
#define hotel_key       17
//
#define vta_l1          0xd100
#define vta_l2          0xd140
#define port_status_ch0 0xd47e
#define status_copy     0xd47e,0        //l max = 2
#define status_ch0      0xd460,0
#define connect_st      0xd460,1
#define command_reg     0xd460,3
#define voice_mode      0xd480,0
#define l1_update       0xd490,4
#define l2_update       0xd490,5
#define icon_update     0xd490,6
#define _sk1            1
#define _sk2            9
#define _sk3            17
#define _sk4            25
#define _sk5            33
//
// ICON Segmente
//
#define seg_a           7
#define seg_b           5
#define seg_c           3
#define seg_d           6
#define seg_e           4
#define seg_f           2
#define seg_g           1
#define seg_h           0
//*********************************************************
#define mess_startup1   " Alcatel UA-SET (4034) INTEFACE for AFS-II ***/n"
#define mess_startup2   " *4200AH32.DW0*  by HOERHAGER JOSEF AOHE     07//2008/n"
#define mess_startup3   " Modul 0 Ready for working !/l/n"
#define mess_nosubset   "/l  ERROR no UA-Subset found!!!/l/n"
//************************************************
// LED
//************************************************
#define led_mem_rt              0xd000
#define led_12                  12
#define led_error_own           led_12
//************************************************
// counters
//************************************************
#define status                  1
#define return_cnt              2
#define used_3                  3
#define error_cnt               4
#define timeout_counter         5
#define repeat_cnt              6
#define source_cnt              10
#define dest_cnt                11
#define amount                  12
//************************************************
// Strings
//************************************************
#define wstr                    s0
#define sk_text                 wstr,240
#define line_text               wstr,230
#define line1_text              wstr,220
#define my_led_rt               led_rt_m0
#define my_led_gn               led_gn_m0
//************************************************
// Moduls
//************************************************
#define modul_send              c3
//************************************************
// Buffers
//************************************************
//************************************************
// Konstant
//************************************************
#define timeout_mess            100     //units 1 sec
//
#define k_ring_timeout          20      //units 1 sec defines the timeout
//                                      //how long the call is aktiv
//
#define number_of_trys          3       // anzahl Versuche fr check_in,modyfy
#define led_start_gn            "10000000100000001000000010000000"
#define led_start_rt            "10000000n"
//***********************************************
// Language depends
//
#ifdef english
//***********************************************
// Strings on line1
//
#define room_number             "Room num"
#define reject_text             "Rejec"
#define service_ext             "Admin"
#define guest_name              "Guest na"
#define accepted_text           "Accept"
#define deposit_text_new        "Neue Vor"
#define deposit_text_add        "Add Depo"
#define wakeup_text             "Wake-Up"
#define lang_txt_it             "It"
#define lang_txt_fr             "Fr"
#define lang_txt_en             "En"
#define lang_txt_ge             "De"
#define language_text           "Language"
#define italian_text            "Italian"
#define france_text             "French"
#define english_text            "Engli"
#define german_text             "German"
#define dnd_text                "DND state"
#define inactive_text           "inactiv"
#define active_text             " activ"
#define external_calls_text     "External ca"
#define international_text      "Intern"
#define no_external_text        "No extern"
#define local_text              "Local"
#define national_text           "National"
#define disp_dnd_text_off       "dnd"
#define disp_dns_text_on        "DND"
//
//*****************************************
// Softkey defination
//
#define sk_txt_wakeup           "Wakeup"
#define sk_txt_dnd              " DND"
#define sk_txt_deposit          "Deposi"
#define sk_txt_checkout         "CheOut"
#define sk_txt_name             " Name"
#define sk_txt_language         " Lang"
#define sk_txt_barring          "Barrng"
#define sk_txt_password         "Passwd"
#define sk_txt_back             " Back"
#define sk_txt_choice           "Choice"
#define sk_txt_clear            "Clear"
//
#else
//***********************************************
// Strings on line1
//
#define room_number             "Zimmern"
#define reject_text             "Unzul"
#define service_ext             "Servi"
#define guest_name              "Gastn"
#define accepted_text           "Akzept"
#define deposit_text_new        "Neue Vor"
#define deposit_text_add        "Zus. Vor"
#define wakeup_text             "Weckzeit"
#define lang_txt_it             "It"
#define lang_txt_fr             "Fr"
#define lang_txt_en             "En"
#define lang_txt_ge             "De"
#define language_text           "Sprache"
#define italian_text            "Italien"
#define france_text             "Franz"
#define english_text            "Engli"
#define german_text             "Deutsch"
#define dnd_text                "Telefonr"
#define inactive_text           "ausge"
#define active_text             "einge"
#define external_calls_text     "Amtsgespr"
#define international_text      "Intern"
#define no_external_text        "hausberech"
#define local_text              "Cityn"
#define national_text           "National"
#define disp_dnd_text_off       "ruh"
#define disp_dns_text_on        "RUH"
//
//*****************************************
// Softkey defination
//
#define sk_txt_checkout         "CheOut"
#define sk_txt_password         "Pa????"
#define sk_txt_name             " Name"
#define sk_txt_back             "Zur?ck"
#define sk_txt_deposit          "Vorkas"
#define sk_txt_wakeup           "Termin"
#define sk_txt_clear            "L?sche"
#define sk_txt_language         "Sprach"
#define sk_txt_choice           "w?hlen"
#define sk_txt_dnd              "Ruhe"
#define sk_txt_barring          "RNSPro"

//
#endif

//***********************************************
//
        setbaud 1,9600,8,n,1
init_0:
        movd    "@@",status_ch0
        movd    "@@",status_copy
        setp    0x7f02,0x01
        mode_reco
        setc    0,0
        setc    1,0
        setc    2,0
        setc    3,6
        setc    4,0
        setc    timeout_counter,5
        setc    6,0
//        movd    "                                        /n",0xd100,0
//        movd    "                                        /n",0xd140,0
//        movd    "0",voice_mode
//
// send signon mess
//
//        setl    8,2
        movd    mess_startup1,wstr,100
        out     wstr,100,c4
        movd    mess_startup2,wstr,100
        out     wstr,100,c4
        movd    mess_startup3,wstr,100
        out     wstr,100,c4
//        setl    15,2
        movd    led_start_gn,my_led_gn,0
        movd    led_start_rt,my_led_rt,0
//
//*******************************************************************
//*******************************************************************
//*******************************************************************
// init subset
//*******************************************************************
//*******************************************************************
        //                 1111111111222222222233333333334444444444555555555566666666667777777777
//               012345678901234567890123456789012345678901234567890123456789012345678901234567890
        movd    " Wait for init UA-Subset after START!                                         /n",wstr,100
        acall   fread_dt
        movs    fdt_str,wstr,145,21
        out     wstr,100,c4
        movd    "xxxxxxxx/n",s15,240
        getp    port_status_ch0,bin
        movd    "/n",s15,248
        out     s15,240,c4
        sett    250
//
        jmp     err_main_wait
//
err_main:
//        setl    15,2
        //                 1111111111222222222233333333334444444444555555555566666666667777777777
//               012345678901234567890123456789012345678901234567890123456789012345678901234567890
        movd    " Wait for init UA-Subset!                                                     /n",wstr,100
        acall   fread_dt
        movs    fdt_str,wstr,145,21
        out     wstr,100,c4
        compd   "@",status_ch0
        jnz     test_init
        sett    250
//
err_main_wait:
        wait    tf_sign,cntl_sign
        case    tf_sign,test1_cntl
        movd    mess_nosubset,wstr,100
        out     wstr,100,c4
//
        decc    3
        jnz     err_main

        jmp     err_main
//
test1_cntl:
        case    cntl_sign,err_main
test_init:
        movd    "          CH0st1-CNTL-Sign/n",wstr,100
        movs    status_ch0,wstr,100,2
        movs    status_ch0,status_copy,2
        movd    "xxxxxxxx/n",s15,240
        getp    port_status_ch0,bin
        movd    "/n",s15,248
        out     wstr,100,c4
//
        out     s15,240,c4
//
        movd    "@D/n",wstr,100
        out     wstr,100,c4
        compd   "B",status_copy
        jnz     test_1_2
        movd    "                                        /n",0xd100,0
        movd    "                                        /n",0xd140,0
        movd    "0",voice_mode
        sett    250
        jmp     err_main_wait
//
test_1_2:
        compd   "1",port_b4
        jnz     err_main_wait
        compd   "1",port_b3
        jnz     err_main_wait
        movd    "X",status_ch0
main_1:
        //                 1111111111222222222233333333334444444444555555555566666666667777777777
//               012345678901234567890123456789012345678901234567890123456789012345678901234567890
        movd    " Init UA-Subset OKAY!                                                         /n",wstr,100
        acall   fread_dt
        movs    fdt_str,wstr,145,21
        setc    error_cnt,2
        out     wstr,100,c4
        movd    "@D/n",wstr,100
        out     wstr,100,c4
//        setl    15,0
        sett    250
        setc    3,4
//
        call    tx_wait
        vta_key info_key
        call    tx_wait
        vta_key info_key
        sett    10
        wait    tf_sign
        call    tx_wait
        vta_key trenntaste
        jmp     main_to
//
//***********************************************
        jmp     main_to
//*******************************************************************
//*******************************************************************
// init subset end
//*******************************************************************
//*******************************************************************
//
main_to:
        sett    30
main:
//        setl    8,1
afs_tl2:
;
l12_on:
        ;
led_8:
        wait    im_sign,rx_sign,tf_sign,cntl_sign,ans_sign
//        setl    8,2
//
//***********************************************
//***********************************************
//***********************************************
//***********************************************
        case    im_sign,test_rx
        in      wstr,0
        compd   "chst",wstr,0
        jz      ch_st_im
        compd   "tr",wstr,0
        jz      trenn_taste
        compd   "sk",wstr,0
        jz      send_skey
        compd   "info",wstr,0
        jz      info_taste
        compd   "offh",wstr,0
        jz      send_offhook
        compd   "onh",wstr,0
        jz      send_onhook
        vta_wrs wstr,0,20
        ansd    "OKAY/n"
//        setl    8,1
        jmp     main
;
send_offhook:
        vta_key gu_offhook
//        setl    8,1
        ansd    "OKAY/n"
        jmp     main
send_onhook:
        vta_key gu_onhook
//        setl    8,1
        ansd    "OKAY/n"
        jmp     main
send_skey:
        vta_skey        wstr,3
//        setl    8,1
        ansd    "OKAY/n"
        jmp     main
;
trenn_taste:
        vta_key 41
//        setl    8,1
        ansd    "OKAY/n"
        jmp     main
;
info_taste:
        vta_key 42
//        setl    8,1
        ansd    "OKAY/n"
        jmp     main
        ;
ch_st_im:
        ansd    "OK!/n"
        jmp     main
//
//***********************************************
//***********************************************
//***********************************************
//***********************************************
test_rx:
        case    rx_sign,test_tf
        clear   rx_sign
//        setl    8,1
        compd   "1",l1_update
        jnz     test_rx_skip1
        out     0xd100,0,c4
        movd    "0",l1_update
//
test_rx_skip1:
        compd   "1",l2_update
        jnz     test_rx_skip2
        out     0xd140,0,c4
        movd    "0",l2_update
//
test_rx_skip2:
        compd   "1",icon_update
        jnz     test_end
        movd    " Icon Update/n",wstr,100
        out     wstr,100,c4
        movd    "0",icon_update
//        ticon   1,seg_a,0           // test seg 1 = off
//        jz      test_i3
//
test_end:
        sett    4
        wait    tf_sign
        jmp     main_to
;
//***********************************************
//***********************************************
//***********************************************
test_tf:
        case    tf_sign,test_cntl
        decc    timeout_counter
        jnz     main_to
        setc    timeout_counter,timeout_mess
        movd    "          CH0-Timeout-Sign/n",wstr,100
        movs    status_ch0,wstr,100,2
        out     wstr,100,c4
        compd   "Xg",status_ch0
        jnz     ua_error
//
        jmp     test_subset
//
ua_error:
        movd    "X",status_ch0
        jmp     main_to
//***********************************************
//***********************************************
//***********************************************
//***********************************************
test_cntl:
        case    cntl_sign,test_answ
        movd    "          CH0-CNTL-Sign/n",wstr,100
        movs    status_ch0,wstr,100,2
        out     wstr,100,c4
        compd   "Xg",status_ch0
        jnz     ua_error
//        movd    "@",status_ch0
//        out     wstr,100,c4
        jmp     main
//
test_subset:
        call    tx_wait
        vta_key info_key
        sett    5
        wait    tf_sign
        call    tx_wait
        vta_key info_key
        sett    10
        wait    tf_sign
        call    tx_wait
        vta_key trenntaste
        jmp     main_to
//
//***********************************************
//***********************************************
//***********************************************
//***********************************************
//***********************************************
//***********************************************
//***********************************************
//***********************************************
//***********************************************
test_tx:
        case    tx_sign,test_answ
//        movd    "CH0-Tx-Sign/n",wstr,100
//        out     wstr,100,c4
        jmp     main
//***********************************************
//***********************************************
//***********************************************
//***********************************************
//***********************************************
test_answ:
        case    ans_sign,test_undef
//
loop_answ:
        movd    "                                                                              /n",wstr_m0,0
        readb   wstr_m0,0,m0_in
        jz      main
        movd    "/l>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/l/n",wstr,100
        out     wstr,100,c4
        out     wstr_m0,0,c4
        sendsig ans_sign,c0
        setc    repeat_cnt,number_of_trys
        jmp     change_st
//
error_ua_busy:
        movd    "UA-Subset is busy/n",wstr,100
        out     wstr,100,c4
        jmp     main
//
test_undef:
        movd    "CH0-Undefined event/n",wstr,100
        out     wstr,100,c4
        jmp     main
//
//***********************************************
//***********************************************
//***********************************************
//***********************************************
//*********************************************************
//***********************************************
//***********************************************
//***********************************************
clear_call:
        call    tx_wait
        vta_key handsfree
        sett    4
        wait    tf_sign
        call    tx_wait
        out     vta_l1,0,c4
        out     vta_l2,0,c4
        vta_key trenntaste
        call    tx_wait
        vta_key trenntaste
        call    rx_wait
        ret
//
//*********************************************************
//*********************************************************
//*********************************************************
//
change_st:
        setc    status,0
        compd   "I",wstr_m0,0
        jz      do_inter
        setc    status,30
        compd   "A",wstr_m0,0
        jz      do_arrive
        compd   "a",wstr_m0,0
        jz      do_arrive
        setc    status,60
        compd   "M",wstr_m0,0
        jz      do_modify
        compd   "m",wstr_m0,0
        jz      do_modify
        setc    status,90
        compd   "D",wstr_m0,0
        jz      do_checkout
        compd   "d",wstr_m0,0
        jz      do_checkout
change_err:
        movd    " ERROR Message not defined!!/n",wstr,100
        out     wstr,100,c4
        movd    "RnnnnnINV  J/n",wstr_m04,0
        movs    wstr_m0,1,wstr_m04,1,5
        writeb  wstr_m04,0,m0_out
        sendsig ans_sign,c3
        jmp     main
//
//##############################################################
do_inter:
        call    tx_wait
        vta_key hotel_key
        movd    room_number,line_text
        call    l1_wfor
        jnz     hotel_error
        incc    status
        movs    wstr_m0,_arrive_ext,param_1,5
        call    to_left
        movs    param_2,wstr_m0,200,20
        replace " /n",wstr_m0,200,20
        call    tx_wait
        vta_wrs wstr_m0,200,5
        call    l1_event
        compd   room_number,vta_l1,0
        jnz     sk3_rp
        call    l1_event
        compd   room_number,vta_l1,0
        jz      hotel_error
sk3_rp:
        compd   reject_text,vta_l1,0
        jz      unz_inter
        compd   service_ext,vta_l1,0
        jz      serv_inter
        compd   guest_name,vta_l1,0
        jz      notin_inter
        call    tx_wait
        vta_key sk_5
        call    tx_wait
        vta_key sk_1
        movd    "R.....    Q /n",wstr_m04,0
send_mess_c3:
        movd    "                    ",param_1
        movs    wstr_m0,1,param_1,5
        call    to_right
        movs    param_r5,wstr_m04,1,5
        writeb  wstr_m04,0,m0_out
        sendsig ans_sign,c3
        call    key_tr
        jmp     main
//
unz_inter:
        movd    "R.....INV RU/n",wstr_m04,0
        jmp     send_mess_c3
serv_inter:
        movd    "R.....INV RS/n",wstr_m04,0
        jmp     send_mess_c3
notin_inter:
        movd    "R.....INV RA/n",wstr_m04,0
        jmp     send_mess_c3
//
//*********************************************************
//
do_checkout:
        call    tx_wait
        vta_key hotel_key
        movd    room_number,line_text
        call    l1_wfor
        jnz     hotel_error
//
        incc    status
//
        movs    wstr_m0,_arrive_ext,param_1,5
        call    to_left
        movs    param_2,wstr_m0,200,20
        replace " /n",wstr_m0,200,20
        call    tx_wait
        vta_wrs wstr_m0,200,5
        call    l1_event
        compd   room_number,vta_l1,0
        jnz     sk2_rp
        call    l1_event
        compd   room_number,vta_l1,0
        jz      hotel_error
sk2_rp:
        compd   reject_text,vta_l1,0
        jz      unz_checkout
        compd   service_ext,vta_l1,0
        jz      serv_checkout
        compd   guest_name,vta_l1,0
        jz      notin_checkout
//
        call    sk_wait_cheout
        jnz     hotel_error
//
        incc    status
//
        movd    sk_txt_checkout,sk_text         // "CheOut"
        call    press_sk
        jnz     hotel_error
//
        incc    status
//
        movd    sk_txt_checkout,sk_text         // "CheOut"
        call    press_sk
//
        movd    "R.....    O /n",wstr_m04,0
        jmp     send_mess_c3
//
unz_checkout:
        movd    "R.....INV PU/n",wstr_m04,0
        jmp     send_mess_c3
serv_checkout:
        movd    "R.....INV PS/n",wstr_m04,0
        jmp     send_mess_c3
notin_checkout:
        movd    "R.....INV PA/n",wstr_m04,0
        jmp     send_mess_c3
//
//*********************************************************
//
do_arrive:
        call    tx_wait
        vta_key hotel_key
        movd    room_number,line_text
        call    l1_wfor
        jnz     hotel_error
        incc    status
        movs    wstr_m0,_arrive_ext,param_1,5
        call    to_left
        movs    param_2,wstr_m0,200,20
        replace " /n",wstr_m0,200,20
        call    tx_wait
        vta_wrs wstr_m0,200,5
        call    l1_event
        movd    " state1_room/n",wstr_m0,100
        out     wstr_m0,100,c4
        compd   room_number,vta_l1,0
        jnz     sk1_rp
        call    l1_event
        movd    " state2_room/n",wstr_m0,100
        out     wstr_m0,100,c4
        compd   room_number,vta_l1,0
        jz      hotel_error
sk1_rp:
        movd    " state3_room/n",wstr_m0,100
        out     wstr_m0,100,c4
        compd   reject_text,vta_l1,0
        jz      unz_arrive
        compd   service_ext,vta_l1,0
        jz      serv_arrive
//
// write name
//
        compd   guest_name,vta_l1,0
        jnz     notin_arrive
//
        movs    wstr_m0,_arrive_name,wstr_m0,200,20
        movd    "/n",wstr_m0,208
	compd	"        ",wstr_m0,200		// if no name set
	jnz	name_set
	movd	"Zimmer  /n",wstr_m0,200
name_set:  
        call    tx_wait
        vta_wrs wstr_m0,200,8
        call    rx_wait
        vta_key sk_5
        call    l1_event
        jnz     hotel_error
        incc    status
        compd   accepted_text,vta_l1,0
        jz      a_t_vorkasse
//
// check if deposit is to enter
//
        movd    deposit_text_new,line_text  // "Neue Vor"
        call    l1_wfor
        jnz     hotel_error
        incc    status
//
// is there any deposit
//
        compd   "         ",wstr_m0,_arrive_deposit
        jz      a_no_deposit
//
// fromat deposit
//
        movs    wstr_m0,_arrive_deposit,calc_p1,8
        movd    "0 ",calc_p2
        acall   add
        movd    "000000/n",wstr_m0,200
        movs    calc_erg_6dg,wstr_m0,200,6
        vta_wrs wstr_m0,200,6
        call    rx_wait
//
a_no_deposit:
        vta_key sk_5            // press okay
        movd    accepted_text,line_text         // "accepted"
        call    l1_wfor
        jnz     hotel_error
        incc    status
        jmp     a_t_sprache
//
a_t_vorkasse:
        movd    sk_txt_checkout,sk_text         // "CheOut"
        call    sk_wait
        jnz     hotel_error
        incc    status
        call    vorkasse
        jnz     hotel_error
        incc    status
//
// check terminruf to enter
//
a_t_sprache:
//
        call    sprache
//
        jnz     hotel_error
        incc    status
//
        call    nachricht
//
        jnz     hotel_error
        incc    status
//
        call    rns_pro
//
        jnz     hotel_error
        incc    status
//
        call    terminruf
//
        jnz     hotel_error
        incc    status
//
        call    ruhe
//
        jnz     hotel_error
        incc    status
        movd    "R.....    I /n",wstr_m04,0
//
// get checkin password
//
        movd    sk_txt_password,sk_text         // "Pa?wrt"
        call    press_sk
        jnz     hotel_error
        incc    status
        movd    room_number,line_text           // "Zimmern"
        call    l1_wfor
        jnz     hotel_error
        incc    status
//
a_read_passw:
        movs    vta_l1,17,wstr_m04,6,4
//
        vta_key sk_1
        movd    sk_txt_checkout,sk_text         // "CheOut"
        call    sk_wait
        jnz     hotel_error
        incc    status
        jmp     send_mess_c3
//
unz_arrive:
        movd    "R.....INV JU/n",wstr_m04,0
        jmp     send_mess_c3
serv_arrive:
        movd    "R.....INV JS/n",wstr_m04,0
        jmp     send_mess_c3
notin_arrive:
        compd   "a",wstr_m0,0
        jz      a_t_sprache
        movd    "R.....INV JA/n",wstr_m04,0
        jmp     send_mess_c3
//
//*********************************************************
//
do_modify:
        call    tx_wait
        vta_key hotel_key
        movd    room_number,line_text           // "Zimmern"
        call    l1_wfor
        jnz     hotel_error
        incc    status
//
        movs    wstr_m0,_arrive_ext,param_1,5
        call    to_left
        movs    param_2,wstr_m0,200,20,6
        replace " /n",wstr_m0,200,20
        call    tx_wait
        vta_wrs wstr_m0,200,5
        call    l1_event
        compd   room_number,vta_l1,0
        jnz     sk4_rp
        call    l1_event
        compd   room_number,vta_l1,0
        jz      hotel_error
sk4_rp:
        compd   reject_text,vta_l1,0            // "Unz"
        jz      unz_modify
        compd   service_ext,vta_l1,0            // "Serv"
        jz      serv_modify
        compd   guest_name,vta_l1,0             // "Gast"
        jz      notin_modify
//
        call    sk_wait_cheout
        jnz     hotel_error
        incc    status
//
        call    name
        jnz     hotel_error
        incc    status
//
// check if deposit is to enter
//
        call    vorkasse
        jnz     hotel_error
        incc    status
//
        call    sprache
        jnz     hotel_error
        incc    status
//
        call    nachricht
        jnz     hotel_error
        incc    status
//
        call    rns_pro
        jnz     hotel_error
        incc    status
//
// check terminruf to enter
//
        call    terminruf
        jnz     hotel_error
        incc    status
//
        call    ruhe
        jnz     hotel_error
        incc    status
//
        movd    "R.....    M /n",wstr_m04,0
//
// get checkin password
//
        compd   "    ",wstr_m0,_arrive_password
        jz      send_mess_c3
//
        movd    sk_txt_password,sk_text         // "Pa?wrt"
        call    press_sk
        jnz     hotel_error
        incc    status
        movd    room_number,line_text           // "Zimmern"
        call    l1_wfor
        jnz     hotel_error
        incc    status
//
m_read_passw:
        compd   "    ",wstr_m0,_arrive_password
        jz      m_only_read
        vta_key sk_3
        call    rx_wait
        movs    vta_l1,17,wstr_m04,6,4
//
        vta_key sk_5
        jmp     m_upd_wait
m_only_read:
        movs    vta_l1,17,wstr_m04,6,4
//
        vta_key sk_1
//
m_upd_wait:
        movd    sk_txt_checkout,sk_text         // "CheOut"
        call    sk_wait
        jnz     hotel_error
        jmp     send_mess_c3
//
unz_modify:
        movd    "R.....INV NU/n",wstr_m04,0
        jmp     send_mess_c3
serv_modify:
        movd    "R.....INV NS/n",wstr_m04,0
        jmp     send_mess_c3
notin_modify:
        movd    "R.....INV NA/n",wstr_m04,0
        jmp     send_mess_c3
//
//*********************************************************
//
hotel_error:
        movd    " Error on Hotel_key <   > Status!/n",wstr_m04,100
        movc    status,wstr_m04,121
        out     wstr_m04,100,c4
        out     vta_l1,0,c4
        out     vta_l2,0,c4
        out     wstr_m04,100,c4
        call    key_tr
//
//        compd   "a",wstr_m0,0
//        jz      hotel_err_end
//        compd   "m",wstr_m0,0
//        jz      hotel_err_end
//        compd   "d",wstr_m0,0
//        jz      hotel_err_end
        decc    repeat_cnt
        jz      hotel_err_end
//
        compd   "a",wstr_m0,0
        jz      do_a_err
        compd   "A",wstr_m0,0
        jnz     test_m_err
do_a_err:
        movd    "a",wstr_m0,0
        call    pr_try_again
        jmp     change_st
test_m_err:
        compd   "m",wstr_m0,0
        jz      do_m_err
        compd   "M",wstr_m0,0
        jnz     test_d_err
do_m_err:
        movd    "m",wstr_m0,0
        call    pr_try_again
        jmp     change_st
test_d_err:
        compd   "d",wstr_m0,0
        jz      do_d_err
        compd   "D",wstr_m0,0
        jnz     test_i_err
do_d_err:
        movd    "d",wstr_m0,0
        call    pr_try_again
        jmp     change_st
test_i_err:
hotel_err_end:
        movd    "RnnnnnINV  J/n",wstr_m04,0
        movd    " --> Hotel error end!!! /n",wstr_m04,100
        out     wstr_m04,100,c4
        out     wstr_m04,100,c4
        jmp     send_mess_c3
//
//*********************************************************
pr_try_again:
        movd    "/l >>>>>>>>>>>>>>>>>>> Try again RP_CNT=#   #/l/n",wstr_m04,100
        movc    repeat_cnt,wstr_m04,140
        out     wstr_m04,100,c4
        ret
//*********************************************************
//*********************************************************
//*********************************************************
//*********************************************************
//*********************************************************
name:
        compd   "         ",wstr_m0,_arrive_name
        jz      skip_name
        compd   "000000000",wstr_m0,_arrive_name
        jz      skip_name
        movs    vta_l1,_disp_name,line1_text,8
        replace ". ",line1_text,8
        comps   line1_text,wstr_m0,_arrive_name,8
        jnz     change_name
        movd    "  ---> Name equal, make no changes/n",wstr_m04,100
        out     wstr_m04,100,c4
        jmp     skip_name
change_name:
// changing name
        movd    sk_txt_name,sk_text             // " Name"
        call    press_sk
        jnz     nz_ret
        movd    guest_name,line_text            // "Gastname"
        call    l1_wfor
        jnz     nz_ret
        movs    wstr_m0,_arrive_name,line_text,8
        call    find_text_l1
        jz      name_zu
        vta_key sk_4            /loeschen
        call    l1_event
//
        movs    wstr_m0,_arrive_name,wstr_m0,200,20
        movd    "/n",wstr_m0,208
        vta_wrs wstr_m0,200,8
        call    l1_event
        jmp     p_okay
skip_name:
        call    sk_wait_cheout
        ret
name_zu:
        movd    sk_txt_back,sk_text             // "Zur?ck"
        call    press_sk
        jmp     skip_name
//
//*********************************************************
//*********************************************************
vorkasse:
//
// is there any deposit
//
        compd   "         ",wstr_m0,_arrive_deposit
        jz      s_no_deposit
//
// check if deposit is to enter
//
        movd    sk_txt_deposit,sk_text          // "Vorkas"
        call    press_sk
        movd    deposit_text_add,line_text          // "Zus. Vor"
        call    l1_wfor
        jnz     nz_ret
//
// fromat deposit
//
        movs    wstr_m0,_arrive_deposit,calc_p1,8
        movd    "0 ",calc_p2
        acall   add
        movd    "000000/n",wstr_m0,200
        movs    calc_erg_6dg,wstr_m0,200,6
        vta_wrs wstr_m0,200,6
        call    rx_wait
//
        jmp     p_okay
//
s_no_deposit:
        jmp     z_ret
//
//*********************************************************
//*********************************************************
//*********************************************************
//*********************************************************
//*********************************************************
terminruf:
        compd   "     ",wstr_m0,_arrive_wakeup
        jz      a_no_wakeup
        compd   "00000",wstr_m0,_arrive_wakeup
        jnz     a_set_wakeup
//
// clear wakeup
//
        call    tx_wait
        movd    sk_txt_wakeup,sk_text           // "Termin"
        call    press_sk
        jnz     termin_er
        movd    wakeup_text,line_text           // "Weckzeit"
        call    l1_wfor
        jnz     termin_er
        movd    sk_txt_clear,sk_text            // "L?sche"
        call    press_sknw
        jnz     termin_er
        call    l1_event
        jmp     p_okay
//
a_no_wakeup:
        call    sk_wait_cheout
        ret
//
a_set_wakeup:
        movd    sk_txt_wakeup,sk_text           // "Termin"
        call    press_sk
        call    tx_wait
        vta_wrs wstr_m0,_arrive_wakeup,4
        call    rx_wait
        jmp     p_okay
//
termin_er:
        call    sk_wait_cheout
        jmp     nz_ret
//
//*********************************************************
sprache:
        compd   " ",wstr_m0,_arrive_language
        jz      z_ret
        compd   "0",wstr_m0,_arrive_language
        jz      z_ret
//
        compd   "1",wstr_m0,_arrive_language
        jz      tl_germ
        compd   "2",wstr_m0,_arrive_language
        jz      tl_engl
        compd   "3",wstr_m0,_arrive_language
        jz      tl_franz
// test for italano
        compd   lang_txt_it,vta_l1,_disp_language       // "It"
        jnz     change_language
skip_language:
        movd    "  ---> Language equal, make no changes/n",wstr_m04,100
        out     wstr_m04,100,c4
        jmp     skip_name
// test for Franz.
tl_franz:
        compd   lang_txt_fr,vta_l1,_disp_language       // "Fr"
        jnz     change_language
        jmp     skip_language
// test for English.
tl_engl:
        compd   lang_txt_en,vta_l1,_disp_language       // "En"
        jnz     change_language
        jmp     skip_language
// test for German.
tl_germ:
        compd   lang_txt_ge,vta_l1,_disp_language       // "De"
        jnz     change_language
        jmp     skip_language
//
change_language:
        movd    sk_txt_language,sk_text             // "Sprach"
        call    press_sknw
        movd    language_text,line_text         // "Sprache"
        call    l1_wfor
        jnz     nz_ret
        compd   "1",wstr_m0,_arrive_language
        jz      l_germ
        compd   "2",wstr_m0,_arrive_language
        jz      l_engl
        compd   "3",wstr_m0,_arrive_language
        jz      l_franz
// Italano
        movd    italian_text,line_text          // "Italien"
        call    find_text_l1
        jz      p_zurueck               // is italien
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
        ret
//
// Franzsisch
//
l_franz:
        movd    france_text,line_text            // "Franz"
        call    find_text_l1
        jz      p_zurueck                       // is Franzsisch
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
        ret
//
// Englisch
//
l_engl:
        movd    english_text,line_text          // "Englisch"
        call    find_text_l1
        jz      p_zurueck                       // is Englisch
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
        ret
//
// Deutsch
//
l_germ:
        movd    german_text,line_text           // "Deutsch"
        call    find_text_l1
        jz      p_zurueck                       // is Deutsch
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
        ret
p_zurueck:
        movd    sk_txt_back,sk_text             // "Zur?ck"
        call    press_sknw
        movd    sk_txt_checkout,sk_text         // "CheOut"
        call    sk_wait
        ret
p_okay:
        movd    "Press OKAY/n",wstr,100
        out     wstr,100,c4
        vta_key sk_5
        movd    accepted_text,line_text         // "Akzep"
        call    l1_wfor
        jnz     perr_okay
        call    l1_wuntil
        movd    sk_txt_checkout,sk_text         // "CheOut"
        call    sk_wait
        ret
//
perr_okay:
        movd    sk_txt_checkout,sk_text         // "CheOut"
        call    sk_wait
        jmp     nz_ret

//
//*********************************************************
nachricht:
        jmp     z_ret
//
        compd   " ",wstr_m0,_arrive_dnd
        jz      z_ret
        movd    sk_txt_dnd,sk_text              // "Ruhe "
        call    press_sknw
        movd    dnd_text,line_text              // "Telefonr"
        call    l1_wfor
        jnz     nz_ret
        compd   "1",wstr_m0,_arrive_language
        jz      nachr_ein
// Ruhe aus
        movd    inactive_text,line_text         // "ausge"
        call    find_text_l1
        jz      p_zurueck                       // is ausgeschalten
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        ret
//
// Ruhe ein
//
nachr_ein:
        movd    active_text,line_text           // "einge"
        call    find_text_l1
        jz      p_zurueck                       // is eingeschalten
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        ret
        jmp     z_ret
//
//*********************************************************
rns_pro:
        compd   "  ",wstr_m0,_arrive_dod
        jz      z_ret
        compd   "00",wstr_m0,_arrive_dod
        jz      z_ret
        movd    sk_txt_barring,sk_text          // "RNSPro"
        call    press_sknw
        movd    external_calls_text,line_text   // "Amtsgespr"
        call    l1_wfor
        jnz     nz_ret
        compd   " 1",wstr_m0,_arrive_dod
        jz      rns_1
        compd   "01",wstr_m0,_arrive_dod
        jz      rns_1
        compd   " 2",wstr_m0,_arrive_dod
        jz      rns_2
        compd   "02",wstr_m0,_arrive_dod
        jz      rns_2
        compd   " 3",wstr_m0,_arrive_dod
        jz      rns_3
        compd   "03",wstr_m0,_arrive_dod
        jz      rns_3
// International
        movd    international_text,line_text    // "Intern"
        call    find_text_l1
        jz      p_zurueck                       // is international
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
        ret
//
// hausberechtigt
//
rns_1:
        movd    no_external_text,line_text      // "hausber"
        call    find_text_l1
        jz      p_zurueck                       // is hausberechtigt
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
        ret
//
// Citynetz
//
rns_2:
        movd    local_text,line_text            // "Cityne"
        call    find_text_l1
        jz      p_zurueck                       // is Citynet
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
        ret
//
// National
//
rns_3:
        movd    national_text,line_text         // "National"
        call    find_text_l1
        jz      p_zurueck                       // is National
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
        ret
//
//*********************************************************
ruhe:
        compd   " ",wstr_m0,_arrive_dnd
        jz      z_ret
        compd   "1",wstr_m0,_arrive_dnd
        jz      tdnd_ein
//
// test DND aus
//
        compd   disp_dnd_text_off,vta_l1,_disp_dnd      // "ruh"
        jnz     change_dnd
skip_ruhe:
        movd    "  ---> Do Not Disturb equal, make no changes/n",wstr_m04,100
        out     wstr_m04,100,c4
        jmp     skip_name
//
tdnd_ein:
        compd   disp_dns_text_on,vta_l1,_disp_dnd       // "RUH"
        jz      skip_ruhe
        jmp     change_dnd
//
change_dnd:
        movd    sk_txt_dnd,sk_text              // "Ruhe "
        call    press_sknw
        movd    dnd_text,line_text              // "Telefonr"
        call    l1_wfor
        jnz     nz_ret
        compd   "1",wstr_m0,_arrive_dnd
        jz      ruhe_ein
// Ruhe aus
        movd    inactive_text,line_text          // "ausge"
        call    find_text_l1
        jz      p_zurueck                       // is ausgeschalten
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        ret
//
// Ruhe ein
//
ruhe_ein:
        movd    active_text,line_text           // "einge"
        call    find_text_l1
        jz      p_zurueck               // is eingeschalten
//
        movd    sk_txt_choice,sk_text           // "w?hlen"
        call    press_sknw
        call    l1_wfor
        jz      p_okay
//
        ret
//***********************************************
// wait for displaystring in line 1
//      string for search in "line_text"
//
l1_wfor:
        movd    "0",l1_update
        call    find_text_l1
        jz      l1_wfor_end
l1_wfor_update:
        call    rx_wait
        jnz     l1_wfor_error
        compd   "1",l1_update
        jnz     l1_wfor_update
//
        movd    "0",l1_update
        compd   "          ",vta_l1,0
        jz      l1_wfor_update
        call    find_text_l1
        jz      l1_wfor_end
l1_wfor_error:
        movd    "Str *    * not found in line 1/n",wstr_m0,150
        movs    line_text,wstr_m0,155,4
        out     wstr_m0,150,c4
        jmp     nz_ret
l1_wfor_end:
        ret
//
//***********************************************
// wait for displaystring in line 1
//      string for search in "line_text"
//
l1_wuntil:
        movd    "0",l1_update
        call    find_text_l1
        jnz     l1_wuntil_end
l1_wuntil_update:
        call    rx_wait
        jnz     l1_wuntil_error
        compd   "1",l1_update
        jnz     l1_wuntil_update
//
        movd    "0",l1_update
        compd   "          ",vta_l1,0
        jz      l1_wuntil_update
        call    find_text_l1
        jnz     l1_wuntil_end
l1_wuntil_error:
        movd    "Str *    * found in line 1/n",wstr_m0,150
        movs    line_text,wstr_m0,155,4
        out     wstr_m0,150,c4
        jmp     nz_ret
l1_wuntil_end:
        jmp     z_ret
//***********************************************
l1_event:
        movd    "0",l1_update
l1_ev_update:
        call    rx_wait
        jnz     l1_ev_end
        compd   "1",l1_update
        jnz     l1_ev_update
//
l1_ev_end:
        ret
//
//***********************************************
l2_event:
        movd    "0",l2_update
l2_ev_update:
        call    rx_wait
        jnz     l2_ev_end
        compd   "1",l2_update
        jnz     l2_ev_update
//
l2_ev_end:
        ret
//
//***********************************************
//
find_text_l1:
        comps   line_text,vta_l1,0,4
        jz      l1_find_end
        comps   line_text,vta_l1,1,4
        jz      l1_find_end
        comps   line_text,vta_l1,2,4
        jz      l1_find_end
        comps   line_text,vta_l1,3,4
        jz      l1_find_end
        comps   line_text,vta_l1,4,4
        jz      l1_find_end
        comps   line_text,vta_l1,5,4
        jz      l1_find_end
        comps   line_text,vta_l1,6,4
        jz      l1_find_end
        comps   line_text,vta_l1,7,4
        jz      l1_find_end
        comps   line_text,vta_l1,8,4
        jz      l1_find_end
        comps   line_text,vta_l1,9,4
        jz      l1_find_end
        comps   line_text,vta_l1,10,4
        jz      l1_find_end
        comps   line_text,vta_l1,11,4
        jz      l1_find_end
        comps   line_text,vta_l1,12,4
        jz      l1_find_end
        comps   line_text,vta_l1,13,4
        jz      l1_find_end
        comps   line_text,vta_l1,14,4
        jz      l1_find_end
        comps   line_text,vta_l1,15,4
        jz      l1_find_end
        comps   line_text,vta_l1,16,4
        jz      l1_find_end
        comps   line_text,vta_l1,17,4
        jz      l1_find_end
        comps   line_text,vta_l1,18,4
        jz      l1_find_end
        comps   line_text,vta_l1,19,4
        jz      l1_find_end
        comps   line_text,vta_l1,20,4
        jz      l1_find_end
l1_find_end:
        ret
//
//
//*********************************************************
// wait for softkey text "CheOut" in sk5
//
sk_wait_cheout:
        compd   sk_txt_checkout,vta_l2,_sk5     // "CheOut"
        jz      z_ret
        sett    50
        wait    rx_sign,tf_sign
        case    rx_sign,skw_test_tf
        clear   rx_sign
        jmp     sk_wait_cheout
skw_test_tf:
        compd   sk_txt_checkout,vta_l2,_sk5     // "CheOut"
        jz      z_ret
        jmp     nz_ret
//
//*********************************************************
//
key_tr:
        call    tx_wait
        vta_key trenntaste
        call    tx_wait
        vta_key trenntaste
        call    rx_wait
        ret
//
dosend_skey:
        call    tx_wait
        vta_skey        wstr,5
        call    rx_wait
        ret
//
dial_string:
        call    tx_wait
        vta_wrs wstr,5,20
        call    rx_wait
        ret
//***********************************************
// wait for skoft key
//      string for softkey in "SK_TEXT"
//
sk_wait:
        movd    "0",l2_update
        comps   sk_text,vta_l2,_sk1,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk2,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk3,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk4,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk5,4
        jz      sk_wait_end
sk_wait_update:
        call    rx_wait
        jnz     sk_wait_error
        compd   "1",l2_update
        jnz     sk_wait_update
//
        movd    "0",l2_update
        compd   "                    ",vta_l2,0
        jz      sk_wait_update
        comps   sk_text,vta_l2,_sk1,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk2,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk3,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk4,4
        jz      sk_wait_end
        comps   sk_text,vta_l2,_sk5,4
        jz      sk_wait_end
sk_wait_error:
        movd    "Softkey  *    * not found on sk_wait/n",wstr_m0,150
        movs    sk_text,wstr_m0,160,4
        out     wstr_m0,150,c4
        jmp     nz_ret
sk_wait_end:
        ret
//
//***********************************************
// press_sk
//  druecke softkey given in string "sk_text"
//  sigificant length of string is 4 digits
//  returns z : if sk is pressed and line 2 is updated
//          nz: if sk is not found
press_sk:
        call    press_sknw
        jnz     presse_sk
        call    rx_wait
        jnz     error_pr_sk
        compd   "1",l2_update
        jnz     press_sk
presse_sk:
        ret
//
press_sknw:
        movd    " -----> Press Softkey:#    # /n",wstr,100
        movs    sk_text,wstr,123,4
        out     wstr,100,c4
        movd    "0",l2_update
        comps   sk_text,vta_l2,_sk1,4
        jz      press_1
        comps   sk_text,vta_l2,_sk2,4
        jz      press_2
        comps   sk_text,vta_l2,_sk3,4
        jz      press_3
        comps   sk_text,vta_l2,_sk4,4
        jz      press_4
        comps   sk_text,vta_l2,_sk5,4
        jz      press_5
        compd   ">",vta_l2,39   // extended softkeys?
        jnz     dir_left
        vta_key pfeil_r
pr_lo_1:
        call    rx_wait
        jnz     error_pr_sk
        compd   "1",l2_update
        jnz     pr_lo_1
        jmp     press_sknw
//
dir_left:
        movd    "0",l2_update
        comps   sk_text,vta_l2,_sk1,4
        jz      press_1
        comps   sk_text,vta_l2,_sk2,4
        jz      press_2
        comps   sk_text,vta_l2,_sk3,4
        jz      press_3
        comps   sk_text,vta_l2,_sk4,4
        jz      press_4
        comps   sk_text,vta_l2,_sk5,4
        jz      press_5
        compd   "<",vta_l2,0   // extended softkeys?
        jnz     sk_not_found
        vta_key pfeil_l
pr_lo_2:
        call    rx_wait
        jnz     error_pr_sk
        compd   "1",l2_update
        jnz     pr_lo_2
        jmp     dir_left
//
sk_not_found:
        movd    "Softkey  *    * not found on press_sk/n",wstr_m0,150
        movs    sk_text,wstr_m0,160,4
        out     wstr_m0,150,c4
        jmp     nz_ret
//
press_1:
        vta_key sk_1
common_pr_sk:
        jmp     z_ret
        ret
press_2:
        vta_key sk_2
        jmp     common_pr_sk
press_3:
        vta_key sk_3
        jmp     common_pr_sk
press_4:
        vta_key sk_4
        jmp     common_pr_sk
press_5:
        vta_key sk_5
        jmp     common_pr_sk
//
error_pr_sk:
        vta_key trenntaste
        jmp     nz_ret
//***********************************************
to_wait:
        sett    1
        wait    tf_sign
        ret
//***********************************************
        movd    "000",l1_update
//
rx_wait:
        clear   rx_sign
        sett    40
rx_wait_l:
        wait    rx_sign,tf_sign
        case    rx_sign,rx_w_tf
        out     vta_l1,0,c4
        out     vta_l2,0,c4
        movd    " Flags: ... /n",wstr,100
        movs    l1_update,wstr,108,3
        out     wstr,100,c4
        jmp     z_ret
//
rx_w_tf:
        case    tf_sign,rx_wait_l
        movd    "  Timeout 4 sec on waiting rx_sign!!!/n",wstr,100
        out     wstr,100,c4
        jmp     nz_ret1
//
//***********************************************
//
tx_wait:
        sett    50
        wait    tx_sign,tf_sign
        case    tx_sign,test_tx_tf
        jmp     z_ret
test_tx_tf:
        case    tf_sign,tx_wait
        movd    " Error on TX_WAIT. No TX_signal after 5 sec./n",wstr,100
        out     wstr,100,c4
        jmp     nz_ret
//
//***********************************************
// to_right	input: param_1 string to justify to right
//		output: param_2 justified string
//			param_1 cleared
//		lenght: 20 char
//     using: counter 10,11,12
//
to_right:
//               01234567890123456789
        movd    "                    >/n",param_2
//      out     param_1,c4
        setc    12,20   //number of char
	setc	10,219	//source
	setc	11,239	//destination
lto_right:
        compd   " ",s14,c10
	jnz	mto_right
	decc	10
	decc	12
	jnz	lto_right
//               01234567890123456789
        movd    "                    ",param_1
//        out     param_1,c4
        ret
//
mto_right:
	movs	s14,c10,s14,c11,1
	decc	10
	decc	11
	decc	12
        jnz     mto_right
//               01234567890123456789
        movd    "                    ",param_1
//        out     param_1,c4
	ret
//***********************************************
//***********************************************
// to_left     input: param_1 string to justify to left
//		output: param_2 justified string
//			param_1 cleared
//		lenght: 20 char
//     using: counter 10,11,12
//
to_left:
        movd    "                    ",param_2
	setc	12,20	//number of char
	setc	10,200	//source
	setc	11,220	//destination
lto_left:
        compd   " ",s14,c10
	jnz	mto_left
	incc	10
	decc	12
	jnz	lto_left
	movd	"                   ",param_1
	ret
//
mto_left:
	movs	s14,c10,s14,c11,1
	incc	10
	incc	11
	decc	12
        jnz     mto_left
        movd    "                   ",param_1
	ret
//***********************************************
//************************************************
// z_ret
// input: -
// output: return Z
//         use cnt 2
//
z_ret:
        setc    2,1
        decc    2
        ret
//
//************************************************
// nz_ret
// input: -
// output: return nz
//         use cnt 2
//
nz_ret:
nz_ret2:
        setc    2,1
        incc    2
        ret
//
//************************************************
// nz_ret
// input: -
// output: return nz
//         use cnt 2
//
nz_ret1:
        setc    2,2
        decc    2
        ret
//
//************************************************
//************************************************
// Buffer 0 init
//
// Aufruf:       call    Init_b0
//
init_b0:
        setp    0XD300,badr_0_high      //beginn adresse high
        setp    0XD301,0x00             //beginn adresse low
//
        setp    0Xd302,lbuff_0_high     //bufferlaenge high
        setp    0XD303,0x00             //bufferlaenge low
//
        setp    0Xd304,lbuff_0_high     //anzahl bytes free high
        setp    0XD305,0x00             //anzahl bytes free low
//
        setp    0Xd306,badr_0_high      //input zeiger high
        setp    0XD307,0x00             //input zeiger low
//
        setp    0Xd308,lbuff_0_high     //input laenge bis bufferende high
        setp    0XD309,0x00             //input laenge bis bufferende low
//
        setp    0Xd30A,badr_0_high      //output zeiger high
        setp    0XD30B,0x00             //output zeiger low
//
        setp    0Xd30C,lbuff_0_high     //output laenge bis bufferende high
        setp    0XD30D,0x00             //output laenge bis bufferende low
//
        setp    0XD30E,modnum_0         //modulnummer falls in modulmem
//
        ret
//
//************************************************
// Buffer 1 init
//
// Aufruf:       call    Init_b1
//
init_b1:
        setp    0Xd310,badr_1_high      //beginn adresse high
        setp    0Xd311,0x00             //beginn adresse low
//
        setp    0Xd312,lbuff_1_high     //bufferlaenge high
        setp    0Xd313,0x00             //bufferlaenge low
//
        setp    0Xd314,lbuff_1_high     //anzahl bytes free high
        setp    0Xd315,0x00             //anzahl bytes free low
//
        setp    0Xd316,badr_1_high      //input zeiger high
        setp    0Xd317,0x00             //input zeiger low
//
        setp    0Xd318,lbuff_1_high     //input laenge bis bufferende high
        setp    0Xd319,0x00             //input laenge bis bufferende low
//
        setp    0Xd31A,badr_1_high      //output zeiger high
        setp    0Xd31B,0x00             //output zeiger low
//
        setp    0Xd31C,lbuff_1_high     //output laenge bis bufferende high
        setp    0Xd31D,0x00             //output laenge bis bufferende low
//
        setp    0Xd31E,modnum_1         //modulnummer falls in modulmem
//
        ret
//
//************************************************
// Buffer 2 init
//
// Aufruf:       call    Init_b2
//
init_b2:
        setp    0Xd320,badr_2_high      //beginn adresse high
        setp    0Xd321,0x00             //beginn adresse low
//
        setp    0Xd322,lbuff_2_high     //bufferlaenge high
        setp    0Xd323,0x00             //bufferlaenge low
//
        setp    0Xd324,lbuff_2_high     //anzahl bytes free high
        setp    0Xd325,0x00             //anzahl bytes free low
//
        setp    0Xd326,badr_2_high      //input zeiger high
        setp    0Xd327,0x00             //input zeiger low
//
        setp    0Xd328,lbuff_2_high     //input laenge bis bufferende high
        setp    0Xd329,0x00             //input laenge bis bufferende low
//
        setp    0Xd32A,badr_2_high      //output zeiger high
        setp    0Xd32B,0x00             //output zeiger low
//
        setp    0Xd32C,lbuff_2_high     //output laenge bis bufferende high
        setp    0Xd32D,0x00             //output laenge bis bufferende low
//
        setp    0Xd32E,modnum_2         //modulnummer falls in modulmem
//
        ret
//
//************************************************
// Buffer 3 init
//
// Aufruf:       call    Init_b3
//
init_b3:
        setp    0Xd330,badr_3_high      //beginn adresse high
        setp    0Xd331,0x00             //beginn adresse low
//
        setp    0Xd332,lbuff_3_high     //bufferlaenge high
        setp    0Xd333,0x00             //bufferlaenge low
//
        setp    0Xd334,lbuff_3_high     //anzahl bytes free high
        setp    0Xd335,0x00             //anzahl bytes free low
//
        setp    0Xd336,badr_3_high      //input zeiger high
        setp    0Xd337,0x00             //input zeiger low
//
        setp    0Xd338,lbuff_3_high     //input laenge bis bufferende high
        setp    0Xd339,0x00             //input laenge bis bufferende low
//
        setp    0Xd33A,badr_3_high      //output zeiger high
        setp    0Xd33B,0x00             //output zeiger low
//
        setp    0Xd33C,lbuff_3_high     //output laenge bis bufferende high
        setp    0Xd33D,0x00             //output laenge bis bufferende low
//
        setp    0Xd33E,modnum_3         //modulnummer falls in modulmem
//
        ret
//
//*******************************************************************
//************************************************
// Buffer 4 init
//
// Aufruf:       call    Init_b4
//
init_b4:
        setp    0Xd340,badr_4_high      //beginn adresse high
        setp    0Xd341,0x00             //beginn adresse low
//
        setp    0Xd342,lbuff_4_high     //bufferlaenge high
        setp    0Xd343,0x00             //bufferlaenge low
//
        setp    0Xd344,lbuff_4_high     //anzahl bytes free high
        setp    0Xd345,0x00             //anzahl bytes free low
//
        setp    0Xd346,badr_4_high      //input zeiger high
        setp    0Xd347,0x00             //input zeiger low
//
        setp    0Xd348,lbuff_4_high     //input laenge bis bufferende high
        setp    0Xd349,0x00             //input laenge bis bufferende low
//
        setp    0Xd34A,badr_4_high      //output zeiger high
        setp    0Xd34B,0x00             //output zeiger low
//
        setp    0Xd34C,lbuff_4_high     //output laenge bis bufferende high
        setp    0Xd34D,0x00             //output laenge bis bufferende low
//
        setp    0Xd34E,modnum_4         //modulnummer falls in modulmem
//
        ret
//
//*******************************************************************
//
//
//************************************************
zzz:

end
