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