133820Sbostic /*
233820Sbostic * Copyright (c) 1988 Regents of the University of California.
333820Sbostic * All rights reserved.
433820Sbostic *
533820Sbostic * Redistribution and use in source and binary forms are permitted
633820Sbostic * provided that this notice is preserved and that due credit is given
733820Sbostic * to the University of California at Berkeley. The name of the University
833820Sbostic * may not be used to endorse or promote products derived from this
933820Sbostic * software without specific prior written permission. This software
1033820Sbostic * is provided ``as is'' without express or implied warranty.
1133820Sbostic */
1233820Sbostic
1333820Sbostic #ifndef lint
1433820Sbostic char copyright[] =
1533820Sbostic "@(#) Copyright (c) 1988 Regents of the University of California.\n\
1633820Sbostic All rights reserved.\n";
1733820Sbostic #endif /* not lint */
1833820Sbostic
1933820Sbostic #ifndef lint
20*36284Sminshall static char sccsid[] = "@(#)test.c 4.1 (Berkeley) 12/04/88";
2133820Sbostic #endif /* not lint */
2233820Sbostic
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
api_perror(string)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 *
session_type(type)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
main()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