|
|
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 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.3 (Berkeley) 9/23/89 ! 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: #include <sys/param.h> /* Get ENDIAN from machine/endian.h */ ! 323: ! 324: /* Determine endian'ess (if necessary) */ ! 325: ! 326: #if !(defined(BYTE_ORDER) && defined(BIG_ENDIAN)) ! 327: #define LITTLE_ENDIAN 1234 /* least-significant byte first (vax) */ ! 328: #define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ ! 329: ! 330: #if defined(vax) || defined(ns32000) || defined(i386) || (defined(mips)&&defined(MIPSEL)) ! 331: #define BYTE_ORDER LITTLE_ENDIAN ! 332: #endif /* defined(vax) || defined(ns32000) */ ! 333: ! 334: #if defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) || defined(gould) || (defined(mips)&&defined(MIPSEB)) ! 335: #define BYTE_ORDER BIG_ENDIAN ! 336: #endif /* defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) || defined(gould) */ ! 337: ! 338: #endif /* !(defined(BYTE_ORDER) && defined(BIG_ENDIAN)) */ ! 339: ! 340: struct highlow { ! 341: unsigned char ! 342: #if BYTE_ORDER == LITTLE_ENDIAN ! 343: al, ! 344: ah, ! 345: bl, ! 346: bh, ! 347: cl, ! 348: ch, ! 349: dl, ! 350: dh; ! 351: #endif /* BYTE_ORDER == LITTLE_ENDIAN */ ! 352: #if BYTE_ORDER == BIG_ENDIAN ! 353: ah, ! 354: al, ! 355: bh, ! 356: bl, ! 357: ch, ! 358: cl, ! 359: dh, ! 360: dl; ! 361: #endif /* BYTE_ORDER == BIG_ENDIAN */ ! 362: }; ! 363: ! 364: struct words { ! 365: unsigned short ! 366: ax, ! 367: bx, ! 368: cx, ! 369: dx; ! 370: unsigned short ! 371: si, ! 372: di; ! 373: }; ! 374: ! 375: union REGS { ! 376: struct highlow h; ! 377: struct words x; ! 378: }; ! 379: ! 380: struct SREGS { ! 381: unsigned short ! 382: cs, ! 383: ds, ! 384: es, ! 385: ss; ! 386: }; ! 387: #endif /* defined(MSDOS) (else section) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.