home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / HAPI.ZIP / HAPI / HAPI_M / HSMPLM.ASM < prev    next >
Assembly Source File  |  1991-01-15  |  128KB  |  3,390 lines

  1. ;*********************************************************************
  2. ;*                                                                   *
  3. ;*                                                                   *
  4. ;* FILE NAME: HSMPLM.ASM                                             *
  5. ;*                                                                   *
  6. ;* MODULE NAME= HSMPLM.ASM                                           *
  7. ;*                                                                   *
  8. ;* DESCRIPTIVE NAME= MASM SAMPLE PROGRAM FOR EHLLAPI                 *
  9. ;*                                                                   *
  10. ;*                                                                   *
  11. ;* Displays EHLLAPI and session information.                         *
  12. ;* Writes string to host.                                            *
  13. ;* Searches for written string on host.                              *
  14. ;* Displays host session screen.                                     *
  15. ;* Manipulates the Presentation Manager properties of                *
  16. ;* the emulator session to: change window title name, switch         *
  17. ;* list name, make window invisible, query window status,            *
  18. ;* window coordinates, change window size, and restore the           *
  19. ;* emulator session window to its original conditions.               *
  20. ;* Next, the structured field functions are used.  The               *
  21. ;* communications buffer is queried, the read and write buffers      *
  22. ;* allocated, a connection is initiated to the communications        *
  23. ;* buffer, and an asynchronus read structured field is issued        *
  24. ;* disabling the inbound host.  Then, the sendkey function is        *
  25. ;* used to send the command 'IND$FILE PUT SF_TEST EXEC A'            *
  26. ;* to the host which puts a non-existent file from the               *
  27. ;* PC to the host using a structured field.  Next, a get             *
  28. ;* completion request is issued to determine if the                  *
  29. ;* previous asynchronus read structured field is completed,          *
  30. ;* Upon completion, a synchronus write structured field is           *
  31. ;* issued, the communications buffers are de-allocated, and          *
  32. ;* then a disconnect from structured field is issued.                *
  33. ;*                                                                   *
  34. ;*                                                                   *
  35. ;*                                                                   *
  36. ;*   COPYRIGHT:  XXXXXXXXX  (C) COPYRIGHT IBM CORP. 1987,1988,1989   *
  37. ;*               LICENSED MATERIAL - PROGRAM PROPERTY OF IBM         *
  38. ;*               ALL RIGHTS RESERVED                                 *
  39. ;*                                                                   *
  40. ;* NOTES=                                                            *
  41. ;*                                                                   *
  42. ;**********************-END OF SPECIFICATIONS-************************
  43. .286P
  44. ;*********************************************************************
  45. ;********************** BEGIN INCLUDE FILES **************************
  46. ;*********************************************************************
  47.  
  48.  
  49.  
  50. INCLUDE HAPI_M.INC                            ; Get EHLLAPI
  51.                                               ; include file for MASM
  52.  
  53.  
  54.  
  55. ;********************************************************************
  56. ;******************** AUTOMATIC DATA SEG STUFF **********************
  57. ;********************************************************************
  58.  
  59. DSEG                  SEGMENT  'DATA'
  60. DSEG                  ENDS
  61.  
  62. SSEG                  SEGMENT STACK 'STACK'
  63. SSEG                  ENDS
  64.  
  65. CSEG                  SEGMENT 'CODE'
  66. CSEG                  ENDS
  67.  
  68. DGROUP  GROUP   DSEG
  69.  
  70.  
  71.  
  72. ;********************************************************************
  73. ;************************ FUNCTION EXTERNS **************************
  74. ;********************************************************************
  75.  
  76.  
  77.  
  78.  
  79. EXTRN VIOWRTCELLSTR:FAR                        ; DOS vidio call.
  80. EXTRN VIOWRTTTY    :FAR                        ; DOS Write string.
  81. EXTRN DOSEXIT      :FAR                        ; Exit to DOS call.
  82. EXTRN KBDCHARIN    :FAR                        ; DOS keyin routine.
  83. EXTRN DOSSLEEP     :FAR                        ; DOS Sleep.
  84. EXTRN HLLMASM      :FAR                        ; EHLLAPI LIM entry point.
  85.  
  86.  
  87. ;********************************************************************
  88. ;***************************** EQUATES ******************************
  89. ;********************************************************************
  90.  
  91. MAX_DATA_SIZE      EQU      3840               ; The maximum data size
  92.                                                ; for this application.
  93. EABS               EQU      80H                ; Extended attribute
  94.                                                ; bit.
  95. PSS                EQU      40H                ; Programmed Symbol
  96.                                                ; Set bit.
  97. CR                 EQU      0DH                ; Return
  98.  
  99. LF                 EQU      0AH                ; Line feed
  100.  
  101. NULL               EQU      0                  ; Set Null
  102.  
  103. HEX8               EQU        8H               ; Set Hexadecimal
  104. HEX10              EQU        10H              ; Constants
  105. HEX80              EQU        80H
  106. HEX100             EQU        100H
  107. HEX400             EQU        400H
  108. HEX800             EQU        800H
  109. HEX808             EQU        808H
  110. HEX1000            EQU        1000H
  111.  
  112. ;********************************************************************
  113. ;*************************** BEGIN MACROS ***************************
  114. ;********************************************************************
  115.  
  116.  
  117.  
  118. DISPLAY            MACRO    MSG
  119.                    LOCAL    TEXT
  120.  
  121. DSEG               SEGMENT  'DATA'
  122.  
  123. TEXT               DB       MSG
  124.                    DB       NULL
  125.  
  126. DSEG               ENDS
  127.  
  128.                    PUSH     BX
  129.                    LEA      BX, TEXT
  130.                    CALL     DSP_MSG
  131.                    POP      BX
  132.                    ENDM
  133.  
  134.  
  135.  
  136.  
  137.  
  138. ;********************************************************************
  139. ;******************* BEGIN STATIC VARIABLES *************************
  140. ;********************************************************************
  141.  
  142.  
  143. DSEG                SEGMENT  'DATA'
  144.  
  145. BLANK_SCR           DB       CR,LF,CR,LF,CR,LF,CR,LF,CR,LF
  146.                     DB       CR,LF,CR,LF,CR,LF,CR,LF,CR,LF
  147.                     DB       CR,LF,CR,LF,CR,LF,CR,LF,CR,LF
  148.                     DB       CR,LF,CR,LF,CR,LF,CR,LF,CR,LF
  149.                     DB       CR,LF,CR,LF,CR,LF,CR,LF,CR,LF
  150.                     DB       CR,LF
  151.                     DB       NULL
  152.  
  153. PRESS_ENT_MSG       DB       CR,LF,CR,LF,'Press ENTER to continue...'
  154.                     DB       NULL
  155.  
  156.  
  157. DFT_SESS            DB       NULL               ; Session to write string
  158.                     DB       NULL               ; string to and search from
  159.  
  160. HOST_TEXT           DB       'EHLLAPI-1'        ; String to send to host
  161.                     DB       NULL               ; and to search for
  162.  
  163. HOST_TEXT_LEN       EQU      $ - HOST_TEXT -1   ; Length of host text
  164.  
  165. INHOST_TEXT         DB       'EHLLAPI-2'        ; String to send to host
  166.                     DB       NULL               ; and to search for when
  167.                                                 ; screen is invisible
  168.  
  169. COMMAND_STR         DB       'IND$FILE PUT SF_TEST EXEC A@E'
  170.                     DB       NULL
  171. COMMAND_LEN         EQU       $ - COMMAND_STR
  172.  
  173.  
  174. TEST_NAME           DB       'Sample_Test_Name' ; new title name
  175.                     DB        NULL
  176. TEST_NAME_LEN       EQU      $ - TEST_NAME      ; Length of sample text
  177.  
  178. HOME_KEY            DB       '@L@0'             ; The Home Key.
  179. HOME_KEY_LEN        EQU      $ - HOME_KEY       ; Length
  180.  
  181. SETPARM_TEXT        DB       'NOATTRB EAB XLATE'; String to to use
  182. SETPARM_TEXT_LEN    EQU      $ - SETPARM_TEXT   ; for set parms.
  183.  
  184. RC                  DW       NULL               ; Return code.
  185.  
  186. DIGIT_BUFF          DB       6 DUP (NULL)       ; Buffer to contain
  187.                                                 ; ascii decimal digits
  188.  
  189. COORD_BUFF          DB       8 DUP (NULL)       ; Buffer to contain
  190.                                                 ; ascii decimal digits
  191.  
  192. DUMMY_BUFF          DB       80 DUP (NULL)      ; Misc dummy buffer.
  193.  
  194. DOUBLE_BUFF         DB       6 DUP (NULL)       ; Misc buffer.
  195.  
  196. SESS_STUC           DB       SIZE QSST_STRUCT DUP (?) ; session structure
  197.  
  198. OPTIMAL_INB         DW       NULL               ; Optimal inbound
  199.                                                 ; buffer size
  200. OPTIMAL_OUTB        DW       NULL               ; Optimal outbound
  201.                                                 ; buffer size
  202.  
  203. RD_ADDRESS_OFF      DW       NULL               ; Read buffer address
  204. RD_ADDRESS_SEG      DW       NULL
  205.  
  206. WR_ADDRESS_OFF      DW       NULL               ; Write buffer address
  207. WR_ADDRESS_SEG      DW       NULL
  208.  
  209. ASEM_SEG            DW       NULL               ; Semaphore segment
  210. ASEM_OFF            DW       NULL               ; Semaphore offset
  211.  
  212. DOID                DW       NULL               ; Destination/Origin ID
  213.  
  214. QUERY_REPLY         DB      0,12,129,149,0,0,1,0,1,0,1,1  ;ddm type
  215.  
  216. ;**********************************************************************
  217. ; EHLLAPI variables.
  218. ;**********************************************************************
  219.  
  220. HPCB                DB SIZE HLPCB DUP (NULL)    ; Allocate the EHLLAPI
  221.                                                 ; control block.
  222.  
  223. HDATA_STR           DB MAX_DATA_SIZE DUP(?)     ; EHLLAPI data
  224.                                                 ; string.
  225. HEX_TABLE           DB       '0123456789ABCDEF'
  226.  
  227. CRLF_VAR            DB       CR, LF             ; line FEED VAR
  228.  
  229. ARR_ELE_START       DW ?                        ; Running start of session
  230.                                                 ; element structures.
  231. NUM_SESS            DW ?                        ; Number of sessions
  232.  
  233. DSEG                ENDS
  234.  
  235.  
  236.  
  237.  
  238. SSEG                SEGMENT STACK 'STACK'
  239.  
  240.                     DB       2000 DUP ('S')     ; Allocate the stack.
  241. STACK_BEG           DW       ?                  ; First stack entry.
  242.  
  243. SSEG                ENDS
  244.  
  245.  
  246.  
  247.  
  248.  
  249. ;********************************************************************
  250. ;*************************** BEGIN CODE *****************************
  251. ;********************************************************************
  252.  
  253. CSEG                SEGMENT 'CODE'
  254.                     ASSUME CS:CSEG, DS:DSEG, SS:SSEG, ES:DSEG
  255.  
  256.  
  257.  
  258. ;**************************************************************************
  259. ;MAIN - Main code calls routines to do real work.                         *
  260. ;                                                                         *
  261. ;INPUT                                                                    *
  262. ;                                                                         *
  263. ;OUTPUT                                                                   *
  264. ;                                                                         *
  265. ;                                                                         *
  266. ;**************************************************************************
  267.  
  268. MAIN       PROC     FAR
  269.            MOV      AX, SEG SSEG          ; Get stack selector
  270.            MOV      SS, AX                ; Put selector in SS
  271.            MOV      SP, OFFSET STACK_BEG  ; Set SP
  272.  
  273.  
  274.            MOV      AX, SEG DSEG          ; Get DATA selector
  275.            MOV      DS, AX                ; Put selector is DS
  276.            MOV      ES, AX                ; Put selector is ES
  277.  
  278.  
  279.            ;INIT parmater control block
  280.  
  281.            MOV      AX, SEG HDATA_STR     ; Set up selector to
  282.            MOV      HPCB.HLPCB_DSEG, AX   ; data string.
  283.  
  284.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  285.                                           ; Set up offset to
  286.                                           ; data string
  287.            ;DO main program
  288.  
  289.            LEA      BX, BLANK_SCR         ; Blank the screen.
  290.            CALL     DSP_MSG
  291.            CALL     DISP_EHLLAPI_INFO     ; Call routine to
  292.                                           ; display EHLLAPI info.
  293.            CMP      RC,0                  ;
  294.            JE       NEXT_0                ; If error goto done
  295.            JMP      DONE
  296.  
  297. NEXT_0:    LEA      BX, PRESS_ENT_MSG     ; Print press enter msg.
  298.            CALL     DSP_MSG
  299.            CALL     FGETCHAR              ; Make user press enter.
  300.            CALL     NEW_LINE
  301.            CALL     DISP_SESSION_INFO     ; Call routine to
  302.                                           ; display Host session info
  303.            CMP      RC,0
  304.            JE       NEXT_1
  305.            JMP      DONE                  ; If error goto done
  306.  
  307. NEXT_1:
  308.            CMP      DFT_SESS, NULL        ;
  309.            JE       NO_DFT_SESS           ; If no dft session jmp
  310.  
  311.            LEA      BX, BLANK_SCR         ; Blank the screen.
  312.            CALL     DSP_MSG
  313.            DISPLAY  <'Press ENTER to send string "'>
  314.            LEA      BX, HOST_TEXT         ;
  315.            CALL     DSP_MSG
  316.            DISPLAY  <'" to session short name '>
  317.            LEA      BX, DFT_SESS
  318.            CALL     DSP_MSG
  319.            DISPLAY  <'...'>
  320.            CALL     FGETCHAR              ; Make user press enter.
  321.            CALL     NEW_LINE
  322.            CALL     WRITE_STR_2_HOST      ; Call routine to write
  323.                                           ; string to host session.
  324.            CMP      RC,0                  ;
  325.            JE       NEXT_2                ; If error goto done
  326.            JMP      DONE
  327.  
  328. NO_DFT_SESS:
  329.  
  330.            DISPLAY <'NO DFT SESSION SESSION STARTED.'>
  331.            CALL     NEW_LINE
  332.            JMP      DONE                  ; Get out of program.
  333.  
  334. NEXT_2:
  335.  
  336.            DISPLAY  <'Press ENTER to search for string "'>
  337.            LEA      BX, HOST_TEXT         ;
  338.            CALL     DSP_MSG
  339.            DISPLAY  <'" on Host Presentation Space...'>
  340.            CALL     FGETCHAR              ; Make user press enter.
  341.            CALL     NEW_LINE
  342.            CALL     SEARCH_STR_ON_HOST    ; Call routine to
  343.                                           ; search for string on
  344.                                           ; host session.
  345.            CMP      RC,0
  346.            JE       NEXT_3                ; If error goto done
  347.            JMP      DONE
  348.  
  349. NEXT_3:
  350.            DISPLAY <'Press ENTER to display first 1920 '>
  351.            DISPLAY <'bytes of Host presentation space...'>
  352.            CALL     FGETCHAR              ; Make user press enter.
  353.            CALL     NEW_LINE
  354.            CALL     DISP_HOST_SCR         ; Call routine to
  355.                                           ; display Host session
  356.                                           ; screen.
  357.            CMP      RC,0
  358.            JE       NEXT_4                ; If error goto done
  359.            JMP      DONE
  360.  
  361. NEXT_4:
  362.            DISPLAY <'Press ENTER to change the '>
  363.            DISPLAY <'PM window title'>
  364.            DISPLAY <' for session short name '>
  365.            LEA      BX, DFT_SESS
  366.            CALL     DSP_MSG
  367.            DISPLAY  <'...'>
  368.            CALL     FGETCHAR               ; Make user press enter.
  369.            CALL     NEW_LINE
  370.            CALL     CHANGE_WINDOW_NAME     ; Call routine to
  371.            CMP      RC,0                   ; change window name
  372.            JE       NEXT_5                 ; If error goto done
  373.            JMP      DONE
  374.  
  375. NEXT_5:
  376.            CALL     NEW_LINE
  377.            DISPLAY  <'Press ENTER to change the '>
  378.            DISPLAY  <'switch list title '>
  379.            DISPLAY  <'for session short name '>
  380.            LEA      BX, DFT_SESS
  381.            CALL     DSP_MSG
  382.            DISPLAY  <'...'>
  383.            CALL     FGETCHAR              ; Make user press enter.
  384.            CALL     NEW_LINE
  385.            CALL     CHANGE_SWITCH_LIST_TITLE  ; Call routine to
  386.                                               ; change switch list title.
  387.            CMP      RC,0
  388.            JE       NEXT_6
  389.            JMP      DONE                  ; If error goto done
  390. NEXT_6:
  391.            CALL     NEW_LINE
  392.            DISPLAY  <'Press ENTER to query the '>
  393.            DISPLAY  <'PM window status'>
  394.            DISPLAY  <' for session short name '>
  395.            LEA      BX, DFT_SESS
  396.            CALL     DSP_MSG
  397.            CALL     FGETCHAR               ; Make user press enter.
  398.            CALL     NEW_LINE
  399.            CALL     QUERY_PM_WINDOW_STATUS ; Call routine to
  400.                                            ; query window status
  401.            CMP      RC,0
  402.            JE       NEXT_7
  403.            JMP      DONE                   ; If error goto done
  404.  
  405. NEXT_7:
  406.            CALL     NEW_LINE
  407.            CALL     QUERY_PM_WINDOW_COORDS ; Call routine to
  408.                                            ; query coordinates.
  409.            CMP      RC,0
  410.            JE       NEXT_7B
  411.            JMP      DONE                   ; If error goto done
  412. NEXT_7B:
  413.            CALL     NEW_LINE
  414.            DISPLAY  <'Press ENTER to make the '>
  415.            DISPLAY  <'PM window'>
  416.            DISPLAY  <' of session short name '>
  417.            LEA      BX, DFT_SESS
  418.            CALL     DSP_MSG
  419.            DISPLAY  <' invisible...'>
  420.            CALL     FGETCHAR               ; Make user press enter.
  421.            CALL     NEW_LINE
  422.            CALL     MAKE_WINDOW_INVISIBLE  ; Call routine to
  423.                                            ; make window invisible.
  424.            CMP      RC,0
  425.            JE       NEXT_8
  426.            JMP      DONE                   ; If error goto done
  427. NEXT_8:
  428.            MOV      SI, OFFSET INHOST_TEXT ; replace host text
  429.            MOV      DI, OFFSET HOST_TEXT   ; with another string of
  430.            MOV      CX, HOST_TEXT_LEN      ; the same length
  431. REP        MOVS     HOST_TEXT,INHOST_TEXT
  432.  
  433.            DISPLAY  <'Press ENTER to send string "'>
  434.  
  435.            LEA      BX, HOST_TEXT         ;
  436.            CALL     DSP_MSG
  437.  
  438.            DISPLAY  <'" to invisible session short name '>
  439.            LEA      BX, DFT_SESS
  440.            CALL     DSP_MSG
  441.  
  442.            DISPLAY  <'...'>
  443.            CALL     FGETCHAR              ; Make user press enter.
  444.            CALL     NEW_LINE
  445.            CALL     WRITE_STR_2_HOST      ; Call routine to
  446.                                           ; write string to host
  447.                                           ; session.
  448.            CMP      RC,0                  ;
  449.            JE       NEXT_9                ; If error goto done
  450.            JMP      DONE
  451. NEXT_9:
  452.            DISPLAY  <'Press ENTER to search for string "'>
  453.            LEA      BX, HOST_TEXT         ;
  454.            CALL     DSP_MSG
  455.            DISPLAY  <'" on Host Presentation Space...'>
  456.            CALL     FGETCHAR              ; Make user press enter.
  457.            CALL     NEW_LINE
  458.  
  459.            CALL     SEARCH_STR_ON_HOST    ; Call routine to
  460.                                           ; search for string on
  461.                                           ; host session.
  462.            CMP      RC,0
  463.            JE       NEXT_10               ; If error goto done
  464.            JMP      DONE
  465.  
  466. NEXT_10:   DISPLAY  <'Press ENTER to display first 1920 '>
  467.            DISPLAY  <'bytes of the invisible presentation space...'>
  468.            CALL     FGETCHAR               ; Make user press enter.
  469.            CALL     NEW_LINE
  470.            CALL     DISP_HOST_SCR          ; Call routine to
  471.                                            ; display Host session
  472.                                            ; screen.
  473.            CMP      RC,0
  474.            JE       NEXT_11                ; If error goto done
  475.            JMP      DONE
  476.  
  477. NEXT_11:
  478.            DISPLAY  <'Press ENTER to maximize and '>
  479.            DISPLAY  <'make visible the PM window'>
  480.            DISPLAY  <' for session '>
  481.            LEA      BX, DFT_SESS
  482.            CALL     DSP_MSG
  483.            DISPLAY  <'...'>
  484.            CALL     FGETCHAR                ; Make user press enter.
  485.            CALL     NEW_LINE
  486.            CALL     MAKE_WINDOW_VISIBLE     ; Call routine to
  487.                                             ; make PM window visible                              CMP      RC,0                      ;and maximized.
  488.            JE       NEXT_12
  489.            JMP      DONE                    ; If error goto done
  490.  
  491. NEXT_12:
  492.            CALL     NEW_LINE
  493.            DISPLAY  <'Press ENTER to disconnect '>
  494.            DISPLAY  <'from the PM window'>
  495.            DISPLAY  <' of session short name '>
  496.            LEA      BX, DFT_SESS
  497.            CALL     DSP_MSG
  498.            DISPLAY  <'...'>
  499.            CALL     FGETCHAR                ; Make user press enter.
  500.            CALL     NEW_LINE
  501.            CALL     DISCONNECT_PM_WINDOW_SERVICE ; Call routine to
  502.                                                  ; disconnect PM window
  503.            CMP      RC,0
  504.            JE       NEXT_13
  505.            JMP      DONE                    ; If error goto done
  506.  
  507. NEXT_13:
  508.            CALL     NEW_LINE
  509.            DISPLAY  <'Press ENTER to restore the '>
  510.            DISPLAY  <'window size and titles '>
  511.            DISPLAY  <'of session short name '>
  512.            LEA      BX, DFT_SESS
  513.            CALL     DSP_MSG
  514.            DISPLAY  <'...'>
  515.            CALL     FGETCHAR                ; Make user press enter.
  516.            CALL     NEW_LINE
  517.            CALL     RESET_SWITCH_AND_WINDOW_NAME ; Call routine to
  518.                                                  ; restore PM settings.
  519.            CMP      RC,0
  520.            JE       NEXT_SF
  521.            JMP      DONE                    ; If error goto done
  522.  
  523. NEXT_SF:   DISPLAY  <'The Sample Program Continues With Structured Field Calls.'>
  524.            CALL     NEW_LINE
  525.            DISPLAY  <'The host session must be active and have access to '>
  526.            CALL     NEW_LINE
  527.            DISPLAY  <'the IND$FILE file transfer application.'>
  528.            CALL     NEW_LINE
  529.            DISPLAY  <'Press "y" To Continue, Any Other Key To Exit.'>
  530.            CALL     NEW_LINE
  531.            CALL     FGETCHAR
  532.            MOV      AL,DUMMY_BUFF
  533.            CMP      AL,89                       ; 'Y'
  534.            JE       NEXT_14A
  535.            CMP      AL,121                      ; 'y'
  536.            JE       NEXT_14A
  537.            JMP      DONE
  538.  
  539. NEXT_14A:  MOV      AX,0
  540.  
  541.            CALL     RESET_SYSTEM
  542.            CMP      RC,0
  543.            JE       NEXT_14B
  544.            JMP      DONE
  545. NEXT_14B:
  546.            CALL     QUERY_COM_BUFFER_SIZE
  547.            CMP      RC,0
  548.            JE       NEXT_15
  549.            JMP      DONE                    ; If error goto done
  550.  
  551. NEXT_15:
  552.            CALL     ALLOCATE_READ_COM_BUFFER
  553.            CMP      RC,0
  554.            JE       NEXT_16
  555.            JMP      DONE                    ; If error goto done
  556.  
  557. NEXT_16:
  558.            CALL     ALLOCATE_WRITE_COM_BUFFER
  559.            CMP      RC,0
  560.            JE       NEXT_17
  561.            JMP      DONE                    ; If error goto done
  562. NEXT_17:
  563.            CALL     CONNECT_TO_SF
  564.            CMP      RC,0
  565.            JE       NEXT_18
  566.            JMP      DONE                    ; If error goto done
  567.  
  568. NEXT_18:   CALL     NEW_LINE
  569.            CALL     NEW_LINE
  570.            DISPLAY  <'Press Enter To Continue'>
  571.            CALL     FGETCHAR
  572.            LEA      BX, BLANK_SCR           ; Blank the screen.
  573.            CALL     DSP_MSG
  574.            CALL     READ_SF_ASYNC
  575.            CMP      RC,0
  576.            JE       NEXT_19
  577.            JMP      DONE                    ; If error goto done
  578. NEXT_19:
  579.            CALL     CREATE_SF
  580.            CMP      RC,0
  581.            JE       NEXT_20
  582.            JMP      DONE                    ; If error goto done
  583. NEXT_20:
  584.            CALL     GET_ASYNC_COMPLETE
  585.            CMP      RC,0
  586.            JE       NEXT_21
  587.            JMP      DONE                    ; If error goto done
  588. NEXT_21:
  589.            CALL     WRITE_SF_SYNC
  590.            CMP      RC,0
  591.            JE       NEXT_22
  592.            JMP      DONE                    ; If error goto done
  593. NEXT_22:
  594.            CALL     FREE_READ_COM_BUFFER
  595.            CMP      RC,0
  596.            JE       NEXT_23
  597.            JMP      DONE                    ; If error goto done
  598.  
  599. NEXT_23:
  600.            CALL     FREE_WRITE_COM_BUFFER
  601.            CMP      RC,0
  602.            JE       NEXT_24
  603.            JMP      DONE                    ; If error goto done
  604.  
  605. NEXT_24:
  606.            CALL     DISCONNECT_SF
  607.            CMP      RC,0
  608.            JE       NEXT_25
  609.            JMP      DONE                    ; If error goto done
  610.  
  611. NEXT_25:
  612.            CALL     NEW_LINE
  613.            DISPLAY  <'SAMPLE PROGRAM DONE.  To Exit Program '>
  614.            DISPLAY  <'Press ENTER...'>
  615.            CALL     FGETCHAR                ; Make user press enter.
  616.            CALL     NEW_LINE
  617. DONE:
  618.            PUSH     1
  619.            PUSH     0
  620.            CALL     DOSEXIT                 ; Exit to program.
  621.  
  622. MAIN       ENDP
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629. ;**************************************************************************
  630. ;DISP_EHLLAPI_INFO - CALLs EHLLAPI QUERY_SYSTEM and then displays the     *
  631. ;                    requested info.                                      *
  632. ;                                                                         *
  633. ;INPUT                                                                    *
  634. ;                                                                         *
  635. ;OUTPUT                                                                   *
  636. ;                                                                         *
  637. ;**************************************************************************
  638.  
  639. DISP_EHLLAPI_INFO     PROC     NEAR                  ; Routine to display
  640.                                                      ;EHLLAPI info.
  641.  
  642.               PUSH     AX
  643.               PUSH     BX
  644.               PUSH     CX
  645.               PUSH     DX
  646.               PUSH     SI
  647.               PUSH     DI
  648.               PUSH     BP
  649.               PUSH     ES
  650.  
  651.               MOV      HPCB.HLPCB_FUNC, HA_QUERY_SYSTEM
  652.                                                 ; Issue query system
  653.  
  654.               MOV      SI, OFFSET HPCB          ; DS:SI-> PCB
  655.                                                 ; DS already set up.
  656.  
  657.               CALL     HLLMASM                  ; Call EHLLAPI.
  658.  
  659.               CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  660.               JE       OK_DEI                   ; If GOOD rc, jmp.
  661.               JMP      ERROR_DEI                ; goto error routine.
  662. OK_DEI:
  663.               DISPLAY  <'                     EHLLAPI INFORMATION'>
  664.               CALL     NEW_LINE
  665.               CALL     NEW_LINE
  666.  
  667.               DISPLAY  <'  EHLLAPI version              : '>
  668.               MOV      BX, OFFSET HDATA_STR.QSYS_HLLAPI_VER
  669.               MOV      AX,1
  670.               CALL     DSP_MSG_LEN
  671.               CALL     NEW_LINE
  672.  
  673.               DISPLAY  <'  EHLLAPI level                : '>
  674.               MOV      BX, OFFSET HDATA_STR.QSYS_HLLAPI_LVL
  675.               MOV      AX, 2
  676.               CALL     DSP_MSG_LEN
  677.               CALL     NEW_LINE
  678.  
  679.               DISPLAY  <'  EHLLAPI release date         : '>
  680.               MOV      BX, OFFSET HDATA_STR.QSYS_HLLAPI_DATE
  681.               MOV      AX, 6
  682.               CALL     DSP_MSG_LEN
  683.               CALL     NEW_LINE
  684.  
  685.               DISPLAY  <'  EHLLAPI LIM version          : '>
  686.               MOV      BX, OFFSET HDATA_STR.QSYS_LIM_VER
  687.               MOV      AX, 1
  688.               CALL     DSP_MSG_LEN
  689.               CALL     NEW_LINE
  690.  
  691.               DISPLAY  <'  EHLLAPI LIM level            : '>
  692.               MOV      BX, OFFSET HDATA_STR.QSYS_LIM_LVL
  693.               MOV      AX, 2
  694.               CALL     DSP_MSG_LEN
  695.               CALL     NEW_LINE
  696.  
  697.               DISPLAY  <'  EHLLAPI hardware base        : '>
  698.               MOV      BX, OFFSET HDATA_STR.QSYS_HARDWARE_BASE
  699.               MOV      AX, 1
  700.               CALL     DSP_MSG_LEN
  701.               DISPLAY  <' = '>
  702.               CMP      HDATA_STR.QSYS_HARDWARE_BASE, 'Z'
  703.               JNE      NEXT_DEI3
  704.               DISPLAY  <'(See System model/submodel below)'>
  705. NEXT_DEI3:
  706.               CALL     NEW_LINE
  707.               DISPLAY  <'  EHLLAPI CTRL program type    : '>
  708.               MOV      BX, OFFSET HDATA_STR.QSYS_CTRL_PROG_TYPE
  709.               MOV      AX, 1
  710.               CALL     DSP_MSG_LEN
  711.               DISPLAY  <' = '>
  712.               CMP      HDATA_STR.QSYS_CTRL_PROG_TYPE, 'X'
  713.               JNE      NEXT_DEI6
  714.               DISPLAY  <'OS/2'>
  715. NEXT_DEI6:
  716.               CALL     NEW_LINE
  717.               DISPLAY  <'  EHLLAPI sequence number      : '>
  718.               MOV      BX, OFFSET HDATA_STR.QSYS_SEQ_NUM
  719.               MOV      AX, 2
  720.               CALL     DSP_MSG_LEN
  721.               CALL     NEW_LINE
  722.  
  723.               DISPLAY  <'  EHLLAPI CTRL program version : '>
  724.               MOV      BX, OFFSET HDATA_STR.QSYS_CTRL_PROG_VER
  725.               MOV      AX, 2
  726.               CALL     DSP_MSG_LEN
  727.               CALL     NEW_LINE
  728.  
  729.               DISPLAY  <'  EHLLAPI PC session name      : '>
  730.               MOV      BX, OFFSET HDATA_STR.QSYS_PC_SNAME
  731.               MOV      AX, 1
  732.               CALL     DSP_MSG_LEN
  733.               CALL     NEW_LINE
  734.  
  735.               DISPLAY  <'  EHLLAPI extended error 1     : '>
  736.               MOV      BX, OFFSET HDATA_STR.QSYS_ERR1
  737.               MOV      AX, 4
  738.               CALL     DSP_MSG_LEN
  739.               CALL     NEW_LINE
  740.  
  741.               DISPLAY  <'  EHLLAPI extended error 2     : '>
  742.               MOV      BX, OFFSET HDATA_STR.QSYS_ERR2
  743.               MOV      AX, 4
  744.               CALL     DSP_MSG_LEN
  745.               CALL     NEW_LINE
  746.  
  747.               DISPLAY  <'  EHLLAPI system model/submodel: '>
  748.               MOV      AH,HDATA_STR.QSYS_SYS_MODEL
  749.               MOV      BX, OFFSET DIGIT_BUFF
  750.               CALL     ITOH                  ;Integer to ASCII hex.
  751.               MOV      AX, 2
  752.               CALL     DSP_MSG_LEN
  753.               MOV      AH,HDATA_STR.QSYS_SYS_SUBMODEL
  754.               MOV      BX, OFFSET DIGIT_BUFF
  755.               CALL     ITOH                  ;Integer to ASCII HEX.
  756.               MOV      BX, OFFSET DIGIT_BUFF
  757.               MOV      AX, 2
  758.               CALL     DSP_MSG_LEN
  759.               DISPLAY  <' HEX  '>
  760.               CMP      WORD PTR HDATA_STR.QSYS_SYS_MODEL, 00FCH
  761.               JNE      NEXT_DEI7
  762.               DISPLAY <'= Model PC AT'>
  763. NEXT_DEI7:    CMP      WORD PTR HDATA_STR.QSYS_SYS_MODEL, 01FCH
  764.               JNE      NEXT_DEI8
  765.               DISPLAY <'= Model PC AT ENHANCED'>
  766. NEXT_DEI8:    CMP      WORD PTR HDATA_STR.QSYS_SYS_MODEL, 02FCH
  767.               JNE      NEXT_DEI11
  768.               DISPLAY <'= Model PC XT Model 286'>
  769. NEXT_DEI11:   CMP      WORD PTR HDATA_STR.QSYS_SYS_MODEL, 04FCH
  770.               JNE      NEXT_DEI12
  771.               DISPLAY <'= Model 50'>
  772. NEXT_DEI12:   CMP      WORD PTR HDATA_STR.QSYS_SYS_MODEL, 05FCH
  773.               JNE      NEXT_DEI13
  774.               DISPLAY <'= Model 60'>
  775. NEXT_DEI13:   CMP      WORD PTR HDATA_STR.QSYS_SYS_MODEL, 00F8H
  776.               JNE      NEXT_DEI14
  777.               DISPLAY <'= Model 80'>
  778. NEXT_DEI14:   CMP      WORD PTR HDATA_STR.QSYS_SYS_MODEL, 09F8H
  779.               JNE      NEXT_DEI141
  780.               DISPLAY <'= Model 70'>
  781. NEXT_DEI141:  CALL     NEW_LINE
  782.  
  783.               DISPLAY <'  EHLLAPI National Language    : '>
  784.               MOV      AX,HDATA_STR.QSYS_PC_NLS
  785.               MOV      BX, OFFSET DIGIT_BUFF
  786.               CALL     ITOA                  ;Integer to ASCII routine.
  787.               CALL     DSP_MSG
  788.               CALL     NEW_LINE
  789.  
  790.               DISPLAY  <'  EHLLAPI monitor type         : '>
  791.               MOV      BX, OFFSET HDATA_STR.QSYS_MONITOR_TYPE
  792.               MOV      AX, 1
  793.               CALL     DSP_MSG_LEN
  794.               DISPLAY  <' = '>
  795.               CMP      HDATA_STR.QSYS_MONITOR_TYPE, 'M'
  796.               JNE      NEXT_DEI15
  797.               DISPLAY  <'PC MONOCHROME'>
  798. NEXT_DEI15:   CMP      HDATA_STR.QSYS_MONITOR_TYPE, 'C'
  799.               JNE      NEXT_DEI16
  800.               DISPLAY  <'PC CGA'>
  801. NEXT_DEI16:   CMP      HDATA_STR.QSYS_MONITOR_TYPE, 'E'
  802.               JNE      NEXT_DEI17
  803.               DISPLAY  <'PC EGA'>
  804. NEXT_DEI17:   CMP      HDATA_STR.QSYS_MONITOR_TYPE, 'A'
  805.               JNE      NEXT_DEI18
  806.               DISPLAY  <'PS MONOCHROME'>
  807. NEXT_DEI18:   CMP      HDATA_STR.QSYS_MONITOR_TYPE, 'V'
  808.               JNE      NEXT_DEI19
  809.               DISPLAY  <'PS 8512'>
  810. NEXT_DEI19:   CMP      HDATA_STR.QSYS_MONITOR_TYPE, 'H'
  811.               JNE      NEXT_DEI20
  812.               DISPLAY  <'PS 8514'>
  813. NEXT_DEI20:   CMP      HDATA_STR.QSYS_MONITOR_TYPE, 'U'
  814.               JNE      NEXT_DEI21
  815.               DISPLAY  <'UNKNOWN monitor type'>
  816. NEXT_DEI21:   CALL     NEW_LINE
  817.               JMP      RET_DEI
  818.  
  819.  
  820. ERROR_DEI:
  821.               MOV      AX,HPCB.HLPCB_RETCODE ;Put bad rc in RC.
  822.               MOV      RC, AX
  823.               XOR      BX,BX                 ;Set function number.
  824.               MOV      BL,HPCB.HLPCB_FUNC
  825.               CALL     ERROR_HAND
  826.  
  827. RET_DEI:
  828.  
  829.            POP      ES
  830.            POP      BP
  831.            POP      DI
  832.            POP      SI
  833.            POP      DX
  834.            POP      CX
  835.            POP      BX
  836.            POP      AX
  837.            RET
  838.  
  839. DISP_EHLLAPI_INFO     ENDP
  840.  
  841.  
  842.  
  843.  
  844. ;**************************************************************************
  845. ;DISP_SESSION_INFO - CALLs EHLLAPI QUERY funtions and then displays the   *
  846. ;                    requested session info.                              *
  847. ;                                                                         *
  848. ;INPUT                                                                    *
  849. ;                                                                         *
  850. ;OUTPUT                                                                   *
  851. ;                                                                         *
  852. ;**************************************************************************
  853.  
  854. DISP_SESSION_INFO     PROC     NEAR                  ; Routine to display
  855.                                                      ; Host session info.
  856.  
  857.             PUSH     AX
  858.             PUSH     BX
  859.             PUSH     CX
  860.             PUSH     DX
  861.             PUSH     SI
  862.             PUSH     DI
  863.             PUSH     BP
  864.             PUSH     ES
  865.  
  866.  
  867.             CALL     NEW_LINE
  868.             CALL     NEW_LINE
  869.             CALL     NEW_LINE
  870.             CALL     NEW_LINE
  871.             CALL     NEW_LINE
  872.             CALL     NEW_LINE
  873.             CALL     NEW_LINE
  874.             CALL     NEW_LINE
  875.             CALL     NEW_LINE
  876.             CALL     NEW_LINE
  877.             CALL     NEW_LINE
  878.             CALL     NEW_LINE
  879.  
  880.             DISPLAY  <'                           SESSION INFO'>
  881.             CALL     NEW_LINE
  882.             CALL     NEW_LINE
  883.  
  884.             MOV      HPCB.HLPCB_FUNC, HA_QUERY_SESSIONS
  885.                                              ; Issue query
  886.                                              ; sessions.
  887.  
  888.             MOV      HPCB.HLPCB_LENGTH, MAX_DATA_SIZE / 12 * 12
  889.                                           ; Make sure len is
  890.                                           ; multiple of 12.
  891.  
  892.             MOV      SI, OFFSET HPCB      ; DS:SI-> PCB
  893.                                           ; DS already set up.
  894.  
  895.             CALL     HLLMASM     ; Call EHLLAPI.
  896.  
  897.             CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  898.             JE       OK_DSI                ; If GOOD rc, jmp.
  899.             JMP      ERROR_DSI             ; goto error routine.
  900.  
  901. OK_DSI:
  902.             CALL     NEW_LINE
  903.             CALL     NEW_LINE
  904.  
  905.  
  906.             MOV      AX, HPCB.HLPCB_LENGTH ; Set Number of sessions
  907.             MOV      NUM_SESS,AX           ; started.
  908.  
  909.             DISPLAY  <'Number of started sessions = '>
  910.             MOV      BX, OFFSET DIGIT_BUFF
  911.             CALL     ITOA                  ; Integer to ASCII routine.
  912.             CALL     DSP_MSG
  913.             CALL     NEW_LINE
  914.             CALL     NEW_LINE
  915.             CALL     NEW_LINE
  916.  
  917.             MOV      AX, OFFSET HDATA_STR  ; Initialize the start
  918.             MOV      ARR_ELE_START, AX     ; of the array element.
  919.  
  920.             MOV      DI,0                  ; LOOP thru queried
  921.                                            ; sessions. DI will be
  922.                                            ; index into sessions
  923. TOP_DSI:
  924.             CMP      DI,NUM_SESS           ; Reached max session?
  925.             JB       NEXT_DSI8
  926.             JMP      DONE_DSI
  927. NEXT_DSI8:
  928.             CALL     NEW_LINE
  929.             DISPLAY  <'Session number     : '>
  930.             MOV      AX, DI
  931.             INC      AX
  932.             MOV      BX, OFFSET DIGIT_BUFF
  933.             CALL     ITOA                  ; Integer to ASCII routine.
  934.             CALL     DSP_MSG
  935.             CALL     NEW_LINE
  936.  
  937.             MOV      SI, ARR_ELE_START
  938.  
  939.             DISPLAY  <'Session Long name  : '>
  940.             LEA      BX, [SI].QSES_LONGNAME
  941.             MOV      AX, 8
  942.             CALL     DSP_MSG_LEN
  943.             CALL     NEW_LINE
  944.  
  945.             DISPLAY  <'Session Short name : '>
  946.             LEA      BX, [SI].QSES_SHORTNAME
  947.             MOV      AX, 1
  948.             CALL     DSP_MSG_LEN
  949.             CALL     NEW_LINE
  950.  
  951.             DISPLAY <'Session Type       : '>
  952.             LEA      BX, [SI].QSES_SESTYPE
  953.             MOV      AX, 1
  954.             CALL     DSP_MSG_LEN
  955.             DISPLAY <' = '>
  956.             CMP      [SI].QSES_SESTYPE, 'H'
  957.             JNE      NEXT_DSI
  958.             DISPLAY <'Host'>
  959.             CMP      DFT_SESS, NULL        ; If first HOST not
  960.                                            ; set already
  961.             JNE      NEXT_DSI
  962.             MOV      AL, [SI].QSES_SHORTNAME
  963.             MOV      DFT_SESS, AL          ; Set the session to
  964.                                            ; write string to.
  965. NEXT_DSI:   CMP      [SI].QSES_SESTYPE, 'P'
  966.             JNE      NEXT_DSI1
  967.             DISPLAY <'PC'>
  968. NEXT_DSI1:
  969.             CALL     NEW_LINE
  970.  
  971.             DISPLAY <'Session PS size    : '>
  972.             MOV      AX, [SI].QSES_PSSIZE
  973.             MOV      BX, OFFSET DIGIT_BUFF
  974.             CALL     ITOA                   ; Integer to ASCII routine.
  975.             CALL     DSP_MSG
  976.             CALL     NEW_LINE
  977.  
  978.             MOV      HPCB.HLPCB_FUNC, HA_QUERY_SESSION_STATUS
  979.                                             ; Issue query
  980.                                             ; sessions.
  981.             MOV      HPCB.HLPCB_LENGTH, 18 ;Set length
  982.             MOV      AL, [SI].QSES_SHORTNAME
  983.             MOV      SESS_STUC.QSST_SHORTNAME, AL
  984.                                             ; Set the short
  985.                                             ; name.
  986.             MOV      HPCB.HLPCB_DADDR, OFFSET SESS_STUC
  987.                                             ; Set new EHLLAPI data
  988.                                             ; area.
  989.  
  990.  
  991.             MOV      SI, OFFSET HPCB        ; DS:SI-> PCB
  992.                                             ; DS already set up.
  993.             PUSH     DI
  994.             CALL     HLLMASM                ; Call EHLLAPI.
  995.             POP      DI
  996.  
  997.             CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  998.             JE       OK_DSI1                ; If GOOD rc, jmp.
  999.             JMP      ERROR_DSI              ; goto error routine.
  1000.  
  1001. OK_DSI1:
  1002.             DISPLAY  <'Session PS rows    : '>
  1003.             MOV      AX,SESS_STUC.QSST_PS_ROWS
  1004.             MOV      BX, OFFSET DIGIT_BUFF
  1005.             CALL     ITOA                   ; Integer to ASCII routine.
  1006.             CALL     DSP_MSG
  1007.             CALL     NEW_LINE
  1008.  
  1009.             DISPLAY  <'Session PS columns : '>
  1010.             MOV      AX,SESS_STUC.QSST_PS_COLS
  1011.             MOV      BX, OFFSET DIGIT_BUFF
  1012.             CALL     ITOA                   ; Integer to ASCII routine.
  1013.             CALL     DSP_MSG
  1014.             CALL     NEW_LINE
  1015.  
  1016.             DISPLAY <'Session type 2     : '>
  1017.             MOV      BX, OFFSET SESS_STUC.QSST_SESTYPE
  1018.             MOV      AX, 1
  1019.             CALL     DSP_MSG_LEN
  1020.  
  1021.             DISPLAY <' = '>
  1022.             CMP      SESS_STUC.QSST_SESTYPE, 'F'
  1023.             JNE      NEXT_DSI11
  1024.             DISPLAY <'5250'>
  1025.  
  1026. NEXT_DSI11: CMP      SESS_STUC.QSST_SESTYPE, 'G'
  1027.             JNE      NEXT_DSI12
  1028.             DISPLAY <'5250 Printer Session'>
  1029.  
  1030. NEXT_DSI12: CMP      SESS_STUC.QSST_SESTYPE, 'D'
  1031.             JNE      NEXT_DSI2
  1032.             DISPLAY <'DFT Host'>
  1033.  
  1034. NEXT_DSI2:  CMP      SESS_STUC.QSST_SESTYPE, 'P'
  1035.             JNE      NEXT_DSI3
  1036.             DISPLAY <'PC'>
  1037. NEXT_DSI3:
  1038.             CALL     NEW_LINE
  1039.             DISPLAY <'Session supports Extended attributes (EABs)? : '>
  1040.             TEST     SESS_STUC.QSST_CHAR, EABS
  1041.             JZ       NEXT_DSI4
  1042.             DISPLAY <'YES'>
  1043.             JMP      NEXT_DSI5
  1044. NEXT_DSI4:
  1045.             DISPLAY <'NO'>
  1046. NEXT_DSI5:
  1047.             CALL     NEW_LINE
  1048.             DISPLAY <'Session supports Program Symbols (PSS)?      : '>
  1049.             TEST     SESS_STUC.QSST_CHAR, PSS
  1050.             JZ       NEXT_DSI6
  1051.             DISPLAY <'YES'>
  1052.             JMP      NEXT_DSI7
  1053. NEXT_DSI6:
  1054.             DISPLAY <'NO'>
  1055. NEXT_DSI7:
  1056.             CALL     NEW_LINE
  1057.             LEA      BX, PRESS_ENT_MSG     ; Print press enter msg.
  1058.             CALL     DSP_MSG
  1059.             CALL     FGETCHAR              ; Make user press enter.
  1060.             CALL     NEW_LINE
  1061.             MOV      AX, SIZE QSES_STRUCT  ; Get next start pos.
  1062.             ADD      ARR_ELE_START, AX
  1063.             INC      DI                    ; GET next session.
  1064.             JMP      TOP_DSI
  1065.  
  1066. ERROR_DSI:
  1067.             MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  1068.             MOV      RC, AX
  1069.             XOR      BX,BX                 ; Set function number.
  1070.             MOV      BL,HPCB.HLPCB_FUNC
  1071.             CALL     ERROR_HAND
  1072. DONE_DSI:
  1073.  
  1074.             MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1075.                                            ; Reset the orig EHLLAPI
  1076.                                            ; data_str.
  1077.  
  1078.             POP      ES
  1079.             POP      BP
  1080.             POP      DI
  1081.             POP      SI
  1082.             POP      DX
  1083.             POP      CX
  1084.             POP      BX
  1085.             POP      AX
  1086.  
  1087.             RET
  1088.  
  1089. DISP_SESSION_INFO     ENDP
  1090.  
  1091.  
  1092.  
  1093.  
  1094. ;**************************************************************************
  1095. ;WRITE_STR_2_HOST  - Connects to first session and writes home_key and    *
  1096. ;                    string to host.                                      *
  1097. ;                                                                         *
  1098. ;INPUT                                                                    *
  1099. ;                                                                         *
  1100. ;OUTPUT                                                                   *
  1101. ;                                                                         *
  1102. ;**************************************************************************
  1103.  
  1104. WRITE_STR_2_HOST      PROC     NEAR                  ; Call routine to
  1105.                                                      ; write string to host.
  1106.  
  1107.             PUSH     AX
  1108.             PUSH     BX
  1109.             PUSH     CX
  1110.             PUSH     DX
  1111.             PUSH     SI
  1112.             PUSH     DI
  1113.             PUSH     BP
  1114.             PUSH     ES
  1115.  
  1116.             MOV      AL, DFT_SESS          ; Set session id to
  1117.             MOV      HDATA_STR, AL         ; connect.
  1118.  
  1119.             MOV      HPCB.HLPCB_FUNC, HA_CONNECT_PS
  1120.                                            ; Issue Connect
  1121.                                            ; Presentation Space.
  1122.  
  1123.             MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1124.                                            ; DS already set up.
  1125.  
  1126.             CALL     HLLMASM               ; Call EHLLAPI.
  1127.  
  1128.             CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1129.             JE       OK_WSH                ; If GOOD rc, jmp.
  1130.             JMP      ERROR_WSH             ; goto error routine.
  1131.  
  1132. OK_WSH:
  1133.             MOV      HPCB.HLPCB_FUNC, HA_SENDKEY
  1134.                                            ; Issue sendkey
  1135.             MOV      HPCB.HLPCB_LENGTH, HOME_KEY_LEN
  1136.                                            ; Set length
  1137.             MOV      HPCB.HLPCB_DADDR, OFFSET HOME_KEY
  1138.                                            ; Set new data_str.
  1139.             MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1140.                                            ; DS already set up.
  1141.  
  1142.             CALL     HLLMASM               ;Call EHLLAPI.
  1143.  
  1144.             CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1145.             JE       OK_WSH1               ; If GOOD rc, jmp.
  1146.             JMP      ERROR_WSH             ; goto error routine.
  1147.  
  1148. OK_WSH1:
  1149.             MOV      HPCB.HLPCB_LENGTH, HOST_TEXT_LEN
  1150.                                            ; Set length
  1151.             MOV      HPCB.HLPCB_DADDR, OFFSET HOST_TEXT
  1152.                                            ; Set new data_str.
  1153.             MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1154.                                            ; DS already set up.
  1155.             CALL     HLLMASM               ; Call EHLLAPI.
  1156.  
  1157.             CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1158.             JE       OK_WSH2               ; If GOOD rc, jmp.
  1159.             JMP      ERROR_WSH             ; goto error routine.
  1160.  
  1161. OK_WSH2:
  1162.             DISPLAY  <'Sent String to Host.'>
  1163.             CALL     NEW_LINE
  1164.             CALL     NEW_LINE
  1165.             CALL     NEW_LINE
  1166.             JMP      DONE_WSH
  1167. ERROR_WSH:
  1168.             MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  1169.             MOV      RC, AX
  1170.             XOR      BX,BX                 ; Set function number.
  1171.             MOV      BL,HPCB.HLPCB_FUNC
  1172.             CALL     ERROR_HAND
  1173. DONE_WSH:
  1174.             MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1175.                                            ; Reset the orig EHLLAPI
  1176.                                            ; data_str.
  1177.             POP      ES
  1178.             POP      BP
  1179.             POP      DI
  1180.             POP      SI
  1181.             POP      DX
  1182.             POP      CX
  1183.             POP      BX
  1184.             POP      AX
  1185.  
  1186.             RET
  1187.  
  1188. WRITE_STR_2_HOST      ENDP
  1189.  
  1190.  
  1191. ;**************************************************************************
  1192. ;SEARCH_STR_ON_HOST- Searches for string on host.                         *
  1193. ;                                                                         *
  1194. ;INPUT                                                                    *
  1195. ;                                                                         *
  1196. ;OUTPUT                                                                   *
  1197. ;                                                                         *
  1198. ;**************************************************************************
  1199.  
  1200. SEARCH_STR_ON_HOST    PROC     NEAR                  ; Routine to search
  1201.                                                      ; for string on host
  1202.                                                      ; session.
  1203.            PUSH     AX
  1204.            PUSH     BX
  1205.            PUSH     CX
  1206.            PUSH     DX
  1207.            PUSH     SI
  1208.            PUSH     DI
  1209.            PUSH     BP
  1210.            PUSH     ES
  1211.  
  1212.            MOV      HPCB.HLPCB_FUNC, HA_SEARCH_PS
  1213.                                           ; Issue SEARCH PS
  1214.            MOV      HPCB.HLPCB_LENGTH, HOST_TEXT_LEN
  1215.                                           ; Set length
  1216.  
  1217.            MOV      HPCB.HLPCB_DADDR, OFFSET HOST_TEXT
  1218.                                           ;Set new data_str.
  1219.  
  1220.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1221.                                           ; DS already set up.
  1222.  
  1223.            CALL     HLLMASM               ; Call EHLLAPI.
  1224.  
  1225.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1226.            JE       OK_SSOH               ; If GOOD rc, jmp.
  1227.            JMP      ERROR_SSOH            ; goto error routine.
  1228.  
  1229. OK_SSOH:
  1230.            DISPLAY  <'Found string "'>
  1231.            MOV      BX, OFFSET HOST_TEXT
  1232.            CALL     DSP_MSG
  1233.            DISPLAY  <'" at PS position '>
  1234.            LEA      BX, DIGIT_BUFF
  1235.            MOV      AX, HPCB.HLPCB_LENGTH ;
  1236.            CALL     ITOA
  1237.            CALL     DSP_MSG
  1238.            DISPLAY  <'.'>
  1239.            CALL     NEW_LINE
  1240.            CALL     NEW_LINE
  1241.            CALL     NEW_LINE
  1242.            JMP      DONE_SSOH
  1243. ERROR_SSOH:
  1244.            MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  1245.            MOV      RC, AX
  1246.            XOR      BX,BX                 ; Set function number.
  1247.            MOV      BL,HPCB.HLPCB_FUNC
  1248.            CALL     ERROR_HAND
  1249. DONE_SSOH:
  1250.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1251.                                           ; Reset the orig EHLLAPI
  1252.                                           ; data_str.
  1253.            POP      ES
  1254.            POP      BP
  1255.            POP      DI
  1256.            POP      SI
  1257.            POP      DX
  1258.            POP      CX
  1259.            POP      BX
  1260.            POP      AX
  1261.            RET
  1262.  
  1263. SEARCH_STR_ON_HOST    ENDP
  1264.  
  1265.  
  1266. ;*************************************************************************
  1267. ;DISP_HOST_SCR - Displays first 1920 bytes of host screen.               *
  1268. ;                                                                        *
  1269. ;                                                                        *
  1270. ;*************************************************************************
  1271.  
  1272. DISP_HOST_SCR         PROC     NEAR                  ; Routine to
  1273.                                                      ; display host screen.
  1274.  
  1275.  
  1276.  
  1277.  
  1278.            PUSH     AX
  1279.            PUSH     BX
  1280.            PUSH     CX
  1281.            PUSH     DX
  1282.            PUSH     SI
  1283.            PUSH     DI
  1284.            PUSH     BP
  1285.            PUSH     ES
  1286.  
  1287.            MOV      HPCB.HLPCB_FUNC, HA_SET_SESSION_PARMS
  1288.                                           ; Issue Set session Parms
  1289.            MOV      HPCB.HLPCB_LENGTH, SETPARM_TEXT_LEN
  1290.                                           ; Set length
  1291.            MOV      HPCB.HLPCB_DADDR, OFFSET SETPARM_TEXT
  1292.                                           ; Set new data_str.
  1293.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1294.                                           ; DS already set up.
  1295.            CALL     HLLMASM               ; Call EHLLAPI.
  1296.  
  1297.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1298.            JE       OK_DHS                ; If GOOD rc, jmp.
  1299.            JMP      ERROR_DHS             ; goto error routine.
  1300.  
  1301. OK_DHS:
  1302.            MOV      HPCB.HLPCB_FUNC, HA_COPY_PS_TO_STR
  1303.                                           ; Issue Copy PS
  1304.            MOV      HPCB.HLPCB_LENGTH, MAX_DATA_SIZE
  1305.                                           ; Set length
  1306.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1307.                                           ; Reset the orig EHLLAPI
  1308.                                           ; data_str.
  1309.            MOV      HPCB.HLPCB_RETCODE, 1 ; Set PS position to
  1310.                                           ; top,left corner.
  1311.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1312.                                           ; DS already set up.
  1313.            CALL     HLLMASM               ; Call EHLLAPI.
  1314.  
  1315.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1316.            JE       OK_DHS1              ; If GOOD rc, jmp.
  1317.            JMP      ERROR_DHS            ; goto error routine.
  1318. OK_DHS1:
  1319.            PUSH     DS
  1320.            PUSH     OFFSET HDATA_STR
  1321.            PUSH     MAX_DATA_SIZE
  1322.            PUSH     0
  1323.            PUSH     0
  1324.            PUSH     0
  1325.            CALL     VIOWRTCELLSTR
  1326.            JMP      DONE_DHS
  1327.  
  1328. ERROR_DHS:
  1329.            MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  1330.            MOV      RC, AX
  1331.            XOR      BX,BX                 ; Set function number.
  1332.            MOV      BL,HPCB.HLPCB_FUNC
  1333.            CALL     ERROR_HAND
  1334. DONE_DHS:
  1335.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1336.                                           ; Reset the orig EHLLAPI
  1337.                                           ; data_str.
  1338.            POP      ES
  1339.            POP      BP
  1340.            POP      DI
  1341.            POP      SI
  1342.            POP      DX
  1343.            POP      CX
  1344.            POP      BX
  1345.            POP      AX
  1346.            RET
  1347.  
  1348. DISP_HOST_SCR       ENDP
  1349.  
  1350.  
  1351.  
  1352.  
  1353. ;**************************************************************************
  1354. ;CHANGE WINDOW NAME - Change window title on PM host session              *
  1355. ;                                                                         *
  1356. ;                                                                         *
  1357. ;                                                                         *
  1358. ;**************************************************************************
  1359.  
  1360. CHANGE_WINDOW_NAME      PROC     NEAR
  1361.  
  1362.  
  1363.              PUSH     AX
  1364.              PUSH     BX
  1365.              PUSH     CX
  1366.              PUSH     DX
  1367.              PUSH     SI
  1368.              PUSH     DI
  1369.              PUSH     BP
  1370.              PUSH     ES
  1371.  
  1372.              MOV      AL, DFT_SESS          ; Set session id to
  1373.              MOV      HDATA_STR, AL         ; connect.
  1374.  
  1375.              MOV      HPCB.HLPCB_FUNC, HA_CONNECT_PM_SRVCS
  1376.                                             ; Issue Connect
  1377.                                             ; Presentation Space.
  1378.              MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1379.                                             ; DS already set up.
  1380.              CALL     HLLMASM               ; Call EHLLAPI.
  1381.              CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1382.              JE       OK_WCH1               ; If GOOD rc, jmp.
  1383.              JMP      ERROR_WCH             ; goto error routine.
  1384. OK_WCH1:
  1385.              MOV      HPCB.HLPCB_FUNC, HA_CHANGE_WINDOW_NAME
  1386.                                             ; Issue change window name
  1387.              MOV      HPCB.HLPCB_LENGTH, (TEST_NAME_LEN + 3)
  1388.                                             ; Set length
  1389.              MOV      AL, DFT_SESS          ; Set session id
  1390.              MOV      HDATA_STR.CHLT_SHORTNAME, AL
  1391.              MOV      HDATA_STR.CHLT_OPTION,1
  1392.              MOV      SI, OFFSET TEST_NAME
  1393.              MOV      DI, OFFSET HDATA_STR.CHLT_LTNAME
  1394.              MOV      CX, TEST_NAME_LEN
  1395. REP          MOVS     HDATA_STR.CHLT_LTNAME, TEST_NAME
  1396.              MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1397.              MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1398.                                             ; DS already set
  1399.              CALL     HLLMASM               ; Call EHLLAPI.
  1400.              CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1401.              JE       OK_WCH2               ; If GOOD rc, jmp.
  1402.              JMP      ERROR_WCH             ; goto error routine.
  1403. OK_WCH2:
  1404.              DISPLAY  <'Window Title Changed.'>
  1405.              CALL     NEW_LINE
  1406.              DISPLAY  <'(press CTRL-ESC to verify)'>
  1407.              CALL     NEW_LINE
  1408.              CALL     NEW_LINE
  1409.              CALL     NEW_LINE
  1410.              JMP      DONE_WCH
  1411. ERROR_WCH:
  1412.              MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  1413.              MOV      RC, AX
  1414.              XOR      BX,BX                 ; Set function number.
  1415.              MOV      BL,HPCB.HLPCB_FUNC
  1416.              CALL     ERROR_HAND
  1417. DONE_WCH:
  1418.              MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1419.                                             ; Reset the orig EHLLAPI
  1420.                                             ; data_str.
  1421.              POP      ES
  1422.              POP      BP
  1423.              POP      DI
  1424.              POP      SI
  1425.              POP      DX
  1426.              POP      CX
  1427.              POP      BX
  1428.              POP      AX
  1429.  
  1430.              RET
  1431.  
  1432. CHANGE_WINDOW_NAME    ENDP
  1433.  
  1434.  
  1435. ;**************************************************************************
  1436. ;CHANGE SWITCH LIST TITLE - Change logical terminal name on the           *
  1437. ;                           switch list                                   *
  1438. ;                                                                         *
  1439. ;                                                                         *
  1440. ;**************************************************************************
  1441.  
  1442. CHANGE_SWITCH_LIST_TITLE      PROC     NEAR
  1443.  
  1444.  
  1445.            PUSH     AX
  1446.            PUSH     BX
  1447.            PUSH     CX
  1448.            PUSH     DX
  1449.            PUSH     SI
  1450.            PUSH     DI
  1451.            PUSH     BP
  1452.            PUSH     ES
  1453.  
  1454.            MOV      AL, DFT_SESS          ; Set session id to
  1455.            MOV      HDATA_STR, AL         ; connect.
  1456.  
  1457.            MOV      HPCB.HLPCB_FUNC, HA_CONNECT_PM_SRVCS
  1458.                                           ; Issue Connect
  1459.                                           ; Presentation Space.
  1460.  
  1461.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1462.                                           ; DS already set up.
  1463.  
  1464.            CALL     HLLMASM               ; Call EHLLAPI.
  1465.  
  1466.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1467.            JE       OK_WSL1               ; If GOOD rc, jmp.
  1468.            JMP      ERROR_WSL             ; goto error routine.
  1469. OK_WSL1:
  1470.            MOV      HPCB.HLPCB_FUNC, HA_CHANGE_SWITCH_NAME
  1471.                                           ; Issue change window name
  1472.            MOV      HPCB.HLPCB_LENGTH, (TEST_NAME_LEN + 3)
  1473.                                           ; Set length
  1474.            MOV      AL, DFT_SESS          ; Set session id
  1475.            MOV      HDATA_STR.CHSW_SHORTNAME, AL
  1476.            MOV      HDATA_STR.CHSW_OPTION,1
  1477.            MOV      SI, OFFSET TEST_NAME
  1478.            MOV      DI, OFFSET HDATA_STR.CHSW_SWNAME
  1479.            MOV      CX, TEST_NAME_LEN
  1480. REP        MOVS     HDATA_STR.CHSW_SWNAME, TEST_NAME
  1481.  
  1482.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1483.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1484.                                           ; DS already set up.
  1485.            CALL     HLLMASM               ; Call EHLLAPI.
  1486.  
  1487.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1488.            JE       OK_WSL2               ; If GOOD rc, jmp.
  1489.            JMP      ERROR_WSL             ; goto error routine.
  1490. OK_WSL2:
  1491.            DISPLAY  <'Switch List Title Changed.'>
  1492.            CALL     NEW_LINE
  1493.            DISPLAY  <'(press CTRL-ESC to verify)'>
  1494.            CALL     NEW_LINE
  1495.            CALL     NEW_LINE
  1496.            CALL     NEW_LINE
  1497.            JMP      DONE_WSL
  1498. ERROR_WSL:
  1499.            MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  1500.            MOV      RC, AX
  1501.            XOR      BX,BX                 ; Set function number.
  1502.            MOV      BL,HPCB.HLPCB_FUNC
  1503.            CALL     ERROR_HAND
  1504. DONE_WSL:
  1505.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1506.                                           ; Reset the orig EHLLAPI
  1507.                                           ; data_str.
  1508.            POP      ES
  1509.            POP      BP
  1510.            POP      DI
  1511.            POP      SI
  1512.            POP      DX
  1513.            POP      CX
  1514.            POP      BX
  1515.            POP      AX
  1516.  
  1517.            RET
  1518.  
  1519. CHANGE_SWITCH_LIST_TITLE    ENDP
  1520.  
  1521.  
  1522.  
  1523.  
  1524. ;**************************************************************************
  1525. ;QUERY PM WINDOW STATUS - Query PM window status and report               *
  1526. ;                         back the results.                               *
  1527. ;                                                                         *
  1528. ;                                                                         *
  1529. ;**************************************************************************
  1530.  
  1531. QUERY_PM_WINDOW_STATUS      PROC     NEAR
  1532.  
  1533.           PUSH     AX
  1534.           PUSH     BX
  1535.           PUSH     CX
  1536.           PUSH     DX
  1537.           PUSH     SI
  1538.           PUSH     DI
  1539.           PUSH     BP
  1540.           PUSH     ES
  1541.  
  1542.           MOV      AL, DFT_SESS          ; Set session id to
  1543.           MOV      HDATA_STR, AL         ; connect.
  1544.           MOV      HPCB.HLPCB_FUNC, HA_CONNECT_PM_SRVCS
  1545.                                          ; Issue Connect
  1546.                                          ; Presentation Space.
  1547.           MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1548.                                          ; DS already set up.
  1549.           CALL     HLLMASM               ; Call EHLLAPI.
  1550.           CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1551.           JE       OK_WQPM1              ; If GOOD rc, jmp.
  1552.           JMP      ERROR_WQPM            ; goto error routine.
  1553. OK_WQPM1:
  1554.           MOV      HPCB.HLPCB_FUNC, HA_PM_WINDOW_STATUS
  1555.           MOV      AL, DFT_SESS          ; Set session id
  1556.           MOV      HDATA_STR.CWIN_SHORTNAME, AL
  1557.           MOV      HDATA_STR.CWIN_OPTION,2
  1558.           MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1559.                                          ; DS already set up.
  1560.           CALL     HLLMASM               ; Call EHLLAPI.
  1561.           CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1562.           JE       OK_WQPM2              ; If GOOD rc, jmp.
  1563.           JMP      ERROR_WQPM            ; goto error routine.
  1564. OK_WQPM2:
  1565.           CALL     NEW_LINE
  1566.           CALL     NEW_LINE
  1567.           DISPLAY  <'                  PM WINDOW STATUS:'>
  1568.           CALL     NEW_LINE
  1569.           CALL     NEW_LINE
  1570.           MOV      AX,HDATA_STR.CWIN_FLAGS
  1571.           TEST     AX,HEX8
  1572.           JE       T1
  1573.           DISPLAY  <'The Window Is Visible. '>
  1574.           CALL     NEW_LINE
  1575.  
  1576. T1:       TEST     AX,HEX10
  1577.           JE       T2
  1578.           DISPLAY  <'The Window Is Invisible. '>
  1579.           CALL     NEW_LINE
  1580.  
  1581. T2:       TEST     AX,HEX80
  1582.           JE       T3
  1583.           DISPLAY  <'The Window Is Activated. '>
  1584.           CALL     NEW_LINE
  1585.  
  1586. T3:       TEST     AX,HEX100
  1587.           JE       T4
  1588.           DISPLAY  <'The Window Is Deactivated. '>
  1589.           CALL     NEW_LINE
  1590.  
  1591. T4:       TEST      AX,HEX400
  1592.           JE               T5
  1593.           DISPLAY   <'The Window Is Minimized. '>
  1594.           CALL      NEW_LINE
  1595.  
  1596. T5:       TEST      AX,HEX800
  1597.           JE        COORDS
  1598.           DISPLAY   <'The Window Is Maximized. '>
  1599.           CALL      NEW_LINE
  1600. COORDS:
  1601.           MOV       HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1602.           MOV       HPCB.HLPCB_FUNC, HA_QUERY_WINDOW_COORDS
  1603.                                    ; Issue query window coordinates
  1604.  
  1605.           MOV       AL, DFT_SESS
  1606.           MOV       HDATA_STR.GCOR_SHORTNAME, AL
  1607.  
  1608.           MOV       SI, OFFSET HPCB       ; DS:SI-> PCB
  1609.                                           ; DS already set up.
  1610.           CALL      HLLMASM               ; Call EHLLAPI.
  1611.  
  1612.           CMP       HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1613.           JE        DONE_WQPM             ; If GOOD rc, jmp.
  1614. ERROR_WQPM:
  1615.           MOV      AX,HPCB.HLPCB_RETCODE  ; Put bad rc in RC.
  1616.           MOV      RC, AX
  1617.           XOR      BX,BX                  ; Set function number.
  1618.           MOV      BL,HPCB.HLPCB_FUNC
  1619.           CALL     ERROR_HAND
  1620. DONE_WQPM:
  1621.           MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1622.                                           ; Reset the orig EHLLAPI
  1623.                                           ; data_str.
  1624.         POP      ES
  1625.         POP      BP
  1626.         POP      DI
  1627.         POP      SI
  1628.         POP      DX
  1629.         POP      CX
  1630.         POP      BX
  1631.         POP      AX
  1632.         RET
  1633.  
  1634. QUERY_PM_WINDOW_STATUS      ENDP
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640. ;**************************************************************************
  1641. ;QUERY PM WINDOW COORDINATES - Query PM window coordinates and report     *
  1642. ;                              back the coordinates to OS/2 session.      *
  1643. ;                                                                         *
  1644. ;                                                                         *
  1645. ;                                                                         *
  1646. ;**************************************************************************
  1647.  
  1648. QUERY_PM_WINDOW_COORDS      PROC     NEAR
  1649.  
  1650.         PUSH     AX
  1651.         PUSH     BX
  1652.         PUSH     CX
  1653.         PUSH     DX
  1654.         PUSH     SI
  1655.         PUSH     DI
  1656.         PUSH     BP
  1657.         PUSH     ES
  1658.  
  1659.  
  1660.          MOV      AL, DFT_SESS          ; Set session id to
  1661.          MOV      HDATA_STR, AL         ; connect.
  1662.          MOV      HPCB.HLPCB_FUNC, HA_CONNECT_PM_SRVCS
  1663.                                         ; Issue Connect
  1664.                                         ; Presentation Space.
  1665.          MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1666.                                         ; DS already set up.
  1667.  
  1668.          CALL     HLLMASM               ; Call EHLLAPI.
  1669.  
  1670.          CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1671.          JE       OK_CRD                ; If GOOD rc, jmp.
  1672.          JMP      ERROR_COORDS          ; goto error routine.
  1673.  
  1674. OK_CRD:
  1675.  
  1676.          MOV      HPCB.HLPCB_FUNC, HA_QUERY_WINDOW_COORDS
  1677.          MOV      AL, DFT_SESS
  1678.          MOV      HDATA_STR.GCOR_SHORTNAME, AL
  1679.          MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1680.                                         ; DS already set up.
  1681.          CALL     HLLMASM               ; Call EHLLAPI.
  1682.          CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1683.          JE       COORD1                ; If GOOD rc, jmp.
  1684.          JMP      ERROR_COORDS          ; goto error routine.
  1685.  
  1686. COORD1:  CALL     NEW_LINE
  1687.          CALL     NEW_LINE
  1688.          DISPLAY  <'PM WINDOW COORDINATES :'>
  1689.          CALL     NEW_LINE
  1690.  
  1691.          CALL     NEW_LINE
  1692.          DISPLAY  <'XLEFT COORDINATE      :  '>
  1693.          MOV      SI, OFFSET HDATA_STR.GCOR_SHORTNAME
  1694.          ADD      SI,3
  1695.          CALL     PCOORD
  1696.  
  1697.          MOV      SI, OFFSET HDATA_STR.GCOR_SHORTNAME
  1698.          ADD      SI,1
  1699.          CALL     PCOORD
  1700.  
  1701.          CALL     NEW_LINE
  1702.          DISPLAY  <'YBOTTOM COORDINATE    :  '>
  1703.          MOV      SI, OFFSET HDATA_STR.GCOR_SHORTNAME
  1704.          ADD      SI,7
  1705.          CALL     PCOORD
  1706.  
  1707.          MOV      SI, OFFSET HDATA_STR.GCOR_SHORTNAME
  1708.          ADD      SI,5
  1709.          CALL     PCOORD
  1710.  
  1711.          CALL     NEW_LINE
  1712.          DISPLAY  <'XRIGHT COORDINATE     :  '>
  1713.          MOV      SI, OFFSET HDATA_STR.GCOR_SHORTNAME
  1714.          ADD      SI,11
  1715.          CALL     PCOORD
  1716.  
  1717.          MOV      SI, OFFSET HDATA_STR.GCOR_SHORTNAME
  1718.          ADD      SI,9
  1719.          CALL     PCOORD
  1720.  
  1721.          CALL     NEW_LINE
  1722.          DISPLAY  <'YTOP COORDINATE       :  '>
  1723.          MOV      SI, OFFSET HDATA_STR.GCOR_SHORTNAME
  1724.          ADD      SI,15
  1725.          CALL     PCOORD
  1726.  
  1727.          MOV      SI, OFFSET HDATA_STR.GCOR_SHORTNAME
  1728.          ADD      SI,13
  1729.          CALL     PCOORD
  1730.          CALL     NEW_LINE
  1731.          CALL     NEW_LINE
  1732.          DISPLAY <'(press CTRL-ESC to verify)'>
  1733.          CALL     NEW_LINE
  1734.          CALL     NEW_LINE
  1735.  
  1736.          JMP      DONE_COORDS
  1737.  
  1738. ERROR_COORDS:
  1739.  
  1740.          MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  1741.          MOV      RC, AX
  1742.          XOR      BX,BX                 ; Set function number.
  1743.          MOV      BL,HPCB.HLPCB_FUNC
  1744.          CALL     ERROR_HAND
  1745.  
  1746. DONE_COORDS:
  1747.         MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1748.                                          ; Reset the orig EHLLAPI
  1749.                                          ; data_str.
  1750.         POP      ES
  1751.         POP      BP
  1752.         POP      DI
  1753.         POP      SI
  1754.         POP      DX
  1755.         POP      CX
  1756.         POP      BX
  1757.         POP      AX
  1758.         RET
  1759.  
  1760. QUERY_PM_WINDOW_COORDS     ENDP
  1761.  
  1762.  
  1763.  
  1764. ;*************************************************************************
  1765. ; PCOORD - Display a window coordinate in hex.                           *
  1766. ;                                                                        *
  1767. ;INPUT                                                                   *
  1768. ;  SI    - index to coordinate from QUERY_PM_WINDOW_COORDS               *
  1769. ;                                                                        *
  1770. ;                                                                        *
  1771. ;*************************************************************************
  1772.  
  1773. PCOORD  PROC     NEAR
  1774.  
  1775.  
  1776.          MOV      DI,OFFSET DOUBLE_BUFF
  1777.          MOV      CX,2
  1778. REP      MOVS     DOUBLE_BUFF,HDATA_STR.GCOR_SHORTNAME
  1779.          MOV      AH, DOUBLE_BUFF [1]
  1780.          MOV      AL, DOUBLE_BUFF
  1781.          MOV      BX, OFFSET DIGIT_BUFF
  1782.          CALL     ITOH
  1783.          MOV      AX,4
  1784.          CALL     DSP_MSG_LEN
  1785.  
  1786.          RET
  1787. PCOORD   ENDP
  1788.  
  1789.  
  1790.  
  1791.  
  1792. ;**************************************************************************
  1793. ;MAKE WINDOW INVISIBLE - Make the PM emulator window invisible            *
  1794. ;                                                                         *
  1795. ;                                                                         *
  1796. ;                                                                         *
  1797. ;**************************************************************************
  1798.  
  1799. MAKE_WINDOW_INVISIBLE      PROC     NEAR
  1800.  
  1801.            PUSH     AX
  1802.            PUSH     BX
  1803.            PUSH     CX
  1804.            PUSH     DX
  1805.            PUSH     SI
  1806.            PUSH     DI
  1807.            PUSH     BP
  1808.            PUSH     ES
  1809.  
  1810.            MOV      AL, DFT_SESS          ; Set session id to
  1811.            MOV      HDATA_STR, AL         ; connect.
  1812.  
  1813.            MOV      HPCB.HLPCB_FUNC, HA_CONNECT_PM_SRVCS
  1814.                                           ; Issue Connect
  1815.                                           ; Presentation Space.
  1816.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1817.                                           ; DS already set up.
  1818.            CALL     HLLMASM               ; Call EHLLAPI.
  1819.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1820.            JE       OK_WIN1               ; If GOOD rc, jmp.
  1821.            JMP      ERROR_WIN             ; goto error routine.
  1822. OK_WIN1:
  1823.            MOV      HPCB.HLPCB_FUNC, HA_PM_WINDOW_STATUS
  1824.                                           ; Issue change window name
  1825.            MOV      AL, DFT_SESS          ; Set session id
  1826.            MOV      HDATA_STR.CWIN_SHORTNAME, AL
  1827.            MOV      HDATA_STR.CWIN_OPTION,1
  1828.            MOV      HDATA_STR.CWIN_FLAGS,HEX10
  1829.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1830.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1831.                                           ; DS already set up.
  1832.            CALL     HLLMASM               ; Call EHLLAPI.
  1833.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1834.            JE       OK_WIN2               ; If GOOD rc, jmp.
  1835.            JMP      ERROR_WIN             ; goto error routine.
  1836. OK_WIN2:
  1837.            DISPLAY  <'The PM Window Is Now Invisible.'>
  1838.            CALL     NEW_LINE
  1839.            DISPLAY  <'(press CTRL-ESC to verify)'>
  1840.            CALL     NEW_LINE
  1841.            CALL     NEW_LINE
  1842.            JMP      DONE_WIN
  1843. ERROR_WIN:
  1844.            MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  1845.            MOV      RC, AX
  1846.            XOR      BX,BX                 ; Set function number.
  1847.            MOV      BL,HPCB.HLPCB_FUNC
  1848.            CALL     ERROR_HAND
  1849. DONE_WIN:
  1850.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1851.                                           ; Reset the orig EHLLAPI
  1852.                                           ; data_str.
  1853.            POP      ES
  1854.            POP      BP
  1855.            POP      DI
  1856.            POP      SI
  1857.            POP      DX
  1858.            POP      CX
  1859.            POP      BX
  1860.            POP      AX
  1861.  
  1862.            RET
  1863. MAKE_WINDOW_INVISIBLE    ENDP
  1864.  
  1865.  
  1866.  
  1867.  
  1868. ;**************************************************************************
  1869. ;DISCONNECT PM WINDOW SERVICE - Disconnect from the PM emulator window    *
  1870. ;                                                                         *
  1871. ;                                                                         *
  1872. ;                                                                         *
  1873. ;                                                                         *
  1874. ;**************************************************************************
  1875.  
  1876. DISCONNECT_PM_WINDOW_SERVICE     PROC     NEAR
  1877.  
  1878.  
  1879.             PUSH     AX
  1880.             PUSH     BX
  1881.             PUSH     CX
  1882.             PUSH     DX
  1883.             PUSH     SI
  1884.             PUSH     DI
  1885.             PUSH     BP
  1886.             PUSH     ES
  1887.             MOV      AL, DFT_SESS          ; Set session id to
  1888.             MOV      HDATA_STR, AL         ; connect.
  1889.             MOV      HPCB.HLPCB_FUNC, HA_CONNECT_PM_SRVCS
  1890.                                            ; Issue Connect
  1891.                                            ; Presentation Space.
  1892.             MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1893.                                            ; DS already set up.
  1894.             CALL     HLLMASM               ; Call EHLLAPI.
  1895.             CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1896.             JE       OK_WDS1               ; If GOOD rc, jmp.
  1897.             JMP      ERROR_WDS             ; goto error routine.
  1898. OK_WDS1:
  1899.             MOV      HPCB.HLPCB_FUNC, HA_DISCONNECT_PM_SRVCS
  1900.                                            ; Issue disconnect from PM
  1901.             MOV      AL, DFT_SESS          ; Set session id
  1902.             MOV      HDATA_STR.STPM_SHORTNAME, AL
  1903.             MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1904.             MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1905.                                            ; DS already set up.
  1906.             CALL     HLLMASM               ; Call EHLLAPI.
  1907.             CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1908.             JE       OK_WDS2               ; If GOOD rc, jmp.
  1909.             JMP      ERROR_WDS             ; goto error routine.
  1910. OK_WDS2:
  1911.             DISPLAY  <'The PM Window Is Now Disconnected.'>
  1912.             DISPLAY  <' '>
  1913.             CALL     NEW_LINE
  1914.             CALL     NEW_LINE
  1915.             JMP      DONE_WIN
  1916. ERROR_WDS:
  1917.             MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  1918.             MOV      RC, AX
  1919.             XOR      BX,BX                 ; Set function number.
  1920.             MOV      BL,HPCB.HLPCB_FUNC
  1921.             CALL     ERROR_HAND
  1922. DONE_WDS:
  1923.             MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1924.                                            ; Reset the orig EHLLAPI
  1925.                                            ; data_str.
  1926.             POP      ES
  1927.             POP      BP
  1928.             POP      DI
  1929.             POP      SI
  1930.             POP      DX
  1931.             POP      CX
  1932.             POP      BX
  1933.             POP      AX
  1934.  
  1935.             RET
  1936.  
  1937. DISCONNECT_PM_WINDOW_SERVICE   ENDP
  1938.  
  1939.  
  1940.  
  1941. ;**************************************************************************
  1942. ;RESET SWITCH AND WINDOW NAME - Reset the switch list name, the PM window *
  1943. ;                               window name and restore the window size   *
  1944. ;                                                                         *
  1945. ;                                                                         *
  1946. ;                                                                         *
  1947. ;**************************************************************************
  1948.  
  1949. RESET_SWITCH_AND_WINDOW_NAME     PROC     NEAR
  1950.  
  1951.  
  1952.            PUSH     AX
  1953.            PUSH     BX
  1954.            PUSH     CX
  1955.            PUSH     DX
  1956.            PUSH     SI
  1957.            PUSH     DI
  1958.            PUSH     BP
  1959.            PUSH     ES
  1960.  
  1961.            MOV      AL, DFT_SESS          ; Set session id to
  1962.            MOV      HDATA_STR, AL         ; connect.
  1963.            MOV      HPCB.HLPCB_FUNC, HA_CONNECT_PM_SRVCS
  1964.                                           ; Issue Connect
  1965.                                           ; Presentation Space.
  1966.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1967.                                           ; DS already set up.
  1968.            CALL     HLLMASM               ; Call EHLLAPI.
  1969.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1970.            JE       OK_WRS1               ; If GOOD rc, jmp.
  1971.            JMP      ERROR_WRS             ; goto error routine.
  1972. OK_WRS1:
  1973.            MOV      HPCB.HLPCB_FUNC, HA_PM_WINDOW_STATUS
  1974.  
  1975.            MOV      AL, DFT_SESS          ; Set session id
  1976.            MOV      HDATA_STR.CWIN_SHORTNAME, AL
  1977.            MOV      HDATA_STR.CWIN_OPTION,1
  1978.            MOV      AX,HEX1000
  1979.            MOV      HDATA_STR.CWIN_FLAGS ,AX
  1980.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1981.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  1982.                                           ; DS already set up.
  1983.            CALL     HLLMASM               ; Call EHLLAPI.
  1984.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  1985.            JE       OK_WRS2               ; If GOOD rc, jmp.
  1986.            JMP      ERROR_WRS             ; goto error routine.
  1987. OK_WRS2:
  1988.            DISPLAY <'The PM Window Is Now Restored.'>
  1989.            CALL     NEW_LINE
  1990.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1991.            MOV      HPCB.HLPCB_FUNC, HA_CHANGE_WINDOW_NAME
  1992.                                           ; Issue change window name
  1993.            MOV      HPCB.HLPCB_LENGTH, 3
  1994.            MOV      AL, DFT_SESS          ; Set session id
  1995.            MOV      HDATA_STR.CHLT_SHORTNAME, AL
  1996.            MOV      HDATA_STR.CHLT_OPTION,2
  1997.            MOV      HDATA_STR.CHLT_LTNAME,0
  1998.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  1999.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  2000.                                           ; DS already set up.
  2001.            CALL     HLLMASM               ; Call EHLLAPI.
  2002.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2003.            JE       OK_WRS3               ; If GOOD rc, jmp.
  2004.            JMP      ERROR_WRS             ; goto error routine.
  2005. OK_WRS3:
  2006.            DISPLAY <'The PM Window Title Is Now Restored.'>
  2007.            CALL       NEW_LINE
  2008.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2009.            MOV      HPCB.HLPCB_FUNC, HA_CHANGE_SWITCH_NAME
  2010.                                           ; Issue change switch list name
  2011.            MOV      HPCB.HLPCB_LENGTH, 2
  2012.            MOV      AL, DFT_SESS          ; Set session id
  2013.            MOV      HDATA_STR.CHSW_SHORTNAME, AL
  2014.            MOV      HDATA_STR.CHSW_OPTION,2
  2015.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2016.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  2017.                                           ; DS already set up.
  2018.            CALL     HLLMASM               ; Call EHLLAPI.
  2019.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2020.            JE       OK_WRS4               ; If GOOD rc, jmp.
  2021.            JMP      ERROR_WRS             ; goto error routine.
  2022. OK_WRS4:
  2023.            DISPLAY  <'The Switch List Name Is Restored.'>
  2024.            CALL     NEW_LINE
  2025.            DISPLAY  <'(Press CTRL-ESC To Verify)'>
  2026.            CALL     NEW_LINE
  2027.            CALL     NEW_LINE
  2028.            JMP      DONE_WRS
  2029. ERROR_WRS:
  2030.            MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  2031.            MOV      RC, AX
  2032.            XOR      BX,BX                 ; Set function number.
  2033.            MOV      BL,HPCB.HLPCB_FUNC
  2034.            CALL     ERROR_HAND
  2035. DONE_WRS:
  2036.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2037.                                           ; Reset the orig EHLLAPI
  2038.                                           ; data_str.
  2039.            POP      ES
  2040.            POP      BP
  2041.            POP      DI
  2042.            POP      SI
  2043.            POP      DX
  2044.            POP      CX
  2045.            POP      BX
  2046.            POP      AX
  2047.            RET
  2048. RESET_SWITCH_AND_WINDOW_NAME    ENDP
  2049.  
  2050.  
  2051.  
  2052.  
  2053. ;**************************************************************************
  2054. ;MAKE WINDOW VISIBLE - Make the PM window visible and maximized           *
  2055. ;                                                                         *
  2056. ;                                                                         *
  2057. ;                                                                         *
  2058. ;                                                                         *
  2059. ;**************************************************************************
  2060.  
  2061. MAKE_WINDOW_VISIBLE      PROC     NEAR
  2062.  
  2063.            PUSH     AX
  2064.            PUSH     BX
  2065.            PUSH     CX
  2066.            PUSH     DX
  2067.            PUSH     SI
  2068.            PUSH     DI
  2069.            PUSH     BP
  2070.            PUSH     ES
  2071.  
  2072.            MOV      AL, DFT_SESS          ; Set session id to
  2073.            MOV      HDATA_STR, AL         ; connect.
  2074.            MOV      HPCB.HLPCB_FUNC, HA_CONNECT_PM_SRVCS
  2075.                                           ; Issue Connect
  2076.                                           ; Presentation Space.
  2077.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  2078.                                           ; DS already set up.
  2079.            CALL     HLLMASM               ; Call EHLLAPI.
  2080.  
  2081.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2082.            JE       OK_WVS1               ; If GOOD rc, jmp.
  2083.            JMP      ERROR_WVS             ; goto error routine
  2084. OK_WVS1:
  2085.            MOV      HPCB.HLPCB_FUNC, HA_PM_WINDOW_STATUS
  2086.                                           ; Issue change window name
  2087.            MOV      AL, DFT_SESS          ; Set session id
  2088.            MOV      HDATA_STR.CWIN_SHORTNAME, AL
  2089.            MOV      HDATA_STR.CWIN_OPTION,1
  2090.            MOV      HDATA_STR.CWIN_FLAGS,HEX808
  2091.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2092.            MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  2093.                                           ; DS already set up.
  2094.            CALL     HLLMASM               ; Call EHLLAPI.
  2095.            CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2096.            JE       OK_WVS2               ; If GOOD rc, jmp.
  2097.            JMP      ERROR_WVS             ; goto error routine.
  2098. OK_WVS2:
  2099.            DISPLAY  <'The PM Window Is Now Visible And Maximized.'>
  2100.            CALL     NEW_LINE
  2101.            DISPLAY  <'(Press CTRL-ESC To Verify)'>
  2102.            CALL     NEW_LINE
  2103.            CALL     NEW_LINE
  2104.            JMP      DONE_WIN
  2105. ERROR_WVS:
  2106.            MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  2107.            MOV      RC, AX
  2108.            XOR      BX,BX                 ; Set function number.
  2109.            MOV      BL,HPCB.HLPCB_FUNC
  2110.            CALL     ERROR_HAND
  2111. DONE_WVS:
  2112.            MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2113.                                           ; Reset the orig EHLLAPI
  2114.                                           ; data_str.
  2115.            POP      ES
  2116.            POP      BP
  2117.            POP      DI
  2118.            POP      SI
  2119.            POP      DX
  2120.            POP      CX
  2121.            POP      BX
  2122.            POP      AX
  2123.            RET
  2124.  
  2125. MAKE_WINDOW_VISIBLE    ENDP
  2126.  
  2127. ;**************************************************************************
  2128. ;RESET EHLLAPI - Reset EHLLAPI to to its original condition               *
  2129. ;                                                                         *
  2130. ;                                                                         *
  2131. ;                                                                         *
  2132. ;**************************************************************************
  2133.  
  2134. RESET_SYSTEM     PROC     NEAR
  2135.  
  2136.  
  2137.        PUSH     AX
  2138.        PUSH     BX
  2139.        PUSH     CX
  2140.        PUSH     DX
  2141.        PUSH     SI
  2142.        PUSH     DI
  2143.        PUSH     BP
  2144.        PUSH     ES
  2145.  
  2146.        MOV      HPCB.HLPCB_FUNC, HA_RESET_SYSTEM
  2147.        MOV      HPCB.HLPCB_LENGTH, 1
  2148.        MOV      SI, OFFSET HPCB           ; DS:SI-> PCB
  2149.                                           ; DS already set up.
  2150.        CALL     HLLMASM                   ; Call EHLLAPI.
  2151.        CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2152.        JE       DONE_RS                   ; If GOOD rc, jmp.
  2153.        MOV      AX,HPCB.HLPCB_RETCODE     ; Put bad rc in RC.
  2154.        MOV      RC, AX
  2155.        XOR      BX,BX                     ; Set function number.
  2156.        MOV      BL,HPCB.HLPCB_FUNC
  2157.        CALL     ERROR_HAND
  2158. DONE_RS:
  2159.        LEA      BX, BLANK_SCR             ; Blank the screen.
  2160.        CALL     DSP_MSG
  2161.        DISPLAY  <'Ehllapi Reset To Its Original Conditions. '>
  2162.        CALL     NEW_LINE
  2163.        CALL     NEW_LINE
  2164.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2165.                                           ; Reset the orig EHLLAPI
  2166.                                           ; data_str.
  2167.        POP      ES
  2168.        POP      BP
  2169.        POP      DI
  2170.        POP      SI
  2171.        POP      DX
  2172.        POP      CX
  2173.        POP      BX
  2174.        POP      AX
  2175.  
  2176.       RET
  2177.  
  2178. RESET_SYSTEM   ENDP
  2179.  
  2180.  
  2181.  
  2182. ;**************************************************************************
  2183. ;QUERY COM BUFFER SIZE - Query the communications buffer size.            *
  2184. ;                        Collect buffer size information.                 *
  2185. ;                                                                         *
  2186. ;                                                                         *
  2187. ;**************************************************************************
  2188.  
  2189. QUERY_COM_BUFFER_SIZE     PROC     NEAR
  2190.  
  2191.  
  2192.        PUSH     AX
  2193.        PUSH     BX
  2194.        PUSH     CX
  2195.        PUSH     DX
  2196.        PUSH     SI
  2197.        PUSH     DI
  2198.        PUSH     BP
  2199.        PUSH     ES
  2200.  
  2201.        MOV      HPCB.HLPCB_FUNC, HA_QUERY_BUFFER_SIZE
  2202.        MOV      HPCB.HLPCB_LENGTH, 9
  2203.        MOV      AL, DFT_SESS                  ; Put session id in data string
  2204.        MOV      HDATA_STR.QBUF_SHORTNAME, AL
  2205.        MOV      SI, OFFSET HPCB               ; DS:SI-> PCB
  2206.                                               ; DS already set up.
  2207.        CALL     HLLMASM                       ; Call EHLLAPI.
  2208.        CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2209.        JE       DONE_QCB                      ; If GOOD rc, jmp.
  2210.        MOV      AX,HPCB.HLPCB_RETCODE         ; Put bad rc in RC.
  2211.        MOV      RC, AX
  2212.        XOR      BX,BX                         ; Set function number.
  2213.        MOV      BL,HPCB.HLPCB_FUNC
  2214.        CALL     ERROR_HAND
  2215. DONE_QCB:
  2216.        DISPLAY  <'Query The Communications Buffer.'>
  2217.        CALL     NEW_LINE
  2218.        DISPLAY  <'Optimal Inbound Buffer Size  : '>
  2219.        MOV      AX,HDATA_STR.QBUF_OPT_INB
  2220.        MOV      OPTIMAL_INB,AX
  2221.        MOV      BX,OFFSET DIGIT_BUFF
  2222.        CALL     ITOH
  2223.        CALL     DSP_MSG
  2224.        CALL     NEW_LINE
  2225.  
  2226.        DISPLAY  <'Maximum Inbound Buffer Size  : '>
  2227.        MOV      AX,HDATA_STR.QBUF_MAX_INB
  2228.        MOV      BX,OFFSET DIGIT_BUFF
  2229.        CALL     ITOH
  2230.        CALL     DSP_MSG
  2231.        CALL     NEW_LINE
  2232.  
  2233.        DISPLAY  <'Optimal Outbound Buffer Size : '>
  2234.        MOV      AX,HDATA_STR.QBUF_OPT_OUTB
  2235.        MOV      OPTIMAL_OUTB,AX
  2236.        MOV      BX,OFFSET DIGIT_BUFF
  2237.        CALL     ITOH
  2238.        CALL     DSP_MSG
  2239.        CALL     NEW_LINE
  2240.  
  2241.        DISPLAY  <'Maximum Outbound Buffer Size : '>
  2242.        MOV      AX,HDATA_STR.QBUF_MAX_OUTB
  2243.        MOV      BX,OFFSET DIGIT_BUFF
  2244.        CALL     ITOH
  2245.        CALL     DSP_MSG
  2246.        CALL     NEW_LINE
  2247.  
  2248.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2249.                                                  ; Reset the orig EHLLAPI
  2250.                                                  ; data_str.
  2251.        POP      ES
  2252.        POP      BP
  2253.        POP      DI
  2254.        POP      SI
  2255.        POP      DX
  2256.        POP      CX
  2257.        POP      BX
  2258.        POP      AX
  2259.  
  2260.       RET
  2261.  
  2262. QUERY_COM_BUFFER_SIZE   ENDP
  2263.  
  2264.  
  2265.  
  2266.  
  2267. ;**************************************************************************
  2268. ;ALLOCATE READ COM BUFFER - Allocate a communication buffer for to be     *
  2269. ;                           used by read structured field                 *
  2270. ;                                                                         *
  2271. ;                                                                         *
  2272. ;**************************************************************************
  2273.  
  2274. ALLOCATE_READ_COM_BUFFER     PROC     NEAR
  2275.  
  2276.  
  2277.        PUSH     AX
  2278.        PUSH     BX
  2279.        PUSH     CX
  2280.        PUSH     DX
  2281.        PUSH     SI
  2282.        PUSH     DI
  2283.        PUSH     BP
  2284.        PUSH     ES
  2285.  
  2286.        CALL     NEW_LINE
  2287.        DISPLAY  <'Allocate Read Buffer.'>
  2288.        MOV      HPCB.HLPCB_FUNC, HA_ALLOCATE_COMMO_BUFF
  2289.        MOV      HPCB.HLPCB_LENGTH, 6
  2290.        MOV      AX, OPTIMAL_INB
  2291.        MOV      HDATA_STR.ABUF_LENGTH, AX
  2292.        MOV      SI, OFFSET HPCB                    ; DS:SI-> PCB
  2293.                                                    ; DS already set up.
  2294.        CALL     HLLMASM                            ; Call EHLLAPI.
  2295.        CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2296.        JE       DONE_ACRB                          ; If GOOD rc, jmp.
  2297.        MOV      AX,HPCB.HLPCB_RETCODE              ; Put bad rc in RC.
  2298.        MOV      RC, AX
  2299.        XOR      BX,BX                              ; Set function number.
  2300.        MOV      BL,HPCB.HLPCB_FUNC
  2301.        CALL     ERROR_HAND
  2302.        JMP      END_ACRB
  2303. DONE_ACRB:
  2304.        CALL     NEW_LINE
  2305.        DISPLAY  <'Read Buffer Length   : '>
  2306.        MOV      AX,HDATA_STR.ABUF_LENGTH
  2307.        MOV      BX,OFFSET DIGIT_BUFF
  2308.        CALL     ITOH
  2309.        CALL     DSP_MSG
  2310.        CALL     NEW_LINE
  2311.        LES      AX,HDATA_STR.ABUF_ADDRESS
  2312.        MOV      RD_ADDRESS_SEG,ES
  2313.        MOV      RD_ADDRESS_OFF,AX
  2314.        DISPLAY  <'Allocate Read Buffer Complete.'>
  2315.        CALL     NEW_LINE
  2316. END_ACRB:
  2317.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2318.                                                    ; Reset the orig EHLLAPI
  2319.                                                    ; data_str.
  2320.        POP      ES
  2321.        POP      BP
  2322.        POP      DI
  2323.        POP      SI
  2324.        POP      DX
  2325.        POP      CX
  2326.        POP      BX
  2327.        POP      AX
  2328.  
  2329.        RET
  2330.  
  2331. ALLOCATE_READ_COM_BUFFER  ENDP
  2332.  
  2333.  
  2334. ;**************************************************************************
  2335. ;ALLOCATE WRITE COM BUFFER - Allocate a communication buffer to be used   *
  2336. ;                            by write structured field                    *
  2337. ;                                                                         *
  2338. ;                                                                         *
  2339. ;**************************************************************************
  2340.  
  2341. ALLOCATE_WRITE_COM_BUFFER     PROC     NEAR
  2342.  
  2343.  
  2344.        PUSH     AX
  2345.        PUSH     BX
  2346.        PUSH     CX
  2347.        PUSH     DX
  2348.        PUSH     SI
  2349.        PUSH     DI
  2350.        PUSH     BP
  2351.        PUSH     ES
  2352.        CALL     NEW_LINE
  2353.        DISPLAY  <'Allocate Write Buffer.'>
  2354.        MOV      HPCB.HLPCB_FUNC, HA_ALLOCATE_COMMO_BUFF
  2355.        MOV      HPCB.HLPCB_LENGTH, 6
  2356.        MOV      AX, OPTIMAL_OUTB
  2357.        MOV      HDATA_STR.ABUF_LENGTH, AX
  2358.        MOV      SI, OFFSET HPCB                      ; DS:SI-> PCB
  2359.                                                      ; DS already set up.
  2360.        CALL     HLLMASM                              ; Call EHLLAPI.
  2361.        CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2362.        JE       DONE_ACWB                            ; If GOOD rc, jmp.
  2363.        MOV      AX,HPCB.HLPCB_RETCODE                ; Put bad rc in RC.
  2364.        MOV      RC, AX
  2365.        XOR      BX,BX                                ; Set function number.
  2366.        MOV      BL,HPCB.HLPCB_FUNC
  2367.        CALL     ERROR_HAND
  2368.        JMP      END_ACWB
  2369. DONE_ACWB:
  2370.        CALL     NEW_LINE
  2371.        DISPLAY  <'Write Buffer Length   : '>
  2372.        MOV      AX,HDATA_STR.ABUF_LENGTH
  2373.        MOV      BX,OFFSET DIGIT_BUFF
  2374.        CALL     ITOH
  2375.        CALL     DSP_MSG
  2376.        CALL     NEW_LINE
  2377.        LES      AX,HDATA_STR.ABUF_ADDRESS
  2378.        MOV      WR_ADDRESS_OFF,AX
  2379.        MOV      WR_ADDRESS_SEG,ES
  2380.        DISPLAY  <'Allocate Write Buffer Complete.'>
  2381. END_ACWB:
  2382.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2383.                                                    ; Reset the orig EHLLAPI
  2384.                                                    ; data_str.
  2385.        POP      ES
  2386.        POP      BP
  2387.        POP      DI
  2388.        POP      SI
  2389.        POP      DX
  2390.        POP      CX
  2391.        POP      BX
  2392.        POP      AX
  2393.  
  2394.        RET
  2395.  
  2396. ALLOCATE_WRITE_COM_BUFFER  ENDP
  2397.  
  2398.  
  2399.  
  2400. ;**************************************************************************
  2401. ;CONNECT STRUCTURED FIELD - Initiate a structured field connection        *
  2402. ;                                                                         *
  2403. ;                                                                         *
  2404. ;                                                                         *
  2405. ;**************************************************************************
  2406.  
  2407. CONNECT_TO_SF   PROC     NEAR
  2408.  
  2409.  
  2410.        PUSH     AX
  2411.        PUSH     BX
  2412.        PUSH     CX
  2413.        PUSH     DX
  2414.        PUSH     SI
  2415.        PUSH     DI
  2416.        PUSH     BP
  2417.        PUSH     ES
  2418.  
  2419.        CALL     NEW_LINE
  2420.        CALL     NEW_LINE
  2421.        DISPLAY  <'Initiate Structured Field Connection.'>
  2422.  
  2423.        MOV      HPCB.HLPCB_FUNC, HA_START_STRUCTURED_FLD
  2424.        MOV      HPCB.HLPCB_LENGTH, 11
  2425.  
  2426.        MOV      AL,   DFT_SESS
  2427.        MOV      HDATA_STR.STSF_SHORTNAME,AL
  2428.        MOV      AX,   OFFSET QUERY_REPLY
  2429.        MOV      WORD PTR HDATA_STR.STSF_QUERY,AX
  2430.        MOV      AX,   SEG QUERY_REPLY
  2431.        MOV      WORD PTR HDATA_STR.STSF_QUERY + 2,AX
  2432.  
  2433.  
  2434.        MOV      SI, OFFSET HPCB                      ; DS:SI-> PCB
  2435.                                                      ; DS already set up.
  2436.  
  2437.        CALL     HLLMASM                              ; Call EHLLAPI.
  2438.        CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2439.        JE       DONE_CTSF                            ; If GOOD rc, jmp.
  2440.        MOV      AX,HPCB.HLPCB_RETCODE                ; Put bad rc in RC.
  2441.        MOV      RC, AX
  2442.        XOR      BX,BX                                ; Set function number.
  2443.        MOV      BL,HPCB.HLPCB_FUNC
  2444.        CALL     ERROR_HAND
  2445.        JMP      END_CTSF
  2446. DONE_CTSF:
  2447.        CALL     NEW_LINE
  2448.        DISPLAY  <'Destination / Origin ID  : '>
  2449.        MOV      AX,HDATA_STR.STSF_DOID
  2450.        MOV      DOID,AX
  2451.        MOV      BX,OFFSET DIGIT_BUFF
  2452.        CALL     ITOH
  2453.        CALL     DSP_MSG
  2454.        CALL     NEW_LINE
  2455.        DISPLAY  <'Connection To Structured Field Complete.'>
  2456. END_CTSF:
  2457.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2458.                                                      ; Reset the orig EHLLAPI
  2459.                                                      ; data_str.
  2460.        POP      ES
  2461.        POP      BP
  2462.        POP      DI
  2463.        POP      SI
  2464.        POP      DX
  2465.        POP      CX
  2466.        POP      BX
  2467.        POP      AX
  2468.  
  2469.        RET
  2470.  
  2471. CONNECT_TO_SF  ENDP
  2472.  
  2473.  
  2474.  
  2475. ;**************************************************************************
  2476. ;READ SF ASYNC - Perform an asynchronus read of a structured field        *
  2477. ;                                                                         *
  2478. ;                                                                         *
  2479. ;                                                                         *
  2480. ;**************************************************************************
  2481.  
  2482. READ_SF_ASYNC    PROC     NEAR
  2483.  
  2484.  
  2485.        PUSH     AX
  2486.        PUSH     BX
  2487.        PUSH     CX
  2488.        PUSH     DX
  2489.        PUSH     SI
  2490.        PUSH     DI
  2491.        PUSH     BP
  2492.        PUSH     ES
  2493.  
  2494.        MOV      HPCB.HLPCB_FUNC, HA_READ_STRUCTURED_FLD
  2495.        MOV      HPCB.HLPCB_LENGTH, 14
  2496.        MOV      AL, DFT_SESS
  2497.        MOV      HDATA_STR.RDSF_SHORTNAME, AL
  2498.        MOV      HDATA_STR.RDSF_OPTION, 65
  2499.        MOV      AX, DOID
  2500.        MOV      HDATA_STR.RDSF_DOID, AX
  2501.        MOV      DI, RD_ADDRESS_OFF
  2502.        MOV      WORD PTR HDATA_STR.RDSF_BUFFER,DI
  2503.        MOV      ES, RD_ADDRESS_SEG
  2504.        MOV      WORD PTR HDATA_STR.RDSF_BUFFER+2,ES
  2505.        MOV      WORD PTR ES:[DI],0
  2506.        MOV      WORD PTR ES:[DI][1],0
  2507.        MOV      WORD PTR ES:[DI][2],0
  2508.        MOV      WORD PTR ES:[DI][3],0
  2509.        MOV      WORD PTR ES:[DI][4],0
  2510.        MOV      BYTE PTR ES:[DI][5],5           ; length field
  2511.  
  2512.        CALL     NEW_LINE
  2513.        DISPLAY  <'Perform An Asynchronus Read Structured Field'>
  2514.        CALL     NEW_LINE
  2515.        DISPLAY  <'Session Shortname : '>
  2516.        MOV      AX,0
  2517.        MOV      AL,HDATA_STR.RDSF_SHORTNAME
  2518.        MOV      BX,OFFSET DIGIT_BUFF
  2519.        CALL     ITOH
  2520.        CALL     DSP_MSG
  2521.  
  2522.        CALL     NEW_LINE
  2523.        DISPLAY  <'Destination / Origin ID  : '>
  2524.        MOV      AX,HDATA_STR.RDSF_DOID
  2525.        MOV      BX,OFFSET DIGIT_BUFF
  2526.        CALL     ITOH
  2527.        CALL     DSP_MSG
  2528.  
  2529.        CALL     NEW_LINE
  2530.        DISPLAY  <'Control Option   : '>
  2531.        MOV      AX,0
  2532.        MOV      AL,HDATA_STR.RDSF_OPTION
  2533.        MOV      BX,OFFSET DIGIT_BUFF
  2534.        CALL     ITOH
  2535.        CALL     DSP_MSG
  2536.        CALL     NEW_LINE
  2537.  
  2538.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2539.        MOV      SI, OFFSET HPCB                      ; DS:SI-> PCB
  2540.                                                      ; DS already set up.
  2541.        CALL     HLLMASM                              ; Call EHLLAPI.
  2542.  
  2543.        CMP      HPCB.HLPCB_RETCODE, HARC_INBOUND_DISABLED
  2544.        JE       DONE_RSF                             ; If GOOD rc, jmp.
  2545.        MOV      AX,HPCB.HLPCB_RETCODE                ; Put bad rc in RC.
  2546.        MOV      RC, AX
  2547.        XOR      BX,BX                                ; Set function number.
  2548.        MOV      BL,HPCB.HLPCB_FUNC
  2549.        CALL     ERROR_HAND
  2550.        JMP      END_RSF
  2551. DONE_RSF:
  2552.        DISPLAY  <'Read Asynchronus Complete.'>
  2553.        LES      AX,HDATA_STR.RDSF_ASEM
  2554.        MOV      ASEM_OFF,AX
  2555.        MOV      ASEM_SEG,ES
  2556. END_RSF:
  2557.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2558.                                                    ; Reset the orig EHLLAPI
  2559.                                                    ; data_str.
  2560.        POP      ES
  2561.        POP      BP
  2562.        POP      DI
  2563.        POP      SI
  2564.        POP      DX
  2565.        POP      CX
  2566.        POP      BX
  2567.        POP      AX
  2568.  
  2569.        RET
  2570.  
  2571. READ_SF_ASYNC  ENDP
  2572.  
  2573. ;**************************************************************************
  2574. ;CREATE A STRUCTURED FIELD  - Connects to first session and writes        *
  2575. ;                             home_key and a ind$file command             *
  2576. ;                             (This will generate a structured field.)    *
  2577. ;                                                                         *
  2578. ;                                                                         *
  2579. ;**************************************************************************
  2580.  
  2581. CREATE_SF      PROC     NEAR
  2582.  
  2583.         PUSH     AX
  2584.         PUSH     BX
  2585.         PUSH     CX
  2586.         PUSH     DX
  2587.         PUSH     SI
  2588.         PUSH     DI
  2589.         PUSH     BP
  2590.         PUSH     ES
  2591.  
  2592.         CALL     NEW_LINE
  2593.         CALL     NEW_LINE
  2594.         DISPLAY  <'Create a Structured Field.'>
  2595.         CALL     NEW_LINE
  2596.         MOV      AL, DFT_SESS          ; Set session id to
  2597.         MOV      HDATA_STR, AL         ; connect.
  2598.         MOV      HPCB.HLPCB_FUNC, HA_CONNECT_PS
  2599.                                        ; Issue Connect
  2600.                                        ; Presentation Space.
  2601.         MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  2602.                                        ; DS already set up.
  2603.         CALL     HLLMASM               ; Call EHLLAPI.
  2604.         CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2605.         JE       OK_CASF               ; If GOOD rc, jmp.
  2606.         JMP      ERROR_CASF            ; goto error routine.
  2607. OK_CASF:
  2608.         MOV      HPCB.HLPCB_FUNC, HA_SENDKEY
  2609.                                        ; Issue sendkey
  2610.         MOV      HPCB.HLPCB_LENGTH, HOME_KEY_LEN
  2611.                                        ; Set length
  2612.         MOV      HPCB.HLPCB_DADDR, OFFSET HOME_KEY
  2613.                                        ; Set new data_str.
  2614.         MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  2615.                                        ; DS already set up.
  2616.         CALL     HLLMASM               ; Call EHLLAPI.
  2617.         CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2618.         JE       OK_CASF1              ; If GOOD rc, jmp.
  2619.         JMP      ERROR_CASF            ; goto error routine.
  2620. OK_CASF1:
  2621.         MOV      HPCB.HLPCB_LENGTH, COMMAND_LEN
  2622.                                        ; Set length
  2623.         MOV      HPCB.HLPCB_DADDR, OFFSET COMMAND_STR
  2624.                                        ; ind$file command
  2625.         MOV      SI, OFFSET HPCB       ; DS:SI-> PCB
  2626.                                        ; DS already set up.
  2627.         CALL     HLLMASM               ; Call EHLLAPI.
  2628.         CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2629.         JE       OK_CASF2              ; If GOOD rc, jmp.
  2630.         JMP      ERROR_CASF            ; goto error routine.
  2631. OK_CASF2:
  2632.         JMP      DONE_CASF
  2633. ERROR_CASF:
  2634.         MOV      AX,HPCB.HLPCB_RETCODE ; Put bad rc in RC.
  2635.         MOV      RC, AX
  2636.         XOR      BX,BX                 ; Set function number.
  2637.         MOV      BL,HPCB.HLPCB_FUNC
  2638.         CALL     ERROR_HAND
  2639. DONE_CASF:
  2640.         MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2641.                                        ; Reset the orig EHLLAPI
  2642.                                        ; data_str.
  2643.         POP      ES
  2644.         POP      BP
  2645.         POP      DI
  2646.         POP      SI
  2647.         POP      DX
  2648.         POP      CX
  2649.         POP      BX
  2650.         POP      AX
  2651.  
  2652.         RET
  2653.  
  2654. CREATE_SF      ENDP
  2655.  
  2656.  
  2657. ;**************************************************************************
  2658. ;GET ASYNC COMPLETE - Check if asynchronus read of a structured field     *
  2659. ;                     is complete                                         *
  2660. ;                                                                         *
  2661. ;                                                                         *
  2662. ;                                                                         *
  2663. ;**************************************************************************
  2664.  
  2665. GET_ASYNC_COMPLETE PROC NEAR
  2666.  
  2667.  
  2668.        PUSH     AX
  2669.        PUSH     BX
  2670.        PUSH     CX
  2671.        PUSH     DX
  2672.        PUSH     SI
  2673.        PUSH     DI
  2674.        PUSH     BP
  2675.        PUSH     ES
  2676.  
  2677.        MOV      HPCB.HLPCB_FUNC, HA_GET_ASYNC_COMPLETION
  2678.        MOV      HPCB.HLPCB_LENGTH, 14
  2679.        MOV      AL, DFT_SESS
  2680.        MOV      HDATA_STR.GCMP_SHORTNAME , AL
  2681.        MOV      HDATA_STR.GCMP_OPTION, 87     ; ASCII - 'W' for wait option
  2682.        MOV      HDATA_STR.GCMP_REQUESTID, 0
  2683.        MOV      HDATA_STR.GCMP_RET_FUNCTID, 0
  2684.        MOV      WORD PTR HDATA_STR.GCMP_RET_DATASTR, 0
  2685.        MOV      WORD PTR HDATA_STR.GCMP_RET_DATASTR+2, 0
  2686.        MOV      HDATA_STR.GCMP_RET_LENGTH, 0
  2687.        MOV      HDATA_STR.GCMP_RET_RETCODE, 0
  2688.  
  2689.        CALL     NEW_LINE
  2690.        DISPLAY  <'Perform An Asynchronus Get Completion Request.'>
  2691.        CALL     NEW_LINE
  2692.        DISPLAY  <'Session Shortname : '>
  2693.        MOV      AX,0
  2694.        MOV      AL,HDATA_STR.GCMP_SHORTNAME
  2695.        MOV      BX,OFFSET DIGIT_BUFF
  2696.        CALL     ITOH
  2697.        CALL     DSP_MSG
  2698.  
  2699.        CALL     NEW_LINE
  2700.        DISPLAY  <'Request Option  : '>
  2701.        MOV      AX,0
  2702.        MOV      AL,HDATA_STR.GCMP_OPTION
  2703.        MOV      BX,OFFSET DIGIT_BUFF
  2704.        CALL     ITOH
  2705.        CALL     DSP_MSG
  2706.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2707.        MOV      SI, OFFSET HPCB                      ; DS:SI-> PCB
  2708.                                                      ; DS already set up.
  2709.        CALL     HLLMASM                              ; Call EHLLAPI.
  2710.        CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2711.        JE       DONE_GAC                             ; If GOOD rc, jmp.
  2712.        MOV      AX,HPCB.HLPCB_RETCODE                ; Put bad rc in RC.
  2713.        MOV      RC, AX
  2714.        XOR      BX,BX                                ; Set function number.
  2715.        MOV      BL,HPCB.HLPCB_FUNC
  2716.        CALL     ERROR_HAND
  2717.        JMP      END_GAC
  2718. DONE_GAC:
  2719.        CALL     NEW_LINE
  2720.        DISPLAY  <'Get Asynchronus Request Completed.'>
  2721. END_GAC:
  2722.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2723.                                                      ; Reset the orig EHLLAPI
  2724.                                                      ; data_str.
  2725.        POP      ES
  2726.        POP      BP
  2727.        POP      DI
  2728.        POP      SI
  2729.        POP      DX
  2730.        POP      CX
  2731.        POP      BX
  2732.        POP      AX
  2733.  
  2734.        RET
  2735.  
  2736. GET_ASYNC_COMPLETE ENDP
  2737.  
  2738.  
  2739.  
  2740. ;**************************************************************************
  2741. ;WRITE SF SYNC - Perform a synchronus write of a structured field         *
  2742. ;                                                                         *
  2743. ;                                                                         *
  2744. ;                                                                         *
  2745. ;**************************************************************************
  2746.  
  2747. WRITE_SF_SYNC    PROC     NEAR
  2748.  
  2749.  
  2750.        PUSH     AX
  2751.        PUSH     BX
  2752.        PUSH     CX
  2753.        PUSH     DX
  2754.        PUSH     SI
  2755.        PUSH     DI
  2756.        PUSH     BP
  2757.        PUSH     ES
  2758.  
  2759.        CALL     NEW_LINE
  2760.  
  2761.  
  2762.        MOV      HPCB.HLPCB_FUNC, HA_WRITE_STRUCTURED_FLD
  2763.        MOV      HPCB.HLPCB_LENGTH, 8
  2764.  
  2765.        MOV      AL, DFT_SESS
  2766.        MOV      HDATA_STR.WRSF_SHORTNAME, AL
  2767.        MOV      HDATA_STR.WRSF_OPTION, 83   ; ASCII - 'S' for synchronus
  2768.        MOV      AX, DOID
  2769.        MOV      HDATA_STR.WRSF_DOID, AX
  2770.        MOV      BX, WR_ADDRESS_OFF          ; write address buffer
  2771.        MOV      WORD PTR HDATA_STR.WRSF_BUFFER,BX
  2772.        MOV      ES,WR_ADDRESS_SEG
  2773.        MOV      WORD PTR HDATA_STR.WRSF_BUFFER+2,ES
  2774.        MOV      DI, BX
  2775.        MOV      AL,0
  2776.        MOV      CX,540                      ; Fill next 540 words with AL
  2777. REP    STOS     ES:WORD PTR [DI]
  2778.  
  2779.        MOV      BYTE PTR ES:[BX][2],5       ; put length in header block
  2780.        MOV      BYTE PTR ES:[BX][9],5
  2781.        MOV      BYTE PTR ES:[BX][10],208    ; DOID
  2782.        MOV      BYTE PTR ES:[BX][12],9
  2783.  
  2784.        CALL     NEW_LINE
  2785.        DISPLAY  <'Perform A Synchronus Write Structured Field.'>
  2786.        CALL     NEW_LINE
  2787.        DISPLAY  <'Session Shortname : '>
  2788.        MOV      AX,0
  2789.        MOV      AL,HDATA_STR.WRSF_SHORTNAME
  2790.        MOV      BX,OFFSET DIGIT_BUFF
  2791.        CALL     ITOH
  2792.        CALL     DSP_MSG
  2793.  
  2794.        CALL     NEW_LINE
  2795.        DISPLAY  <'Destination / Origin ID  : '>
  2796.        MOV      AX,HDATA_STR.WRSF_DOID
  2797.        MOV      BX,OFFSET DIGIT_BUFF
  2798.        CALL     ITOH
  2799.        CALL     DSP_MSG
  2800.  
  2801.        CALL     NEW_LINE
  2802.        DISPLAY  <'Control Option  : '>
  2803.        MOV      AX,0
  2804.        MOV      AL,HDATA_STR.WRSF_OPTION
  2805.        MOV      BX,OFFSET DIGIT_BUFF
  2806.        CALL     ITOH
  2807.        CALL     DSP_MSG
  2808.  
  2809.        MOV      HPCB.HLPCB_DADDR,OFFSET HDATA_STR
  2810.        MOV      SI, OFFSET HPCB                      ; DS:SI-> PCB
  2811.                                                      ; DS already set up.
  2812.        CALL     HLLMASM                              ; Call EHLLAPI.
  2813.        CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2814.        JE       DONE_WSF                             ; If GOOD rc, jmp.
  2815.        MOV      AX,HPCB.HLPCB_RETCODE                ; Put bad rc in RC.
  2816.        MOV      RC, AX
  2817.        XOR      BX,BX                                ; Set function number.
  2818.        MOV      BL,HPCB.HLPCB_FUNC
  2819.        CALL     ERROR_HAND
  2820.        JMP      END_WSF
  2821. DONE_WSF:
  2822.        CALL     NEW_LINE
  2823.        DISPLAY  <'Synchronus Write Complete.'>
  2824.        MOV      AX,5000
  2825.        MOV      DX,0
  2826.        PUSH     DX
  2827.        PUSH     AX
  2828.        CALL     DOSSLEEP
  2829. END_WSF:
  2830.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2831.                                                    ; Reset the orig EHLLAPI
  2832.                                                    ; data_str.
  2833.        POP      ES
  2834.        POP      BP
  2835.        POP      DI
  2836.        POP      SI
  2837.        POP      DX
  2838.        POP      CX
  2839.        POP      BX
  2840.        POP      AX
  2841.  
  2842.        RET
  2843.  
  2844. WRITE_SF_SYNC  ENDP
  2845.  
  2846.  
  2847.  
  2848.  
  2849. ;**************************************************************************
  2850. ;FREE READ COM BUFFER - De-allocate the communication buffer used for     *
  2851. ;                       read structured field                             *
  2852. ;                                                                         *
  2853. ;                                                                         *
  2854. ;**************************************************************************
  2855.  
  2856. FREE_READ_COM_BUFFER     PROC     NEAR
  2857.  
  2858.  
  2859.        PUSH     AX
  2860.        PUSH     BX
  2861.        PUSH     CX
  2862.        PUSH     DX
  2863.        PUSH     SI
  2864.        PUSH     DI
  2865.        PUSH     BP
  2866.        PUSH     ES
  2867.  
  2868.        CALL     NEW_LINE
  2869.        CALL     NEW_LINE
  2870.        DISPLAY  <'De-allocate The Communications Buffer.'>
  2871.        CALL     NEW_LINE
  2872.  
  2873.        MOV      HPCB.HLPCB_FUNC, HA_FREE_COMMO_BUFF
  2874.        MOV      HPCB.HLPCB_LENGTH, 6
  2875.        MOV      AX, OPTIMAL_INB
  2876.        MOV      HDATA_STR.FBUF_LENGTH, AX
  2877.        MOV      ES, RD_ADDRESS_SEG
  2878.        MOV      AX, RD_ADDRESS_OFF
  2879.        MOV      WORD PTR HDATA_STR.FBUF_ADDRESS,AX
  2880.        MOV      WORD PTR HDATA_STR.FBUF_ADDRESS+2,ES
  2881.  
  2882.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2883.        MOV      SI, OFFSET HPCB                      ; DS:SI-> PCB
  2884.                                                      ; DS already set up.
  2885.  
  2886.        CALL     HLLMASM                              ; Call EHLLAPI.
  2887.  
  2888.        CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2889.        JE       DONE_FRB                             ; If GOOD rc, jmp.
  2890.  
  2891.        MOV      AX,HPCB.HLPCB_RETCODE ;Put bad rc in RC.
  2892.        MOV      RC, AX
  2893.        XOR      BX,BX                 ;Set function number.
  2894.        MOV      BL,HPCB.HLPCB_FUNC
  2895.        CALL     ERROR_HAND
  2896.        JMP      END_FRB
  2897.  
  2898. DONE_FRB:
  2899.        DISPLAY  <'De-allocate Read Buffer Complete.'>
  2900. END_FRB:
  2901.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2902.                                                    ; Reset the orig EHLLAPI
  2903.                                                    ; data_str.
  2904.        POP      ES
  2905.        POP      BP
  2906.        POP      DI
  2907.        POP      SI
  2908.        POP      DX
  2909.        POP      CX
  2910.        POP      BX
  2911.        POP      AX
  2912.  
  2913.        RET
  2914.  
  2915. FREE_READ_COM_BUFFER  ENDP
  2916.  
  2917.  
  2918.  
  2919.  
  2920. ;**************************************************************************
  2921. ;FREE WRITE COM BUFFER - De-allocate the communication buffer used for    *
  2922. ;                        write structured field                           *
  2923. ;                                                                         *
  2924. ;                                                                         *
  2925. ;**************************************************************************
  2926.  
  2927. FREE_WRITE_COM_BUFFER     PROC     NEAR
  2928.  
  2929.  
  2930.        PUSH     AX
  2931.        PUSH     BX
  2932.        PUSH     CX
  2933.        PUSH     DX
  2934.        PUSH     SI
  2935.        PUSH     DI
  2936.        PUSH     BP
  2937.        PUSH     ES
  2938.  
  2939.  
  2940.        MOV      HPCB.HLPCB_FUNC, HA_FREE_COMMO_BUFF
  2941.        MOV      HPCB.HLPCB_LENGTH, 6
  2942.        MOV      AX, OPTIMAL_OUTB
  2943.        MOV      HDATA_STR.FBUF_LENGTH, AX
  2944.        MOV      ES, WR_ADDRESS_SEG
  2945.        MOV      AX, WR_ADDRESS_OFF
  2946.        MOV      WORD PTR HDATA_STR.FBUF_ADDRESS,AX
  2947.        MOV      WORD PTR HDATA_STR.FBUF_ADDRESS+2,ES
  2948.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2949.        MOV      SI, OFFSET HPCB                       ; DS:SI-> PCB
  2950.                                                       ; DS already set up.
  2951.        CALL     HLLMASM                               ; Call EHLLAPI.
  2952.        CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  2953.        JE       DONE_FWRB                             ; If GOOD rc, jmp.
  2954.        MOV      AX,HPCB.HLPCB_RETCODE                 ; Put bad rc in RC.
  2955.        MOV      RC, AX
  2956.        XOR      BX,BX                                 ; Set function number.
  2957.        MOV      BL,HPCB.HLPCB_FUNC
  2958.        CALL     ERROR_HAND
  2959.        JMP      END_FWRB
  2960.  
  2961. DONE_FWRB:
  2962.  
  2963.        CALL     NEW_LINE
  2964.        DISPLAY  <'De-allocate Write Buffer Complete.'>
  2965.        CALL     NEW_LINE
  2966. END_FWRB:
  2967.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  2968.                                                       ; Reset the original
  2969.                                                       ; EHLLAPI data_str.
  2970.        POP      ES
  2971.        POP      BP
  2972.        POP      DI
  2973.        POP      SI
  2974.        POP      DX
  2975.        POP      CX
  2976.        POP      BX
  2977.        POP      AX
  2978.  
  2979.        RET
  2980.  
  2981. FREE_WRITE_COM_BUFFER  ENDP
  2982.  
  2983.  
  2984. ;**************************************************************************
  2985. ;DISCONNECT STRUCTURED FIELD - Disconnect From Structured Field           *
  2986. ;                                                                         *
  2987. ;                                                                         *
  2988. ;                                                                         *
  2989. ;**************************************************************************
  2990.  
  2991. DISCONNECT_SF    PROC     NEAR
  2992.  
  2993.  
  2994.        PUSH     AX
  2995.        PUSH     BX
  2996.        PUSH     CX
  2997.        PUSH     DX
  2998.        PUSH     SI
  2999.        PUSH     DI
  3000.        PUSH     BP
  3001.        PUSH     ES
  3002.  
  3003.        CALL     NEW_LINE
  3004.        DISPLAY  <'Initiate Disconnect From Structured Field.'>
  3005.        MOV      HPCB.HLPCB_FUNC, HA_STOP_STRUCTURED_FLD
  3006.        MOV      HPCB.HLPCB_LENGTH, 3
  3007.        MOV      AL,DFT_SESS
  3008.        MOV      HDATA_STR.SPSF_SHORTNAME,AL
  3009.        MOV      AX,DOID
  3010.        MOV      HDATA_STR.SPSF_DOID,AX
  3011.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  3012.        MOV      SI, OFFSET HPCB                    ; DS:SI-> PCB
  3013.                                                    ; DS already set up.
  3014.        CALL     HLLMASM                            ; Call EHLLAPI.
  3015.        CMP      HPCB.HLPCB_RETCODE, HARC_SUCCESS
  3016.        JE       DONE_DIS                           ; If GOOD rc, jmp.
  3017.  
  3018.        MOV      AX,HPCB.HLPCB_RETCODE              ; Put bad rc in RC.
  3019.        MOV      RC, AX
  3020.        XOR      BX,BX                              ; Set function number.
  3021.        MOV      BL,HPCB.HLPCB_FUNC
  3022.        CALL     ERROR_HAND
  3023. DONE_DIS:
  3024.        CALL     NEW_LINE
  3025.        DISPLAY  <'Structured Field Disconnected. '>
  3026.        CALL     NEW_LINE
  3027.        MOV      HPCB.HLPCB_DADDR, OFFSET HDATA_STR
  3028.                                                    ; Reset the orig EHLLAPI
  3029.                                                    ; data_str.
  3030.       POP      ES
  3031.       POP      BP
  3032.       POP      DI
  3033.       POP      SI
  3034.       POP      DX
  3035.       POP      CX
  3036.       POP      BX
  3037.       POP      AX
  3038.  
  3039.       RET
  3040.  
  3041. DISCONNECT_SF   ENDP
  3042.  
  3043.  
  3044.  
  3045.  
  3046.  
  3047.  
  3048.  
  3049.  
  3050.  
  3051.  
  3052. ;***********************************************************************
  3053. ;* ERROR HAND - Error Handler                                          *
  3054. ;*                                                                     *
  3055. ;*     INPUT                                                           *
  3056. ;*          Ax - RETURN CODE                                           *
  3057. ;*          Bx - FUNCTION                                              *
  3058. ;*                                                                     *
  3059. ;*     OUTPUT                                                          *
  3060. ;*                                                                     *
  3061. ;***********************************************************************
  3062.  
  3063. ERROR_HAND PROC     NEAR
  3064.  
  3065.            PUSH     AX
  3066.            PUSH     BX
  3067.            PUSH     CX
  3068.  
  3069.            MOV      CX,BX                  ; Save BX.
  3070.            DISPLAY  <'UNEXPECTED RETURN CODE '>
  3071.            MOV      BX, OFFSET DIGIT_BUFF
  3072.            CALL     ITOA
  3073.            CALL     DSP_MSG
  3074.            DISPLAY  <' from FUNCTION #'>
  3075.            MOV      AX, CX;               ; Get function number.
  3076.            CALL     ITOA
  3077.            CALL     DSP_MSG
  3078.            DISPLAY  <'.'>
  3079.  
  3080.            POP      CX
  3081.            POP      BX
  3082.            POP      AX
  3083.  
  3084.            RET
  3085. ERROR_HAND ENDP
  3086.  
  3087.  
  3088.  
  3089.  
  3090. ;**************************************************************************
  3091. ;NEW_LINE - Writes new line char.                                         *
  3092. ;                                                                         *
  3093. ;INPUT                                                                    *
  3094. ;  DS:BX -> MSG                                                           *
  3095. ;                                                                         *
  3096. ;OUTPUT                                                                   *
  3097. ;                                                                         *
  3098. ;                                                                         *
  3099. ;**************************************************************************
  3100.  
  3101. NEW_LINE      PROC     NEAR
  3102.  
  3103.               PUSH     AX
  3104.               PUSH     BX
  3105.  
  3106.               LEA      BX,CRLF_VAR
  3107.               MOV      AX, 2
  3108.               CALL     DSP_MSG_LEN
  3109.  
  3110.               POP      BX
  3111.               POP      AX
  3112.  
  3113.               RET
  3114. NEW_LINE      ENDP
  3115.  
  3116.  
  3117. ;**************************************************************************
  3118. ;DSP_MSG_LEN - Display msg.                                               *
  3119. ;                                                                         *
  3120. ;INPUT                                                                    *
  3121. ;  DS:BX -> MSG                                                           *
  3122. ;  AX    - length                                                         *
  3123. ;                                                                         *
  3124. ;OUTPUT                                                                   *
  3125. ;                                                                         *
  3126. ;                                                                         *
  3127. ;**************************************************************************
  3128.  
  3129. DSP_MSG_LEN    PROC     NEAR
  3130.  
  3131.                PUSH     AX
  3132.                PUSH     DS
  3133.                PUSH     BX
  3134.                PUSH     AX
  3135.                PUSH     0
  3136.                CALL     VIOWRTTTY
  3137.                POP      AX
  3138.  
  3139.                RET
  3140. DSP_MSG_LEN    ENDP
  3141.  
  3142.  
  3143.  
  3144.  
  3145.  
  3146. ;**************************************************************************
  3147. ;DSP_MSG - Display NULL terminated msg.                                   *
  3148. ;                                                                         *
  3149. ;INPUT                                                                    *
  3150. ;  DS:BX -> MSG                                                           *
  3151. ;                                                                         *
  3152. ;OUTPUT                                                                   *
  3153. ;                                                                         *
  3154. ;                                                                         *
  3155. ;**************************************************************************
  3156.  
  3157. DSP_MSG      PROC     NEAR
  3158.  
  3159.  
  3160.              PUSH     AX
  3161.              PUSH     BX
  3162. TOP_DM:
  3163.              CMP      BYTE PTR [BX], NULL
  3164.              JE       DONE_DM
  3165.              PUSH     DS
  3166.              PUSH     BX
  3167.              PUSH     1
  3168.              PUSH     0
  3169.              CALL     VIOWRTTTY
  3170.              INC      BX
  3171.              JMP      TOP_DM
  3172. DONE_DM:
  3173.              POP      BX
  3174.              POP      AX
  3175.  
  3176.              RET
  3177. DSP_MSG      ENDP
  3178.  
  3179.  
  3180.  
  3181.  
  3182. ;**************************************************************************
  3183. ;FGETCHAR - Calls DOS to read the keyboard.                               *
  3184. ;                                                                         *
  3185. ;                                                                         *
  3186. ;                                                                         *
  3187. ;**************************************************************************
  3188. FGETCHAR              PROC     NEAR
  3189.  
  3190.                       PUSH     AX
  3191.  
  3192.  
  3193.  
  3194.                       PUSH     DS
  3195.                       PUSH     OFFSET DUMMY_BUFF
  3196.                       PUSH     0
  3197.                       PUSH     0
  3198.                       CALL     KBDCHARIN
  3199.  
  3200.                       POP      AX
  3201.  
  3202.                       RET
  3203. FGETCHAR              ENDP
  3204.  
  3205.  
  3206.  
  3207.  
  3208. ;**************************************************************************
  3209. ;ITOA - Convert binary to decimal digits.                                 *
  3210. ;                                                                         *
  3211. ;INPUT                                                                    *
  3212. ;  AX    - BINARY NUMBER TO CONVERTS TO HEX.                              *
  3213. ;  DS:BX - WHERE DIGITS WILL BE PLACED.  Buffer min is 6 bytes.           *
  3214. ;                                                                         *
  3215. ;OUTPUT                                                                   *
  3216. ;  DS:BX - WHERE DIGITS WILL BE PLACED. Last byte will be set to NULL.    *
  3217. ;                                                                         *
  3218. ;                                                                         *
  3219. ;**************************************************************************
  3220.  
  3221. ITOA         PROC     NEAR
  3222.              PUSH     AX
  3223.              PUSH     BX
  3224.              PUSH     CX
  3225.              PUSH     DX
  3226.              PUSH     SI
  3227.              PUSH     DI
  3228.              PUSH     BP
  3229.  
  3230.              MOV      BP,0                  ; BP flag to indicate
  3231.                                             ; if written once.
  3232.              MOV      DI,BX                 ; Save where to put
  3233.              LEA      BX,HEX_TABLE          ; address of translate tab.
  3234.                                             ; digits.
  3235.              MOV      SI,AX                 ; Save AX
  3236.              MOV      CX, 10000             ; Divide by 10000
  3237.              MOV      DX,0
  3238.              DIV      CX
  3239.              CMP      AX,0
  3240.              JE       NEXT_ITOA
  3241.  
  3242.              MOV      BP,1                  ; Written once.
  3243.              PUSH     AX
  3244.              XLAT     HEX_TABLE             ; convert - result in AL
  3245.              MOV      [DI], AL
  3246.              POP      AX
  3247.              INC      DI
  3248.              MOV      CX,10000
  3249.              MUL      CX                    ; Mul CX x AX
  3250.              SUB      SI,AX                 ; Subtract out 10000
  3251.                                             ; numbers
  3252. NEXT_ITOA:
  3253.              MOV      AX, SI                ; Divide by 1000
  3254.              MOV      CX, 1000
  3255.              MOV      DX,0
  3256.              DIV      CX
  3257.              CMP      BP,0                  ; Written once?
  3258.              JNE      WRT_DIG               ; If written digit, jmp
  3259.              CMP      AX,0
  3260.              JE       NEXT_ITOA1
  3261. WRT_DIG:
  3262.              MOV      BP,1                  ; Written once.
  3263.              PUSH     AX
  3264.              XLAT     HEX_TABLE             ; convert - result in AL
  3265.              MOV      [DI], AL
  3266.              POP      AX
  3267.              INC      DI
  3268.              MOV      CX,1000
  3269.              MUL      CX                    ; Mul CX x AX
  3270.              SUB      SI,AX                 ; Subtract out 1000
  3271.                                             ; numbers
  3272. NEXT_ITOA1:
  3273.  
  3274.              MOV      AX, SI                ; Divide by 100
  3275.              MOV      CX, 100
  3276.              MOV      DX,0
  3277.              DIV      CX
  3278.              CMP      BP,0                  ; Written once?
  3279.              JNE      WRT_DIG1              ; If written digit, jmp
  3280.              CMP      AX,0
  3281.              JE       NEXT_ITOA2
  3282. WRT_DIG1:
  3283.              MOV      BP,1                  ; Written once.
  3284.              PUSH     AX
  3285.              XLAT     HEX_TABLE             ; convert - result in AL
  3286.              MOV      [DI], AL
  3287.              POP      AX
  3288.              INC      DI
  3289.              MOV      CX,100
  3290.              MUL      CX                    ; Mul CX x AX
  3291.              SUB      SI,AX                 ; Subtract out 100
  3292.                                             ; numbers
  3293. NEXT_ITOA2:
  3294.              MOV      AX, SI                ; Divide by 10
  3295.              MOV      CX, 10
  3296.              MOV      DX,0
  3297.              DIV      CX
  3298.              CMP      BP,0                  ; Written once?
  3299.              JNE      WRT_DIG2              ; If written digit, jmp
  3300.              CMP      AX,0
  3301.              JE       NEXT_ITOA3
  3302. WRT_DIG2:
  3303.              MOV      BP,1                  ; Written once.
  3304.              PUSH     AX
  3305.              XLAT     HEX_TABLE             ; convert - result in AL
  3306.              MOV      [DI], AL
  3307.              POP      AX
  3308.              INC      DI
  3309.              MOV      CX,10
  3310.              MUL      CX                    ; Mul CX x AX
  3311.              SUB      SI,AX                 ; Subtract out 10
  3312.                                             ; numbers
  3313. NEXT_ITOA3:
  3314.              MOV      AX, SI
  3315.              XLAT     HEX_TABLE             ; convert - result in AL
  3316.              MOV      [DI], AL
  3317.              INC      DI
  3318.              MOV      BYTE PTR [DI], NULL   ; NULL last char.
  3319.  
  3320.              POP      BP
  3321.              POP      DI
  3322.              POP      SI
  3323.              POP      DX
  3324.              POP      CX
  3325.              POP      BX
  3326.              POP      AX
  3327.              RET
  3328. ITOA         ENDP
  3329.  
  3330.  
  3331.  
  3332.  
  3333. ;******************************************************************************
  3334. ;ITOH - Convert binary to hex digits.                                         *
  3335. ;                                                                             *
  3336. ;INPUT                                                                        *
  3337. ;  AX    - BINARY NUMBER TO CONVERTS TO HEX.                                  *
  3338. ;  DS:BX - WHERE DIGITS WILL BE PLACED.  Buffer min is 4 bytes.               *
  3339. ;                                                                             *
  3340. ;OUTPUT                                                                       *
  3341. ;  DS:BX - WHERE DIGITS WILL BE PLACED.                                       *
  3342. ;                                                                             *
  3343. ;                                                                             *
  3344. ;******************************************************************************
  3345. ITOH     PROC     NEAR
  3346.          PUSH     AX
  3347.          PUSH     BX
  3348.          PUSH     DI
  3349.          PUSH     DX
  3350.  
  3351.          MOV      DI,BX                 ; Save where to put
  3352.          LEA      BX,HEX_TABLE          ; address of translate tab.
  3353.                                         ; digits.
  3354.          MOV      DX,AX
  3355.  
  3356.          SHR      AX, 12
  3357.          XLAT     HEX_TABLE             ; convert - result in AL
  3358.          MOV      [DI], AL
  3359.          INC      DI
  3360.          MOV      AX, DX                ; Restore AX
  3361.  
  3362.          SHR      AX, 8
  3363.          AND      AL,0FH
  3364.          XLAT     HEX_TABLE             ; convert - result in AL
  3365.          MOV      [DI], AL
  3366.          INC      DI
  3367.          MOV      AX, DX                ; Restore AX
  3368.  
  3369.          SHR      AX, 4
  3370.          AND      AL,0FH
  3371.          XLAT     HEX_TABLE             ; convert - result in AL
  3372.          MOV      [DI], AL
  3373.          INC      DI
  3374.          MOV      AX, DX                ; Restore AX
  3375.          AND      AL,0FH
  3376.          XLAT     HEX_TABLE             ; convert - result in AL
  3377.          MOV      [DI], AL
  3378.                                         ; number to the screen.
  3379.          POP      DX
  3380.          POP      DI
  3381.          POP      BX
  3382.          POP      AX
  3383.  
  3384.          RET
  3385. ITOH     ENDP
  3386.  
  3387.  
  3388. CSEG     ENDS
  3389.                       END      MAIN
  3390.