//
//************************************************
//
//  downloading programm for channl3
//  opi-modul
//
//************************************************
// Project Patienten Notruf B„renhof am Felsenbad
//************************************************
//
//   using: str 12 for work
//
//*********************************************************
//  COMMON AFS DEFINES
//
#define csra    0Xfc81
#define csrb    0Xfc89
#define csrc    0Xfc91
#define csrd    0xfc99
#define baud_300        0X44
#define baud_1200       0X66
#define baud_2400       0X88
#define baud_4800       0X99
#define baud_9600       0Xbb
#define calc_p1         s15,210
#define calc_p2         s15,220
#define calc_erg        s15,230
#define calc_erg6       s15,232
#define calc_erg4       s15,234
#define calc_rest       s15,240
#define calc_erg_flag   s15,204
#define dt_str          s15,180
#define fdt_str         s15,150
#define lfdt_str        21
#define dt_str_year     s15,180
#define dt_str_month    s15,182
#define dt_str_day      s15,184
#define dt_str_weekday  s15,186
#define dt_str_hour     s15,188
#define dt_str_minute   s15,190
//
#define dbs_para        s15,100
#define dbs_pointer     s15,102
#define dbs_search_str  s15,0
#define dbs_str         s14
#define dbs_str_0       s14,0
//
//***********************************************
// dtmf definition
//
#define str_dtmf        s15
#define _dtmf_pos       50
#define first_digit_wait        80
#define inter_digit             40
//
#define number_of_dtmf  11
#define l_password              4
//
//***********************************************
#define signon_1        "Project: Patienten Notruf B„renhof am Felsenbad V 2.0/n"
#define signon_2        "MOD     3<3 by Hoerhager Josef AOH ready!/n"
//
//
#define current_min          s14,230     //l= 8
//
//***********************************************
// definitionen for the 2824
//
#define a2824_display_l1     0xd400,0
#define a2824_display_l2     0xd400,42   //l= max 41
#define ch2824               c0
//
#define a2824_a1_cr          s11,100     //l= max 3
#define a2824_a1_cr_sub      s11,105     //l= max 3
#define a2824_a1_num         s11,110     //l= max 20
#define a2824_a1_posnum      110
#define a2824_a1_code        s11,130     //l= max 10
#define a2824_a1_poscode     130
#define a2824_a1_mess        s11,140     //l= max 20
#define a2824_a1_posmess     140
//
//************************************************
//
#define calling_extension       a2824_a1_num
#define l_extension             4
//
//*********************************************************
#define wstr                            s9
#define par_save                        s8
// par_save,150 - par_save,255          parameter
// par_save,120 l=30                    number of LF to the printer
#define modul_state                     s11,0   //l = 5
#define dbs_pointersub                  s11,5   //l = 5
#define save_cr                         s11,10  //l = 5
#define time_alarm                      s11,15  //l = 10
#define mess_nr                         s11,25  //l = 5
#define str_alarm1_ext                  s11,30  //l = 20
#define str_alarm2_ext                  s11,50  //l = 10
#define str_watchhandy                  s11,70  //l = 10
#define test_2824_state                 s11,240  //l = 10
//
//************************************************
// Database definition
//
#define _extension      0
#define _dispon         4
#define _blink          5
#define _bltime         6
#define _pr_ext         16
#define _pr_name        22
//
#define k_timeout       "6   "
//
//*******************************************************************
//
setup_0:
        setbaud 1,9600,8,n,1
        mode_reco
        movd    "        /n",s15,210
        movs    s15,210,s15,220,10
        movs    s15,210,s15,230,10
        movs    s15,210,s15,240,10
        setl    11,2            //modul busy
        setl    12,2
        setl    13,2
        setl    14,2
;        setl    15,2
        call    init_notruf
        compd   "CONFIG",par_save,200        //config mess (internal usage)
        jz      setup_1
//
// first init default
//
        call    dbs_3_init
        call    dbs_0_init
        movd    "return from <dbs_3_init> und <dbs_0_init> okay!/n",s12,100
        out     s12,100,c4
//
// setup default parameter
//
        movd    "CONFIG   ",par_save,200    //set config
        movd    "789      ",par_save,210    //Notruf TLN
        movd    "13       ",par_save,220    //Number of LF
        movd    "5        ",par_save,230    //Timeout for auto clear
        //      (used for flash)
        movd    "1234     ",par_save,240    //DTMF Clear-code
