131159Sminshall /* 233816Sbostic * Copyright (c) 1988 Regents of the University of California. 333816Sbostic * All rights reserved. 431892Sminshall * 533816Sbostic * Redistribution and use in source and binary forms are permitted 634887Sbostic * provided that the above copyright notice and this paragraph are 734887Sbostic * duplicated in all such forms and that any documentation, 834887Sbostic * advertising materials, and other materials related to such 934887Sbostic * distribution and use acknowledge that the software was developed 1034887Sbostic * by the University of California, Berkeley. The name of the 1134887Sbostic * University may not be used to endorse or promote products derived 1234887Sbostic * from this software without specific prior written permission. 1334887Sbostic * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 1434887Sbostic * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 1534887Sbostic * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 1633816Sbostic * 17*35421Sminshall * @(#)api.h 3.5 (Berkeley) 08/28/88 1831159Sminshall */ 1931159Sminshall 2033816Sbostic /* 2133816Sbostic * This file contains header information used by the PC API routines. 2233816Sbostic */ 2333816Sbostic 2431183Sminshall #if !defined(MSDOS) 2531183Sminshall #define far /* For 'far *' checks */ 2631183Sminshall #endif /* !defined(MSDOS) */ 2731183Sminshall 2831159Sminshall #define API_INTERRUPT_NUMBER 0x7A /* API Interrupt Number */ 2931159Sminshall 3031159Sminshall /* 3131159Sminshall * Define the gate numbers. These are returned via the Name Resolution 3231159Sminshall * service. 3331159Sminshall */ 3431159Sminshall 3531211Sminshall #define GATE_SESSMGR 1234 3631211Sminshall #define GATE_KEYBOARD 5678 3731211Sminshall #define GATE_COPY 9101 3831211Sminshall #define GATE_OIAM 1121 3931159Sminshall 4031167Sminshall /* 4131167Sminshall * The names which correspond to the above gate numbers. 4231167Sminshall */ 4331167Sminshall 4431167Sminshall #define NAME_SESSMGR "SESSMGR " 4531161Sminshall #define NAME_KEYBOARD "KEYBOARD" 4631167Sminshall #define NAME_COPY "COPY " 4731167Sminshall #define NAME_OIAM "OIAM " 4831161Sminshall 4931161Sminshall 5031159Sminshall /* 5131159Sminshall * Name Resolution is specified in AH. 5231159Sminshall */ 5331159Sminshall 5431517Sminshall #define NAME_RESOLUTION 0x81 5531159Sminshall 5631517Sminshall #if defined(unix) 5731159Sminshall /* 5831517Sminshall * In unix, we offer a service to allow the application to keep from 5931517Sminshall * having to poll us constantly. 6031517Sminshall */ 6131517Sminshall #define PS_OR_OIA_MODIFIED 0x99 6231517Sminshall 6331517Sminshall #endif /* defined(unix) */ 6431517Sminshall 6531517Sminshall /* 6631159Sminshall * Codes specified in AL for various services. 6731159Sminshall */ 6831159Sminshall 6931167Sminshall #define QUERY_SESSION_ID 0x01 7031211Sminshall #define QUERY_SESSION_PARAMETERS 0x02 7131167Sminshall #define QUERY_SESSION_CURSOR 0x0b 7231159Sminshall 7331167Sminshall #define CONNECT_TO_KEYBOARD 0x01 7431159Sminshall #define DISCONNECT_FROM_KEYBOARD 0x02 7531167Sminshall #define WRITE_KEYSTROKE 0x04 7631167Sminshall #define DISABLE_INPUT 0x05 7731167Sminshall #define ENABLE_INPUT 0x06 7831159Sminshall 7931167Sminshall #define COPY_STRING 0x01 8031159Sminshall 8131167Sminshall #define READ_OIA_GROUP 0x02 8231167Sminshall 8331167Sminshall /* 8431167Sminshall * For each service, we define the assoicated parameter blocks. 8531167Sminshall */ 8631167Sminshall 8731167Sminshall /* 8831167Sminshall * Supervisor Services 8931167Sminshall */ 9031167Sminshall 9131167Sminshall typedef struct { 9231167Sminshall char gate_name[8]; 9331167Sminshall } NameResolveParms; 9431167Sminshall 9531167Sminshall 9631167Sminshall /* 9731167Sminshall * Session Information Services 9831167Sminshall */ 9931167Sminshall 10031167Sminshall typedef struct { 10131167Sminshall char 10231167Sminshall short_name, 10331167Sminshall type, 10431167Sminshall session_id, 10531167Sminshall reserved, 10631167Sminshall long_name[8]; 10731167Sminshall } NameArrayElement; 10831167Sminshall 10931167Sminshall typedef struct { 11031802Sminshall unsigned char 11131167Sminshall length, 11231167Sminshall number_matching_session; 11331167Sminshall NameArrayElement 11431167Sminshall name_array_element; /* Variable number */ 11531167Sminshall } NameArray; 11631167Sminshall 11731167Sminshall typedef struct { 11831167Sminshall char 11931167Sminshall rc, 12031167Sminshall function_id, 12131167Sminshall option_code, 12231167Sminshall data_code; 12331167Sminshall NameArray far 12431167Sminshall *name_array; 12531167Sminshall char 12631167Sminshall long_name[8]; 12731167Sminshall } QuerySessionIdParms; 12831167Sminshall 12931211Sminshall #define ID_OPTION_BY_NAME 0x01 /* By short (or long) name */ 13031211Sminshall #define ID_OPTION_ALL 0x00 /* All (of specified type */ 13131211Sminshall 13231167Sminshall typedef struct { 13331167Sminshall char 13431167Sminshall rc, 13531167Sminshall function_id, 13631167Sminshall session_id, 13731167Sminshall reserved, 13831167Sminshall session_type, 13931167Sminshall session_characteristics, 14031167Sminshall rows, 14131167Sminshall columns; 14231167Sminshall char far 14331167Sminshall *presentation_space; 14431168Sminshall } QuerySessionParametersParms; 14531167Sminshall 14631167Sminshall #define TYPE_WSCTL 0x01 /* Work Station Control */ 14731167Sminshall #define TYPE_DFT 0x02 /* DFT Host Session */ 14831167Sminshall #define TYPE_CUT 0x03 /* CUT Host Session */ 14931167Sminshall #define TYPE_NOTEPAD 0x04 /* Notepad Session */ 15031167Sminshall #define TYPE_PC 0x05 /* Personal Computer Session */ 15131167Sminshall 15231167Sminshall #define CHARACTERISTIC_EAB 0x80 /* Extended Attribute Buffer */ 15331167Sminshall #define CHARACTERISTIC_PSS 0x40 /* Program Symbols Supported */ 15431167Sminshall 15531167Sminshall typedef struct { 15631167Sminshall char 15731167Sminshall rc, 15831167Sminshall function_id, 15931167Sminshall session_id, 16031167Sminshall cursor_type, 16131167Sminshall row_address, /* from 0 */ 16231167Sminshall column_address; /* from 0 */ 16331167Sminshall } QuerySessionCursorParms; 16431167Sminshall 16531167Sminshall #define CURSOR_INHIBITED_AUTOSCROLL 0x10 16631167Sminshall #define CURSOR_INHIBITED 0x04 16731167Sminshall #define CURSOR_BLINKING 0x02 16831167Sminshall #define CURSOR_BOX 0x01 16931167Sminshall typedef struct { 17031167Sminshall char 17131167Sminshall rc, 17231167Sminshall function_id, 17331167Sminshall session_id, 17431167Sminshall reserved; 175*35421Sminshall short 17631167Sminshall event_queue_id, 17731167Sminshall input_queue_id; 17831167Sminshall char 17931167Sminshall intercept_options, 18031167Sminshall first_connection_identifier; 18131167Sminshall } ConnectToKeyboardParms; 18231167Sminshall 18331167Sminshall typedef struct { 18431167Sminshall char 18531167Sminshall rc, 18631167Sminshall function_id, 18731167Sminshall session_id, 18831167Sminshall reserved; 189*35421Sminshall short 19031168Sminshall connectors_task_id; 19131167Sminshall } DisconnectFromKeyboardParms; 19231167Sminshall 19331167Sminshall typedef struct { 194*35421Sminshall unsigned char 19531167Sminshall scancode, 19631167Sminshall shift_state; 19731167Sminshall } KeystrokeEntry; 19831167Sminshall 19931167Sminshall typedef struct { 200*35421Sminshall short 20131167Sminshall length; /* Length (in bytes) of list */ 20231167Sminshall KeystrokeEntry keystrokes; /* Variable size */ 20331167Sminshall } KeystrokeList; 20431167Sminshall 20531167Sminshall typedef struct { 20631167Sminshall char 20731167Sminshall rc, 20831167Sminshall function_id, 20931167Sminshall session_id, 21031167Sminshall reserved; 211*35421Sminshall short 21231167Sminshall connectors_task_id; 21331167Sminshall char 21431167Sminshall options, 21531167Sminshall number_of_keys_sent; 21631167Sminshall union { 21731167Sminshall KeystrokeEntry 21831167Sminshall keystroke_entry; 21931167Sminshall KeystrokeList far 22031167Sminshall *keystroke_list; 22131167Sminshall } keystroke_specifier; 22231167Sminshall } WriteKeystrokeParms; 22331167Sminshall 22431198Sminshall #define OPTION_SINGLE_KEYSTROKE 0x20 22531198Sminshall #define OPTION_MULTIPLE_KEYSTROKES 0x30 22631198Sminshall 22731167Sminshall typedef struct { 22831167Sminshall char 22931167Sminshall rc, 23031167Sminshall function_id, 23131167Sminshall session_id, 23231167Sminshall reserved; 233*35421Sminshall short 23431167Sminshall connectors_task_id; 23531167Sminshall } DisableInputParms; 23631167Sminshall 23731167Sminshall typedef DisableInputParms EnableInputParms; 23831167Sminshall 23931167Sminshall typedef struct { 24031167Sminshall char 24131167Sminshall session_id, 24231167Sminshall reserved; 24331167Sminshall char far 24431167Sminshall *buffer; 24531167Sminshall char 24631167Sminshall characteristics, 24731167Sminshall session_type; 248*35421Sminshall short 24931167Sminshall begin; /* Offset within buffer */ 25031167Sminshall } BufferDescriptor; 25131167Sminshall 25231167Sminshall typedef struct { 25331167Sminshall char 25431167Sminshall rc, 25531167Sminshall function_id; 25631167Sminshall BufferDescriptor 25731167Sminshall source; 258*35421Sminshall short 25931167Sminshall source_end; /* Offset within source buffer */ 26031167Sminshall BufferDescriptor 26131167Sminshall target; 26231167Sminshall char 26331167Sminshall copy_mode, 26431167Sminshall reserved; 26531167Sminshall } CopyStringParms; 26631167Sminshall 26731167Sminshall #define COPY_MODE_7_COLOR 0x80 /* Else 4 color mode */ 26831167Sminshall #define COPY_MODE_FIELD_ATTRIBUTES 0x40 /* Else don't copy attributes */ 26931167Sminshall 27031167Sminshall typedef struct { 27131167Sminshall char 27231167Sminshall rc, 27331167Sminshall function_id, 27431167Sminshall session_id, 27531167Sminshall reserved; 27631167Sminshall char far 27731167Sminshall *oia_buffer; 27831167Sminshall char 27931167Sminshall oia_group_number; 28031167Sminshall } ReadOiaGroupParms; 28131167Sminshall 28231193Sminshall /* If the user wants all groups, we return API_OIA_BYTES_ALL_GROUPS bytes */ 28331211Sminshall #define API_OIA_ALL_GROUPS '\377' 28431193Sminshall #define API_OIA_BYTES_ALL_GROUPS 22 /* 22 bytes of data */ 28531167Sminshall 28631193Sminshall /* API_OIA_INPUT_INHIBITED is special. It returns more than on byte of data */ 28731193Sminshall #define API_OIA_INPUT_INHIBITED 8 28831167Sminshall 28931193Sminshall #define API_OIA_LAST_LEGAL_GROUP 18 /* Highest legal number */ 29031167Sminshall 29131167Sminshall 29231167Sminshall 29331183Sminshall #if defined(MSDOS) 29431183Sminshall 29531183Sminshall #if !defined(FP_SEG) 29631183Sminshall #include <dos.h> 29731183Sminshall #endif /* !defined(FP_SEG) */ 29831183Sminshall 29931183Sminshall #else /* defined(MSDOS) */ 30031183Sminshall 30131183Sminshall /* 30231183Sminshall * These definitions are here to provide the descriptions of 30331183Sminshall * some registers which are, normally, defined in <dos.h> on 30431183Sminshall * a dos system. 30531183Sminshall */ 30631183Sminshall 307*35421Sminshall #define FP_SEG(x) ((unsigned int)(((unsigned long)(x))>>16)) 308*35421Sminshall #define FP_OFF(y) ((unsigned int)(((unsigned long)(y))&0xFFFF)) 30931183Sminshall 31031469Sminshall /* 311*35421Sminshall * Undo the preceeding. 312*35421Sminshall */ 313*35421Sminshall 314*35421Sminshall #define SEG_OFF_BACK(x,y) (((x)<<16)|(y)) 315*35421Sminshall 316*35421Sminshall /* 31731469Sminshall * Now, it is somewhat of a pain, but we need to keep 31831469Sminshall * 8086 conventions about which of the "highlow"'s map 31931469Sminshall * into which of the "words". 32031469Sminshall */ 32131469Sminshall 32231183Sminshall struct highlow { 32331469Sminshall unsigned char 324*35421Sminshall #if defined(vax) || defined(ns32000) 32531469Sminshall al, 32631183Sminshall ah, 32731469Sminshall bl, 32831183Sminshall bh, 32931469Sminshall cl, 33031183Sminshall ch, 33131469Sminshall dl, 33231469Sminshall dh; 333*35421Sminshall #endif /* defined(vax) || defined(ns32000) */ 33433270Sminshall #if defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) 33531504Sminshall ah, 33631504Sminshall al, 33731504Sminshall bh, 33831504Sminshall bl, 33931504Sminshall ch, 34031504Sminshall cl, 34131504Sminshall dh, 34231504Sminshall dl; 343*35421Sminshall #endif /* defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) */ 34431183Sminshall }; 34531183Sminshall 34631183Sminshall struct words { 34731469Sminshall unsigned short 34831183Sminshall ax, 34931183Sminshall bx, 35031183Sminshall cx, 35131469Sminshall dx; 352*35421Sminshall unsigned short 35331183Sminshall si, 35431183Sminshall di; 35531183Sminshall }; 35631183Sminshall 35731183Sminshall union REGS { 35831183Sminshall struct highlow h; 35931183Sminshall struct words x; 36031183Sminshall }; 36131183Sminshall 36231183Sminshall struct SREGS { 363*35421Sminshall unsigned short 36431183Sminshall cs, 36531183Sminshall ds, 36631183Sminshall es, 36731183Sminshall ss; 36831183Sminshall }; 36931183Sminshall #endif /* defined(MSDOS) (else section) */ 370