HSI (TSMART)OverviewHSI (TSMART) module, designed by WHILE1, is a programming tool which can provide primitives to solve issues about data exchange with IBM hosts. To do this, we have defined a macro language, named TQL (transaction query language), which quickly and easily specifies how to interact with hosts during login/logout and data exchange phases. TSMART is a tool which can communicate with hosts regardless of the logical/physical communication mode, such as, for example HLLAPI, APPC or other interfaces. TSMART works using a file containing all information and data about transactions you want to manage. Within that file there will be one or more TQL programs. These programs can be executed according to the transaction you will perform. TQL language TQL defines input and output data record layout, determines the name of the files which you will get input data from and the files where you will save data from hosts according to a specified scheme. TQL also uses variables (for storing temporary data which will be used during computation) and constants. TQL contains basic mechanisms of traditional programming languages, such as for example the use of labels and skip instructions (goto), MOVE instructions, COMPARE instructions, comment lines, etc. THOST interface THOST interface is like a classic API (DLL if you are using WINDOWS systems) and provides the user ("C","VBASIC", "COBOL") a tool which can:
With the combination of the two products, TSMART and THOST, you can write applications which synergically and efficiently interface:
THOST primitives look like TQL language statements. No further study or expertise is needed to use them. One of the important aspects of THOST interface architecture is that it lets you interface with an host through not only HLLAPI, but also using other connection systems without affecting the applications that use it. The following is an example of TQL:
# device ehllapi # define title "18580" define option "51" login_XX21 scheme { # position/len name } #
input_XX21 scheme { # position/len name 0-8 title } # output_XX21 scheme { # position/len name 0-10 code }
# transaction XX21 { rdrec(login_XX21) recv(* * User 60) write(17 30 $login_XX21.userid_1) write(17 36 $login_XX21.userid_2) write(17 57 $login_XX21.New_Amb) send(18 30 $login_XX21.password) recv(* * COMMAND 60) send(23 14 $login_XX21.tpl) write(1 1 @C) write(1 1 @C) label(loop) rdrec(input_XX21) test(ok_read finish) label(ok_read) send(1 1 XX21) recv(* * ADDRESS: 60) send(6 17 $input_XX21.title) recv(* * XX21 10) test(read_cod wr_error)
label(read_cod) read(3 16 8 60 $output_XX21.code) read(3 44 25 -1 $output_XX21.description) read(3 16 8 -1 $output_XX21.array) write(1 1 @C) write(1 1 @C) wrrec(output_XX21) goto(loop)
label(wr_error) read(23 6 45 $output_XX21.err_code) read(6 17 8 $output_XX21.code) wrrec(output_XX21) goto(loop)
label(finish) exit(0)
label(error) exit(-1) } |