//
//**********************************************************
// configuration of paging-parameter default
//
        movd    "         ",par_save,150     //default for dialing after displaymessage
        movd    "         ",par_save,160     //default for dialing after pager#
        movd    "694      ",par_save,170     //default pager-number
        movd    "3        ",par_save,180     //default for dialing befor pager#
        movd    "B2  ",par_save,190          //default route for paging
        movd    "N ",par_save,195            //default wait for no tone
        movd    "Y ",par_save,197            //default no paging
        movd    "Z",par_save,199             //for setting z-flag
//
//**********************************************************
//
        clear   s14,0
        setc    9,0                     //lfd-nr counter
        setc    5,0
setup_1:
//
//**********************************************************
// setup par_save,120 number of lf
// using cnt 7,8
//
        movd    "                     /n",par_save,120
        movc    par_save,220,7          //cnt 7 anzahl
        setc    8,70                    //destination
        setc    6,20                    //maximale anzahl
lf_set:
        movd    "/l",par_save,c8
        incc    8
        decc    7
        jz      cr_set
        decc    6
        jnz     lf_set
cr_set:
        movd    "/n",par_save,c8
//
//**********************************************************
// setup headerstring for printer
//
//**********************************************************
//
        call    pr_startup              // message to printer
        setl    11,2
        setl    6,0
//
//**********************************************************
// send message to servicemonitor
//
        movd    signon_1,s12,0
        out     s12,0,c4
        movd    signon_2,s12,0
        out     s12,0,c4
        setc    0,0             //begin of timeout test
//
        movd    " /l/n",s12,11
        out     s12,0,c4         //to sv-mon
reset_01:
reset_0:
main:
        setl    11,1
        setl    12,0
        setl    13,0
        setl    14,0
//       setl    15,0
        movd    "3<3",s12,8
        setl    11,1     //modul ready
        compc   1,0      //test error
        jz     setup_0
        sett    2               //wait timeout 200 msec
//
//**********************************************************
// wait for signal
//
        wait    cntl_sign,tf_sign,im_sign
        //
        // signal on demand
        // set channl is busy LED
        setl    11,2
//
test_cntl:
        case    cntl_sign,test_tf_sign
        movd    "WM 3 Message<                                                            >/n",wstr,0
        movs    a2824_a1_cr,wstr,13,60
        out     wstr,0,c4
        compd   "RING",a2824_a1_mess
        jz      m3_ring
        movd    "   ",a2824_a1_cr
        jmp     main
//
//*********************************************************
// Watchman init
//
init_notruf:
        movd    "0  ",modul_state
        movd    "000 ",dbs_pointersub
        movd    "0       ",time_alarm
        movd    "   ",a2824_a1_cr               //
        ret
//
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//**********************************************************
// message ring
//**********************************************************
// incomming call
//
m3_ring:
        setl    11,2
//
        movd    "AT*A/n",wstr,100
        out     wstr,100,ch2824           //offhook
//
//***********************************************
// state 1 wait connect
//
        movd    "1   ",modul_state
        movd    "Modul 3 STATE=       /n",wstr,0
        movs    modul_state,wstr,15,3
        out     wstr,0,c4
//
main_st1:
        sett    100                     //timer 10sec
        wait    tf_sign,cntl_sign
        case    tf_sign,test_st1_cntl
//
// State 1 timeout
//
m3_onhook:
        call    h2824_onhook
        jmp     main
//
test_st1_cntl:
        case    cntl_sign,main_st1
        movd    "WM 3 Message<                                                            >/n",wstr,0
        movs    a2824_a1_cr,wstr,13,60
        out     wstr,0,c4

        compd   "CONN",a2824_a1_mess
        jz      m3_connect

        compd   "CLEARED",a2824_a1_mess
        jz      m3_onhook

        compd   "DISC",a2824_a1_mess
        jz      m3_onhook
//
        jmp     main_st1
//
//*********************************************************
// call connected
// test if starting watchman
//
m3_connect:
//***********************************************
// state 2 wait connect
//
        movd    "2   ",modul_state
        movd    "Modul 3 STATE=       /n",wstr,0
        movs    modul_state,wstr,15,3
        out     wstr,0,c4
//
        compd   "    ",a2824_a1_num
        jnz     m3_with_number
//**************************************************************************
no_number:
        call    send_error
        call    h2824_onhook
        jmp     main
