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