//*********************************************************
// Program for converting the commandset from a frontoffice
// computer to access the Alcatel 4400 AHL
//
// ALCATEL 4400 (DHS 3)
//
// The portinterface hardware must be changed to
// V24 level.
// Use the pin 2 RXD
//         pin 3 TXD
//         pin 7 GND
//
//*********************************************************
// By  H”rhager Josef VTE   06/96
//*********************************************************
// Revision:
// V1.0 04/96 orginate
//
// Converter_in
//      SFnnnn<cr>      SetFull extension nnnn (check in)
//      SHnnnn<cr>      SetHalf extension nnnn (ckeck out)
// Converter_out
//      OK<cr>                  Previous command was ok
//      ERR_TO<cr>              Error timeout
//      ERR_CMD<cr>             Error command
//      ERR_EXT<cr>             Error extension
//
// SMDR-Buffer
//      Cnnnnddd.....<cr>       Callrecord (BCN format)
//
//*********************************************************
//
// for testing define debug
// if debug print some messages to channel 4
//
//#define debug
//
//*********************************************************
#include        "ahl_def.h"
//
//*********************************************************
// Startup
        setbaud 1,9600,8,n,1
        mode_reco
//*********************************************************
//
// send signon mess
//
        movd    "AHL-conv3>3              /n",conv_wstr,0
        movd    m3_startup1,conv_wstr,11
        out     conv_wstr,0,c4
        movd    m3_startup2,conv_wstr,11
        out     conv_wstr,0,c4
        movd    m3_startup3,conv_wstr,11
        out     conv_wstr,0,c4
error_main:
        mode_reco
        clear   ans_sign
//***********************************************
main:
        sett    100
        wait    ans_sign
        case    ans_sign,main
        call    ahl_to_bcn
        call    bcn_to_ahl
        jmp     main
//
//***********************************************
// ahl_to_bcn convert
//***********************************************
ahl_to_bcn:
        readb   conv_instr,0,ahl_mess_out
        jnz     do_transfer_main
        ret
//
do_transfer_main:
        out     conv_instr,0,c4
        call    convert_ahl_mess
        sendsig ans_sign,modul_converter
        ret
//
//***********************************************
//
convert_ahl_mess:
        movd    "Converting !!!/n",conv_wstr,11
        out     conv_wstr,0,c4
        compd   "J",conv_instr,0
        jz      reco_j
//
        ret
//
//***********************************************
// SMDR RECO "J"
//
reco_j:
        movd    bdi_init_str,bdi_str,0     // clear/set default output data
//
// **********************************************
// translate extension number
//
        setc    10,_caller
        setc    12,_bdi_ext_offset
        setc    11,5
//
//***********************************************
// offset ++ and counter -- because the extension number
// of the BDI-reco is only 4 digits
        incc    10
        decc    11
//
find_non_space:
        compd   " ",conv_instr,c10
        jnz     no_space
        incc    10
        decc    11
        jnz     find_non_space
no_space:
        movs    conv_instr,c10,bdi_str,c12,1
        incc    10
        incc    12
        decc    11
        jnz     no_space
//
// **********************************************
// transfer time
//
        movs    conv_instr,_time_hour,bdi_time_hour,2
        movs    conv_instr,_time_minute,bdi_time_minute,2
//
// **********************************************
// transfer date
//
        movs    conv_instr,_date_day,bdi_date_day,2
        movs    conv_instr,_date_month,bdi_date_month,2
//
// **********************************************
// transfer trunk number
// there is no trunk-number on the DHS3-AHL
//
//        movs    dhs3_trunk_num,bdi_trunknum,bdi_ltrunknum
//
// **********************************************
// translate transfer call
// no transfer call marker or extension
//
//        compd   "    ",dhs3_transfer_ext
//        jz      no_transfered_call
//
//        movs    dhs3_transfer_ext,bdi_tr_extnum,bdi_ltr_extnum
//        movd    "F",bdi_transmark
//
no_transfered_call:
//
// **********************************************
// set indicator for isdn
// Business code undefined
//
//        compd   "   ",dhs3_cmf_code
//        jz      non_isdn_call
//        movd    "I",bdi_str,0
//
non_isdn_call:
//
// **********************************************
// transfer projekt-number
// no projectnumber
//
//        movs    dhs3_code,bdi_project_num,bdi_lproject_num
//
// **********************************************
// translate the parameter "P"
//
//        compd   "P",dhs3_personal_ind
//        jnz     no_privat_call
//        movd    "P",bdi_privat_mark
//
no_privat_call:
//
// **********************************************
// select for incoming or outgoing call
// on the AHL there is no data for an incomming call
/*
        if (dhs3_typ == E | F | J | K | M | N )
           call is incoming
        else
           call is outgoing
        endif
*/
/*        compd   "E",dhs3_type
        jz      incoming_call
        compd   "F",dhs3_type
        jz      incoming_call
        compd   "J",dhs3_type
        jz      incoming_call
        compd   "K",dhs3_type
        jz      incoming_call
        compd   "M",dhs3_type
        jz      incoming_call
        compd   "N",dhs3_type
        jz      incoming_call
*/
//
// **********************************************
//            SMDR-RECO is for an
//            outgoing call.
// **********************************************
// transfer extern_number
//
        movs    conv_instr,_extern_num,bdi_extern_num,bdi_lextern_num