//
m3_with_number:
//
// set pointer to dbs-reco for storage the name of the subsciber
//
test_notruf:
//
              movd    "3 0          ",s15,100
              acall   pfirst_dbs
              movs    a2824_a1_num,s15,0,4
              acall     find_dbs
              jz        test_for_clear
//
//*********************************************************
//
// Notruf extension was not found in the DBS 3
// Activate printout and save it in the DBS 3
// find free record in DBS3
//
              movd      "3 0 ",s15,100
              acall   pfirst_dbs
              movd    "    ",s15,0
              acall     find_dbs
              jnz       space_error_dbs
//
// now setup the strings to printout and store in the DBS 3
// Store extension# in DBS3
//
        movd    "    10      /n",s14,0
        movd    k_timeout,s14,_bltime
        movs    a2824_a1_num,s14,0,4
        acall   write_dbs
        out     s14,0,c4
//
activate:
        sett    10
//
// setup lines for printing
//
        call      prstart_notr
//
        sendsig   ans_sign,c1     //activate terminal display
        call    send_ack
//
// now wait timeout for ring a the emergency extension.
//
        wait    tf_sign
        call    h2824_onhook
        jmp     main
//
//***********************************************
//
reactivate:
        call    send_error
        sett    10
//
// setup lines for printing
//
        call      prwrong_notr
        call      prrestart_notr
//
              sendsig   ans_sign,c1     //activate terminal display
//
// now wait timeout for ring a the emergency extension.
//
        wait    tf_sign
        call    h2824_onhook
        jmp     main
//
//**********************************************************
//
space_error_dbs:
              call      prdbs_error
              jmp       activate
//
//**********************************************************
//
// If the callers number was found in the DBS3 send a request ton
// and wait 5 sec for DTMF digits. Wait for DTMF code up to four
// digits to test if the staff will delete a emegency call.
//
test_for_clear:
check_clear:
// call is from an extension found in the dbs
// check the password for clearing the call from the terminalscreen
//
        call    get_passw
        jnz     reactivate          // error
        comps   str_dtmf,_dtmf_pos,par_save,240,l_password
        jnz     reactivate
//
// request is emergency call clear.
//
              movd    "3 0          ",s15,100
              acall   pfirst_dbs
              movs    a2824_a1_num,s15,0,4
              acall     find_dbs
              jnz       skip_clear
              movd      "            ",s14,0
              acall     write_dbs
//
skip_clear:
        sett    10
        sendsig ans_sign,c1
        call    send_ack
        call    prclear_notr
//
        wait    tf_sign
        call    h2824_onhook
        jmp     main
//
//************************************************
// on tf_sign test timeout_cnt_0
//************************************************
//
test_tf_sign:
        case    tf_sign,test_im_sign
//
// State 0 timeout
//
        movd    "   ",a2824_a1_cr               //
        compd   "2824conn",test_2824_state
        jz      main
        call    pr_2824err
        movd    "2824conn",test_2824_state
        jmp     main
//
//************************************************
// on im_sign get command and do command
//************************************************
//
//************************************************
// sub-routinen
//
answ_err_cmd:
        out     s12,0,c4
        movd    "ERR_CMD/n",s12,11
        out     s12,0,c4
        anss    s12,10
        ret
//************************************************
//
//************************************************
//
test_im_sign:
        case    im_sign,sign_err
        in      s12,10
        compd   "init/n",s12,10         //teste m3 configurations cmd"s
        jnz     cfg_cmd1
        ansd    "OKAY!/n"
cfg_cmd01:
        movd    "     ",par_save,200
        jmp     setup_0
//
cfg_cmd1:
        compd   "reset/n",s12,10
        jnz     cfg_cmd2
        ansd    "OKAY-RESET!/n"
//        call    prreset_str
        //
cfg1_loop:
        compd   "   ",s14,181    //noch ein reco zu bearbeiten
        jnz     cfg1_cmd1        //ja dann pruefe reco
        readb   s14,181,0        //sonst naechsten eintrag lesen
        jz      cfg_cmd01        //und pruefen
cfg1_cmd1:
        call    clear_notruf
        jmp     cfg1_loop
//
cfg_cmd2:
        compd   "set",s12,10
        jnz     cfg_cmd3
        call    cmd_set
        anss    s12,10
        jmp     reset_0
        //
cfg_cmd3:
        compd   "disp config",s12,10
        jnz     cfg_cmd4
        call    disp_config
        jmp     reset_0
        //
