131159Sminshall /* 231159Sminshall * This file contains header information used by the PC API routines. 3*31892Sminshall * 4*31892Sminshall * @(#)api.h 1.13 (Berkeley) 07/17/87 531159Sminshall */ 631159Sminshall 731183Sminshall #if !defined(MSDOS) 831183Sminshall #define far /* For 'far *' checks */ 931183Sminshall #endif /* !defined(MSDOS) */ 1031183Sminshall 1131159Sminshall #define API_INTERRUPT_NUMBER 0x7A /* API Interrupt Number */ 1231159Sminshall 1331159Sminshall /* 1431159Sminshall * Define the gate numbers. These are returned via the Name Resolution 1531159Sminshall * service. 1631159Sminshall */ 1731159Sminshall 1831211Sminshall #define GATE_SESSMGR 1234 1931211Sminshall #define GATE_KEYBOARD 5678 2031211Sminshall #define GATE_COPY 9101 2131211Sminshall #define GATE_OIAM 1121 2231159Sminshall 2331167Sminshall /* 2431167Sminshall * The names which correspond to the above gate numbers. 2531167Sminshall */ 2631167Sminshall 2731167Sminshall #define NAME_SESSMGR "SESSMGR " 2831161Sminshall #define NAME_KEYBOARD "KEYBOARD" 2931167Sminshall #define NAME_COPY "COPY " 3031167Sminshall #define NAME_OIAM "OIAM " 3131161Sminshall 3231161Sminshall 3331159Sminshall /* 3431159Sminshall * Name Resolution is specified in AH. 3531159Sminshall */ 3631159Sminshall 3731517Sminshall #define NAME_RESOLUTION 0x81 3831159Sminshall 3931517Sminshall #if defined(unix) 4031159Sminshall /* 4131517Sminshall * In unix, we offer a service to allow the application to keep from 4231517Sminshall * having to poll us constantly. 4331517Sminshall */ 4431517Sminshall #define PS_OR_OIA_MODIFIED 0x99 4531517Sminshall 4631517Sminshall #endif /* defined(unix) */ 4731517Sminshall 4831517Sminshall /* 4931159Sminshall * Codes specified in AL for various services. 5031159Sminshall */ 5131159Sminshall 5231167Sminshall #define QUERY_SESSION_ID 0x01 5331211Sminshall #define QUERY_SESSION_PARAMETERS 0x02 5431167Sminshall #define QUERY_SESSION_CURSOR 0x0b 5531159Sminshall 5631167Sminshall #define CONNECT_TO_KEYBOARD 0x01 5731159Sminshall #define DISCONNECT_FROM_KEYBOARD 0x02 5831167Sminshall #define WRITE_KEYSTROKE 0x04 5931167Sminshall #define DISABLE_INPUT 0x05 6031167Sminshall #define ENABLE_INPUT 0x06 6131159Sminshall 6231167Sminshall #define COPY_STRING 0x01 6331159Sminshall 6431167Sminshall #define READ_OIA_GROUP 0x02 6531167Sminshall 6631167Sminshall /* 6731167Sminshall * For each service, we define the assoicated parameter blocks. 6831167Sminshall */ 6931167Sminshall 7031167Sminshall /* 7131167Sminshall * Supervisor Services 7231167Sminshall */ 7331167Sminshall 7431167Sminshall typedef struct { 7531167Sminshall char gate_name[8]; 7631167Sminshall } NameResolveParms; 7731167Sminshall 7831167Sminshall 7931167Sminshall /* 8031167Sminshall * Session Information Services 8131167Sminshall */ 8231167Sminshall 8331167Sminshall typedef struct { 8431167Sminshall char 8531167Sminshall short_name, 8631167Sminshall type, 8731167Sminshall session_id, 8831167Sminshall reserved, 8931167Sminshall long_name[8]; 9031167Sminshall } NameArrayElement; 9131167Sminshall 9231167Sminshall typedef struct { 9331802Sminshall unsigned char 9431167Sminshall length, 9531167Sminshall number_matching_session; 9631167Sminshall NameArrayElement 9731167Sminshall name_array_element; /* Variable number */ 9831167Sminshall } NameArray; 9931167Sminshall 10031167Sminshall typedef struct { 10131167Sminshall char 10231167Sminshall rc, 10331167Sminshall function_id, 10431167Sminshall option_code, 10531167Sminshall data_code; 10631167Sminshall NameArray far 10731167Sminshall *name_array; 10831167Sminshall char 10931167Sminshall long_name[8]; 11031167Sminshall } QuerySessionIdParms; 11131167Sminshall 11231211Sminshall #define ID_OPTION_BY_NAME 0x01 /* By short (or long) name */ 11331211Sminshall #define ID_OPTION_ALL 0x00 /* All (of specified type */ 11431211Sminshall 11531167Sminshall typedef struct { 11631167Sminshall char 11731167Sminshall rc, 11831167Sminshall function_id, 11931167Sminshall session_id, 12031167Sminshall reserved, 12131167Sminshall session_type, 12231167Sminshall session_characteristics, 12331167Sminshall rows, 12431167Sminshall columns; 12531167Sminshall char far 12631167Sminshall *presentation_space; 12731168Sminshall } QuerySessionParametersParms; 12831167Sminshall 12931167Sminshall #define TYPE_WSCTL 0x01 /* Work Station Control */ 13031167Sminshall #define TYPE_DFT 0x02 /* DFT Host Session */ 13131167Sminshall #define TYPE_CUT 0x03 /* CUT Host Session */ 13231167Sminshall #define TYPE_NOTEPAD 0x04 /* Notepad Session */ 13331167Sminshall #define TYPE_PC 0x05 /* Personal Computer Session */ 13431167Sminshall 13531167Sminshall #define CHARACTERISTIC_EAB 0x80 /* Extended Attribute Buffer */ 13631167Sminshall #define CHARACTERISTIC_PSS 0x40 /* Program Symbols Supported */ 13731167Sminshall 13831167Sminshall typedef struct { 13931167Sminshall char 14031167Sminshall rc, 14131167Sminshall function_id, 14231167Sminshall session_id, 14331167Sminshall cursor_type, 14431167Sminshall row_address, /* from 0 */ 14531167Sminshall column_address; /* from 0 */ 14631167Sminshall } QuerySessionCursorParms; 14731167Sminshall 14831167Sminshall #define CURSOR_INHIBITED_AUTOSCROLL 0x10 14931167Sminshall #define CURSOR_INHIBITED 0x04 15031167Sminshall #define CURSOR_BLINKING 0x02 15131167Sminshall #define CURSOR_BOX 0x01 15231167Sminshall typedef struct { 15331167Sminshall char 15431167Sminshall rc, 15531167Sminshall function_id, 15631167Sminshall session_id, 15731167Sminshall reserved; 15831167Sminshall int 15931167Sminshall event_queue_id, 16031167Sminshall input_queue_id; 16131167Sminshall char 16231167Sminshall intercept_options, 16331167Sminshall first_connection_identifier; 16431167Sminshall } ConnectToKeyboardParms; 16531167Sminshall 16631167Sminshall typedef struct { 16731167Sminshall char 16831167Sminshall rc, 16931167Sminshall function_id, 17031167Sminshall session_id, 17131167Sminshall reserved; 17231167Sminshall int 17331168Sminshall connectors_task_id; 17431167Sminshall } DisconnectFromKeyboardParms; 17531167Sminshall 17631167Sminshall typedef struct { 17731167Sminshall char 17831167Sminshall scancode, 17931167Sminshall shift_state; 18031167Sminshall } KeystrokeEntry; 18131167Sminshall 18231167Sminshall typedef struct { 18331167Sminshall int 18431167Sminshall length; /* Length (in bytes) of list */ 18531167Sminshall KeystrokeEntry keystrokes; /* Variable size */ 18631167Sminshall } KeystrokeList; 18731167Sminshall 18831167Sminshall typedef struct { 18931167Sminshall char 19031167Sminshall rc, 19131167Sminshall function_id, 19231167Sminshall session_id, 19331167Sminshall reserved; 19431167Sminshall int 19531167Sminshall connectors_task_id; 19631167Sminshall char 19731167Sminshall options, 19831167Sminshall number_of_keys_sent; 19931167Sminshall union { 20031167Sminshall KeystrokeEntry 20131167Sminshall keystroke_entry; 20231167Sminshall KeystrokeList far 20331167Sminshall *keystroke_list; 20431167Sminshall } keystroke_specifier; 20531167Sminshall } WriteKeystrokeParms; 20631167Sminshall 20731198Sminshall #define OPTION_SINGLE_KEYSTROKE 0x20 20831198Sminshall #define OPTION_MULTIPLE_KEYSTROKES 0x30 20931198Sminshall 21031167Sminshall typedef struct { 21131167Sminshall char 21231167Sminshall rc, 21331167Sminshall function_id, 21431167Sminshall session_id, 21531167Sminshall reserved; 21631167Sminshall int 21731167Sminshall connectors_task_id; 21831167Sminshall } DisableInputParms; 21931167Sminshall 22031167Sminshall typedef DisableInputParms EnableInputParms; 22131167Sminshall 22231167Sminshall typedef struct { 22331167Sminshall char 22431167Sminshall session_id, 22531167Sminshall reserved; 22631167Sminshall char far 22731167Sminshall *buffer; 22831167Sminshall char 22931167Sminshall characteristics, 23031167Sminshall session_type; 23131167Sminshall int 23231167Sminshall begin; /* Offset within buffer */ 23331167Sminshall } BufferDescriptor; 23431167Sminshall 23531167Sminshall typedef struct { 23631167Sminshall char 23731167Sminshall rc, 23831167Sminshall function_id; 23931167Sminshall BufferDescriptor 24031167Sminshall source; 24131167Sminshall int 24231167Sminshall source_end; /* Offset within source buffer */ 24331167Sminshall BufferDescriptor 24431167Sminshall target; 24531167Sminshall char 24631167Sminshall copy_mode, 24731167Sminshall reserved; 24831167Sminshall } CopyStringParms; 24931167Sminshall 25031167Sminshall #define COPY_MODE_7_COLOR 0x80 /* Else 4 color mode */ 25131167Sminshall #define COPY_MODE_FIELD_ATTRIBUTES 0x40 /* Else don't copy attributes */ 25231167Sminshall 25331167Sminshall typedef struct { 25431167Sminshall char 25531167Sminshall rc, 25631167Sminshall function_id, 25731167Sminshall session_id, 25831167Sminshall reserved; 25931167Sminshall char far 26031167Sminshall *oia_buffer; 26131167Sminshall char 26231167Sminshall oia_group_number; 26331167Sminshall } ReadOiaGroupParms; 26431167Sminshall 26531193Sminshall /* If the user wants all groups, we return API_OIA_BYTES_ALL_GROUPS bytes */ 26631211Sminshall #define API_OIA_ALL_GROUPS '\377' 26731193Sminshall #define API_OIA_BYTES_ALL_GROUPS 22 /* 22 bytes of data */ 26831167Sminshall 26931193Sminshall /* API_OIA_INPUT_INHIBITED is special. It returns more than on byte of data */ 27031193Sminshall #define API_OIA_INPUT_INHIBITED 8 27131167Sminshall 27231193Sminshall #define API_OIA_LAST_LEGAL_GROUP 18 /* Highest legal number */ 27331167Sminshall 27431167Sminshall 27531167Sminshall 27631183Sminshall #if defined(MSDOS) 27731183Sminshall 27831183Sminshall #if !defined(FP_SEG) 27931183Sminshall #include <dos.h> 28031183Sminshall #endif /* !defined(FP_SEG) */ 28131183Sminshall 28231183Sminshall #else /* defined(MSDOS) */ 28331183Sminshall 28431183Sminshall /* 28531183Sminshall * These definitions are here to provide the descriptions of 28631183Sminshall * some registers which are, normally, defined in <dos.h> on 28731183Sminshall * a dos system. 28831183Sminshall */ 28931183Sminshall 29031193Sminshall #define FP_SEG(x) (x) 29131193Sminshall #define FP_OFF(y) (y) 29231183Sminshall 29331469Sminshall /* 29431469Sminshall * Now, it is somewhat of a pain, but we need to keep 29531469Sminshall * 8086 conventions about which of the "highlow"'s map 29631469Sminshall * into which of the "words". 29731469Sminshall */ 29831469Sminshall 29931183Sminshall struct highlow { 30031469Sminshall unsigned char 30131504Sminshall #if defined(vax) 30231469Sminshall al, 30331183Sminshall ah, 30431469Sminshall bl, 30531183Sminshall bh, 30631469Sminshall cl, 30731183Sminshall ch, 30831469Sminshall dl, 30931469Sminshall dh; 31031504Sminshall #endif /* defined(vax) */ 31131802Sminshall #if defined(sun) || defined(tahoe) || defined(ibm032) 31231504Sminshall ah, 31331504Sminshall al, 31431504Sminshall bh, 31531504Sminshall bl, 31631504Sminshall ch, 31731504Sminshall cl, 31831504Sminshall dh, 31931504Sminshall dl; 32031802Sminshall #endif /* defined(sun) || defined(tahoe) || defined(ibm032) */ 32131183Sminshall }; 32231183Sminshall 32331183Sminshall struct words { 32431469Sminshall unsigned short 32531183Sminshall ax, 32631183Sminshall bx, 32731183Sminshall cx, 32831469Sminshall dx; 32931469Sminshall unsigned int 33031183Sminshall si, 33131183Sminshall di; 33231183Sminshall }; 33331183Sminshall 33431183Sminshall union REGS { 33531183Sminshall struct highlow h; 33631183Sminshall struct words x; 33731183Sminshall }; 33831183Sminshall 33931183Sminshall struct SREGS { 34031469Sminshall unsigned int 34131183Sminshall cs, 34231183Sminshall ds, 34331183Sminshall es, 34431183Sminshall ss; 34531183Sminshall }; 34631183Sminshall #endif /* defined(MSDOS) (else section) */ 347