xref: /csrg-svn/usr.bin/tn3270/api/test.c (revision 31501)
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(&copy) == -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