xref: /csrg-svn/usr.bin/tn3270/ctlr/api.h (revision 31517)
131159Sminshall /*
231159Sminshall  * This file contains header information used by the PC API routines.
331159Sminshall  */
431159Sminshall 
531183Sminshall #if	!defined(MSDOS)
631183Sminshall #define far			/* For 'far *' checks */
731183Sminshall #endif	/* !defined(MSDOS) */
831183Sminshall 
931159Sminshall #define	API_INTERRUPT_NUMBER	0x7A		/* API Interrupt Number */
1031159Sminshall 
1131159Sminshall /*
1231159Sminshall  * Define the gate numbers.  These are returned via the Name Resolution
1331159Sminshall  * service.
1431159Sminshall  */
1531159Sminshall 
1631211Sminshall #define	GATE_SESSMGR	1234
1731211Sminshall #define	GATE_KEYBOARD	5678
1831211Sminshall #define	GATE_COPY	9101
1931211Sminshall #define	GATE_OIAM	1121
2031159Sminshall 
2131167Sminshall /*
2231167Sminshall  * The names which correspond to the above gate numbers.
2331167Sminshall  */
2431167Sminshall 
2531167Sminshall #define	NAME_SESSMGR	"SESSMGR "
2631161Sminshall #define	NAME_KEYBOARD	"KEYBOARD"
2731167Sminshall #define	NAME_COPY	"COPY    "
2831167Sminshall #define	NAME_OIAM	"OIAM    "
2931161Sminshall 
3031161Sminshall 
3131159Sminshall /*
3231159Sminshall  * Name Resolution is specified in AH.
3331159Sminshall  */
3431159Sminshall 
35*31517Sminshall #define	NAME_RESOLUTION		0x81
3631159Sminshall 
37*31517Sminshall #if	defined(unix)
3831159Sminshall /*
39*31517Sminshall  * In unix, we offer a service to allow the application to keep from
40*31517Sminshall  * having to poll us constantly.
41*31517Sminshall  */
42*31517Sminshall #define	PS_OR_OIA_MODIFIED	0x99
43*31517Sminshall 
44*31517Sminshall #endif	/* defined(unix) */
45*31517Sminshall 
46*31517Sminshall /*
4731159Sminshall  * Codes specified in AL for various services.
4831159Sminshall  */
4931159Sminshall 
5031167Sminshall #define	QUERY_SESSION_ID		0x01
5131211Sminshall #define	QUERY_SESSION_PARAMETERS	0x02
5231167Sminshall #define	QUERY_SESSION_CURSOR		0x0b
5331159Sminshall 
5431167Sminshall #define	CONNECT_TO_KEYBOARD		0x01
5531159Sminshall #define	DISCONNECT_FROM_KEYBOARD	0x02
5631167Sminshall #define	WRITE_KEYSTROKE			0x04
5731167Sminshall #define	DISABLE_INPUT			0x05
5831167Sminshall #define	ENABLE_INPUT			0x06
5931159Sminshall 
6031167Sminshall #define	COPY_STRING			0x01
6131159Sminshall 
6231167Sminshall #define	READ_OIA_GROUP			0x02
6331167Sminshall 
6431167Sminshall /*
6531167Sminshall  * For each service, we define the assoicated parameter blocks.
6631167Sminshall  */
6731167Sminshall 
6831167Sminshall /*
6931167Sminshall  * Supervisor Services
7031167Sminshall  */
7131167Sminshall 
7231167Sminshall typedef struct {
7331167Sminshall     char	gate_name[8];
7431167Sminshall } NameResolveParms;
7531167Sminshall 
7631167Sminshall 
7731167Sminshall /*
7831167Sminshall  * Session Information Services
7931167Sminshall  */
8031167Sminshall 
8131167Sminshall typedef struct {
8231167Sminshall     char
8331167Sminshall 	short_name,
8431167Sminshall 	type,
8531167Sminshall 	session_id,
8631167Sminshall 	reserved,
8731167Sminshall 	long_name[8];
8831167Sminshall } NameArrayElement;
8931167Sminshall 
9031167Sminshall typedef struct {
9131167Sminshall     char
9231167Sminshall 	length,
9331167Sminshall 	number_matching_session;
9431167Sminshall     NameArrayElement
9531167Sminshall 	name_array_element;		/* Variable number */
9631167Sminshall } NameArray;
9731167Sminshall 
9831167Sminshall typedef struct {
9931167Sminshall     char
10031167Sminshall 	rc,
10131167Sminshall 	function_id,
10231167Sminshall 	option_code,
10331167Sminshall 	data_code;
10431167Sminshall     NameArray far
10531167Sminshall 	*name_array;
10631167Sminshall     char
10731167Sminshall 	long_name[8];
10831167Sminshall } QuerySessionIdParms;
10931167Sminshall 
11031211Sminshall #define	ID_OPTION_BY_NAME	0x01		/* By short (or long) name */
11131211Sminshall #define	ID_OPTION_ALL		0x00		/* All (of specified type */
11231211Sminshall 
11331167Sminshall typedef struct {
11431167Sminshall     char
11531167Sminshall 	rc,
11631167Sminshall 	function_id,
11731167Sminshall 	session_id,
11831167Sminshall 	reserved,
11931167Sminshall 	session_type,
12031167Sminshall 	session_characteristics,
12131167Sminshall 	rows,
12231167Sminshall 	columns;
12331167Sminshall     char far
12431167Sminshall 	*presentation_space;
12531168Sminshall } QuerySessionParametersParms;
12631167Sminshall 
12731167Sminshall #define	TYPE_WSCTL		0x01		/* Work Station Control */
12831167Sminshall #define	TYPE_DFT		0x02		/* DFT Host Session */
12931167Sminshall #define	TYPE_CUT		0x03		/* CUT Host Session */
13031167Sminshall #define	TYPE_NOTEPAD		0x04		/* Notepad Session */
13131167Sminshall #define	TYPE_PC			0x05		/* Personal Computer Session */
13231167Sminshall 
13331167Sminshall #define	CHARACTERISTIC_EAB	0x80		/* Extended Attribute Buffer */
13431167Sminshall #define	CHARACTERISTIC_PSS	0x40		/* Program Symbols Supported */
13531167Sminshall 
13631167Sminshall typedef struct {
13731167Sminshall     char
13831167Sminshall 	rc,
13931167Sminshall 	function_id,
14031167Sminshall 	session_id,
14131167Sminshall 	cursor_type,
14231167Sminshall 	row_address,				/* from 0 */
14331167Sminshall 	column_address;				/* from 0 */
14431167Sminshall } QuerySessionCursorParms;
14531167Sminshall 
14631167Sminshall #define	CURSOR_INHIBITED_AUTOSCROLL	0x10
14731167Sminshall #define	CURSOR_INHIBITED		0x04
14831167Sminshall #define	CURSOR_BLINKING			0x02
14931167Sminshall #define	CURSOR_BOX			0x01
15031167Sminshall typedef struct {
15131167Sminshall     char
15231167Sminshall 	rc,
15331167Sminshall 	function_id,
15431167Sminshall 	session_id,
15531167Sminshall 	reserved;
15631167Sminshall     int
15731167Sminshall 	event_queue_id,
15831167Sminshall 	input_queue_id;
15931167Sminshall     char
16031167Sminshall 	intercept_options,
16131167Sminshall 	first_connection_identifier;
16231167Sminshall } ConnectToKeyboardParms;
16331167Sminshall 
16431167Sminshall typedef struct {
16531167Sminshall     char
16631167Sminshall 	rc,
16731167Sminshall 	function_id,
16831167Sminshall 	session_id,
16931167Sminshall 	reserved;
17031167Sminshall     int
17131168Sminshall 	connectors_task_id;
17231167Sminshall } DisconnectFromKeyboardParms;
17331167Sminshall 
17431167Sminshall typedef struct {
17531167Sminshall     char
17631167Sminshall 	scancode,
17731167Sminshall 	shift_state;
17831167Sminshall } KeystrokeEntry;
17931167Sminshall 
18031167Sminshall typedef struct {
18131167Sminshall     int
18231167Sminshall 	length;			/* Length (in bytes) of list */
18331167Sminshall     KeystrokeEntry keystrokes;	/* Variable size */
18431167Sminshall } KeystrokeList;
18531167Sminshall 
18631167Sminshall typedef struct {
18731167Sminshall     char
18831167Sminshall 	rc,
18931167Sminshall 	function_id,
19031167Sminshall 	session_id,
19131167Sminshall 	reserved;
19231167Sminshall     int
19331167Sminshall 	connectors_task_id;
19431167Sminshall     char
19531167Sminshall 	options,
19631167Sminshall 	number_of_keys_sent;
19731167Sminshall     union {
19831167Sminshall 	KeystrokeEntry
19931167Sminshall 	    keystroke_entry;
20031167Sminshall 	KeystrokeList far
20131167Sminshall 	    *keystroke_list;
20231167Sminshall     } keystroke_specifier;
20331167Sminshall } WriteKeystrokeParms;
20431167Sminshall 
20531198Sminshall #define	OPTION_SINGLE_KEYSTROKE		0x20
20631198Sminshall #define	OPTION_MULTIPLE_KEYSTROKES	0x30
20731198Sminshall 
20831167Sminshall typedef struct {
20931167Sminshall     char
21031167Sminshall 	rc,
21131167Sminshall 	function_id,
21231167Sminshall 	session_id,
21331167Sminshall 	reserved;
21431167Sminshall     int
21531167Sminshall 	connectors_task_id;
21631167Sminshall } DisableInputParms;
21731167Sminshall 
21831167Sminshall typedef DisableInputParms EnableInputParms;
21931167Sminshall 
22031167Sminshall typedef struct {
22131167Sminshall     char
22231167Sminshall 	session_id,
22331167Sminshall 	reserved;
22431167Sminshall     char far
22531167Sminshall 	*buffer;
22631167Sminshall     char
22731167Sminshall 	characteristics,
22831167Sminshall 	session_type;
22931167Sminshall     int
23031167Sminshall 	begin;			/* Offset within buffer */
23131167Sminshall } BufferDescriptor;
23231167Sminshall 
23331167Sminshall typedef struct {
23431167Sminshall     char
23531167Sminshall 	rc,
23631167Sminshall 	function_id;
23731167Sminshall     BufferDescriptor
23831167Sminshall 	source;
23931167Sminshall     int
24031167Sminshall 	source_end;		/* Offset within source buffer */
24131167Sminshall     BufferDescriptor
24231167Sminshall 	target;
24331167Sminshall     char
24431167Sminshall 	copy_mode,
24531167Sminshall 	reserved;
24631167Sminshall } CopyStringParms;
24731167Sminshall 
24831167Sminshall #define	COPY_MODE_7_COLOR		0x80	/* Else 4 color mode */
24931167Sminshall #define	COPY_MODE_FIELD_ATTRIBUTES	0x40	/* Else don't copy attributes */
25031167Sminshall 
25131167Sminshall typedef struct {
25231167Sminshall     char
25331167Sminshall 	rc,
25431167Sminshall 	function_id,
25531167Sminshall 	session_id,
25631167Sminshall 	reserved;
25731167Sminshall     char far
25831167Sminshall 	*oia_buffer;
25931167Sminshall     char
26031167Sminshall 	oia_group_number;
26131167Sminshall } ReadOiaGroupParms;
26231167Sminshall 
26331193Sminshall /* If the user wants all groups, we return API_OIA_BYTES_ALL_GROUPS bytes */
26431211Sminshall #define	API_OIA_ALL_GROUPS		'\377'
26531193Sminshall #define	API_OIA_BYTES_ALL_GROUPS	22	/* 22 bytes of data */
26631167Sminshall 
26731193Sminshall /* API_OIA_INPUT_INHIBITED is special.  It returns more than on byte of data */
26831193Sminshall #define	API_OIA_INPUT_INHIBITED		8
26931167Sminshall 
27031193Sminshall #define	API_OIA_LAST_LEGAL_GROUP	18	/* Highest legal number */
27131167Sminshall 
27231167Sminshall 
27331167Sminshall 
27431183Sminshall #if	defined(MSDOS)
27531183Sminshall 
27631183Sminshall #if	!defined(FP_SEG)
27731183Sminshall #include <dos.h>
27831183Sminshall #endif	/* !defined(FP_SEG) */
27931183Sminshall 
28031183Sminshall #else	/* defined(MSDOS) */
28131183Sminshall 
28231183Sminshall /*
28331183Sminshall  * These definitions are here to provide the descriptions of
28431183Sminshall  * some registers which are, normally, defined in <dos.h> on
28531183Sminshall  * a dos system.
28631183Sminshall  */
28731183Sminshall 
28831193Sminshall #define	FP_SEG(x)	(x)
28931193Sminshall #define	FP_OFF(y)	(y)
29031183Sminshall 
29131469Sminshall /*
29231469Sminshall  * Now, it is somewhat of a pain, but we need to keep
29331469Sminshall  * 8086 conventions about which of the "highlow"'s map
29431469Sminshall  * into which of the "words".
29531469Sminshall  */
29631469Sminshall 
29731183Sminshall struct highlow {
29831469Sminshall     unsigned char
29931504Sminshall #if	defined(vax)
30031469Sminshall 	al,
30131183Sminshall 	ah,
30231469Sminshall 	bl,
30331183Sminshall 	bh,
30431469Sminshall 	cl,
30531183Sminshall 	ch,
30631469Sminshall 	dl,
30731469Sminshall 	dh;
30831504Sminshall #endif	/* defined(vax) */
30931504Sminshall #if	defined(sun) || defined(tahoe)
31031504Sminshall 	ah,
31131504Sminshall 	al,
31231504Sminshall 	bh,
31331504Sminshall 	bl,
31431504Sminshall 	ch,
31531504Sminshall 	cl,
31631504Sminshall 	dh,
31731504Sminshall 	dl;
31831504Sminshall #endif	/* defined(sun) || defined(tahoe) */
31931183Sminshall };
32031183Sminshall 
32131183Sminshall struct words {
32231469Sminshall     unsigned short
32331183Sminshall 	ax,
32431183Sminshall 	bx,
32531183Sminshall 	cx,
32631469Sminshall 	dx;
32731469Sminshall     unsigned int
32831183Sminshall 	si,
32931183Sminshall 	di;
33031183Sminshall };
33131183Sminshall 
33231183Sminshall union REGS {
33331183Sminshall     struct highlow h;
33431183Sminshall     struct words x;
33531183Sminshall };
33631183Sminshall 
33731183Sminshall struct SREGS {
33831469Sminshall     unsigned int
33931183Sminshall 	cs,
34031183Sminshall 	ds,
34131183Sminshall 	es,
34231183Sminshall 	ss;
34331183Sminshall };
34431183Sminshall #endif	/* defined(MSDOS) (else section) */
345