xref: /csrg-svn/usr.bin/tn3270/ctlr/api.h (revision 31892)
131159Sminshall /*
231159Sminshall  * This file contains header information used by the PC API routines.
3*31892Sminshall  *
4*31892Sminshall  * @(#)api.h	1.13 (Berkeley) 07/17/87
531159Sminshall  */
631159Sminshall 
731183Sminshall #if	!defined(MSDOS)
831183Sminshall #define far			/* For 'far *' checks */
931183Sminshall #endif	/* !defined(MSDOS) */
1031183Sminshall 
1131159Sminshall #define	API_INTERRUPT_NUMBER	0x7A		/* API Interrupt Number */
1231159Sminshall 
1331159Sminshall /*
1431159Sminshall  * Define the gate numbers.  These are returned via the Name Resolution
1531159Sminshall  * service.
1631159Sminshall  */
1731159Sminshall 
1831211Sminshall #define	GATE_SESSMGR	1234
1931211Sminshall #define	GATE_KEYBOARD	5678
2031211Sminshall #define	GATE_COPY	9101
2131211Sminshall #define	GATE_OIAM	1121
2231159Sminshall 
2331167Sminshall /*
2431167Sminshall  * The names which correspond to the above gate numbers.
2531167Sminshall  */
2631167Sminshall 
2731167Sminshall #define	NAME_SESSMGR	"SESSMGR "
2831161Sminshall #define	NAME_KEYBOARD	"KEYBOARD"
2931167Sminshall #define	NAME_COPY	"COPY    "
3031167Sminshall #define	NAME_OIAM	"OIAM    "
3131161Sminshall 
3231161Sminshall 
3331159Sminshall /*
3431159Sminshall  * Name Resolution is specified in AH.
3531159Sminshall  */
3631159Sminshall 
3731517Sminshall #define	NAME_RESOLUTION		0x81
3831159Sminshall 
3931517Sminshall #if	defined(unix)
4031159Sminshall /*
4131517Sminshall  * In unix, we offer a service to allow the application to keep from
4231517Sminshall  * having to poll us constantly.
4331517Sminshall  */
4431517Sminshall #define	PS_OR_OIA_MODIFIED	0x99
4531517Sminshall 
4631517Sminshall #endif	/* defined(unix) */
4731517Sminshall 
4831517Sminshall /*
4931159Sminshall  * Codes specified in AL for various services.
5031159Sminshall  */
5131159Sminshall 
5231167Sminshall #define	QUERY_SESSION_ID		0x01
5331211Sminshall #define	QUERY_SESSION_PARAMETERS	0x02
5431167Sminshall #define	QUERY_SESSION_CURSOR		0x0b
5531159Sminshall 
5631167Sminshall #define	CONNECT_TO_KEYBOARD		0x01
5731159Sminshall #define	DISCONNECT_FROM_KEYBOARD	0x02
5831167Sminshall #define	WRITE_KEYSTROKE			0x04
5931167Sminshall #define	DISABLE_INPUT			0x05
6031167Sminshall #define	ENABLE_INPUT			0x06
6131159Sminshall 
6231167Sminshall #define	COPY_STRING			0x01
6331159Sminshall 
6431167Sminshall #define	READ_OIA_GROUP			0x02
6531167Sminshall 
6631167Sminshall /*
6731167Sminshall  * For each service, we define the assoicated parameter blocks.
6831167Sminshall  */
6931167Sminshall 
7031167Sminshall /*
7131167Sminshall  * Supervisor Services
7231167Sminshall  */
7331167Sminshall 
7431167Sminshall typedef struct {
7531167Sminshall     char	gate_name[8];
7631167Sminshall } NameResolveParms;
7731167Sminshall 
7831167Sminshall 
7931167Sminshall /*
8031167Sminshall  * Session Information Services
8131167Sminshall  */
8231167Sminshall 
8331167Sminshall typedef struct {
8431167Sminshall     char
8531167Sminshall 	short_name,
8631167Sminshall 	type,
8731167Sminshall 	session_id,
8831167Sminshall 	reserved,
8931167Sminshall 	long_name[8];
9031167Sminshall } NameArrayElement;
9131167Sminshall 
9231167Sminshall typedef struct {
9331802Sminshall     unsigned char
9431167Sminshall 	length,
9531167Sminshall 	number_matching_session;
9631167Sminshall     NameArrayElement
9731167Sminshall 	name_array_element;		/* Variable number */
9831167Sminshall } NameArray;
9931167Sminshall 
10031167Sminshall typedef struct {
10131167Sminshall     char
10231167Sminshall 	rc,
10331167Sminshall 	function_id,
10431167Sminshall 	option_code,
10531167Sminshall 	data_code;
10631167Sminshall     NameArray far
10731167Sminshall 	*name_array;
10831167Sminshall     char
10931167Sminshall 	long_name[8];
11031167Sminshall } QuerySessionIdParms;
11131167Sminshall 
11231211Sminshall #define	ID_OPTION_BY_NAME	0x01		/* By short (or long) name */
11331211Sminshall #define	ID_OPTION_ALL		0x00		/* All (of specified type */
11431211Sminshall 
11531167Sminshall typedef struct {
11631167Sminshall     char
11731167Sminshall 	rc,
11831167Sminshall 	function_id,
11931167Sminshall 	session_id,
12031167Sminshall 	reserved,
12131167Sminshall 	session_type,
12231167Sminshall 	session_characteristics,
12331167Sminshall 	rows,
12431167Sminshall 	columns;
12531167Sminshall     char far
12631167Sminshall 	*presentation_space;
12731168Sminshall } QuerySessionParametersParms;
12831167Sminshall 
12931167Sminshall #define	TYPE_WSCTL		0x01		/* Work Station Control */
13031167Sminshall #define	TYPE_DFT		0x02		/* DFT Host Session */
13131167Sminshall #define	TYPE_CUT		0x03		/* CUT Host Session */
13231167Sminshall #define	TYPE_NOTEPAD		0x04		/* Notepad Session */
13331167Sminshall #define	TYPE_PC			0x05		/* Personal Computer Session */
13431167Sminshall 
13531167Sminshall #define	CHARACTERISTIC_EAB	0x80		/* Extended Attribute Buffer */
13631167Sminshall #define	CHARACTERISTIC_PSS	0x40		/* Program Symbols Supported */
13731167Sminshall 
13831167Sminshall typedef struct {
13931167Sminshall     char
14031167Sminshall 	rc,
14131167Sminshall 	function_id,
14231167Sminshall 	session_id,
14331167Sminshall 	cursor_type,
14431167Sminshall 	row_address,				/* from 0 */
14531167Sminshall 	column_address;				/* from 0 */
14631167Sminshall } QuerySessionCursorParms;
14731167Sminshall 
14831167Sminshall #define	CURSOR_INHIBITED_AUTOSCROLL	0x10
14931167Sminshall #define	CURSOR_INHIBITED		0x04
15031167Sminshall #define	CURSOR_BLINKING			0x02
15131167Sminshall #define	CURSOR_BOX			0x01
15231167Sminshall typedef struct {
15331167Sminshall     char
15431167Sminshall 	rc,
15531167Sminshall 	function_id,
15631167Sminshall 	session_id,
15731167Sminshall 	reserved;
15831167Sminshall     int
15931167Sminshall 	event_queue_id,
16031167Sminshall 	input_queue_id;
16131167Sminshall     char
16231167Sminshall 	intercept_options,
16331167Sminshall 	first_connection_identifier;
16431167Sminshall } ConnectToKeyboardParms;
16531167Sminshall 
16631167Sminshall typedef struct {
16731167Sminshall     char
16831167Sminshall 	rc,
16931167Sminshall 	function_id,
17031167Sminshall 	session_id,
17131167Sminshall 	reserved;
17231167Sminshall     int
17331168Sminshall 	connectors_task_id;
17431167Sminshall } DisconnectFromKeyboardParms;
17531167Sminshall 
17631167Sminshall typedef struct {
17731167Sminshall     char
17831167Sminshall 	scancode,
17931167Sminshall 	shift_state;
18031167Sminshall } KeystrokeEntry;
18131167Sminshall 
18231167Sminshall typedef struct {
18331167Sminshall     int
18431167Sminshall 	length;			/* Length (in bytes) of list */
18531167Sminshall     KeystrokeEntry keystrokes;	/* Variable size */
18631167Sminshall } KeystrokeList;
18731167Sminshall 
18831167Sminshall typedef struct {
18931167Sminshall     char
19031167Sminshall 	rc,
19131167Sminshall 	function_id,
19231167Sminshall 	session_id,
19331167Sminshall 	reserved;
19431167Sminshall     int
19531167Sminshall 	connectors_task_id;
19631167Sminshall     char
19731167Sminshall 	options,
19831167Sminshall 	number_of_keys_sent;
19931167Sminshall     union {
20031167Sminshall 	KeystrokeEntry
20131167Sminshall 	    keystroke_entry;
20231167Sminshall 	KeystrokeList far
20331167Sminshall 	    *keystroke_list;
20431167Sminshall     } keystroke_specifier;
20531167Sminshall } WriteKeystrokeParms;
20631167Sminshall 
20731198Sminshall #define	OPTION_SINGLE_KEYSTROKE		0x20
20831198Sminshall #define	OPTION_MULTIPLE_KEYSTROKES	0x30
20931198Sminshall 
21031167Sminshall typedef struct {
21131167Sminshall     char
21231167Sminshall 	rc,
21331167Sminshall 	function_id,
21431167Sminshall 	session_id,
21531167Sminshall 	reserved;
21631167Sminshall     int
21731167Sminshall 	connectors_task_id;
21831167Sminshall } DisableInputParms;
21931167Sminshall 
22031167Sminshall typedef DisableInputParms EnableInputParms;
22131167Sminshall 
22231167Sminshall typedef struct {
22331167Sminshall     char
22431167Sminshall 	session_id,
22531167Sminshall 	reserved;
22631167Sminshall     char far
22731167Sminshall 	*buffer;
22831167Sminshall     char
22931167Sminshall 	characteristics,
23031167Sminshall 	session_type;
23131167Sminshall     int
23231167Sminshall 	begin;			/* Offset within buffer */
23331167Sminshall } BufferDescriptor;
23431167Sminshall 
23531167Sminshall typedef struct {
23631167Sminshall     char
23731167Sminshall 	rc,
23831167Sminshall 	function_id;
23931167Sminshall     BufferDescriptor
24031167Sminshall 	source;
24131167Sminshall     int
24231167Sminshall 	source_end;		/* Offset within source buffer */
24331167Sminshall     BufferDescriptor
24431167Sminshall 	target;
24531167Sminshall     char
24631167Sminshall 	copy_mode,
24731167Sminshall 	reserved;
24831167Sminshall } CopyStringParms;
24931167Sminshall 
25031167Sminshall #define	COPY_MODE_7_COLOR		0x80	/* Else 4 color mode */
25131167Sminshall #define	COPY_MODE_FIELD_ATTRIBUTES	0x40	/* Else don't copy attributes */
25231167Sminshall 
25331167Sminshall typedef struct {
25431167Sminshall     char
25531167Sminshall 	rc,
25631167Sminshall 	function_id,
25731167Sminshall 	session_id,
25831167Sminshall 	reserved;
25931167Sminshall     char far
26031167Sminshall 	*oia_buffer;
26131167Sminshall     char
26231167Sminshall 	oia_group_number;
26331167Sminshall } ReadOiaGroupParms;
26431167Sminshall 
26531193Sminshall /* If the user wants all groups, we return API_OIA_BYTES_ALL_GROUPS bytes */
26631211Sminshall #define	API_OIA_ALL_GROUPS		'\377'
26731193Sminshall #define	API_OIA_BYTES_ALL_GROUPS	22	/* 22 bytes of data */
26831167Sminshall 
26931193Sminshall /* API_OIA_INPUT_INHIBITED is special.  It returns more than on byte of data */
27031193Sminshall #define	API_OIA_INPUT_INHIBITED		8
27131167Sminshall 
27231193Sminshall #define	API_OIA_LAST_LEGAL_GROUP	18	/* Highest legal number */
27331167Sminshall 
27431167Sminshall 
27531167Sminshall 
27631183Sminshall #if	defined(MSDOS)
27731183Sminshall 
27831183Sminshall #if	!defined(FP_SEG)
27931183Sminshall #include <dos.h>
28031183Sminshall #endif	/* !defined(FP_SEG) */
28131183Sminshall 
28231183Sminshall #else	/* defined(MSDOS) */
28331183Sminshall 
28431183Sminshall /*
28531183Sminshall  * These definitions are here to provide the descriptions of
28631183Sminshall  * some registers which are, normally, defined in <dos.h> on
28731183Sminshall  * a dos system.
28831183Sminshall  */
28931183Sminshall 
29031193Sminshall #define	FP_SEG(x)	(x)
29131193Sminshall #define	FP_OFF(y)	(y)
29231183Sminshall 
29331469Sminshall /*
29431469Sminshall  * Now, it is somewhat of a pain, but we need to keep
29531469Sminshall  * 8086 conventions about which of the "highlow"'s map
29631469Sminshall  * into which of the "words".
29731469Sminshall  */
29831469Sminshall 
29931183Sminshall struct highlow {
30031469Sminshall     unsigned char
30131504Sminshall #if	defined(vax)
30231469Sminshall 	al,
30331183Sminshall 	ah,
30431469Sminshall 	bl,
30531183Sminshall 	bh,
30631469Sminshall 	cl,
30731183Sminshall 	ch,
30831469Sminshall 	dl,
30931469Sminshall 	dh;
31031504Sminshall #endif	/* defined(vax) */
31131802Sminshall #if	defined(sun) || defined(tahoe) || defined(ibm032)
31231504Sminshall 	ah,
31331504Sminshall 	al,
31431504Sminshall 	bh,
31531504Sminshall 	bl,
31631504Sminshall 	ch,
31731504Sminshall 	cl,
31831504Sminshall 	dh,
31931504Sminshall 	dl;
32031802Sminshall #endif	/* defined(sun) || defined(tahoe) || defined(ibm032) */
32131183Sminshall };
32231183Sminshall 
32331183Sminshall struct words {
32431469Sminshall     unsigned short
32531183Sminshall 	ax,
32631183Sminshall 	bx,
32731183Sminshall 	cx,
32831469Sminshall 	dx;
32931469Sminshall     unsigned int
33031183Sminshall 	si,
33131183Sminshall 	di;
33231183Sminshall };
33331183Sminshall 
33431183Sminshall union REGS {
33531183Sminshall     struct highlow h;
33631183Sminshall     struct words x;
33731183Sminshall };
33831183Sminshall 
33931183Sminshall struct SREGS {
34031469Sminshall     unsigned int
34131183Sminshall 	cs,
34231183Sminshall 	ds,
34331183Sminshall 	es,
34431183Sminshall 	ss;
34531183Sminshall };
34631183Sminshall #endif	/* defined(MSDOS) (else section) */
347