cfg_cmd4:
        compd   "disp hist ",s12,10
        jnz     cfg_cmde
        call    disp_history
        jmp     main
        //
        //
cfg_cmde:
        call    answ_err_cmd
        jmp     reset_0
        //
//************************************************
//
//   sign-error
//
sign_err:
        movd    " SIGNAL_ERROR/n",s12,11
        out     s12,0,c4
        jmp     reset_0
//
//************************************************
//**********************************************************
//
time_min:
        acall   read_dt
        movd    "       ",s15,210       //p1 loeschen
        movs    s15,188,s15,210,2       //Stunden in min umrechnen
        movd    "60 ",s15,220
        acall   mul
        movs    s15,190,s15,210,2       //minuten
        movs    s15,230,s15,220,8
        acall   add                     //min + stunde x 60
//
//       save result in string AKTUT s14,230
//
        movs    s15,233,s14,230,6
        ret
//
//**********************************************************
// calculate time out
//
calc_timeout:
        movs    s14,230,s15,210,6        //calculate timeout mov aktime
        movs    par_save,230,s15,220,4
	acall	add
        movs    s15,233,s14,240,6
        movs    s15,233,s15,210,6       //calc max minute
        movd    "1440 ",s15,220
        acall   comp
        compd   "LT",s15,204
        jz      calc_end_to
        movs    s14,240,s15,210,6
        movd    "1440 ",s15,220
        acall   subb
        movs    s15,233,s14,240,6
//
calc_end_to:
        ret
//**********************************************************
//
//    TIME_TASK
//
//time_task:
//        call    time_min
//
// Bearbeite TIMEOUT for NOTRUF clear
//
time_task01:
        compd   "   ",s14,181    //noch ein reco zu bearbeiten
        jnz     time_t01         //ja dann pruefe reco
        readb   s14,181,0        //sonst naechsten eintrag lesen
        jnz     time_t01         //und pruefen
        movd    "   ",s14,181    //und string ist ungueltig
        jmp     time_task02      //check next step
//
time_t01:
        movs    s14,184,s15,210,6       //compare "aktut" mit "timeout"
        movs    s14,230,s15,220,6
        acall   comp                    //vergleiche wenn "EQ"
        compd   "E",s15,204            //dann Notruf loeschen
        jnz     time_task02
clear_notruf:
        movd    "0      ",s15,100
        movs    s14,181,s15,102,3       //pointer reco
        acall   preco_dbs
        acall   read_dbs
        compd   "     ",s14,3           //Notruf noch aktiev?
        jz      time_t011               //nein dann naechsten reco
        movd    "3N            /n",s14,99 //create name cmd to bdi
        movs    s14,3,s14,102,6
        setc    8,104
find_space:
        incc    8
        compd   " ",s14,c8
        jnz     find_space
        incc    8
        movs    s14,9,s14,c8,20         //transfer name
        out     s14,99,c2               //set name
        movd    "      ",s14,3
        acall   write_dbs
time_t011:
        movd    "             ",s14,181
//
time_task02:
        ret
        //
//************************************************
// DBS_0_INIT
//
// Input: -
// Output: -
//   Initialisiert Data-Base in Modul 0
//   16384 100 2 6 6
//
dbs_0_init:
        movd    "CLEAR DATA-BASE IN MODUL 0 !!!/n",s12,100
        out     s12,100,c4
dbs_0n_init:
        movd    "0 16384 256 3 3 6 20   ",s15,100
        movd    "                                                       ",s14,0
        acall   open_dbs
        acall   init_dbs
        ret
//
//*********************************************************
//
// init database
// Die Reihenfolge der Eintragungen bestimmt die Position am Bildschirm.
// Es ist m”glich unter einer Rufnummer mehrere Displaypositionen
// anzusprechen.
//
// Using datebase in module 3
// format:	EXTENSION # ... 4 digit
//		ON / OFF    ... 1 char
//		BLINKING    ... 1 char
//		Timeout blink.. 4 digit
//
// DISPLAY :
//  ALCATEL AUSTRIA                    BSD
//                      Notrufanzeige
// _______________________________________
// 1. Eintrag           2. Eintrag
// 3. Eintrag           4. Eintrag
// 5. Eintrag           ...
//
dbs_3_init:
        movd    "CLEAR DATA-BASE IN MODUL 3 !!!/n",s12,100
        out     s12,100,c4
        movd    "3 16384 20 4 4 1 1 4  /n",s15,100
        acall   open_dbs
        acall   pfirst_dbs
        movd    "    00                          /n",s14,0
        acall   init_dbs
        ret
