This sample program is part of the software offering for the HLLAPI function; it can be found in the /usr/lib/hcon/hllapi directory.
/******************************************************************/
/* FILE NAME: SAMPLE.C */
/* */
/* MODULE NAME= SAMPLE.C */
/* */
/* DESCRIPTIVE NAME= C SAMPLE PROGRAM FOR HLLAPI */
/* */
/* Displays HLLAPI and session information. */
/* Writes string to host. */
/* Searches for written string on host. */
/* Displays host session screen. */
/* */
/* COPYRIGHT: XXXXXXXXX (C) COPYRIGHT IBM CORP.1992 */
/* LICENSED MATERIAL - PROGRAM PROPERTY OF IBM */
/* ALL RIGHTS RESERVED */
/* */
/* NOTES= */
/* */
/* */
/* */
/* */
/*********************-END OF SPECIFICATIONS-**********************/
/******************************************************************/
/********************** BEGIN INCLUDE FILES ***********************/
/******************************************************************/
#include <stdio.h>
#include <string.h>
#include "hapi_c.h" /* Get HLLAPI include file*/
/******************************************************************/
/*************************** DEFINES ******************************/
/******************************************************************/
#define MAX_DATA_SIZE 1920 /* The maximum data */
/* size for this */
/* application. */
#define EABS 0x80 /* Extended attribute */
/* bit. */
#define PSS 0x40 /* Programmed Symbol */
/* Set bit. */
/******************************************************************/
/******************** BEGIN STATIC VARIABLES **********************/
/******************************************************************/
unsigned char press_ent_msg[] =
{
"\n\nPress ENTER to continue..."
}
;
unsigned char blank_screen[] = /* Poor mans blank screen */
{
"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
}
;
unsigned char dft_sess = NULL; /* Session to write str */
/* to and search from */
unsigned char host_text[] =
{
"HLLAPI" /* String to send to */
} /* host and to search for */
;
unsigned char invis_text[] =
{
"INVISIBLE WINDOW WRITE" /* String to send to host */
}
;
unsigned char home_key[] =
{
"@0" /* The Home Key */
}
;
unsigned char setparm_text[] =
{
"NOATTRB NOEAB" /* String used for set parms*/
}
;
/******************* HLLAPI variables *****************************/ unsigned int hfunc_num; /* HLLAPI function number */ unsigned char hdata_str[MAX_DATA_SIZE];/* HLLAPI data str. */ unsigned int hds_len; /* HLLAPI data string len */ unsigned int hrc; /* HLLAPI return code */
/******************************************************************/ /************************** BEGIN CODE ****************************/ /******************************************************************/
/******************************************************************/
/* MAIN - Main code calls routines to do real work. */
/* */
/* INPUT */
/* */
/* OUTPUT */
/* */
/* */
/******************************************************************/
main(){
int rc; /* return code */
char key = 'a' ; /* input character */
printf(blank_screen); /* Clear the screen */
rc = disp_hllapi_info(); /* Call routine to */
/* display HLLAPI info */
if (rc == 0){
printf(press_ent_msg);
fgetc(stdin); /* Make user press ENTER */
rc = disp_session_info(); /* Call routine to display */
/* Host session info */
}
if (rc == 0){
if (dft_sess){ /* At least 1 sess */
printf(blank_screen); /* Clear the screen. */
printf("Press ENTER to send string '");
printf(host_text);
printf("' to session short name ");
fputc(dft_sess,stdout);
printf ("...");
fgetc(stdin); /*Make user press ENTER */
rc = write_str_2_host(host_text);/* Call routine to write*/
/* string to host session */
}
else
{
printf("NO SESSION CONFIGURED.\n");
rc = 1; /* Get out of program */
}
}
if (rc == 0){
printf("Press ENTER to search for string '");
printf(host_text);
printf("' on Host Presentation Space...");
fgetc(stdin); /*Make user press enter */
rc = search_str_on_host(); /* Routine to search for */
/* string on host session */
}
if (rc == 0){
printf("Press ENTER to display 1920 bytes of presentation
space...");
fgetc(stdin); /*Make user press ENTERCS2C */
rc = disp_host_scr(); /* Call routine to display */
/* Host session screen */
}
if (rc == 0){
fflush(stdin); /* Flush input buffer */
printf( "\nSAMPLE PROGRAM DONE. To Exit Program Press
ENTER..." );
fgetc(stdin); /* Make user press ENTER */
}
}
/******************************************************************/ /* DISP_HLLAPI_INFO - CALLs HLLAPI QUERY_SYSTEM and then displays */ /* the requested info. */ /* */ /* */ /******************************************************************/
int disp_hllapi_info(){
struct qsys_struct dsp_struct;
struct qsys_struct * data_ptr;
/* assign pointer */
/* HLLAPI data string. */
unsigned int rc = 0; /* return code */
data_ptr = &dsp_struct;
hfunc_num = HA_QUERY_SYSTEM; /* Issue query system */
hllc(&hfunc_num, (char * )data_ptr, &hds_len, &hrc); /* Call HLLAPI */
if (hrc == HARC_SUCCESS){ /* If good rc */
printf(" HLLAPI INFORMATION\n\n");
printf(" HLLAPI version : ");
fputc(data_ptr->qsys_hllapi_ver,stdout);
printf("\n");
printf(" HLLAPI level : ");
fputc(data_ptr->qsys_hllapi_lvl[0],stdout);
fputc(data_ptr->qsys_hllapi_lvl[1] ,stdout);
printf("\n");
printf(" HLLAPI release date : ");
wrt_str(data_ptr->qsys_hllapi_date, 6);
printf("\n");
printf(" HLLAPI hardware base : ");
fputc(data_ptr->qsys_hardware_base,stdout);
printf("\n");
printf(" HLLAPI CTRL program type : ");
fputc(data_ptr->qsys_ctrl_prog_type,stdout);
printf(" = ");
if (data_ptr->qsys_ctrl_prog_type == 'X'){
printf("IBM AIX");
}
printf("\n");
printf(" HCON version level : ");
fputc(data_ptr->qsys_ctrl_prog_ver[0],stdout);
fputc(data_ptr->qsys_ctrl_prog_ver[1],stdout);
printf("\n");
}
else {
/* Bad return code */
rc = hrc;
error_hand(hfunc_num, rc);
}
return(rc);
}
/******************************************************************/
/* DISP_SESSION_INFO - CALLs HLLAPI QUERY funtions and then */ /* displays the requested session info. */
/* */
/* */
/******************************************************************/
int disp_session_info(){ /* Routine to display */
/* Host session info */
struct qses_struct * data_ptr;
/* assign pointer */
/* HLLAPI data string. */
struct qsst_struct sess_stuc; /* Query Session */
/* structure. */
unsigned int i; /* Array index */
unsigned int num_sess; /* Number of session started*/
unsigned int rc = 0; /* return code */
data_ptr = (_Packed struct qses_struct *)hdata_str;
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf(" SESSION INFO\n\n");
hfunc_num = HA_QUERY_SESSIONS; /* Issue query sessions */
hds_len = MAX_DATA_SIZE / 12 * 12;/* Make sure len is */
/* multiple of 12 */
hllc(&hfunc_num, (char *)data_ptr, &hds_len, &hrc);
/* Call HLLAPI */
if (hrc == HARC_SUCCESS){ /* If good rc */
num_sess = hds_len; /* Number of sessions started */
printf("Number of configured sessions = %d\n\n\n", num_sess);
for(i = 0;((i < num_sess) && (rc == 0)); i++)
/* LOOP thru queried sessions */
{
printf("Session number : %d\n",i+1);
printf("Session Long name : ");
wrt_str(data_ptr[i].qses_longname, 8);
printf("\n");
printf("Session Short name : ");
wrt_str(&data_ptr[i].qses_shortname, 1);
printf("\n");
printf("Session Type : ");
wrt_str(&data_ptr[i].qses_sestype, 1);
printf(" = ");
if (data_ptr[i].qses_sestype == 'H')
{
printf("Host");
if (!(dft_sess)){ /* First HOST not set alreaCS2C */
dft_sess = data_ptr[i].qses_shortname;
/* Set the session to write string to*/
}
}
printf("\n");
printf("Session PS size : %d\n"
,data_ptr[i].qses_pssize);
hfunc_num = HA_QUERY_SESSION_STATUS; /* Issue query session status */
hds_len = 18; /* Set length */
sess_stuc.qsst_shortname = data_ptr[i].qses_shortname;
/* Set the session short name */
hllc(&hfunc_num, (char *)&sess_stuc, &hds_len, &hrc);
if (hrc == HARC_SUCCESS){ /* If good rc */
printf("Session PS rows : %d\n"
,sess_stuc.qsst_ps_rows);
printf("Session PS columns : %d\n"
,sess_stuc.qsst_ps_cols);
printf("Session type : ");
wrt_str(&sess_stuc.qsst_sestype, 1);
printf(" = ");
if (sess_stuc.qsst_sestype == 'D'){
printf("DFT display");
}
if (sess_stuc.qsst_sestype == 'S'){
printf("SNA T2.1 display");
}
if (sess_stuc.qsst_sestype == 'T'){
printf("TCP/IP display");
}
if (sess_stuc.qsst_sestype == 'P'){
printf("SNA T2.1 printer");
}
if (sess_stuc.qsst_sestype == 'Q'){
printf("DFT non-SNA printer");
}
printf("\n");
printf(press_ent_msg);
fgetc(stdin); /* Make user press ENTERCS2C*/
/* ENTER. */
}
else /* Bad return code */
{
rc = hrc;
error_hand(hfunc_num, rc);
}
}
}
else /* Bad return code */
{
rc = hrc;
error_hand(hfunc_num, rc);
}
return(rc);
}
/******************************************************************/
/* WRITE_STR_2_HOST - Connects to first session and writes */
/* home_key and string to host */
/******************************************************************/
int write_str_2_host(char *in_str) /* Call routine to */
/* write string to host */
{
unsigned int rc = 0; /* return code */
hdata_str[0] = dft_sess; /* Set session id for connect */
hdata_str[1] = 0x00;
hfunc_num = HA_CONNECT_PS; /* Issue Connect */
/* Presentation Space */
hllc(&hfunc_num, (char * )hdata_str, &hds_len, &hrc);
/* Call HLLAPI */
if (hrc == HARC_SUCCESS){ /* If good return code */
hfunc_num = HA_SENDKEY; /* Issue sendkey */
strcpy(hdata_str, home_key); /* String to send to Host */
hds_len = sizeof(home_key) - 1; /* Set length of string */
/* minus null character */
hllc(&hfunc_num, (char * )hdata_str, &hds_len, &hrc);
/* Call HLLAPI */
if (hrc == HARC_SUCCESS){ /* If good return code */
hfunc_num = HA_SENDKEY; /* Issue sendkey */
strcpy(hdata_str,in_str); /* String to send to Host */
hds_len = strlen(in_str); /* Set length of string */
/* minus null character */
hllc(&hfunc_num, (char * )hdata_str, &hds_len, &hrc);
/* Call HLLAPI */
if (hrc == HARC_SUCCESS){ /* If good return code */
printf ("Sent String to Host.\n\n\n");
}
else /* Bad return code */
{
rc = hrc; /* Set return code */
error_hand(hfunc_num, rc);
}
}
else
{
rc = hrc; /* Set return code */
error_hand(hfunc_num, rc);
}
}
else
{
rc = hrc; /* Set return code */
error_hand(hfunc_num, rc);
}
return(rc);
}
/******************************************************************/
/*DISP_HOST_SCR - Displays first 1920 bytes of host screen */
/* */
/******************************************************************/
int disp_host_scr() /* Routine to display */
/* host screen */
}
unsigned int rc = 0; /* return code */
hfunc_num = HA_SET_SESSION_PARMS; /* Issue Set sessions Parms*/
hds_len = sizeof(setparm_text) - 1; /* Copy the first 1920 bytes*/
/* of presentation space */
hllc(&hfunc_num, setparm_text, &hds_len, &hrc);
/* Call HLLAPI */
if (hrc == HARC_SUCCESS){ /* If good return code */
hfunc_num = HA_COPY_PS_TO_STR; /* Issue Copy PS to string */
hds_len = MAX_DATA_SIZE; /* Copy the first 1920 bytes*/
/* of presentation space */
hrc = 1; /* Set PS position to */
/* top, left corner */
hllc(&hfunc_num, hdata_str, &hds_len, &hrc);
/* Call HLLAPI */
if (hrc == HARC_SUCCESS){ /* If good return code */
wrt_str(hdata_str, MAX_DATA_SIZE);
/* Write the string */
}
else /* Bad return code */
{
rc = hrc; /* Set return code */
error_hand(hfunc_num, rc);
}
}
else /* Bad return code */
{
rc = hrc; /* Set return code */
error_hand(hfunc_num, rc);
}
return(rc);
}
/******************************************************************/
/* WRT_STR - Writes char string to standard output. */
/* */
/* INPUT */
/* */
/* OUTPUT */
/* */
/******************************************************************/
wrt_str(text_ptr, x) /* Prints x number of characters */
unsigned char * text_ptr; /* Pointer to string to write */
unsigned int x; /* Number of bytes in string */
{
unsigned int i; /* counter */
for (i = 0; i < x; i++)
{
fputc(text_ptr[i],stdout);
}
}
/******************************************************************/
/* ERROR_HAND - Error handler. */
/* */
/******************************************************************/
int error_hand(func, rc) /* Error handler. */
unsigned int func;
unsigned int rc;
{
printf("UNEXPECTED RETURN CODE %d from FUNCTION #%d.",rc, func);
}
Host Connection Program (HCON): Overview