home *** CD-ROM | disk | FTP | other *** search
- /*-
- * Copyright (c) 1988 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)api.h 4.4 (Berkeley) 4/26/91
- */
-
- /*
- * This file contains header information used by the PC API routines.
- */
-
- #if !defined(MSDOS)
- #define far /* For 'far *' checks */
- #endif /* !defined(MSDOS) */
-
- #define API_INTERRUPT_NUMBER 0x7A /* API Interrupt Number */
-
- /*
- * Define the gate numbers. These are returned via the Name Resolution
- * service.
- */
-
- #define GATE_SESSMGR 1234
- #define GATE_KEYBOARD 5678
- #define GATE_COPY 9101
- #define GATE_OIAM 1121
-
- /*
- * The names which correspond to the above gate numbers.
- */
-
- #define NAME_SESSMGR "SESSMGR "
- #define NAME_KEYBOARD "KEYBOARD"
- #define NAME_COPY "COPY "
- #define NAME_OIAM "OIAM "
-
-
- /*
- * Name Resolution is specified in AH.
- */
-
- #define NAME_RESOLUTION 0x81
-
- #if defined(unix)
- /*
- * In unix, we offer a service to allow the application to keep from
- * having to poll us constantly.
- */
- #define PS_OR_OIA_MODIFIED 0x99
-
- #endif /* defined(unix) */
-
- /*
- * Codes specified in AL for various services.
- */
-
- #define QUERY_SESSION_ID 0x01
- #define QUERY_SESSION_PARAMETERS 0x02
- #define QUERY_SESSION_CURSOR 0x0b
-
- #define CONNECT_TO_KEYBOARD 0x01
- #define DISCONNECT_FROM_KEYBOARD 0x02
- #define WRITE_KEYSTROKE 0x04
- #define DISABLE_INPUT 0x05
- #define ENABLE_INPUT 0x06
-
- #define COPY_STRING 0x01
-
- #define READ_OIA_GROUP 0x02
-
- /*
- * For each service, we define the assoicated parameter blocks.
- */
-
- /*
- * Supervisor Services
- */
-
- typedef struct {
- char gate_name[8];
- } NameResolveParms;
-
-
- /*
- * Session Information Services
- */
-
- typedef struct {
- char
- short_name,
- type,
- session_id,
- reserved,
- long_name[8];
- } NameArrayElement;
-
- typedef struct {
- unsigned char
- length,
- number_matching_session;
- NameArrayElement
- name_array_element; /* Variable number */
- } NameArray;
-
- typedef struct {
- char
- rc,
- function_id,
- option_code,
- data_code;
- NameArray far
- *name_array;
- char
- long_name[8];
- } QuerySessionIdParms;
-
- #define ID_OPTION_BY_NAME 0x01 /* By short (or long) name */
- #define ID_OPTION_ALL 0x00 /* All (of specified type */
-
- typedef struct {
- char
- rc,
- function_id,
- session_id,
- reserved,
- session_type,
- session_characteristics,
- rows,
- columns;
- char far
- *presentation_space;
- } QuerySessionParametersParms;
-
- #define TYPE_WSCTL 0x01 /* Work Station Control */
- #define TYPE_DFT 0x02 /* DFT Host Session */
- #define TYPE_CUT 0x03 /* CUT Host Session */
- #define TYPE_NOTEPAD 0x04 /* Notepad Session */
- #define TYPE_PC 0x05 /* Personal Computer Session */
-
- #define CHARACTERISTIC_EAB 0x80 /* Extended Attribute Buffer */
- #define CHARACTERISTIC_PSS 0x40 /* Program Symbols Supported */
-
- typedef struct {
- char
- rc,
- function_id,
- session_id,
- cursor_type,
- row_address, /* from 0 */
- column_address; /* from 0 */
- } QuerySessionCursorParms;
-
- #define CURSOR_INHIBITED_AUTOSCROLL 0x10
- #define CURSOR_INHIBITED 0x04
- #define CURSOR_BLINKING 0x02
- #define CURSOR_BOX 0x01
- typedef struct {
- char
- rc,
- function_id,
- session_id,
- reserved;
- short
- event_queue_id,
- input_queue_id;
- char
- intercept_options,
- first_connection_identifier;
- } ConnectToKeyboardParms;
-
- typedef struct {
- char
- rc,
- function_id,
- session_id,
- reserved;
- short
- connectors_task_id;
- } DisconnectFromKeyboardParms;
-
- typedef struct {
- unsigned char
- scancode,
- shift_state;
- } KeystrokeEntry;
-
- typedef struct {
- short
- length; /* Length (in bytes) of list */
- KeystrokeEntry keystrokes; /* Variable size */
- } KeystrokeList;
-
- typedef struct {
- char
- rc,
- function_id,
- session_id,
- reserved;
- short
- connectors_task_id;
- char
- options,
- number_of_keys_sent;
- union {
- KeystrokeEntry
- keystroke_entry;
- KeystrokeList far
- *keystroke_list;
- } keystroke_specifier;
- } WriteKeystrokeParms;
-
- #define OPTION_SINGLE_KEYSTROKE 0x20
- #define OPTION_MULTIPLE_KEYSTROKES 0x30
-
- typedef struct {
- char
- rc,
- function_id,
- session_id,
- reserved;
- short
- connectors_task_id;
- } DisableInputParms;
-
- typedef DisableInputParms EnableInputParms;
-
- typedef struct {
- char
- session_id,
- reserved;
- char far
- *buffer;
- char
- characteristics,
- session_type;
- short
- begin; /* Offset within buffer */
- } BufferDescriptor;
-
- typedef struct {
- char
- rc,
- function_id;
- BufferDescriptor
- source;
- short
- source_end; /* Offset within source buffer */
- BufferDescriptor
- target;
- char
- copy_mode,
- reserved;
- } CopyStringParms;
-
- #define COPY_MODE_7_COLOR 0x80 /* Else 4 color mode */
- #define COPY_MODE_FIELD_ATTRIBUTES 0x40 /* Else don't copy attributes */
-
- typedef struct {
- char
- rc,
- function_id,
- session_id,
- reserved;
- char far
- *oia_buffer;
- char
- oia_group_number;
- } ReadOiaGroupParms;
-
- /* If the user wants all groups, we return API_OIA_BYTES_ALL_GROUPS bytes */
- #define API_OIA_ALL_GROUPS '\377'
- #define API_OIA_BYTES_ALL_GROUPS 22 /* 22 bytes of data */
-
- /* API_OIA_INPUT_INHIBITED is special. It returns more than on byte of data */
- #define API_OIA_INPUT_INHIBITED 8
-
- #define API_OIA_LAST_LEGAL_GROUP 18 /* Highest legal number */
-
-
-
- #if defined(MSDOS)
-
- #if !defined(FP_SEG)
- #include <dos.h>
- #endif /* !defined(FP_SEG) */
-
- #else /* defined(MSDOS) */
-
- /*
- * These definitions are here to provide the descriptions of
- * some registers which are, normally, defined in <dos.h> on
- * a dos system.
- */
-
- #define FP_SEG(x) ((unsigned int)(((unsigned long)(x))>>16))
- #define FP_OFF(y) ((unsigned int)(((unsigned long)(y))&0xFFFF))
-
- /*
- * Undo the preceeding.
- */
-
- #define SEG_OFF_BACK(x,y) (((x)<<16)|(y))
-
- /*
- * Now, it is somewhat of a pain, but we need to keep
- * 8086 conventions about which of the "highlow"'s map
- * into which of the "words".
- */
-
- #include <sys/param.h> /* Get ENDIAN from machine/endian.h */
-
- /* Determine endian'ess (if necessary) */
-
- #if !(defined(BYTE_ORDER) && defined(BIG_ENDIAN))
- #define LITTLE_ENDIAN 1234 /* least-significant byte first (vax) */
- #define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */
-
- #if defined(vax) || defined(ns32000) || defined(i386) || (defined(mips)&&defined(MIPSEL))
- #define BYTE_ORDER LITTLE_ENDIAN
- #endif /* defined(vax) || defined(ns32000) */
-
- #if defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) || defined(gould) || (defined(mips)&&defined(MIPSEB))
- #define BYTE_ORDER BIG_ENDIAN
- #endif /* defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) || defined(gould) */
-
- #endif /* !(defined(BYTE_ORDER) && defined(BIG_ENDIAN)) */
-
- struct highlow {
- unsigned char
- #if BYTE_ORDER == LITTLE_ENDIAN
- al,
- ah,
- bl,
- bh,
- cl,
- ch,
- dl,
- dh;
- #endif /* BYTE_ORDER == LITTLE_ENDIAN */
- #if BYTE_ORDER == BIG_ENDIAN
- ah,
- al,
- bh,
- bl,
- ch,
- cl,
- dh,
- dl;
- #endif /* BYTE_ORDER == BIG_ENDIAN */
- };
-
- struct words {
- unsigned short
- ax,
- bx,
- cx,
- dx;
- unsigned short
- si,
- di;
- };
-
- union REGS {
- struct highlow h;
- struct words x;
- };
-
- struct SREGS {
- unsigned short
- cs,
- ds,
- es,
- ss;
- };
- #endif /* defined(MSDOS) (else section) */
-