//
//************************************************
//
disp_dbs_3:
        movd    " DATABASE 3 LIST !/n",s12,100
        out     s12,100,c4
//************************************************
// DISPlay_DBS3
//
// Input : -
// Output: -
//    Display's all Data-Base Records on Channel 4
//#define _extension      0
//#define _dispon         4
//#define _blink          5
//#define _bltime         6
//
dbs3_disp:
        setc    10,255
        movd    "RECO Nr.  0         1  2  3      /n",s12,100
        out     s12,100,c4
        movd    "                                 /n",s12,100
        movd    "3  ",s15,100
        acall   pfirst_dbs
//
dbs3_disploop:
        acall   read_dbs        //get reco
        incc    10
        compd   "    ",s14,0
        jz      dbs3_next
        movc    10,s12,105              //reco-counter
        movs    s14,_extension,s12,110,4        //element 0 Exetension#
        movs    s14,_dispon,s12,120,1           //element 1
        movs    s14,_blink,s12,123,1            //element 2
        movs    s14,_bltime,s12,126,4           //element 3
        out     s12,100,c4
//
dbs3_next:
        acall   pnext_dbs
        jz      dbs3_disploop
//
        movd    " END of LIST DBS 3. /n",s12,100
        out     s12,100,c4
        ret
//
//************************************************
//************************************************
//
disp_dbs_0:
        movd    " DATABASE 0 LIST !/n",s12,100
        out     s12,100,c4
//************************************************
// DISPlay_DBS0
//
// Input : -
// Output: -
//    Display"s all Data-Base Records on Channel 4
//
dbs0_disp:
        movd    "RECO Nr.  0         1/n",s12,100
        out     s12,100,c4
        movd    "                                 /n",s12,100
        movd    "0  ",s15,100
        acall   pfirst_dbs
        setc    10,255
//
dbs0_disploop:
        acall   read_dbs        //get reco
        incc    10
        compd   "      ",s14,3
        jz      dbs0_next
        movc    10,s12,105              //reco-counter
        movs    s14,3,s12,110,6         //element 0
        movs    s14,9,s12,120,20        //element 1
        out     s12,100,c4
//
dbs0_next:
        acall   pnext_dbs
        jz      dbs0_disploop
//
        movd    " END of LIST DBS 0. /n",s12,100
        out     s12,100,c4
//        ansd    " END of LIST DBS 0. /n"
//        jmp     reset_0
        ret
//
//*********************************************************
//
disp_history:
        movc    s12,20,6
        compc   6,0
        jnz     dh_loop
        setc    6,10
//
dh_loop:
        buffrd   s12,10
        compd   "E/n",s12,10
        jz      dh_emty
        out     s12,10,c4
        decc    6
        jnz     dh_loop
        ansd    "MORE data/n"
        ret
//
dh_emty:
        ansd    "HISTORY BUFFER EMTY!/n"
        ret
//
//************************************************
//
disp_config:
        ansd    " CONFIGURATION !/n"
        call    disp_dbs_0
        call    disp_dbs_3
        movd    "                                /n",s12,100
        movd    " NOTRUF Nst# =                  /n",s12,100
        movs    par_save,210,s12,124,6
        out     s12,100,c4
//
        movd    " NUMBER of LF =                 /n",s12,100
        movs    par_save,220,s12,124,6
        out     s12,100,c4
//
        movd    " CLEAR TIMEOUT =                /n",s12,100
        movs    par_save,230,s12,124,6
        out     s12,100,c4
//
        movd    " CLEAR CODE =                   /n",s12,100
        movs    par_save,240,s12,124,6
        out     s12,100,c4
//
        movd    " AKTUELLE ZEIT =                /n",s12,100
        movs    s14,230,s12,124,6
        out     s12,100,c4
//
        movd    " NEXT =                            /n",s12,100
        movs    s14,181,s12,124,10
        out     s12,100,c4
//
        movd    " PAGING ENABLE =                /n",s12,100
        movs    par_save,197,s12,124,1
        out     s12,100,c4
//
        movd    " PAGING WAIT-TONE =             /n",s12,100
        movs    par_save,195,s12,124,1
        out     s12,100,c4
