|
|
1.1 root 1: /*
2: * Copyright (c) 1988 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that this notice is preserved and that due credit is given
7: * to the University of California at Berkeley. The name of the University
8: * may not be used to endorse or promote products derived from this
9: * software without specific prior written permission. This software
10: * is provided ``as is'' without express or implied warranty.
11: *
12: * @(#)api.h 3.3 (Berkeley) 3/28/88
13: */
14:
15: /*
16: * This file contains header information used by the PC API routines.
17: */
18:
19: #if !defined(MSDOS)
20: #define far /* For 'far *' checks */
21: #endif /* !defined(MSDOS) */
22:
23: #define API_INTERRUPT_NUMBER 0x7A /* API Interrupt Number */
24:
25: /*
26: * Define the gate numbers. These are returned via the Name Resolution
27: * service.
28: */
29:
30: #define GATE_SESSMGR 1234
31: #define GATE_KEYBOARD 5678
32: #define GATE_COPY 9101
33: #define GATE_OIAM 1121
34:
35: /*
36: * The names which correspond to the above gate numbers.
37: */
38:
39: #define NAME_SESSMGR "SESSMGR "
40: #define NAME_KEYBOARD "KEYBOARD"
41: #define NAME_COPY "COPY "
42: #define NAME_OIAM "OIAM "
43:
44:
45: /*
46: * Name Resolution is specified in AH.
47: */
48:
49: #define NAME_RESOLUTION 0x81
50:
51: #if defined(unix)
52: /*
53: * In unix, we offer a service to allow the application to keep from
54: * having to poll us constantly.
55: */
56: #define PS_OR_OIA_MODIFIED 0x99
57:
58: #endif /* defined(unix) */
59:
60: /*
61: * Codes specified in AL for various services.
62: */
63:
64: #define QUERY_SESSION_ID 0x01
65: #define QUERY_SESSION_PARAMETERS 0x02
66: #define QUERY_SESSION_CURSOR 0x0b
67:
68: #define CONNECT_TO_KEYBOARD 0x01
69: #define DISCONNECT_FROM_KEYBOARD 0x02
70: #define WRITE_KEYSTROKE 0x04
71: #define DISABLE_INPUT 0x05
72: #define ENABLE_INPUT 0x06
73:
74: #define COPY_STRING 0x01
75:
76: #define READ_OIA_GROUP 0x02
77:
78: /*
79: * For each service, we define the assoicated parameter blocks.
80: */
81:
82: /*
83: * Supervisor Services
84: */
85:
86: typedef struct {
87: char gate_name[8];
88: } NameResolveParms;
89:
90:
91: /*
92: * Session Information Services
93: */
94:
95: typedef struct {
96: char
97: short_name,
98: type,
99: session_id,
100: reserved,
101: long_name[8];
102: } NameArrayElement;
103:
104: typedef struct {
105: unsigned char
106: length,
107: number_matching_session;
108: NameArrayElement
109: name_array_element; /* Variable number */
110: } NameArray;
111:
112: typedef struct {
113: char
114: rc,
115: function_id,
116: option_code,
117: data_code;
118: NameArray far
119: *name_array;
120: char
121: long_name[8];
122: } QuerySessionIdParms;
123:
124: #define ID_OPTION_BY_NAME 0x01 /* By short (or long) name */
125: #define ID_OPTION_ALL 0x00 /* All (of specified type */
126:
127: typedef struct {
128: char
129: rc,
130: function_id,
131: session_id,
132: reserved,
133: session_type,
134: session_characteristics,
135: rows,
136: columns;
137: char far
138: *presentation_space;
139: } QuerySessionParametersParms;
140:
141: #define TYPE_WSCTL 0x01 /* Work Station Control */
142: #define TYPE_DFT 0x02 /* DFT Host Session */
143: #define TYPE_CUT 0x03 /* CUT Host Session */
144: #define TYPE_NOTEPAD 0x04 /* Notepad Session */
145: #define TYPE_PC 0x05 /* Personal Computer Session */
146:
147: #define CHARACTERISTIC_EAB 0x80 /* Extended Attribute Buffer */
148: #define CHARACTERISTIC_PSS 0x40 /* Program Symbols Supported */
149:
150: typedef struct {
151: char
152: rc,
153: function_id,
154: session_id,
155: cursor_type,
156: row_address, /* from 0 */
157: column_address; /* from 0 */
158: } QuerySessionCursorParms;
159:
160: #define CURSOR_INHIBITED_AUTOSCROLL 0x10
161: #define CURSOR_INHIBITED 0x04
162: #define CURSOR_BLINKING 0x02
163: #define CURSOR_BOX 0x01
164: typedef struct {
165: char
166: rc,
167: function_id,
168: session_id,
169: reserved;
170: int
171: event_queue_id,
172: input_queue_id;
173: char
174: intercept_options,
175: first_connection_identifier;
176: } ConnectToKeyboardParms;
177:
178: typedef struct {
179: char
180: rc,
181: function_id,
182: session_id,
183: reserved;
184: int
185: connectors_task_id;
186: } DisconnectFromKeyboardParms;
187:
188: typedef struct {
189: char
190: scancode,
191: shift_state;
192: } KeystrokeEntry;
193:
194: typedef struct {
195: int
196: length; /* Length (in bytes) of list */
197: KeystrokeEntry keystrokes; /* Variable size */
198: } KeystrokeList;
199:
200: typedef struct {
201: char
202: rc,
203: function_id,
204: session_id,
205: reserved;
206: int
207: connectors_task_id;
208: char
209: options,
210: number_of_keys_sent;
211: union {
212: KeystrokeEntry
213: keystroke_entry;
214: KeystrokeList far
215: *keystroke_list;
216: } keystroke_specifier;
217: } WriteKeystrokeParms;
218:
219: #define OPTION_SINGLE_KEYSTROKE 0x20
220: #define OPTION_MULTIPLE_KEYSTROKES 0x30
221:
222: typedef struct {
223: char
224: rc,
225: function_id,
226: session_id,
227: reserved;
228: int
229: connectors_task_id;
230: } DisableInputParms;
231:
232: typedef DisableInputParms EnableInputParms;
233:
234: typedef struct {
235: char
236: session_id,
237: reserved;
238: char far
239: *buffer;
240: char
241: characteristics,
242: session_type;
243: int
244: begin; /* Offset within buffer */
245: } BufferDescriptor;
246:
247: typedef struct {
248: char
249: rc,
250: function_id;
251: BufferDescriptor
252: source;
253: int
254: source_end; /* Offset within source buffer */
255: BufferDescriptor
256: target;
257: char
258: copy_mode,
259: reserved;
260: } CopyStringParms;
261:
262: #define COPY_MODE_7_COLOR 0x80 /* Else 4 color mode */
263: #define COPY_MODE_FIELD_ATTRIBUTES 0x40 /* Else don't copy attributes */
264:
265: typedef struct {
266: char
267: rc,
268: function_id,
269: session_id,
270: reserved;
271: char far
272: *oia_buffer;
273: char
274: oia_group_number;
275: } ReadOiaGroupParms;
276:
277: /* If the user wants all groups, we return API_OIA_BYTES_ALL_GROUPS bytes */
278: #define API_OIA_ALL_GROUPS '\377'
279: #define API_OIA_BYTES_ALL_GROUPS 22 /* 22 bytes of data */
280:
281: /* API_OIA_INPUT_INHIBITED is special. It returns more than on byte of data */
282: #define API_OIA_INPUT_INHIBITED 8
283:
284: #define API_OIA_LAST_LEGAL_GROUP 18 /* Highest legal number */
285:
286:
287:
288: #if defined(MSDOS)
289:
290: #if !defined(FP_SEG)
291: #include <dos.h>
292: #endif /* !defined(FP_SEG) */
293:
294: #else /* defined(MSDOS) */
295:
296: /*
297: * These definitions are here to provide the descriptions of
298: * some registers which are, normally, defined in <dos.h> on
299: * a dos system.
300: */
301:
302: #define FP_SEG(x) (x)
303: #define FP_OFF(y) (y)
304:
305: /*
306: * Now, it is somewhat of a pain, but we need to keep
307: * 8086 conventions about which of the "highlow"'s map
308: * into which of the "words".
309: */
310:
311: struct highlow {
312: unsigned char
313: #if defined(vax)
314: al,
315: ah,
316: bl,
317: bh,
318: cl,
319: ch,
320: dl,
321: dh;
322: #endif /* defined(vax) */
323: #if defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr)
324: ah,
325: al,
326: bh,
327: bl,
328: ch,
329: cl,
330: dh,
331: dl;
332: #endif /* defined(sun) || defined(tahoe) || defined(ibm032) */
333: };
334:
335: struct words {
336: unsigned short
337: ax,
338: bx,
339: cx,
340: dx;
341: unsigned int
342: si,
343: di;
344: };
345:
346: union REGS {
347: struct highlow h;
348: struct words x;
349: };
350:
351: struct SREGS {
352: unsigned int
353: cs,
354: ds,
355: es,
356: ss;
357: };
358: #endif /* defined(MSDOS) (else section) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.