148756Sbostic /*- 2*62323Sbostic * Copyright (c) 1988, 1993 3*62323Sbostic * The Regents of the University of California. All rights reserved. 431892Sminshall * 548756Sbostic * %sccs.include.redist.c% 633816Sbostic * 7*62323Sbostic * @(#)api.h 8.1 (Berkeley) 06/06/93 831159Sminshall */ 931159Sminshall 1033816Sbostic /* 1133816Sbostic * This file contains header information used by the PC API routines. 1233816Sbostic */ 1333816Sbostic 1431183Sminshall #if !defined(MSDOS) 1531183Sminshall #define far /* For 'far *' checks */ 1631183Sminshall #endif /* !defined(MSDOS) */ 1731183Sminshall 1831159Sminshall #define API_INTERRUPT_NUMBER 0x7A /* API Interrupt Number */ 1931159Sminshall 2031159Sminshall /* 2131159Sminshall * Define the gate numbers. These are returned via the Name Resolution 2231159Sminshall * service. 2331159Sminshall */ 2431159Sminshall 2531211Sminshall #define GATE_SESSMGR 1234 2631211Sminshall #define GATE_KEYBOARD 5678 2731211Sminshall #define GATE_COPY 9101 2831211Sminshall #define GATE_OIAM 1121 2931159Sminshall 3031167Sminshall /* 3131167Sminshall * The names which correspond to the above gate numbers. 3231167Sminshall */ 3331167Sminshall 3431167Sminshall #define NAME_SESSMGR "SESSMGR " 3531161Sminshall #define NAME_KEYBOARD "KEYBOARD" 3631167Sminshall #define NAME_COPY "COPY " 3731167Sminshall #define NAME_OIAM "OIAM " 3831161Sminshall 3931161Sminshall 4031159Sminshall /* 4131159Sminshall * Name Resolution is specified in AH. 4231159Sminshall */ 4331159Sminshall 4431517Sminshall #define NAME_RESOLUTION 0x81 4531159Sminshall 4631517Sminshall #if defined(unix) 4731159Sminshall /* 4831517Sminshall * In unix, we offer a service to allow the application to keep from 4931517Sminshall * having to poll us constantly. 5031517Sminshall */ 5131517Sminshall #define PS_OR_OIA_MODIFIED 0x99 5231517Sminshall 5331517Sminshall #endif /* defined(unix) */ 5431517Sminshall 5531517Sminshall /* 5631159Sminshall * Codes specified in AL for various services. 5731159Sminshall */ 5831159Sminshall 5931167Sminshall #define QUERY_SESSION_ID 0x01 6031211Sminshall #define QUERY_SESSION_PARAMETERS 0x02 6131167Sminshall #define QUERY_SESSION_CURSOR 0x0b 6231159Sminshall 6331167Sminshall #define CONNECT_TO_KEYBOARD 0x01 6431159Sminshall #define DISCONNECT_FROM_KEYBOARD 0x02 6531167Sminshall #define WRITE_KEYSTROKE 0x04 6631167Sminshall #define DISABLE_INPUT 0x05 6731167Sminshall #define ENABLE_INPUT 0x06 6831159Sminshall 6931167Sminshall #define COPY_STRING 0x01 7031159Sminshall 7131167Sminshall #define READ_OIA_GROUP 0x02 7231167Sminshall 7331167Sminshall /* 7431167Sminshall * For each service, we define the assoicated parameter blocks. 7531167Sminshall */ 7631167Sminshall 7731167Sminshall /* 7831167Sminshall * Supervisor Services 7931167Sminshall */ 8031167Sminshall 8131167Sminshall typedef struct { 8231167Sminshall char gate_name[8]; 8331167Sminshall } NameResolveParms; 8431167Sminshall 8531167Sminshall 8631167Sminshall /* 8731167Sminshall * Session Information Services 8831167Sminshall */ 8931167Sminshall 9031167Sminshall typedef struct { 9131167Sminshall char 9231167Sminshall short_name, 9331167Sminshall type, 9431167Sminshall session_id, 9531167Sminshall reserved, 9631167Sminshall long_name[8]; 9731167Sminshall } NameArrayElement; 9831167Sminshall 9931167Sminshall typedef struct { 10031802Sminshall unsigned char 10131167Sminshall length, 10231167Sminshall number_matching_session; 10331167Sminshall NameArrayElement 10431167Sminshall name_array_element; /* Variable number */ 10531167Sminshall } NameArray; 10631167Sminshall 10731167Sminshall typedef struct { 10831167Sminshall char 10931167Sminshall rc, 11031167Sminshall function_id, 11131167Sminshall option_code, 11231167Sminshall data_code; 11331167Sminshall NameArray far 11431167Sminshall *name_array; 11531167Sminshall char 11631167Sminshall long_name[8]; 11731167Sminshall } QuerySessionIdParms; 11831167Sminshall 11931211Sminshall #define ID_OPTION_BY_NAME 0x01 /* By short (or long) name */ 12031211Sminshall #define ID_OPTION_ALL 0x00 /* All (of specified type */ 12131211Sminshall 12231167Sminshall typedef struct { 12331167Sminshall char 12431167Sminshall rc, 12531167Sminshall function_id, 12631167Sminshall session_id, 12731167Sminshall reserved, 12831167Sminshall session_type, 12931167Sminshall session_characteristics, 13031167Sminshall rows, 13131167Sminshall columns; 13231167Sminshall char far 13331167Sminshall *presentation_space; 13431168Sminshall } QuerySessionParametersParms; 13531167Sminshall 13631167Sminshall #define TYPE_WSCTL 0x01 /* Work Station Control */ 13731167Sminshall #define TYPE_DFT 0x02 /* DFT Host Session */ 13831167Sminshall #define TYPE_CUT 0x03 /* CUT Host Session */ 13931167Sminshall #define TYPE_NOTEPAD 0x04 /* Notepad Session */ 14031167Sminshall #define TYPE_PC 0x05 /* Personal Computer Session */ 14131167Sminshall 14231167Sminshall #define CHARACTERISTIC_EAB 0x80 /* Extended Attribute Buffer */ 14331167Sminshall #define CHARACTERISTIC_PSS 0x40 /* Program Symbols Supported */ 14431167Sminshall 14531167Sminshall typedef struct { 14631167Sminshall char 14731167Sminshall rc, 14831167Sminshall function_id, 14931167Sminshall session_id, 15031167Sminshall cursor_type, 15131167Sminshall row_address, /* from 0 */ 15231167Sminshall column_address; /* from 0 */ 15331167Sminshall } QuerySessionCursorParms; 15431167Sminshall 15531167Sminshall #define CURSOR_INHIBITED_AUTOSCROLL 0x10 15631167Sminshall #define CURSOR_INHIBITED 0x04 15731167Sminshall #define CURSOR_BLINKING 0x02 15831167Sminshall #define CURSOR_BOX 0x01 15931167Sminshall typedef struct { 16031167Sminshall char 16131167Sminshall rc, 16231167Sminshall function_id, 16331167Sminshall session_id, 16431167Sminshall reserved; 16535421Sminshall short 16631167Sminshall event_queue_id, 16731167Sminshall input_queue_id; 16831167Sminshall char 16931167Sminshall intercept_options, 17031167Sminshall first_connection_identifier; 17131167Sminshall } ConnectToKeyboardParms; 17231167Sminshall 17331167Sminshall typedef struct { 17431167Sminshall char 17531167Sminshall rc, 17631167Sminshall function_id, 17731167Sminshall session_id, 17831167Sminshall reserved; 17935421Sminshall short 18031168Sminshall connectors_task_id; 18131167Sminshall } DisconnectFromKeyboardParms; 18231167Sminshall 18331167Sminshall typedef struct { 18435421Sminshall unsigned char 18531167Sminshall scancode, 18631167Sminshall shift_state; 18731167Sminshall } KeystrokeEntry; 18831167Sminshall 18931167Sminshall typedef struct { 19035421Sminshall short 19131167Sminshall length; /* Length (in bytes) of list */ 19231167Sminshall KeystrokeEntry keystrokes; /* Variable size */ 19331167Sminshall } KeystrokeList; 19431167Sminshall 19531167Sminshall typedef struct { 19631167Sminshall char 19731167Sminshall rc, 19831167Sminshall function_id, 19931167Sminshall session_id, 20031167Sminshall reserved; 20135421Sminshall short 20231167Sminshall connectors_task_id; 20331167Sminshall char 20431167Sminshall options, 20531167Sminshall number_of_keys_sent; 20631167Sminshall union { 20731167Sminshall KeystrokeEntry 20831167Sminshall keystroke_entry; 20931167Sminshall KeystrokeList far 21031167Sminshall *keystroke_list; 21131167Sminshall } keystroke_specifier; 21231167Sminshall } WriteKeystrokeParms; 21331167Sminshall 21431198Sminshall #define OPTION_SINGLE_KEYSTROKE 0x20 21531198Sminshall #define OPTION_MULTIPLE_KEYSTROKES 0x30 21631198Sminshall 21731167Sminshall typedef struct { 21831167Sminshall char 21931167Sminshall rc, 22031167Sminshall function_id, 22131167Sminshall session_id, 22231167Sminshall reserved; 22335421Sminshall short 22431167Sminshall connectors_task_id; 22531167Sminshall } DisableInputParms; 22631167Sminshall 22731167Sminshall typedef DisableInputParms EnableInputParms; 22831167Sminshall 22931167Sminshall typedef struct { 23031167Sminshall char 23131167Sminshall session_id, 23231167Sminshall reserved; 23331167Sminshall char far 23431167Sminshall *buffer; 23531167Sminshall char 23631167Sminshall characteristics, 23731167Sminshall session_type; 23835421Sminshall short 23931167Sminshall begin; /* Offset within buffer */ 24031167Sminshall } BufferDescriptor; 24131167Sminshall 24231167Sminshall typedef struct { 24331167Sminshall char 24431167Sminshall rc, 24531167Sminshall function_id; 24631167Sminshall BufferDescriptor 24731167Sminshall source; 24835421Sminshall short 24931167Sminshall source_end; /* Offset within source buffer */ 25031167Sminshall BufferDescriptor 25131167Sminshall target; 25231167Sminshall char 25331167Sminshall copy_mode, 25431167Sminshall reserved; 25531167Sminshall } CopyStringParms; 25631167Sminshall 25731167Sminshall #define COPY_MODE_7_COLOR 0x80 /* Else 4 color mode */ 25831167Sminshall #define COPY_MODE_FIELD_ATTRIBUTES 0x40 /* Else don't copy attributes */ 25931167Sminshall 26031167Sminshall typedef struct { 26131167Sminshall char 26231167Sminshall rc, 26331167Sminshall function_id, 26431167Sminshall session_id, 26531167Sminshall reserved; 26631167Sminshall char far 26731167Sminshall *oia_buffer; 26831167Sminshall char 26931167Sminshall oia_group_number; 27031167Sminshall } ReadOiaGroupParms; 27131167Sminshall 27231193Sminshall /* If the user wants all groups, we return API_OIA_BYTES_ALL_GROUPS bytes */ 27331211Sminshall #define API_OIA_ALL_GROUPS '\377' 27431193Sminshall #define API_OIA_BYTES_ALL_GROUPS 22 /* 22 bytes of data */ 27531167Sminshall 27631193Sminshall /* API_OIA_INPUT_INHIBITED is special. It returns more than on byte of data */ 27731193Sminshall #define API_OIA_INPUT_INHIBITED 8 27831167Sminshall 27931193Sminshall #define API_OIA_LAST_LEGAL_GROUP 18 /* Highest legal number */ 28031167Sminshall 28131167Sminshall 28231167Sminshall 28331183Sminshall #if defined(MSDOS) 28431183Sminshall 28531183Sminshall #if !defined(FP_SEG) 28631183Sminshall #include <dos.h> 28731183Sminshall #endif /* !defined(FP_SEG) */ 28831183Sminshall 28931183Sminshall #else /* defined(MSDOS) */ 29031183Sminshall 29131183Sminshall /* 29231183Sminshall * These definitions are here to provide the descriptions of 29331183Sminshall * some registers which are, normally, defined in <dos.h> on 29431183Sminshall * a dos system. 29531183Sminshall */ 29631183Sminshall 29735421Sminshall #define FP_SEG(x) ((unsigned int)(((unsigned long)(x))>>16)) 29835421Sminshall #define FP_OFF(y) ((unsigned int)(((unsigned long)(y))&0xFFFF)) 29931183Sminshall 30031469Sminshall /* 30135421Sminshall * Undo the preceeding. 30235421Sminshall */ 30335421Sminshall 30435421Sminshall #define SEG_OFF_BACK(x,y) (((x)<<16)|(y)) 30535421Sminshall 30635421Sminshall /* 30731469Sminshall * Now, it is somewhat of a pain, but we need to keep 30831469Sminshall * 8086 conventions about which of the "highlow"'s map 30931469Sminshall * into which of the "words". 31031469Sminshall */ 31131469Sminshall 31236696Sminshall #include <sys/param.h> /* Get ENDIAN from machine/endian.h */ 31336696Sminshall 31436696Sminshall /* Determine endian'ess (if necessary) */ 31536696Sminshall 31636696Sminshall #if !(defined(BYTE_ORDER) && defined(BIG_ENDIAN)) 31736696Sminshall #define LITTLE_ENDIAN 1234 /* least-significant byte first (vax) */ 31836696Sminshall #define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ 31936696Sminshall 32039202Sminshall #if defined(vax) || defined(ns32000) || defined(i386) || (defined(mips)&&defined(MIPSEL)) 32136696Sminshall #define BYTE_ORDER LITTLE_ENDIAN 32236696Sminshall #endif /* defined(vax) || defined(ns32000) */ 32336696Sminshall 32439202Sminshall #if defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) || defined(gould) || (defined(mips)&&defined(MIPSEB)) 32536696Sminshall #define BYTE_ORDER BIG_ENDIAN 32636696Sminshall #endif /* defined(sun) || defined(tahoe) || defined(ibm032) || defined(pyr) || defined(gould) */ 32736696Sminshall 32836696Sminshall #endif /* !(defined(BYTE_ORDER) && defined(BIG_ENDIAN)) */ 32936696Sminshall 33031183Sminshall struct highlow { 33131469Sminshall unsigned char 33236696Sminshall #if BYTE_ORDER == LITTLE_ENDIAN 33331469Sminshall al, 33431183Sminshall ah, 33531469Sminshall bl, 33631183Sminshall bh, 33731469Sminshall cl, 33831183Sminshall ch, 33931469Sminshall dl, 34031469Sminshall dh; 34136696Sminshall #endif /* BYTE_ORDER == LITTLE_ENDIAN */ 34236696Sminshall #if BYTE_ORDER == BIG_ENDIAN 34331504Sminshall ah, 34431504Sminshall al, 34531504Sminshall bh, 34631504Sminshall bl, 34731504Sminshall ch, 34831504Sminshall cl, 34931504Sminshall dh, 35031504Sminshall dl; 35136696Sminshall #endif /* BYTE_ORDER == BIG_ENDIAN */ 35231183Sminshall }; 35331183Sminshall 35431183Sminshall struct words { 35531469Sminshall unsigned short 35631183Sminshall ax, 35731183Sminshall bx, 35831183Sminshall cx, 35931469Sminshall dx; 36035421Sminshall unsigned short 36131183Sminshall si, 36231183Sminshall di; 36331183Sminshall }; 36431183Sminshall 36531183Sminshall union REGS { 36631183Sminshall struct highlow h; 36731183Sminshall struct words x; 36831183Sminshall }; 36931183Sminshall 37031183Sminshall struct SREGS { 37135421Sminshall unsigned short 37231183Sminshall cs, 37331183Sminshall ds, 37431183Sminshall es, 37531183Sminshall ss; 37631183Sminshall }; 37731183Sminshall #endif /* defined(MSDOS) (else section) */ 378