/* $NetBSD: api.h,v 1.6 2002/06/13 23:41:19 wiz Exp $ */ /*- * 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. * * from: @(#)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 #endif /* !defined(FP_SEG) */ #else /* defined(MSDOS) */ /* * These definitions are here to provide the descriptions of * some registers which are, normally, defined in 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 preceding. */ #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 /* 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) */ /* Interface */ int api_close_api(void); int api_open_api(char *); int api_exch_api(union REGS *, struct SREGS *, char *, int); /* api.c */ void handle_api(union REGS *, struct SREGS *);