xref: /csrg-svn/usr.bin/tn3270/ctlr/api.h (revision 35421)
131159Sminshall /*
233816Sbostic  * Copyright (c) 1988 Regents of the University of California.
333816Sbostic  * All rights reserved.
431892Sminshall  *
533816Sbostic  * Redistribution and use in source and binary forms are permitted
634887Sbostic  * provided that the above copyright notice and this paragraph are
734887Sbostic  * duplicated in all such forms and that any documentation,
834887Sbostic  * advertising materials, and other materials related to such
934887Sbostic  * distribution and use acknowledge that the software was developed
1034887Sbostic  * by the University of California, Berkeley.  The name of the
1134887Sbostic  * University may not be used to endorse or promote products derived
1234887Sbostic  * from this software without specific prior written permission.
1334887Sbostic  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
1434887Sbostic  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
1534887Sbostic  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1633816Sbostic  *
17*35421Sminshall  *	@(#)api.h	3.5 (Berkeley) 08/28/88
1831159Sminshall  */
1931159Sminshall 
2033816Sbostic /*
2133816Sbostic  * This file contains header information used by the PC API routines.
2233816Sbostic  */
2333816Sbostic 
2431183Sminshall #if	!defined(MSDOS)
2531183Sminshall #define far			/* For 'far *' checks */
2631183Sminshall #endif	/* !defined(MSDOS) */
2731183Sminshall 
2831159Sminshall #define	API_INTERRUPT_NUMBER	0x7A		/* API Interrupt Number */
2931159Sminshall 
3031159Sminshall /*
3131159Sminshall  * Define the gate numbers.  These are returned via the Name Resolution
3231159Sminshall  * service.
3331159Sminshall  */
3431159Sminshall 
3531211Sminshall #define	GATE_SESSMGR	1234
3631211Sminshall #define	GATE_KEYBOARD	5678
3731211Sminshall #define	GATE_COPY	9101
3831211Sminshall #define	GATE_OIAM	1121
3931159Sminshall 
4031167Sminshall /*
4131167Sminshall  * The names which correspond to the above gate numbers.
4231167Sminshall  */
4331167Sminshall 
4431167Sminshall #define	NAME_SESSMGR	"SESSMGR "
4531161Sminshall #define	NAME_KEYBOARD	"KEYBOARD"
4631167Sminshall #define	NAME_COPY	"COPY    "
4731167Sminshall #define	NAME_OIAM	"OIAM    "
4831161Sminshall 
4931161Sminshall 
5031159Sminshall /*
5131159Sminshall  * Name Resolution is specified in AH.
5231159Sminshall  */
5331159Sminshall 
5431517Sminshall #define	NAME_RESOLUTION		0x81
5531159Sminshall 
5631517Sminshall #if	defined(unix)
5731159Sminshall /*
5831517Sminshall  * In unix, we offer a service to allow the application to keep from
5931517Sminshall  * having to poll us constantly.
6031517Sminshall  */
6131517Sminshall #define	PS_OR_OIA_MODIFIED	0x99
6231517Sminshall 
6331517Sminshall #endif	/* defined(unix) */
6431517Sminshall 
6531517Sminshall /*
6631159Sminshall  * Codes specified in AL for various services.
6731159Sminshall  */
6831159Sminshall 
6931167Sminshall #define	QUERY_SESSION_ID		0x01
7031211Sminshall #define	QUERY_SESSION_PARAMETERS	0x02
7131167Sminshall #define	QUERY_SESSION_CURSOR		0x0b
7231159Sminshall 
7331167Sminshall #define	CONNECT_TO_KEYBOARD		0x01
7431159Sminshall #define	DISCONNECT_FROM_KEYBOARD	0x02
7531167Sminshall #define	WRITE_KEYSTROKE			0x04
7631167Sminshall #define	DISABLE_INPUT			0x05
7731167Sminshall #define	ENABLE_INPUT			0x06
7831159Sminshall 
7931167Sminshall #define	COPY_STRING			0x01
8031159Sminshall 
8131167Sminshall #define	READ_OIA_GROUP			0x02
8231167Sminshall 
8331167Sminshall /*
8431167Sminshall  * For each service, we define the assoicated parameter blocks.
8531167Sminshall  */
8631167Sminshall 
8731167Sminshall /*
8831167Sminshall  * Supervisor Services
8931167Sminshall  */
9031167Sminshall 
9131167Sminshall typedef struct {
9231167Sminshall     char	gate_name[8];
9331167Sminshall } NameResolveParms;
9431167Sminshall 
9531167Sminshall 
9631167Sminshall /*
9731167Sminshall  * Session Information Services
9831167Sminshall  */
9931167Sminshall 
10031167Sminshall typedef struct {
10131167Sminshall     char
10231167Sminshall 	short_name,
10331167Sminshall 	type,
10431167Sminshall 	session_id,
10531167Sminshall 	reserved,
10631167Sminshall 	long_name[8];
10731167Sminshall } NameArrayElement;
10831167Sminshall 
10931167Sminshall typedef struct {
11031802Sminshall     unsigned char
11131167Sminshall 	length,
11231167Sminshall 	number_matching_session;
11331167Sminshall     NameArrayElement
11431167Sminshall 	name_array_element;		/* Variable number */
11531167Sminshall } NameArray;
11631167Sminshall 
11731167Sminshall typedef struct {
11831167Sminshall     char
11931167Sminshall 	rc,
12031167Sminshall 	function_id,
12131167Sminshall 	option_code,
12231167Sminshall 	data_code;
12331167Sminshall     NameArray far
12431167Sminshall 	*name_array;
12531167Sminshall     char
12631167Sminshall 	long_name[8];
12731167Sminshall } QuerySessionIdParms;
12831167Sminshall 
12931211Sminshall #define	ID_OPTION_BY_NAME	0x01		/* By short (or long) name */
13031211Sminshall #define	ID_OPTION_ALL		0x00		/* All (of specified type */
13131211Sminshall 
13231167Sminshall typedef struct {
13331167Sminshall     char
13431167Sminshall 	rc,
13531167Sminshall 	function_id,
13631167Sminshall 	session_id,
13731167Sminshall 	reserved,
13831167Sminshall 	session_type,
13931167Sminshall 	session_characteristics,
14031167Sminshall 	rows,
14131167Sminshall 	columns;
14231167Sminshall     char far
14331167Sminshall 	*presentation_space;
14431168Sminshall } QuerySessionParametersParms;
14531167Sminshall 
14631167Sminshall #define	TYPE_WSCTL		0x01		/* Work Station Control */
14731167Sminshall #define	TYPE_DFT		0x02		/* DFT Host Session */
14831167Sminshall #define	TYPE_CUT		0x03		/* CUT Host Session */
14931167Sminshall #define	TYPE_NOTEPAD		0x04		/* Notepad Session */
15031167Sminshall #define	TYPE_PC			0x05		/* Personal Computer Session */
15131167Sminshall 
15231167Sminshall #define	CHARACTERISTIC_EAB	0x80		/* Extended Attribute Buffer */
15331167Sminshall #define	CHARACTERISTIC_PSS	0x40		/* Program Symbols Supported */
15431167Sminshall 
15531167Sminshall typedef struct {
15631167Sminshall     char
15731167Sminshall 	rc,
15831167Sminshall 	function_id,
15931167Sminshall 	session_id,
16031167Sminshall 	cursor_type,
16131167Sminshall 	row_address,				/* from 0 */
16231167Sminshall 	column_address;				/* from 0 */
16331167Sminshall } QuerySessionCursorParms;
16431167Sminshall 
16531167Sminshall #define	CURSOR_INHIBITED_AUTOSCROLL	0x10
16631167Sminshall #define	CURSOR_INHIBITED		0x04
16731167Sminshall #define	CURSOR_BLINKING			0x02
16831167Sminshall #define	CURSOR_BOX			0x01
16931167Sminshall typedef struct {
17031167Sminshall     char
17131167Sminshall 	rc,
17231167Sminshall 	function_id,
17331167Sminshall 	session_id,
17431167Sminshall 	reserved;
175*35421Sminshall     short
17631167Sminshall 	event_queue_id,
17731167Sminshall 	input_queue_id;
17831167Sminshall     char
17931167Sminshall 	intercept_options,
18031167Sminshall 	first_connection_identifier;
18131167Sminshall } ConnectToKeyboardParms;
18231167Sminshall 
18331167Sminshall typedef struct {
18431167Sminshall     char
18531167Sminshall 	rc,
18631167Sminshall 	function_id,
18731167Sminshall 	session_id,
18831167Sminshall 	reserved;
189*35421Sminshall     short
19031168Sminshall 	connectors_task_id;
19131167Sminshall } DisconnectFromKeyboardParms;
19231167Sminshall 
19331167Sminshall typedef struct {
194*35421Sminshall     unsigned char
19531167Sminshall 	scancode,
19631167Sminshall 	shift_state;
19731167Sminshall } KeystrokeEntry;
19831167Sminshall 
19931167Sminshall typedef struct {
200*35421Sminshall     short
20131167Sminshall 	length;			/* Length (in bytes) of list */
20231167Sminshall     KeystrokeEntry keystrokes;	/* Variable size */
20331167Sminshall } KeystrokeList;
20431167Sminshall 
20531167Sminshall typedef struct {
20631167Sminshall     char
20731167Sminshall 	rc,
20831167Sminshall 	function_id,
20931167Sminshall 	session_id,
21031167Sminshall 	reserved;
211*35421Sminshall     short
21231167Sminshall 	connectors_task_id;
21331167Sminshall     char
21431167Sminshall 	options,
21531167Sminshall 	number_of_keys_sent;
21631167Sminshall     union {
21731167Sminshall 	KeystrokeEntry
21831167Sminshall 	    keystroke_entry;
21931167Sminshall 	KeystrokeList far
22031167Sminshall 	    *keystroke_list;
22131167Sminshall     } keystroke_specifier;
22231167Sminshall } WriteKeystrokeParms;
22331167Sminshall 
22431198Sminshall #define	OPTION_SINGLE_KEYSTROKE		0x20
22531198Sminshall #define	OPTION_MULTIPLE_KEYSTROKES	0x30
22631198Sminshall 
22731167Sminshall typedef struct {
22831167Sminshall     char
22931167Sminshall 	rc,
23031167Sminshall 	function_id,
23131167Sminshall 	session_id,
23231167Sminshall 	reserved;
233*35421Sminshall     short
23431167Sminshall 	connectors_task_id;
23531167Sminshall } DisableInputParms;
23631167Sminshall 
23731167Sminshall typedef DisableInputParms EnableInputParms;
23831167Sminshall 
23931167Sminshall typedef struct {
24031167Sminshall     char
24131167Sminshall 	session_id,
24231167Sminshall 	reserved;
24331167Sminshall     char far
24431167Sminshall 	*buffer;
24531167Sminshall     char
24631167Sminshall 	characteristics,
24731167Sminshall 	session_type;
248*35421Sminshall     short
24931167Sminshall 	begin;			/* Offset within buffer */
25031167Sminshall } BufferDescriptor;
25131167Sminshall 
25231167Sminshall typedef struct {
25331167Sminshall     char
25431167Sminshall 	rc,
25531167Sminshall 	function_id;
25631167Sminshall     BufferDescriptor
25731167Sminshall 	source;
258*35421Sminshall     short
25931167Sminshall 	source_end;		/* Offset within source buffer */
26031167Sminshall     BufferDescriptor
26131167Sminshall 	target;
26231167Sminshall     char
26331167Sminshall 	copy_mode,
26431167Sminshall 	reserved;
26531167Sminshall } CopyStringParms;
26631167Sminshall 
26731167Sminshall #define	COPY_MODE_7_COLOR		0x80	/* Else 4 color mode */
26831167Sminshall #define	COPY_MODE_FIELD_ATTRIBUTES	0x40	/* Else don't copy attributes */
26931167Sminshall 
27031167Sminshall typedef struct {
27131167Sminshall     char
27231167Sminshall 	rc,
27331167Sminshall 	function_id,
27431167Sminshall 	session_id,
27531167Sminshall 	reserved;
27631167Sminshall     char far
27731167Sminshall 	*oia_buffer;
27831167Sminshall     char
27931167Sminshall 	oia_group_number;
28031167Sminshall } ReadOiaGroupParms;
28131167Sminshall 
28231193Sminshall /* If the user wants all groups, we return API_OIA_BYTES_ALL_GROUPS bytes */
28331211Sminshall #define	API_OIA_ALL_GROUPS		'\377'
28431193Sminshall #define	API_OIA_BYTES_ALL_GROUPS	22	/* 22 bytes of data */
28531167Sminshall 
28631193Sminshall /* API_OIA_INPUT_INHIBITED is special.  It returns more than on byte of data */
28731193Sminshall #define	API_OIA_INPUT_INHIBITED		8
28831167Sminshall 
28931193Sminshall #define	API_OIA_LAST_LEGAL_GROUP	18	/* Highest legal number */
29031167Sminshall 
29131167Sminshall 
29231167Sminshall 
29331183Sminshall #if	defined(MSDOS)
29431183Sminshall 
29531183Sminshall #if	!defined(FP_SEG)
29631183Sminshall #include <dos.h>
29731183Sminshall #endif	/* !defined(FP_SEG) */
29831183Sminshall 
29931183Sminshall #else	/* defined(MSDOS) */
30031183Sminshall 
30131183Sminshall /*
30231183Sminshall  * These definitions are here to provide the descriptions of
30331183Sminshall  * some registers which are, normally, defined in <dos.h> on
30431183Sminshall  * a dos system.
30531183Sminshall  */
30631183Sminshall 
307*35421Sminshall #define	FP_SEG(x)	((unsigned int)(((unsigned long)(x))>>16))
308*35421Sminshall #define	FP_OFF(y)	((unsigned int)(((unsigned long)(y))&0xFFFF))
30931183Sminshall 
31031469Sminshall /*
311*35421Sminshall  * Undo the preceeding.
312*35421Sminshall  */
313*35421Sminshall 
314*35421Sminshall #define	SEG_OFF_BACK(x,y)	(((x)<<16)|(y))
315*35421Sminshall 
316*35421Sminshall /*
31731469Sminshall  * Now, it is somewhat of a pain, but we need to keep
31831469Sminshall  * 8086 conventions about which of the "highlow"'s map
31931469Sminshall  * into which of the "words".
32031469Sminshall  */
32131469Sminshall 
32231183Sminshall struct highlow {
32331469Sminshall     unsigned char
324*35421Sminshall #if	defined(vax) || defined(ns32000)
32531469Sminshall 	al,
32631183Sminshall 	ah,
32731469Sminshall 	bl,
32831183Sminshall 	bh,
32931469Sminshall 	cl,
33031183Sminshall 	ch,
33131469Sminshall 	dl,
33231469Sminshall 	dh;
333*35421Sminshall #endif	/* defined(vax) || defined(ns32000) */
33433270Sminshall #if	defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr)
33531504Sminshall 	ah,
33631504Sminshall 	al,
33731504Sminshall 	bh,
33831504Sminshall 	bl,
33931504Sminshall 	ch,
34031504Sminshall 	cl,
34131504Sminshall 	dh,
34231504Sminshall 	dl;
343*35421Sminshall #endif	/* defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) */
34431183Sminshall };
34531183Sminshall 
34631183Sminshall struct words {
34731469Sminshall     unsigned short
34831183Sminshall 	ax,
34931183Sminshall 	bx,
35031183Sminshall 	cx,
35131469Sminshall 	dx;
352*35421Sminshall     unsigned short
35331183Sminshall 	si,
35431183Sminshall 	di;
35531183Sminshall };
35631183Sminshall 
35731183Sminshall union REGS {
35831183Sminshall     struct highlow h;
35931183Sminshall     struct words x;
36031183Sminshall };
36131183Sminshall 
36231183Sminshall struct SREGS {
363*35421Sminshall     unsigned short
36431183Sminshall 	cs,
36531183Sminshall 	ds,
36631183Sminshall 	es,
36731183Sminshall 	ss;
36831183Sminshall };
36931183Sminshall #endif	/* defined(MSDOS) (else section) */
370