xref: /csrg-svn/usr.bin/tn3270/api/test.c (revision 31210)
131205Sminshall #include <stdio.h>
231203Sminshall 
3*31210Sminshall #include "../api/api.h"
4*31210Sminshall #include "apilib.h"
5*31210Sminshall #include "../ctlr/oia.h"
6*31210Sminshall 
7*31210Sminshall api_perror(string)
8*31210Sminshall char *string;
9*31210Sminshall {
10*31210Sminshall     fprintf(stderr, "Error: [0x%x/0x%x:0x%x/0x%x] from %s.\n",
11*31210Sminshall 	api_sup_fcn_id, api_sup_errno,
12*31210Sminshall 	api_fcn_fcn_id, api_fcn_errno, string);
13*31210Sminshall }
14*31210Sminshall 
15*31210Sminshall 
16*31210Sminshall char *
17*31210Sminshall session_type(type)
18*31210Sminshall int	type;
19*31210Sminshall {
20*31210Sminshall     switch (type) {
21*31210Sminshall     case TYPE_WSCTL:
22*31210Sminshall 	return "work station control";
23*31210Sminshall     case TYPE_DFT:
24*31210Sminshall 	return "distributed function terminal";
25*31210Sminshall     case TYPE_CUT:
26*31210Sminshall 	return "control unit terminal";
27*31210Sminshall     case TYPE_NOTEPAD:
28*31210Sminshall 	return "notepad";
29*31210Sminshall     case TYPE_PC:
30*31210Sminshall 	return "personal computer";
31*31210Sminshall     default:
32*31210Sminshall 	return "(UNKNOWN)";
33*31210Sminshall     }
34*31210Sminshall }
35*31210Sminshall 
36*31210Sminshall 
3731203Sminshall main()
3831203Sminshall {
39*31210Sminshall     int session_id;
40*31210Sminshall     OIA oia;
41*31210Sminshall     QuerySessionIdParms id;
42*31210Sminshall     QuerySessionParametersParms pa;
43*31210Sminshall     QuerySessionCursorParms cu;
44*31210Sminshall     ConnectToKeyboardParms conn;
45*31210Sminshall     DisconnectFromKeyboardParms disc;
46*31210Sminshall     WriteKeystrokeParms wr;
47*31210Sminshall     DisableInputParms disable;
48*31210Sminshall     EnableInputParms enable;
49*31210Sminshall     CopyStringParms copy;
50*31210Sminshall     ReadOiaGroupParms re;
51*31210Sminshall     NameArray namearray;
5231203Sminshall 
5331205Sminshall     if (api_init() == 0) {
5431205Sminshall 	fprintf(stderr, "API function not available.\n");
5531205Sminshall 	return 1;
5631205Sminshall     }
5731205Sminshall 
58*31210Sminshall     id.rc = 0;
59*31210Sminshall     id.function_id = 0;
60*31210Sminshall     id.option_code = ID_OPTION_BY_NAME;
61*31210Sminshall     id.data_code = 'E';
62*31210Sminshall     id.name_array = &namearray;
63*31210Sminshall     namearray.length = sizeof namearray;
64*31210Sminshall     if (api_query_session_id(&id)) {
65*31210Sminshall 	api_perror("api_query_session_id");
66*31210Sminshall     } else if (namearray.number_matching_session == 0) {
67*31210Sminshall 	fprintf(stderr, "query_session_id:  No matching sessions!\n");
6831203Sminshall     } else {
69*31210Sminshall 	printf("Session short name 0x%x, type is ",
70*31210Sminshall 				namearray.name_array_element.short_name);
71*31210Sminshall 	printf("%s", session_type(namearray.name_array_element.type));
72*31210Sminshall 	printf(", session ID is: 0x%x\n",
73*31210Sminshall 				namearray.name_array_element.session_id);
7431203Sminshall     }
75*31210Sminshall     session_id = namearray.name_array_element.session_id;
76*31210Sminshall 
77*31210Sminshall     pa.rc = pa.function_id = 0;
78*31210Sminshall     pa.session_id = session_id;
79*31210Sminshall     if (api_query_session_parameters(&pa) == -1) {
80*31210Sminshall 	api_perror("api_query_session_parameters");
8131203Sminshall     } else {
82*31210Sminshall 	printf("Session type %s, ", session_type(pa.session_type));
83*31210Sminshall 	if (pa.session_characteristics&CHARACTERISTIC_EAB) {
84*31210Sminshall 	    printf(" has EAB, ");
85*31210Sminshall 	}
86*31210Sminshall 	if (pa.session_characteristics&CHARACTERISTIC_PSS) {
87*31210Sminshall 	    printf(" has PSS, ");
88*31210Sminshall 	}
89*31210Sminshall 	printf("%d rows, %d columns ", pa.rows, pa.columns);
90*31210Sminshall 	if (pa.presentation_space) {
91*31210Sminshall 	    printf("presentation space at 0x%x:0x%x.\n",
92*31210Sminshall 		FP_SEG(pa.presentation_space), FP_OFF(pa.presentation_space));
93*31210Sminshall 	} else {
94*31210Sminshall 	    printf("(no direct presentation space access).\n");
95*31210Sminshall 	}
9631203Sminshall     }
97*31210Sminshall 
98*31210Sminshall     cu.rc = cu.function_id = 0;
99*31210Sminshall     cu.session_id = session_id;
100*31210Sminshall     if (api_query_session_cursor(&cu) == -1) {
101*31210Sminshall 	api_perror("api_query_session_cursor");
10231203Sminshall     } else {
103*31210Sminshall 	printf("cursor");
104*31210Sminshall 	if (cu.cursor_type&CURSOR_INHIBITED_AUTOSCROLL) {
105*31210Sminshall 	    printf(" inhibited autoscroll");
106*31210Sminshall 	}
107*31210Sminshall 	if (cu.cursor_type&CURSOR_INHIBITED) {
108*31210Sminshall 	    printf(" inhibited");
109*31210Sminshall 	}
110*31210Sminshall 	if (cu.cursor_type&CURSOR_BLINKING) {
111*31210Sminshall 	    printf(" blinking");
112*31210Sminshall 	} else {
113*31210Sminshall 	    printf(" not blinking");
114*31210Sminshall 	}
115*31210Sminshall 	if (cu.cursor_type&CURSOR_BOX) {
116*31210Sminshall 	    printf(" box ");
117*31210Sminshall 	} else {
118*31210Sminshall 	    printf(" not box ");
119*31210Sminshall 	}
120*31210Sminshall 	printf("at row %d, column %d.\n", cu.row_address, cu.column_address);
12131203Sminshall     }
122*31210Sminshall 
123*31210Sminshall     re.rc = re.function_id = 0;
124*31210Sminshall     re.session_id = session_id;
125*31210Sminshall     re.oia_buffer = (char far *) &oia;
126*31210Sminshall     re.oia_group_number = API_OIA_ALL_GROUPS;
127*31210Sminshall     if (api_read_oia_group(&re) == -1) {
128*31210Sminshall 	api_perror("api_read_oia_group");
12931203Sminshall     } else {
130*31210Sminshall 	if (IsOiaReady3274(&oia)) {
131*31210Sminshall 	    printf("3274 ready, ");
132*31210Sminshall 	}
133*31210Sminshall 	if (IsOiaMyJob(&oia)) {
134*31210Sminshall 	    printf("my job, ");
135*31210Sminshall 	}
136*31210Sminshall 	if (IsOiaInsert(&oia)) {
137*31210Sminshall 	    printf("insert mode, ");
138*31210Sminshall 	}
139*31210Sminshall 	if (IsOiaSystemLocked(&oia)) {
140*31210Sminshall 	    printf("system locked, ");
141*31210Sminshall 	}
142*31210Sminshall 	if (IsOiaTWait(&oia)) {
143*31210Sminshall 	    printf("terminal wait, ");
144*31210Sminshall 	}
145*31210Sminshall 	printf("are some bits from the OIA.\n");
14631203Sminshall     }
147*31210Sminshall 
148*31210Sminshall     conn.rc = conn.function_id = 0;
149*31210Sminshall     conn.session_id = session_id;
150*31210Sminshall     conn.event_queue_id = conn.input_queue_id = 0;
151*31210Sminshall     conn.intercept_options = 0;
152*31210Sminshall     if (api_connect_to_keyboard(&conn) == -1) {
153*31210Sminshall 	api_perror("api_connect_to_keyboard");
154*31210Sminshall     } else {
155*31210Sminshall 	if (conn.first_connection_identifier) {
156*31210Sminshall 	    printf("First keyboard connection.\n");
157*31210Sminshall 	} else {
158*31210Sminshall 	    printf("Not first keyboard connection.\n");
159*31210Sminshall 	}
160*31210Sminshall     }
161*31210Sminshall 
162*31210Sminshall     disable.rc = disable.function_id = 0;
163*31210Sminshall     disable.session_id = session_id;
164*31210Sminshall     disable.connectors_task_id = 0;
165*31210Sminshall     if (api_disable_input(&disable) == -1) {
166*31210Sminshall 	api_perror("api_disable_input");
167*31210Sminshall     } else {
168*31210Sminshall 	printf("Disabled.\n");
169*31210Sminshall     }
170*31210Sminshall 
171*31210Sminshall     wr.rc = wr.function_id = 0;
172*31210Sminshall     wr.session_id = session_id;
173*31210Sminshall     wr.connectors_task_id = 0;
174*31210Sminshall     wr.options = OPTION_SINGLE_KEYSTROKE;
175*31210Sminshall     wr.number_of_keys_sent = 0;
176*31210Sminshall     wr.keystroke_specifier.keystroke_entry.scancode = 0x3a;
177*31210Sminshall     wr.keystroke_specifier.keystroke_entry.shift_state = 0;
178*31210Sminshall     if (api_write_keystroke(&wr) == -1) {
179*31210Sminshall 	api_perror("api_write_keystroke");
180*31210Sminshall     } else {
181*31210Sminshall 	if (wr.number_of_keys_sent != 1) {
182*31210Sminshall 	    fprintf(stderr,
183*31210Sminshall 			"write_keystroke claims to have sent %d keystrokes.\n",
184*31210Sminshall 			wr.number_of_keys_sent);
185*31210Sminshall 	} else {
186*31210Sminshall 	    printf("Keystroke sent.\n");
187*31210Sminshall 	}
188*31210Sminshall     }
189*31210Sminshall 
190*31210Sminshall     enable.rc = enable.function_id = 0;
191*31210Sminshall     enable.session_id = session_id;
192*31210Sminshall     enable.connectors_task_id = 0;
193*31210Sminshall     if (api_enable_input(&enable) == -1) {
194*31210Sminshall 	api_perror("api_enable");
195*31210Sminshall     } else {
196*31210Sminshall 	printf("Enabled.\n");
197*31210Sminshall     }
198*31210Sminshall 
199*31210Sminshall     disc.rc = disc.function_id = 0;
200*31210Sminshall     disc.session_id = session_id;
201*31210Sminshall     disc.connectors_task_id = 0;
202*31210Sminshall     if (api_disconnect_from_keyboard(&disc) == -1) {
203*31210Sminshall 	api_perror("api_disconnect_from_keyboard");
204*31210Sminshall     } else {
205*31210Sminshall 	printf("Disconnected from keyboard.\n");
206*31210Sminshall     }
207*31210Sminshall 
208*31210Sminshall     return 0;
20931203Sminshall }
210