//
// **********************************************
// translate meter-pulses
// Test if cost are IMPULSE or CURRENCY
//
        compd   ".",conv_instr,_cost_comma
        jnz     impulse_cost
//
        movd    "        ",calc_p1      // clear dividend
        movd    "        ",calc_p2      // clear divisor
        movd    how_much,calc_p2
        movs    conv_instr,_cost_schilling,calc_p1,5
        movs    conv_instr,_cost_groschen,calc_p1_5,2
        acall   div
        acall   cut_lz
        movs    calc_erg_5dg,bdi_meterpulses,5
        jmp     cost_end
impulse_cost:
        movs    conv_instr,_cost_len5,bdi_meterpulses,5
cost_end:
//
// **********************************************
// transfer duration of call
//
        movs    conv_instr,_duration_min,bdi_duration_h,3
        movs    conv_instr,_duration_sec,bdi_duration_s,2
//
// **********************************************
// save the call in the buffer
//
save_call:
        movd    bdi_line_end
        buffwr  bdi_str,0
loop_buffer_test:
        buffst                  // test space of mem
// **********************************************
//
        ret
//
//***********************************************
// bcn_to_ahl convert
//***********************************************
bcn_to_ahl:
//
// SFnnnn
// SHnnnn
//
        readb   conv_instr,0,converter_in
        jnz     do_convert_main
        ret
//
do_convert_main:
        out     conv_instr,0,c4
        compd   "SF",conv_instr,0
        jz      do_cmd_sf
        compd   "SH",conv_instr,0
        jz      do_cmd_sh
//
do_convert_errcmd:
        movd    "ERR_CMD/n",conv_outstr,0
        writeb  conv_outstr,0,converter_out
        out     conv_outstr,0,c4
        sendsig ans_sign,modul_edv
        sendsig ans_sign,modul_converter
        ret
//
//*********************************************************
// BDI-COMMAND SF
//*********************************************************
do_cmd_sf:
        movd    admision_def,conv_outstr,0
        replace "/n ",conv_instr,0,8
        setc    10,_sf_ext_r
        setc    11,_admision_ext_r
        setc    12,_ext_length
        call    l_to_r
//
        movs    conv_outstr,_admision_ext,conv_outstr,_admision_roomnumber,5
        writeb  conv_outstr,0,ahl_mess_in
        sendsig ans_sign,modul_ahl
//
        jmp     wait_answer
//
//*********************************************************
// BDI-COMMAND SH
//*********************************************************
do_cmd_sh:
        movd    discharge_def,conv_outstr,0
        replace "/n ",conv_instr,0,8
        setc    10,_sf_ext_r
        setc    11,_discharge_ext_r
        setc    12,_ext_length
        call    l_to_r
//
        writeb  conv_outstr,0,ahl_mess_in
        sendsig ans_sign,modul_ahl
//
        jmp     wait_answer
//
//*********************************************************
// wait for answer from the DHS3
//*********************************************************
wait_answer:
        sett    timeout_answer
        clear   ans_sign
l_wait_answer:
        wait    tf_sign,ans_sign
        case    tf_sign,t_waitanswer
        movd    "OK/n",conv_outstr,0            // after to send "OK"
        writeb  conv_outstr,0,converter_out
        out     conv_outstr,0,c4
        sendsig ans_sign,modul_edv
        sendsig ans_sign,modul_converter
        ret
//
t_waitanswer:
        case    ans_sign,wait_answer
        readb   conv_instr,0,ahl_mess_out
        jz      l_wait_answer
//
        out     conv_instr,0,c4
//
        compd   "R",conv_instr,0
        jz      ahl_reply_answer
//
        compd   "E",conv_instr,0
        jz      ahl_error_answer
//
        call    convert_ahl_mess
//
        jmp     l_wait_answer
//
//*************************************
// Reply mess from ahl
//*************************************
//
ahl_reply_answer:
        compd   "INV",conv_instr,_reply_password
        jnz     l_wait_answer
        movd    "ERR_EXT/n",conv_outstr,0            // error extension
        writeb  conv_outstr,0,converter_out
        out     conv_outstr,0,c4
        sendsig ans_sign,modul_edv
        sendsig ans_sign,modul_converter
        ret
//
//*************************************
// internal error
//*************************************
//
ahl_error_answer:
        movs    conv_instr,1,conv_outstr,0,20
        writeb  conv_outstr,0,converter_out
        out     conv_outstr,0,c4
        sendsig ans_sign,modul_edv
        sendsig ans_sign,modul_converter
        ret
//
//*********************************************************
// Sub
//
// Input:       source=conv_instr
//              dest  =conv_outstr
//              source_pos= counter 10
//              dest_pos  = counter 11
//              lenght    = counter 12
//              destination must be set to default value (space)
L_to_r:
        compd   " ",source,c10
        jnz     tr_ltor
        decc    10              // pos --
        decc    12              // length --
        jnz     l_to_r
        ret
//
tr_ltor:
        movs    source,c10,dest,c11,1
        decc    10
        decc    11
        decc    12
        jnz     tr_ltor
        ret
//
zzzz:
end
