1*33820Sbostic /* 2*33820Sbostic * Copyright (c) 1988 Regents of the University of California. 3*33820Sbostic * All rights reserved. 4*33820Sbostic * 5*33820Sbostic * Redistribution and use in source and binary forms are permitted 6*33820Sbostic * provided that this notice is preserved and that due credit is given 7*33820Sbostic * to the University of California at Berkeley. The name of the University 8*33820Sbostic * may not be used to endorse or promote products derived from this 9*33820Sbostic * software without specific prior written permission. This software 10*33820Sbostic * is provided ``as is'' without express or implied warranty. 11*33820Sbostic */ 12*33820Sbostic 13*33820Sbostic #ifndef lint 14*33820Sbostic char copyright[] = 15*33820Sbostic "@(#) Copyright (c) 1988 Regents of the University of California.\n\ 16*33820Sbostic All rights reserved.\n"; 17*33820Sbostic #endif /* not lint */ 18*33820Sbostic 19*33820Sbostic #ifndef lint 20*33820Sbostic static char sccsid[] = "@(#)test.c 1.6 (Berkeley) 03/28/88"; 21*33820Sbostic #endif /* not lint */ 22*33820Sbostic 2331205Sminshall #include <stdio.h> 2431203Sminshall 2531210Sminshall #include "../api/api.h" 2631210Sminshall #include "apilib.h" 2731210Sminshall #include "../ctlr/oia.h" 2831210Sminshall 2931501Sminshall static char mybuffer[2000]; 3031501Sminshall 3131210Sminshall api_perror(string) 3231210Sminshall char *string; 3331210Sminshall { 3431210Sminshall fprintf(stderr, "Error: [0x%x/0x%x:0x%x/0x%x] from %s.\n", 3531210Sminshall api_sup_fcn_id, api_sup_errno, 3631210Sminshall api_fcn_fcn_id, api_fcn_errno, string); 3731210Sminshall } 3831210Sminshall 3931210Sminshall 4031210Sminshall char * 4131210Sminshall session_type(type) 4231210Sminshall int type; 4331210Sminshall { 4431210Sminshall switch (type) { 4531210Sminshall case TYPE_WSCTL: 4631210Sminshall return "work station control"; 4731210Sminshall case TYPE_DFT: 4831210Sminshall return "distributed function terminal"; 4931210Sminshall case TYPE_CUT: 5031210Sminshall return "control unit terminal"; 5131210Sminshall case TYPE_NOTEPAD: 5231210Sminshall return "notepad"; 5331210Sminshall case TYPE_PC: 5431210Sminshall return "personal computer"; 5531210Sminshall default: 5631210Sminshall return "(UNKNOWN)"; 5731210Sminshall } 5831210Sminshall } 5931210Sminshall 6031210Sminshall 6131203Sminshall main() 6231203Sminshall { 6331501Sminshall register int i; 6431210Sminshall int session_id; 6531210Sminshall OIA oia; 6631210Sminshall QuerySessionIdParms id; 6731210Sminshall QuerySessionParametersParms pa; 6831210Sminshall QuerySessionCursorParms cu; 6931210Sminshall ConnectToKeyboardParms conn; 7031210Sminshall DisconnectFromKeyboardParms disc; 7131210Sminshall WriteKeystrokeParms wr; 7231210Sminshall DisableInputParms disable; 7331210Sminshall EnableInputParms enable; 7431210Sminshall CopyStringParms copy; 7531210Sminshall ReadOiaGroupParms re; 7631210Sminshall NameArray namearray; 7731203Sminshall 7831205Sminshall if (api_init() == 0) { 7931205Sminshall fprintf(stderr, "API function not available.\n"); 8031205Sminshall return 1; 8131205Sminshall } 8231205Sminshall 8331210Sminshall id.rc = 0; 8431210Sminshall id.function_id = 0; 8531210Sminshall id.option_code = ID_OPTION_BY_NAME; 8631210Sminshall id.data_code = 'E'; 8731210Sminshall id.name_array = &namearray; 8831210Sminshall namearray.length = sizeof namearray; 8931210Sminshall if (api_query_session_id(&id)) { 9031210Sminshall api_perror("api_query_session_id"); 9131210Sminshall } else if (namearray.number_matching_session == 0) { 9231210Sminshall fprintf(stderr, "query_session_id: No matching sessions!\n"); 9331203Sminshall } else { 9431210Sminshall printf("Session short name 0x%x, type is ", 9531210Sminshall namearray.name_array_element.short_name); 9631210Sminshall printf("%s", session_type(namearray.name_array_element.type)); 9731210Sminshall printf(", session ID is: 0x%x\n", 9831210Sminshall namearray.name_array_element.session_id); 9931203Sminshall } 10031210Sminshall session_id = namearray.name_array_element.session_id; 10131210Sminshall 10231210Sminshall pa.rc = pa.function_id = 0; 10331210Sminshall pa.session_id = session_id; 10431210Sminshall if (api_query_session_parameters(&pa) == -1) { 10531210Sminshall api_perror("api_query_session_parameters"); 10631203Sminshall } else { 10731210Sminshall printf("Session type %s, ", session_type(pa.session_type)); 10831210Sminshall if (pa.session_characteristics&CHARACTERISTIC_EAB) { 10931210Sminshall printf(" has EAB, "); 11031210Sminshall } 11131210Sminshall if (pa.session_characteristics&CHARACTERISTIC_PSS) { 11231210Sminshall printf(" has PSS, "); 11331210Sminshall } 11431210Sminshall printf("%d rows, %d columns ", pa.rows, pa.columns); 11531210Sminshall if (pa.presentation_space) { 11631210Sminshall printf("presentation space at 0x%x:0x%x.\n", 11731210Sminshall FP_SEG(pa.presentation_space), FP_OFF(pa.presentation_space)); 11831210Sminshall } else { 11931210Sminshall printf("(no direct presentation space access).\n"); 12031210Sminshall } 12131203Sminshall } 12231210Sminshall 12331210Sminshall cu.rc = cu.function_id = 0; 12431210Sminshall cu.session_id = session_id; 12531210Sminshall if (api_query_session_cursor(&cu) == -1) { 12631210Sminshall api_perror("api_query_session_cursor"); 12731203Sminshall } else { 12831210Sminshall printf("cursor"); 12931210Sminshall if (cu.cursor_type&CURSOR_INHIBITED_AUTOSCROLL) { 13031210Sminshall printf(" inhibited autoscroll"); 13131210Sminshall } 13231210Sminshall if (cu.cursor_type&CURSOR_INHIBITED) { 13331210Sminshall printf(" inhibited"); 13431210Sminshall } 13531210Sminshall if (cu.cursor_type&CURSOR_BLINKING) { 13631210Sminshall printf(" blinking"); 13731210Sminshall } else { 13831210Sminshall printf(" not blinking"); 13931210Sminshall } 14031210Sminshall if (cu.cursor_type&CURSOR_BOX) { 14131210Sminshall printf(" box "); 14231210Sminshall } else { 14331210Sminshall printf(" not box "); 14431210Sminshall } 14531210Sminshall printf("at row %d, column %d.\n", cu.row_address, cu.column_address); 14631203Sminshall } 14731210Sminshall 14831210Sminshall re.rc = re.function_id = 0; 14931210Sminshall re.session_id = session_id; 15031210Sminshall re.oia_buffer = (char far *) &oia; 15131210Sminshall re.oia_group_number = API_OIA_ALL_GROUPS; 15231210Sminshall if (api_read_oia_group(&re) == -1) { 15331210Sminshall api_perror("api_read_oia_group"); 15431203Sminshall } else { 15531210Sminshall if (IsOiaReady3274(&oia)) { 15631210Sminshall printf("3274 ready, "); 15731210Sminshall } 15831210Sminshall if (IsOiaMyJob(&oia)) { 15931210Sminshall printf("my job, "); 16031210Sminshall } 16131210Sminshall if (IsOiaInsert(&oia)) { 16231210Sminshall printf("insert mode, "); 16331210Sminshall } 16431210Sminshall if (IsOiaSystemLocked(&oia)) { 16531210Sminshall printf("system locked, "); 16631210Sminshall } 16731210Sminshall if (IsOiaTWait(&oia)) { 16831210Sminshall printf("terminal wait, "); 16931210Sminshall } 17031210Sminshall printf("are some bits from the OIA.\n"); 17131203Sminshall } 17231210Sminshall 17331210Sminshall conn.rc = conn.function_id = 0; 17431210Sminshall conn.session_id = session_id; 17531210Sminshall conn.event_queue_id = conn.input_queue_id = 0; 17631210Sminshall conn.intercept_options = 0; 17731210Sminshall if (api_connect_to_keyboard(&conn) == -1) { 17831210Sminshall api_perror("api_connect_to_keyboard"); 17931210Sminshall } else { 18031210Sminshall if (conn.first_connection_identifier) { 18131210Sminshall printf("First keyboard connection.\n"); 18231210Sminshall } else { 18331210Sminshall printf("Not first keyboard connection.\n"); 18431210Sminshall } 18531210Sminshall } 18631210Sminshall 18731210Sminshall disable.rc = disable.function_id = 0; 18831210Sminshall disable.session_id = session_id; 18931210Sminshall disable.connectors_task_id = 0; 19031210Sminshall if (api_disable_input(&disable) == -1) { 19131210Sminshall api_perror("api_disable_input"); 19231210Sminshall } else { 19331210Sminshall printf("Disabled.\n"); 19431210Sminshall } 19531210Sminshall 19631210Sminshall wr.rc = wr.function_id = 0; 19731210Sminshall wr.session_id = session_id; 19831210Sminshall wr.connectors_task_id = 0; 19931210Sminshall wr.options = OPTION_SINGLE_KEYSTROKE; 20031210Sminshall wr.number_of_keys_sent = 0; 20131210Sminshall wr.keystroke_specifier.keystroke_entry.scancode = 0x3a; 20231210Sminshall wr.keystroke_specifier.keystroke_entry.shift_state = 0; 20331210Sminshall if (api_write_keystroke(&wr) == -1) { 20431210Sminshall api_perror("api_write_keystroke"); 20531210Sminshall } else { 20631210Sminshall if (wr.number_of_keys_sent != 1) { 20731210Sminshall fprintf(stderr, 20831210Sminshall "write_keystroke claims to have sent %d keystrokes.\n", 20931210Sminshall wr.number_of_keys_sent); 21031210Sminshall } else { 21131210Sminshall printf("Keystroke sent.\n"); 21231210Sminshall } 21331210Sminshall } 21431210Sminshall 21531210Sminshall enable.rc = enable.function_id = 0; 21631210Sminshall enable.session_id = session_id; 21731210Sminshall enable.connectors_task_id = 0; 21831210Sminshall if (api_enable_input(&enable) == -1) { 21931210Sminshall api_perror("api_enable"); 22031210Sminshall } else { 22131210Sminshall printf("Enabled.\n"); 22231210Sminshall } 22331210Sminshall 22431210Sminshall disc.rc = disc.function_id = 0; 22531210Sminshall disc.session_id = session_id; 22631210Sminshall disc.connectors_task_id = 0; 22731210Sminshall if (api_disconnect_from_keyboard(&disc) == -1) { 22831210Sminshall api_perror("api_disconnect_from_keyboard"); 22931210Sminshall } else { 23031210Sminshall printf("Disconnected from keyboard.\n"); 23131210Sminshall } 23231501Sminshall /* Time copy services */ 23331210Sminshall 23431501Sminshall for (i = 0; i < 100; i++) { 23531501Sminshall copy.copy_mode = 0; 23631501Sminshall copy.rc = copy.function_id = 0; 23731501Sminshall copy.source.session_id = session_id; 23831501Sminshall copy.source.characteristics = 0; 23931501Sminshall copy.source.session_type = TYPE_DFT; 24031501Sminshall copy.source.begin = 0; 24131501Sminshall 24231501Sminshall copy.source_end = 1920; 24331501Sminshall 24431501Sminshall copy.target.session_id = 0; 24531501Sminshall copy.target.buffer = mybuffer; 24631501Sminshall copy.target.characteristics = 0; 24731501Sminshall copy.target.session_type = TYPE_DFT; 24831501Sminshall 24931501Sminshall if (api_copy_string(©) == -1) { 25031501Sminshall api_perror("api_copy_string"); 25131501Sminshall break; 25231501Sminshall } 25331501Sminshall } 25431501Sminshall printf("Copied data out.\n"); 25531501Sminshall 25631493Sminshall (void) api_finish(); 25731493Sminshall 25831210Sminshall return 0; 25931203Sminshall } 260