xref: /csrg-svn/usr.bin/tn3270/ctlr/api.h (revision 62323)
148756Sbostic /*-
2*62323Sbostic  * Copyright (c) 1988, 1993
3*62323Sbostic  *	The Regents of the University of California.  All rights reserved.
431892Sminshall  *
548756Sbostic  * %sccs.include.redist.c%
633816Sbostic  *
7*62323Sbostic  *	@(#)api.h	8.1 (Berkeley) 06/06/93
831159Sminshall  */
931159Sminshall 
1033816Sbostic /*
1133816Sbostic  * This file contains header information used by the PC API routines.
1233816Sbostic  */
1333816Sbostic 
1431183Sminshall #if	!defined(MSDOS)
1531183Sminshall #define far			/* For 'far *' checks */
1631183Sminshall #endif	/* !defined(MSDOS) */
1731183Sminshall 
1831159Sminshall #define	API_INTERRUPT_NUMBER	0x7A		/* API Interrupt Number */
1931159Sminshall 
2031159Sminshall /*
2131159Sminshall  * Define the gate numbers.  These are returned via the Name Resolution
2231159Sminshall  * service.
2331159Sminshall  */
2431159Sminshall 
2531211Sminshall #define	GATE_SESSMGR	1234
2631211Sminshall #define	GATE_KEYBOARD	5678
2731211Sminshall #define	GATE_COPY	9101
2831211Sminshall #define	GATE_OIAM	1121
2931159Sminshall 
3031167Sminshall /*
3131167Sminshall  * The names which correspond to the above gate numbers.
3231167Sminshall  */
3331167Sminshall 
3431167Sminshall #define	NAME_SESSMGR	"SESSMGR "
3531161Sminshall #define	NAME_KEYBOARD	"KEYBOARD"
3631167Sminshall #define	NAME_COPY	"COPY    "
3731167Sminshall #define	NAME_OIAM	"OIAM    "
3831161Sminshall 
3931161Sminshall 
4031159Sminshall /*
4131159Sminshall  * Name Resolution is specified in AH.
4231159Sminshall  */
4331159Sminshall 
4431517Sminshall #define	NAME_RESOLUTION		0x81
4531159Sminshall 
4631517Sminshall #if	defined(unix)
4731159Sminshall /*
4831517Sminshall  * In unix, we offer a service to allow the application to keep from
4931517Sminshall  * having to poll us constantly.
5031517Sminshall  */
5131517Sminshall #define	PS_OR_OIA_MODIFIED	0x99
5231517Sminshall 
5331517Sminshall #endif	/* defined(unix) */
5431517Sminshall 
5531517Sminshall /*
5631159Sminshall  * Codes specified in AL for various services.
5731159Sminshall  */
5831159Sminshall 
5931167Sminshall #define	QUERY_SESSION_ID		0x01
6031211Sminshall #define	QUERY_SESSION_PARAMETERS	0x02
6131167Sminshall #define	QUERY_SESSION_CURSOR		0x0b
6231159Sminshall 
6331167Sminshall #define	CONNECT_TO_KEYBOARD		0x01
6431159Sminshall #define	DISCONNECT_FROM_KEYBOARD	0x02
6531167Sminshall #define	WRITE_KEYSTROKE			0x04
6631167Sminshall #define	DISABLE_INPUT			0x05
6731167Sminshall #define	ENABLE_INPUT			0x06
6831159Sminshall 
6931167Sminshall #define	COPY_STRING			0x01
7031159Sminshall 
7131167Sminshall #define	READ_OIA_GROUP			0x02
7231167Sminshall 
7331167Sminshall /*
7431167Sminshall  * For each service, we define the assoicated parameter blocks.
7531167Sminshall  */
7631167Sminshall 
7731167Sminshall /*
7831167Sminshall  * Supervisor Services
7931167Sminshall  */
8031167Sminshall 
8131167Sminshall typedef struct {
8231167Sminshall     char	gate_name[8];
8331167Sminshall } NameResolveParms;
8431167Sminshall 
8531167Sminshall 
8631167Sminshall /*
8731167Sminshall  * Session Information Services
8831167Sminshall  */
8931167Sminshall 
9031167Sminshall typedef struct {
9131167Sminshall     char
9231167Sminshall 	short_name,
9331167Sminshall 	type,
9431167Sminshall 	session_id,
9531167Sminshall 	reserved,
9631167Sminshall 	long_name[8];
9731167Sminshall } NameArrayElement;
9831167Sminshall 
9931167Sminshall typedef struct {
10031802Sminshall     unsigned char
10131167Sminshall 	length,
10231167Sminshall 	number_matching_session;
10331167Sminshall     NameArrayElement
10431167Sminshall 	name_array_element;		/* Variable number */
10531167Sminshall } NameArray;
10631167Sminshall 
10731167Sminshall typedef struct {
10831167Sminshall     char
10931167Sminshall 	rc,
11031167Sminshall 	function_id,
11131167Sminshall 	option_code,
11231167Sminshall 	data_code;
11331167Sminshall     NameArray far
11431167Sminshall 	*name_array;
11531167Sminshall     char
11631167Sminshall 	long_name[8];
11731167Sminshall } QuerySessionIdParms;
11831167Sminshall 
11931211Sminshall #define	ID_OPTION_BY_NAME	0x01		/* By short (or long) name */
12031211Sminshall #define	ID_OPTION_ALL		0x00		/* All (of specified type */
12131211Sminshall 
12231167Sminshall typedef struct {
12331167Sminshall     char
12431167Sminshall 	rc,
12531167Sminshall 	function_id,
12631167Sminshall 	session_id,
12731167Sminshall 	reserved,
12831167Sminshall 	session_type,
12931167Sminshall 	session_characteristics,
13031167Sminshall 	rows,
13131167Sminshall 	columns;
13231167Sminshall     char far
13331167Sminshall 	*presentation_space;
13431168Sminshall } QuerySessionParametersParms;
13531167Sminshall 
13631167Sminshall #define	TYPE_WSCTL		0x01		/* Work Station Control */
13731167Sminshall #define	TYPE_DFT		0x02		/* DFT Host Session */
13831167Sminshall #define	TYPE_CUT		0x03		/* CUT Host Session */
13931167Sminshall #define	TYPE_NOTEPAD		0x04		/* Notepad Session */
14031167Sminshall #define	TYPE_PC			0x05		/* Personal Computer Session */
14131167Sminshall 
14231167Sminshall #define	CHARACTERISTIC_EAB	0x80		/* Extended Attribute Buffer */
14331167Sminshall #define	CHARACTERISTIC_PSS	0x40		/* Program Symbols Supported */
14431167Sminshall 
14531167Sminshall typedef struct {
14631167Sminshall     char
14731167Sminshall 	rc,
14831167Sminshall 	function_id,
14931167Sminshall 	session_id,
15031167Sminshall 	cursor_type,
15131167Sminshall 	row_address,				/* from 0 */
15231167Sminshall 	column_address;				/* from 0 */
15331167Sminshall } QuerySessionCursorParms;
15431167Sminshall 
15531167Sminshall #define	CURSOR_INHIBITED_AUTOSCROLL	0x10
15631167Sminshall #define	CURSOR_INHIBITED		0x04
15731167Sminshall #define	CURSOR_BLINKING			0x02
15831167Sminshall #define	CURSOR_BOX			0x01
15931167Sminshall typedef struct {
16031167Sminshall     char
16131167Sminshall 	rc,
16231167Sminshall 	function_id,
16331167Sminshall 	session_id,
16431167Sminshall 	reserved;
16535421Sminshall     short
16631167Sminshall 	event_queue_id,
16731167Sminshall 	input_queue_id;
16831167Sminshall     char
16931167Sminshall 	intercept_options,
17031167Sminshall 	first_connection_identifier;
17131167Sminshall } ConnectToKeyboardParms;
17231167Sminshall 
17331167Sminshall typedef struct {
17431167Sminshall     char
17531167Sminshall 	rc,
17631167Sminshall 	function_id,
17731167Sminshall 	session_id,
17831167Sminshall 	reserved;
17935421Sminshall     short
18031168Sminshall 	connectors_task_id;
18131167Sminshall } DisconnectFromKeyboardParms;
18231167Sminshall 
18331167Sminshall typedef struct {
18435421Sminshall     unsigned char
18531167Sminshall 	scancode,
18631167Sminshall 	shift_state;
18731167Sminshall } KeystrokeEntry;
18831167Sminshall 
18931167Sminshall typedef struct {
19035421Sminshall     short
19131167Sminshall 	length;			/* Length (in bytes) of list */
19231167Sminshall     KeystrokeEntry keystrokes;	/* Variable size */
19331167Sminshall } KeystrokeList;
19431167Sminshall 
19531167Sminshall typedef struct {
19631167Sminshall     char
19731167Sminshall 	rc,
19831167Sminshall 	function_id,
19931167Sminshall 	session_id,
20031167Sminshall 	reserved;
20135421Sminshall     short
20231167Sminshall 	connectors_task_id;
20331167Sminshall     char
20431167Sminshall 	options,
20531167Sminshall 	number_of_keys_sent;
20631167Sminshall     union {
20731167Sminshall 	KeystrokeEntry
20831167Sminshall 	    keystroke_entry;
20931167Sminshall 	KeystrokeList far
21031167Sminshall 	    *keystroke_list;
21131167Sminshall     } keystroke_specifier;
21231167Sminshall } WriteKeystrokeParms;
21331167Sminshall 
21431198Sminshall #define	OPTION_SINGLE_KEYSTROKE		0x20
21531198Sminshall #define	OPTION_MULTIPLE_KEYSTROKES	0x30
21631198Sminshall 
21731167Sminshall typedef struct {
21831167Sminshall     char
21931167Sminshall 	rc,
22031167Sminshall 	function_id,
22131167Sminshall 	session_id,
22231167Sminshall 	reserved;
22335421Sminshall     short
22431167Sminshall 	connectors_task_id;
22531167Sminshall } DisableInputParms;
22631167Sminshall 
22731167Sminshall typedef DisableInputParms EnableInputParms;
22831167Sminshall 
22931167Sminshall typedef struct {
23031167Sminshall     char
23131167Sminshall 	session_id,
23231167Sminshall 	reserved;
23331167Sminshall     char far
23431167Sminshall 	*buffer;
23531167Sminshall     char
23631167Sminshall 	characteristics,
23731167Sminshall 	session_type;
23835421Sminshall     short
23931167Sminshall 	begin;			/* Offset within buffer */
24031167Sminshall } BufferDescriptor;
24131167Sminshall 
24231167Sminshall typedef struct {
24331167Sminshall     char
24431167Sminshall 	rc,
24531167Sminshall 	function_id;
24631167Sminshall     BufferDescriptor
24731167Sminshall 	source;
24835421Sminshall     short
24931167Sminshall 	source_end;		/* Offset within source buffer */
25031167Sminshall     BufferDescriptor
25131167Sminshall 	target;
25231167Sminshall     char
25331167Sminshall 	copy_mode,
25431167Sminshall 	reserved;
25531167Sminshall } CopyStringParms;
25631167Sminshall 
25731167Sminshall #define	COPY_MODE_7_COLOR		0x80	/* Else 4 color mode */
25831167Sminshall #define	COPY_MODE_FIELD_ATTRIBUTES	0x40	/* Else don't copy attributes */
25931167Sminshall 
26031167Sminshall typedef struct {
26131167Sminshall     char
26231167Sminshall 	rc,
26331167Sminshall 	function_id,
26431167Sminshall 	session_id,
26531167Sminshall 	reserved;
26631167Sminshall     char far
26731167Sminshall 	*oia_buffer;
26831167Sminshall     char
26931167Sminshall 	oia_group_number;
27031167Sminshall } ReadOiaGroupParms;
27131167Sminshall 
27231193Sminshall /* If the user wants all groups, we return API_OIA_BYTES_ALL_GROUPS bytes */
27331211Sminshall #define	API_OIA_ALL_GROUPS		'\377'
27431193Sminshall #define	API_OIA_BYTES_ALL_GROUPS	22	/* 22 bytes of data */
27531167Sminshall 
27631193Sminshall /* API_OIA_INPUT_INHIBITED is special.  It returns more than on byte of data */
27731193Sminshall #define	API_OIA_INPUT_INHIBITED		8
27831167Sminshall 
27931193Sminshall #define	API_OIA_LAST_LEGAL_GROUP	18	/* Highest legal number */
28031167Sminshall 
28131167Sminshall 
28231167Sminshall 
28331183Sminshall #if	defined(MSDOS)
28431183Sminshall 
28531183Sminshall #if	!defined(FP_SEG)
28631183Sminshall #include <dos.h>
28731183Sminshall #endif	/* !defined(FP_SEG) */
28831183Sminshall 
28931183Sminshall #else	/* defined(MSDOS) */
29031183Sminshall 
29131183Sminshall /*
29231183Sminshall  * These definitions are here to provide the descriptions of
29331183Sminshall  * some registers which are, normally, defined in <dos.h> on
29431183Sminshall  * a dos system.
29531183Sminshall  */
29631183Sminshall 
29735421Sminshall #define	FP_SEG(x)	((unsigned int)(((unsigned long)(x))>>16))
29835421Sminshall #define	FP_OFF(y)	((unsigned int)(((unsigned long)(y))&0xFFFF))
29931183Sminshall 
30031469Sminshall /*
30135421Sminshall  * Undo the preceeding.
30235421Sminshall  */
30335421Sminshall 
30435421Sminshall #define	SEG_OFF_BACK(x,y)	(((x)<<16)|(y))
30535421Sminshall 
30635421Sminshall /*
30731469Sminshall  * Now, it is somewhat of a pain, but we need to keep
30831469Sminshall  * 8086 conventions about which of the "highlow"'s map
30931469Sminshall  * into which of the "words".
31031469Sminshall  */
31131469Sminshall 
31236696Sminshall #include <sys/param.h>		/* Get ENDIAN from machine/endian.h */
31336696Sminshall 
31436696Sminshall /* Determine endian'ess (if necessary) */
31536696Sminshall 
31636696Sminshall #if	!(defined(BYTE_ORDER) && defined(BIG_ENDIAN))
31736696Sminshall #define	LITTLE_ENDIAN	1234	/* least-significant byte first (vax) */
31836696Sminshall #define	BIG_ENDIAN	4321	/* most-significant byte first (IBM, net) */
31936696Sminshall 
32039202Sminshall #if	defined(vax) || defined(ns32000) || defined(i386) || (defined(mips)&&defined(MIPSEL))
32136696Sminshall #define	BYTE_ORDER	LITTLE_ENDIAN
32236696Sminshall #endif	/* defined(vax) || defined(ns32000) */
32336696Sminshall 
32439202Sminshall #if	defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) || defined(gould) || (defined(mips)&&defined(MIPSEB))
32536696Sminshall #define	BYTE_ORDER	BIG_ENDIAN
32636696Sminshall #endif	/* defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) || defined(gould) */
32736696Sminshall 
32836696Sminshall #endif	/* !(defined(BYTE_ORDER) && defined(BIG_ENDIAN)) */
32936696Sminshall 
33031183Sminshall struct highlow {
33131469Sminshall     unsigned char
33236696Sminshall #if	BYTE_ORDER == LITTLE_ENDIAN
33331469Sminshall 	al,
33431183Sminshall 	ah,
33531469Sminshall 	bl,
33631183Sminshall 	bh,
33731469Sminshall 	cl,
33831183Sminshall 	ch,
33931469Sminshall 	dl,
34031469Sminshall 	dh;
34136696Sminshall #endif	/* BYTE_ORDER == LITTLE_ENDIAN */
34236696Sminshall #if	BYTE_ORDER == BIG_ENDIAN
34331504Sminshall 	ah,
34431504Sminshall 	al,
34531504Sminshall 	bh,
34631504Sminshall 	bl,
34731504Sminshall 	ch,
34831504Sminshall 	cl,
34931504Sminshall 	dh,
35031504Sminshall 	dl;
35136696Sminshall #endif	/* BYTE_ORDER == BIG_ENDIAN */
35231183Sminshall };
35331183Sminshall 
35431183Sminshall struct words {
35531469Sminshall     unsigned short
35631183Sminshall 	ax,
35731183Sminshall 	bx,
35831183Sminshall 	cx,
35931469Sminshall 	dx;
36035421Sminshall     unsigned short
36131183Sminshall 	si,
36231183Sminshall 	di;
36331183Sminshall };
36431183Sminshall 
36531183Sminshall union REGS {
36631183Sminshall     struct highlow h;
36731183Sminshall     struct words x;
36831183Sminshall };
36931183Sminshall 
37031183Sminshall struct SREGS {
37135421Sminshall     unsigned short
37231183Sminshall 	cs,
37331183Sminshall 	ds,
37431183Sminshall 	es,
37531183Sminshall 	ss;
37631183Sminshall };
37731183Sminshall #endif	/* defined(MSDOS) (else section) */
378