//
        movd    " PAGING ROUTE =                 /n",s12,100
        movs    par_save,190,s12,124,2
        out     s12,100,c4
//
        movd    " PAGING PRE-DIAL =              /n",s12,100
        movs    par_save,180,s12,124,6
        out     s12,100,c4
//
        movd    " PAGING PAGER-NUMBER=           /n",s12,100
        movs    par_save,170,s12,124,6
        out     s12,100,c4
//
        movd    " PAGING POST-DIAL =             /n",s12,100
        movs    par_save,160,s12,124,6
        out     s12,100,c4
//
        movd    " PAGING POST-DIAL-displ=        /n",s12,100
        movs    par_save,150,s12,124,6
        out     s12,100,c4
//
        ret
//
//************************************************
//
// command set
//
cmd_set:
        compd   "num=",s12,14
        jnz     cmd_set1
        movs    s12,18,par_save,210,8
        jmp     okay_set
//
cmd_set1:
        compd   "lf=",s12,14
        jnz     cmd_set2
        movs    s12,17,par_save,220,8
        jmp     okay_set
//
cmd_set2:
        compd   "to=",s12,14
        jnz     cmd_set3
        movs    s12,17,par_save,230,8
        jmp     okay_set
//
cmd_set3:
        compd   "clcode=",s12,14
        jnz     cmd_set4
        movs    s12,21,par_save,240,8
        jmp     okay_set
//
cmd_set4:
        compd   "route=",s12,14
        jnz     cmd_set5
        movs    s12,20,par_save,190,2
        jmp     okay_set
//
cmd_set5:
        compd   "predial=",s12,14
        jnz     cmd_set6
        movs    s12,22,par_save,180,8
        jmp     okay_set
//
cmd_set6:
        compd   "postdial=",s12,14
        jnz     cmd_set7
        movs    s12,23,par_save,160,8
        jmp     okay_set
//
cmd_set7:
        compd   "pager=",s12,14
        jnz     cmd_set8
        movs    s12,19,par_save,170,8
        jmp     okay_set
//
cmd_set8:
        compd   "postdispl=",s12,14
        jnz     cmd_set9
        movs    s12,24,par_save,150,8
        jmp     okay_set
//
cmd_set9:
        compd   "waittone=",s12,14
        jnz     cmd_set10
        movs    s12,23,par_save,195,2
        jmp     okay_set
//
cmd_set10:
        compd   "page_en=",s12,14
        jnz     cmd_set11
        movs    s12,22,par_save,197,2
        jmp     okay_set
//
cmd_set11:
        movd    "ERR_CMD/n",s12,10
        ret
okay_set:
        movd    "OKAY!/n",s12,10
        ret
//
//************************************************
//**********************************************************
//
h2824_onhook:
        movs    a2824_a1_cr,save_cr,3   // save call ref from aktual call
        movd    "AT*H/n",wstr,100
        out     wstr,100,ch2824
h2824_main_l:
        sett    20                     //timer 10sec
        wait    tf_sign,cntl_sign
        case    tf_sign,h2824_cntl
//
// onhook timeout
//
        jmp     nz_ret
//
h2824_cntl:
        case    cntl_sign,nz_ret
        movd    "WM 3 Message<                                                            >/n",wstr,0
        movs    a2824_a1_cr,wstr,13,60
        out     wstr,0,c4
        compd   "CLEARED",a2824_a1_mess
        jz      h2824_tcr
        jmp     h2824_main_l
//
h2824_tcr:
        comps   a2824_a1_cr,save_cr,3
        jnz     h2824_onhook
        movd    "   ",a2824_a1_cr
        jmp     z_ret
//
//************************************************
//RETURN Z
//    using counter 15 for generall working
z_ret:
	setc	15,255
	incc	15
	ret
//
nz_ret:	
	setc	15,0
	incc	15
	ret
//
//*********************************************************
//
//************************************************
// subroutinen
//
send_messnr:
        movd    " *** NOTRUF   Message NR:       *******           +                       /n",s12,100
        movs    mess_nr,s12,127,3
        movc    mess_nr,2
        incc    2
        movc    2,mess_nr
        acall   fread_dt
        movs    fdt_str,s12,150,21
        call    print_out_s12
        call    write_hist_s12
        ret
