131205Sminshall #include <stdio.h> 231203Sminshall 331210Sminshall #include "../api/api.h" 431210Sminshall #include "apilib.h" 531210Sminshall #include "../ctlr/oia.h" 631210Sminshall 731210Sminshall api_perror(string) 831210Sminshall char *string; 931210Sminshall { 1031210Sminshall fprintf(stderr, "Error: [0x%x/0x%x:0x%x/0x%x] from %s.\n", 1131210Sminshall api_sup_fcn_id, api_sup_errno, 1231210Sminshall api_fcn_fcn_id, api_fcn_errno, string); 1331210Sminshall } 1431210Sminshall 1531210Sminshall 1631210Sminshall char * 1731210Sminshall session_type(type) 1831210Sminshall int type; 1931210Sminshall { 2031210Sminshall switch (type) { 2131210Sminshall case TYPE_WSCTL: 2231210Sminshall return "work station control"; 2331210Sminshall case TYPE_DFT: 2431210Sminshall return "distributed function terminal"; 2531210Sminshall case TYPE_CUT: 2631210Sminshall return "control unit terminal"; 2731210Sminshall case TYPE_NOTEPAD: 2831210Sminshall return "notepad"; 2931210Sminshall case TYPE_PC: 3031210Sminshall return "personal computer"; 3131210Sminshall default: 3231210Sminshall return "(UNKNOWN)"; 3331210Sminshall } 3431210Sminshall } 3531210Sminshall 3631210Sminshall 3731203Sminshall main() 3831203Sminshall { 3931210Sminshall int session_id; 4031210Sminshall OIA oia; 4131210Sminshall QuerySessionIdParms id; 4231210Sminshall QuerySessionParametersParms pa; 4331210Sminshall QuerySessionCursorParms cu; 4431210Sminshall ConnectToKeyboardParms conn; 4531210Sminshall DisconnectFromKeyboardParms disc; 4631210Sminshall WriteKeystrokeParms wr; 4731210Sminshall DisableInputParms disable; 4831210Sminshall EnableInputParms enable; 4931210Sminshall CopyStringParms copy; 5031210Sminshall ReadOiaGroupParms re; 5131210Sminshall NameArray namearray; 5231203Sminshall 5331205Sminshall if (api_init() == 0) { 5431205Sminshall fprintf(stderr, "API function not available.\n"); 5531205Sminshall return 1; 5631205Sminshall } 5731205Sminshall 5831210Sminshall id.rc = 0; 5931210Sminshall id.function_id = 0; 6031210Sminshall id.option_code = ID_OPTION_BY_NAME; 6131210Sminshall id.data_code = 'E'; 6231210Sminshall id.name_array = &namearray; 6331210Sminshall namearray.length = sizeof namearray; 6431210Sminshall if (api_query_session_id(&id)) { 6531210Sminshall api_perror("api_query_session_id"); 6631210Sminshall } else if (namearray.number_matching_session == 0) { 6731210Sminshall fprintf(stderr, "query_session_id: No matching sessions!\n"); 6831203Sminshall } else { 6931210Sminshall printf("Session short name 0x%x, type is ", 7031210Sminshall namearray.name_array_element.short_name); 7131210Sminshall printf("%s", session_type(namearray.name_array_element.type)); 7231210Sminshall printf(", session ID is: 0x%x\n", 7331210Sminshall namearray.name_array_element.session_id); 7431203Sminshall } 7531210Sminshall session_id = namearray.name_array_element.session_id; 7631210Sminshall 7731210Sminshall pa.rc = pa.function_id = 0; 7831210Sminshall pa.session_id = session_id; 7931210Sminshall if (api_query_session_parameters(&pa) == -1) { 8031210Sminshall api_perror("api_query_session_parameters"); 8131203Sminshall } else { 8231210Sminshall printf("Session type %s, ", session_type(pa.session_type)); 8331210Sminshall if (pa.session_characteristics&CHARACTERISTIC_EAB) { 8431210Sminshall printf(" has EAB, "); 8531210Sminshall } 8631210Sminshall if (pa.session_characteristics&CHARACTERISTIC_PSS) { 8731210Sminshall printf(" has PSS, "); 8831210Sminshall } 8931210Sminshall printf("%d rows, %d columns ", pa.rows, pa.columns); 9031210Sminshall if (pa.presentation_space) { 9131210Sminshall printf("presentation space at 0x%x:0x%x.\n", 9231210Sminshall FP_SEG(pa.presentation_space), FP_OFF(pa.presentation_space)); 9331210Sminshall } else { 9431210Sminshall printf("(no direct presentation space access).\n"); 9531210Sminshall } 9631203Sminshall } 9731210Sminshall 9831210Sminshall cu.rc = cu.function_id = 0; 9931210Sminshall cu.session_id = session_id; 10031210Sminshall if (api_query_session_cursor(&cu) == -1) { 10131210Sminshall api_perror("api_query_session_cursor"); 10231203Sminshall } else { 10331210Sminshall printf("cursor"); 10431210Sminshall if (cu.cursor_type&CURSOR_INHIBITED_AUTOSCROLL) { 10531210Sminshall printf(" inhibited autoscroll"); 10631210Sminshall } 10731210Sminshall if (cu.cursor_type&CURSOR_INHIBITED) { 10831210Sminshall printf(" inhibited"); 10931210Sminshall } 11031210Sminshall if (cu.cursor_type&CURSOR_BLINKING) { 11131210Sminshall printf(" blinking"); 11231210Sminshall } else { 11331210Sminshall printf(" not blinking"); 11431210Sminshall } 11531210Sminshall if (cu.cursor_type&CURSOR_BOX) { 11631210Sminshall printf(" box "); 11731210Sminshall } else { 11831210Sminshall printf(" not box "); 11931210Sminshall } 12031210Sminshall printf("at row %d, column %d.\n", cu.row_address, cu.column_address); 12131203Sminshall } 12231210Sminshall 12331210Sminshall re.rc = re.function_id = 0; 12431210Sminshall re.session_id = session_id; 12531210Sminshall re.oia_buffer = (char far *) &oia; 12631210Sminshall re.oia_group_number = API_OIA_ALL_GROUPS; 12731210Sminshall if (api_read_oia_group(&re) == -1) { 12831210Sminshall api_perror("api_read_oia_group"); 12931203Sminshall } else { 13031210Sminshall if (IsOiaReady3274(&oia)) { 13131210Sminshall printf("3274 ready, "); 13231210Sminshall } 13331210Sminshall if (IsOiaMyJob(&oia)) { 13431210Sminshall printf("my job, "); 13531210Sminshall } 13631210Sminshall if (IsOiaInsert(&oia)) { 13731210Sminshall printf("insert mode, "); 13831210Sminshall } 13931210Sminshall if (IsOiaSystemLocked(&oia)) { 14031210Sminshall printf("system locked, "); 14131210Sminshall } 14231210Sminshall if (IsOiaTWait(&oia)) { 14331210Sminshall printf("terminal wait, "); 14431210Sminshall } 14531210Sminshall printf("are some bits from the OIA.\n"); 14631203Sminshall } 14731210Sminshall 14831210Sminshall conn.rc = conn.function_id = 0; 14931210Sminshall conn.session_id = session_id; 15031210Sminshall conn.event_queue_id = conn.input_queue_id = 0; 15131210Sminshall conn.intercept_options = 0; 15231210Sminshall if (api_connect_to_keyboard(&conn) == -1) { 15331210Sminshall api_perror("api_connect_to_keyboard"); 15431210Sminshall } else { 15531210Sminshall if (conn.first_connection_identifier) { 15631210Sminshall printf("First keyboard connection.\n"); 15731210Sminshall } else { 15831210Sminshall printf("Not first keyboard connection.\n"); 15931210Sminshall } 16031210Sminshall } 16131210Sminshall 16231210Sminshall disable.rc = disable.function_id = 0; 16331210Sminshall disable.session_id = session_id; 16431210Sminshall disable.connectors_task_id = 0; 16531210Sminshall if (api_disable_input(&disable) == -1) { 16631210Sminshall api_perror("api_disable_input"); 16731210Sminshall } else { 16831210Sminshall printf("Disabled.\n"); 16931210Sminshall } 17031210Sminshall 17131210Sminshall wr.rc = wr.function_id = 0; 17231210Sminshall wr.session_id = session_id; 17331210Sminshall wr.connectors_task_id = 0; 17431210Sminshall wr.options = OPTION_SINGLE_KEYSTROKE; 17531210Sminshall wr.number_of_keys_sent = 0; 17631210Sminshall wr.keystroke_specifier.keystroke_entry.scancode = 0x3a; 17731210Sminshall wr.keystroke_specifier.keystroke_entry.shift_state = 0; 17831210Sminshall if (api_write_keystroke(&wr) == -1) { 17931210Sminshall api_perror("api_write_keystroke"); 18031210Sminshall } else { 18131210Sminshall if (wr.number_of_keys_sent != 1) { 18231210Sminshall fprintf(stderr, 18331210Sminshall "write_keystroke claims to have sent %d keystrokes.\n", 18431210Sminshall wr.number_of_keys_sent); 18531210Sminshall } else { 18631210Sminshall printf("Keystroke sent.\n"); 18731210Sminshall } 18831210Sminshall } 18931210Sminshall 19031210Sminshall enable.rc = enable.function_id = 0; 19131210Sminshall enable.session_id = session_id; 19231210Sminshall enable.connectors_task_id = 0; 19331210Sminshall if (api_enable_input(&enable) == -1) { 19431210Sminshall api_perror("api_enable"); 19531210Sminshall } else { 19631210Sminshall printf("Enabled.\n"); 19731210Sminshall } 19831210Sminshall 19931210Sminshall disc.rc = disc.function_id = 0; 20031210Sminshall disc.session_id = session_id; 20131210Sminshall disc.connectors_task_id = 0; 20231210Sminshall if (api_disconnect_from_keyboard(&disc) == -1) { 20331210Sminshall api_perror("api_disconnect_from_keyboard"); 20431210Sminshall } else { 20531210Sminshall printf("Disconnected from keyboard.\n"); 20631210Sminshall } 20731210Sminshall 208*31493Sminshall (void) api_finish(); 209*31493Sminshall 21031210Sminshall return 0; 21131203Sminshall } 212