131205Sminshall #include <stdio.h> 231203Sminshall 331210Sminshall #include "../api/api.h" 431210Sminshall #include "apilib.h" 531210Sminshall #include "../ctlr/oia.h" 631210Sminshall 7*31501Sminshall static char mybuffer[2000]; 8*31501Sminshall 931210Sminshall api_perror(string) 1031210Sminshall char *string; 1131210Sminshall { 1231210Sminshall fprintf(stderr, "Error: [0x%x/0x%x:0x%x/0x%x] from %s.\n", 1331210Sminshall api_sup_fcn_id, api_sup_errno, 1431210Sminshall api_fcn_fcn_id, api_fcn_errno, string); 1531210Sminshall } 1631210Sminshall 1731210Sminshall 1831210Sminshall char * 1931210Sminshall session_type(type) 2031210Sminshall int type; 2131210Sminshall { 2231210Sminshall switch (type) { 2331210Sminshall case TYPE_WSCTL: 2431210Sminshall return "work station control"; 2531210Sminshall case TYPE_DFT: 2631210Sminshall return "distributed function terminal"; 2731210Sminshall case TYPE_CUT: 2831210Sminshall return "control unit terminal"; 2931210Sminshall case TYPE_NOTEPAD: 3031210Sminshall return "notepad"; 3131210Sminshall case TYPE_PC: 3231210Sminshall return "personal computer"; 3331210Sminshall default: 3431210Sminshall return "(UNKNOWN)"; 3531210Sminshall } 3631210Sminshall } 3731210Sminshall 3831210Sminshall 3931203Sminshall main() 4031203Sminshall { 41*31501Sminshall register int i; 4231210Sminshall int session_id; 4331210Sminshall OIA oia; 4431210Sminshall QuerySessionIdParms id; 4531210Sminshall QuerySessionParametersParms pa; 4631210Sminshall QuerySessionCursorParms cu; 4731210Sminshall ConnectToKeyboardParms conn; 4831210Sminshall DisconnectFromKeyboardParms disc; 4931210Sminshall WriteKeystrokeParms wr; 5031210Sminshall DisableInputParms disable; 5131210Sminshall EnableInputParms enable; 5231210Sminshall CopyStringParms copy; 5331210Sminshall ReadOiaGroupParms re; 5431210Sminshall NameArray namearray; 5531203Sminshall 5631205Sminshall if (api_init() == 0) { 5731205Sminshall fprintf(stderr, "API function not available.\n"); 5831205Sminshall return 1; 5931205Sminshall } 6031205Sminshall 6131210Sminshall id.rc = 0; 6231210Sminshall id.function_id = 0; 6331210Sminshall id.option_code = ID_OPTION_BY_NAME; 6431210Sminshall id.data_code = 'E'; 6531210Sminshall id.name_array = &namearray; 6631210Sminshall namearray.length = sizeof namearray; 6731210Sminshall if (api_query_session_id(&id)) { 6831210Sminshall api_perror("api_query_session_id"); 6931210Sminshall } else if (namearray.number_matching_session == 0) { 7031210Sminshall fprintf(stderr, "query_session_id: No matching sessions!\n"); 7131203Sminshall } else { 7231210Sminshall printf("Session short name 0x%x, type is ", 7331210Sminshall namearray.name_array_element.short_name); 7431210Sminshall printf("%s", session_type(namearray.name_array_element.type)); 7531210Sminshall printf(", session ID is: 0x%x\n", 7631210Sminshall namearray.name_array_element.session_id); 7731203Sminshall } 7831210Sminshall session_id = namearray.name_array_element.session_id; 7931210Sminshall 8031210Sminshall pa.rc = pa.function_id = 0; 8131210Sminshall pa.session_id = session_id; 8231210Sminshall if (api_query_session_parameters(&pa) == -1) { 8331210Sminshall api_perror("api_query_session_parameters"); 8431203Sminshall } else { 8531210Sminshall printf("Session type %s, ", session_type(pa.session_type)); 8631210Sminshall if (pa.session_characteristics&CHARACTERISTIC_EAB) { 8731210Sminshall printf(" has EAB, "); 8831210Sminshall } 8931210Sminshall if (pa.session_characteristics&CHARACTERISTIC_PSS) { 9031210Sminshall printf(" has PSS, "); 9131210Sminshall } 9231210Sminshall printf("%d rows, %d columns ", pa.rows, pa.columns); 9331210Sminshall if (pa.presentation_space) { 9431210Sminshall printf("presentation space at 0x%x:0x%x.\n", 9531210Sminshall FP_SEG(pa.presentation_space), FP_OFF(pa.presentation_space)); 9631210Sminshall } else { 9731210Sminshall printf("(no direct presentation space access).\n"); 9831210Sminshall } 9931203Sminshall } 10031210Sminshall 10131210Sminshall cu.rc = cu.function_id = 0; 10231210Sminshall cu.session_id = session_id; 10331210Sminshall if (api_query_session_cursor(&cu) == -1) { 10431210Sminshall api_perror("api_query_session_cursor"); 10531203Sminshall } else { 10631210Sminshall printf("cursor"); 10731210Sminshall if (cu.cursor_type&CURSOR_INHIBITED_AUTOSCROLL) { 10831210Sminshall printf(" inhibited autoscroll"); 10931210Sminshall } 11031210Sminshall if (cu.cursor_type&CURSOR_INHIBITED) { 11131210Sminshall printf(" inhibited"); 11231210Sminshall } 11331210Sminshall if (cu.cursor_type&CURSOR_BLINKING) { 11431210Sminshall printf(" blinking"); 11531210Sminshall } else { 11631210Sminshall printf(" not blinking"); 11731210Sminshall } 11831210Sminshall if (cu.cursor_type&CURSOR_BOX) { 11931210Sminshall printf(" box "); 12031210Sminshall } else { 12131210Sminshall printf(" not box "); 12231210Sminshall } 12331210Sminshall printf("at row %d, column %d.\n", cu.row_address, cu.column_address); 12431203Sminshall } 12531210Sminshall 12631210Sminshall re.rc = re.function_id = 0; 12731210Sminshall re.session_id = session_id; 12831210Sminshall re.oia_buffer = (char far *) &oia; 12931210Sminshall re.oia_group_number = API_OIA_ALL_GROUPS; 13031210Sminshall if (api_read_oia_group(&re) == -1) { 13131210Sminshall api_perror("api_read_oia_group"); 13231203Sminshall } else { 13331210Sminshall if (IsOiaReady3274(&oia)) { 13431210Sminshall printf("3274 ready, "); 13531210Sminshall } 13631210Sminshall if (IsOiaMyJob(&oia)) { 13731210Sminshall printf("my job, "); 13831210Sminshall } 13931210Sminshall if (IsOiaInsert(&oia)) { 14031210Sminshall printf("insert mode, "); 14131210Sminshall } 14231210Sminshall if (IsOiaSystemLocked(&oia)) { 14331210Sminshall printf("system locked, "); 14431210Sminshall } 14531210Sminshall if (IsOiaTWait(&oia)) { 14631210Sminshall printf("terminal wait, "); 14731210Sminshall } 14831210Sminshall printf("are some bits from the OIA.\n"); 14931203Sminshall } 15031210Sminshall 15131210Sminshall conn.rc = conn.function_id = 0; 15231210Sminshall conn.session_id = session_id; 15331210Sminshall conn.event_queue_id = conn.input_queue_id = 0; 15431210Sminshall conn.intercept_options = 0; 15531210Sminshall if (api_connect_to_keyboard(&conn) == -1) { 15631210Sminshall api_perror("api_connect_to_keyboard"); 15731210Sminshall } else { 15831210Sminshall if (conn.first_connection_identifier) { 15931210Sminshall printf("First keyboard connection.\n"); 16031210Sminshall } else { 16131210Sminshall printf("Not first keyboard connection.\n"); 16231210Sminshall } 16331210Sminshall } 16431210Sminshall 16531210Sminshall disable.rc = disable.function_id = 0; 16631210Sminshall disable.session_id = session_id; 16731210Sminshall disable.connectors_task_id = 0; 16831210Sminshall if (api_disable_input(&disable) == -1) { 16931210Sminshall api_perror("api_disable_input"); 17031210Sminshall } else { 17131210Sminshall printf("Disabled.\n"); 17231210Sminshall } 17331210Sminshall 17431210Sminshall wr.rc = wr.function_id = 0; 17531210Sminshall wr.session_id = session_id; 17631210Sminshall wr.connectors_task_id = 0; 17731210Sminshall wr.options = OPTION_SINGLE_KEYSTROKE; 17831210Sminshall wr.number_of_keys_sent = 0; 17931210Sminshall wr.keystroke_specifier.keystroke_entry.scancode = 0x3a; 18031210Sminshall wr.keystroke_specifier.keystroke_entry.shift_state = 0; 18131210Sminshall if (api_write_keystroke(&wr) == -1) { 18231210Sminshall api_perror("api_write_keystroke"); 18331210Sminshall } else { 18431210Sminshall if (wr.number_of_keys_sent != 1) { 18531210Sminshall fprintf(stderr, 18631210Sminshall "write_keystroke claims to have sent %d keystrokes.\n", 18731210Sminshall wr.number_of_keys_sent); 18831210Sminshall } else { 18931210Sminshall printf("Keystroke sent.\n"); 19031210Sminshall } 19131210Sminshall } 19231210Sminshall 19331210Sminshall enable.rc = enable.function_id = 0; 19431210Sminshall enable.session_id = session_id; 19531210Sminshall enable.connectors_task_id = 0; 19631210Sminshall if (api_enable_input(&enable) == -1) { 19731210Sminshall api_perror("api_enable"); 19831210Sminshall } else { 19931210Sminshall printf("Enabled.\n"); 20031210Sminshall } 20131210Sminshall 20231210Sminshall disc.rc = disc.function_id = 0; 20331210Sminshall disc.session_id = session_id; 20431210Sminshall disc.connectors_task_id = 0; 20531210Sminshall if (api_disconnect_from_keyboard(&disc) == -1) { 20631210Sminshall api_perror("api_disconnect_from_keyboard"); 20731210Sminshall } else { 20831210Sminshall printf("Disconnected from keyboard.\n"); 20931210Sminshall } 210*31501Sminshall /* Time copy services */ 21131210Sminshall 212*31501Sminshall for (i = 0; i < 100; i++) { 213*31501Sminshall copy.copy_mode = 0; 214*31501Sminshall copy.rc = copy.function_id = 0; 215*31501Sminshall copy.source.session_id = session_id; 216*31501Sminshall copy.source.characteristics = 0; 217*31501Sminshall copy.source.session_type = TYPE_DFT; 218*31501Sminshall copy.source.begin = 0; 219*31501Sminshall 220*31501Sminshall copy.source_end = 1920; 221*31501Sminshall 222*31501Sminshall copy.target.session_id = 0; 223*31501Sminshall copy.target.buffer = mybuffer; 224*31501Sminshall copy.target.characteristics = 0; 225*31501Sminshall copy.target.session_type = TYPE_DFT; 226*31501Sminshall 227*31501Sminshall if (api_copy_string(©) == -1) { 228*31501Sminshall api_perror("api_copy_string"); 229*31501Sminshall break; 230*31501Sminshall } 231*31501Sminshall } 232*31501Sminshall printf("Copied data out.\n"); 233*31501Sminshall 23431493Sminshall (void) api_finish(); 23531493Sminshall 23631210Sminshall return 0; 23731203Sminshall } 238