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