fix potential bug when cluster allocation fails;
[unix-history] / usr / src / usr.bin / tn3270 / api / test.c
CommitLineData
f81b28ad 1#include <stdio.h>
87f7c3b6 2
e99f17a9
GM
3#include "../api/api.h"
4#include "apilib.h"
5#include "../ctlr/oia.h"
6
7a0874c9
GM
7static char mybuffer[2000];
8
e99f17a9
GM
9api_perror(string)
10char *string;
11{
12 fprintf(stderr, "Error: [0x%x/0x%x:0x%x/0x%x] from %s.\n",
13 api_sup_fcn_id, api_sup_errno,
14 api_fcn_fcn_id, api_fcn_errno, string);
15}
16
17
18char *
19session_type(type)
20int type;
21{
22 switch (type) {
23 case TYPE_WSCTL:
24 return "work station control";
25 case TYPE_DFT:
26 return "distributed function terminal";
27 case TYPE_CUT:
28 return "control unit terminal";
29 case TYPE_NOTEPAD:
30 return "notepad";
31 case TYPE_PC:
32 return "personal computer";
33 default:
34 return "(UNKNOWN)";
35 }
36}
37
38
87f7c3b6
GM
39main()
40{
7a0874c9 41 register int i;
e99f17a9
GM
42 int session_id;
43 OIA oia;
44 QuerySessionIdParms id;
45 QuerySessionParametersParms pa;
46 QuerySessionCursorParms cu;
47 ConnectToKeyboardParms conn;
48 DisconnectFromKeyboardParms disc;
49 WriteKeystrokeParms wr;
50 DisableInputParms disable;
51 EnableInputParms enable;
52 CopyStringParms copy;
53 ReadOiaGroupParms re;
54 NameArray namearray;
87f7c3b6 55
f81b28ad
GM
56 if (api_init() == 0) {
57 fprintf(stderr, "API function not available.\n");
58 return 1;
59 }
60
e99f17a9
GM
61 id.rc = 0;
62 id.function_id = 0;
63 id.option_code = ID_OPTION_BY_NAME;
64 id.data_code = 'E';
65 id.name_array = &namearray;
66 namearray.length = sizeof namearray;
67 if (api_query_session_id(&id)) {
68 api_perror("api_query_session_id");
69 } else if (namearray.number_matching_session == 0) {
70 fprintf(stderr, "query_session_id: No matching sessions!\n");
87f7c3b6 71 } else {
e99f17a9
GM
72 printf("Session short name 0x%x, type is ",
73 namearray.name_array_element.short_name);
74 printf("%s", session_type(namearray.name_array_element.type));
75 printf(", session ID is: 0x%x\n",
76 namearray.name_array_element.session_id);
87f7c3b6 77 }
e99f17a9
GM
78 session_id = namearray.name_array_element.session_id;
79
80 pa.rc = pa.function_id = 0;
81 pa.session_id = session_id;
82 if (api_query_session_parameters(&pa) == -1) {
83 api_perror("api_query_session_parameters");
87f7c3b6 84 } else {
e99f17a9
GM
85 printf("Session type %s, ", session_type(pa.session_type));
86 if (pa.session_characteristics&CHARACTERISTIC_EAB) {
87 printf(" has EAB, ");
88 }
89 if (pa.session_characteristics&CHARACTERISTIC_PSS) {
90 printf(" has PSS, ");
91 }
92 printf("%d rows, %d columns ", pa.rows, pa.columns);
93 if (pa.presentation_space) {
94 printf("presentation space at 0x%x:0x%x.\n",
95 FP_SEG(pa.presentation_space), FP_OFF(pa.presentation_space));
96 } else {
97 printf("(no direct presentation space access).\n");
98 }
87f7c3b6 99 }
e99f17a9
GM
100
101 cu.rc = cu.function_id = 0;
102 cu.session_id = session_id;
103 if (api_query_session_cursor(&cu) == -1) {
104 api_perror("api_query_session_cursor");
87f7c3b6 105 } else {
e99f17a9
GM
106 printf("cursor");
107 if (cu.cursor_type&CURSOR_INHIBITED_AUTOSCROLL) {
108 printf(" inhibited autoscroll");
109 }
110 if (cu.cursor_type&CURSOR_INHIBITED) {
111 printf(" inhibited");
112 }
113 if (cu.cursor_type&CURSOR_BLINKING) {
114 printf(" blinking");
115 } else {
116 printf(" not blinking");
117 }
118 if (cu.cursor_type&CURSOR_BOX) {
119 printf(" box ");
120 } else {
121 printf(" not box ");
122 }
123 printf("at row %d, column %d.\n", cu.row_address, cu.column_address);
87f7c3b6 124 }
e99f17a9
GM
125
126 re.rc = re.function_id = 0;
127 re.session_id = session_id;
128 re.oia_buffer = (char far *) &oia;
129 re.oia_group_number = API_OIA_ALL_GROUPS;
130 if (api_read_oia_group(&re) == -1) {
131 api_perror("api_read_oia_group");
87f7c3b6 132 } else {
e99f17a9
GM
133 if (IsOiaReady3274(&oia)) {
134 printf("3274 ready, ");
135 }
136 if (IsOiaMyJob(&oia)) {
137 printf("my job, ");
138 }
139 if (IsOiaInsert(&oia)) {
140 printf("insert mode, ");
141 }
142 if (IsOiaSystemLocked(&oia)) {
143 printf("system locked, ");
144 }
145 if (IsOiaTWait(&oia)) {
146 printf("terminal wait, ");
147 }
148 printf("are some bits from the OIA.\n");
87f7c3b6 149 }
e99f17a9
GM
150
151 conn.rc = conn.function_id = 0;
152 conn.session_id = session_id;
153 conn.event_queue_id = conn.input_queue_id = 0;
154 conn.intercept_options = 0;
155 if (api_connect_to_keyboard(&conn) == -1) {
156 api_perror("api_connect_to_keyboard");
157 } else {
158 if (conn.first_connection_identifier) {
159 printf("First keyboard connection.\n");
160 } else {
161 printf("Not first keyboard connection.\n");
162 }
163 }
164
165 disable.rc = disable.function_id = 0;
166 disable.session_id = session_id;
167 disable.connectors_task_id = 0;
168 if (api_disable_input(&disable) == -1) {
169 api_perror("api_disable_input");
170 } else {
171 printf("Disabled.\n");
172 }
173
174 wr.rc = wr.function_id = 0;
175 wr.session_id = session_id;
176 wr.connectors_task_id = 0;
177 wr.options = OPTION_SINGLE_KEYSTROKE;
178 wr.number_of_keys_sent = 0;
179 wr.keystroke_specifier.keystroke_entry.scancode = 0x3a;
180 wr.keystroke_specifier.keystroke_entry.shift_state = 0;
181 if (api_write_keystroke(&wr) == -1) {
182 api_perror("api_write_keystroke");
183 } else {
184 if (wr.number_of_keys_sent != 1) {
185 fprintf(stderr,
186 "write_keystroke claims to have sent %d keystrokes.\n",
187 wr.number_of_keys_sent);
188 } else {
189 printf("Keystroke sent.\n");
190 }
191 }
192
193 enable.rc = enable.function_id = 0;
194 enable.session_id = session_id;
195 enable.connectors_task_id = 0;
196 if (api_enable_input(&enable) == -1) {
197 api_perror("api_enable");
198 } else {
199 printf("Enabled.\n");
200 }
201
202 disc.rc = disc.function_id = 0;
203 disc.session_id = session_id;
204 disc.connectors_task_id = 0;
205 if (api_disconnect_from_keyboard(&disc) == -1) {
206 api_perror("api_disconnect_from_keyboard");
207 } else {
208 printf("Disconnected from keyboard.\n");
209 }
7a0874c9
GM
210 /* Time copy services */
211
212 for (i = 0; i < 100; i++) {
213 copy.copy_mode = 0;
214 copy.rc = copy.function_id = 0;
215 copy.source.session_id = session_id;
216 copy.source.characteristics = 0;
217 copy.source.session_type = TYPE_DFT;
218 copy.source.begin = 0;
219
220 copy.source_end = 1920;
221
222 copy.target.session_id = 0;
223 copy.target.buffer = mybuffer;
224 copy.target.characteristics = 0;
225 copy.target.session_type = TYPE_DFT;
226
227 if (api_copy_string(&copy) == -1) {
228 api_perror("api_copy_string");
229 break;
230 }
231 }
232 printf("Copied data out.\n");
e99f17a9 233
d024bcc4
GM
234 (void) api_finish();
235
e99f17a9 236 return 0;
87f7c3b6 237}