//
send_rufnum:
        call    print_out_s12
        call    write_hist_s12
        movd    " Zimmer:                                                              /n",s12,100
        movs    calling_extension,s12,111,l_extension
        call    print_out_s12
        call    write_hist_s12
        ret
//
send_linefeed:
        movs    par_save,120,s12,100,25
        call    print_out_s12
        ret
//
pr_startup:
        call    send_messnr
        movd    " AFS Neu gestartet/n",s12,100
        call    print_out_s12
        call    write_hist_s12
        call    send_linefeed
        ret
//
pr_2824err:
        call    send_messnr
        movd    " Fehler ISDN 2824 Apparat keine Kommunikation!!!/n",s12,100
        call    print_out_s12
        call    write_hist_s12
        call    send_linefeed
        ret
//
prstart_notr:
        call    send_messnr
        movd    " NOTRUF --------------------------------------- gstartet aus/n",s12,100
        call    send_rufnum
        call    send_linefeed
        ret
        ret
//
prwrong_notr:
        call    send_messnr
        movd    " Passwort falsch aus/n",s12,100
        call    send_rufnum
        call    send_linefeed
        ret
//
prclear_notr:
        call    send_messnr
        movd    " NOTRUF ----------------------- geloescht aus/n",s12,100
        call    send_rufnum
        call    send_linefeed
        ret
//
prrestart_notr:
        call    send_messnr
        movd    " NOTRUF ----------------------------- neuerlich gestartet aus/n",s12,100
        call    send_rufnum
        call    send_linefeed
        ret
//
prdbs_error:
        call    send_messnr
        movd    "*** ERROR DBS not enough space !!! *****/n",s12,100
        call    print_out_s12
        call    write_hist_s12
        call    send_linefeed
        ret
//
//**********************************************************
//**********************************************************
print_out_s12:
        out     s12,100,c4              //header to sn-mon
        out     s12,100,c5              //header to printer
//        writeb  s12,100,2
//        sendsig ans_sign,c2
        ret
//
//**********************************************************
//
write_hist_s12:
        buffst                          //test sace
        jnz     wr_hist1
        buffrd  s12,11
        jmp     write_hist_s12
wr_hist1:
        buffwr  s12,100
        ret
//
//************************************************
// send_request
//   single dtmf tone via the 2824
//
send_request:
        sett    10
        wait    tf_sign
        movd    "AT*m0/n",wstr,0
        out     wstr,0,ch2824
        ret
//
send_ack:
        movd    "AT*m00/n",wstr,0
        out     wstr,0,ch2824
        ret
//
send_error:
        movd    "AT*C010101010101/n",wstr,0
        out     wstr,0,ch2824
        ret
//
//************************************************
// READ_MFV
// call get_dtmf
// Input: cnt 11 = Maximale Anzahl der Digits
// Output: Z-Flag = MFV-codes wurden gelesen
//         NZ-Flag = Fehler
// using: counter 10,11
//
get_dtmf:
        setc    10,_dtmf_pos
        movd    "      /n",str_dtmf,c10
        call    send_request
        clearmfv        //loesche MFV-codes
        sett    first_digit_wait        //1. Digit Wartezeit
        jmp     get_dtmf1
//
get_dtmf_loop:
        sett    inter_digit     // Wartezeit
//
get_dtmf1:
        getmfv  str_dtmf,c10
        jz      nz_ret                  // Fehler timeout
        compd   "E",str_dtmf,c10        // Ende code?
        jz      get_dtmf_end            // Okay Ende
        incc    10
        movd    "/n",str_dtmf,c10
        decc    11
        jnz     get_dtmf_loop           //Wiederhole
        movd    "DTMF-RX =             /n",wstr,0
        movs    str_dtmf,_dtmf_pos,wstr,10,8
        out     wstr,0,c4
        jmp     nz_ret                  //maximale Anzahl erreicht.
get_dtmf_end:
        movd    "/n",str_dtmf,c10
        movd    "DTMF-RX =             /n",wstr,0
        movs    str_dtmf,_dtmf_pos,wstr,10,8
        out     wstr,0,c4
        jmp     z_ret
//
//************************************************
//************************************************
// GET_PASSW
//
// Input: -
// Output: str_dtmf,_dtmf_pos String Password
//         Z-Flag = Password ist okay
//         NZ-Flag= Password nicht okay
//
get_passw:
        setc    11,5            //maximale Anzahl Digits
        call    get_dtmf
        ret
//
//************************************************
zzz:
//
end

