A communication protocol for GEM applications XAcc
/*==================================================================*/
/* */
/* XAcc definitions (PureC syntax) */
/* */
/*==================================================================*/
#ifndef __XACC__
# define __XACC__
/*--------------------------------------------------------------------
XAcc message types
--------------------------------------------------------------------*/
/* Level 0 */
# define ACC_ID 0x400
# define ACC_OPEN 0x401
# define ACC_CLOSE 0x402
# define ACC_ACC 0x403
# define ACC_EXIT 0x404
/* Level 1 */
# define ACC_ACK 0x500
# define ACC_TEXT 0x501
# define ACC_KEY 0x502
/* Level 2 */
# define ACC_META 0x503
# define ACC_IMG 0x504
/*
* extended XACC Message-Types:
* Diese Messages sind relativ "unabhängig" vom XACC-Level der
* Applikationen, d.h. sie sollten nur verwendet werden,
* wenn der Kommunikationspartner in seiner XDSC-Beschreibung
* über das ensprechende Extended-Feature verfügt!
*/
/* Reuest/Reply Protokoll: (Extended-Feature "RQ") */
/* ACC_ACK Messages sind Teil des Protokolls und */
/* müssen deshalb verstanden werden! */
# define ACC_REQUEST 0x480
# define ACC_REPLY 0x481
/* Inquiery Protokoll: (Extended-Feature "DI") */
/* ACC_ACK Messages sind Teil des Protokolls und */
/* müssen deshalb verstanden werden! */
#define ACC_GETDSI 0x510
#define ACC_DSINFO 0x511
#define ACC_FILEINFO 0x512
#define ACC_GETFIELDS 0x513
#define ACC_FIELDINFO 0x514
/* Remote MailMerge Protokoll: (Extended-Feature "RM") */
/* ACC_ACK Messages sind Teil des Protokolls und */
/* müssen deshalb verstanden werden! */
#define ACC_FORCESDF 0x520
#define ACC_GETSDF 0x521
/*--------------------------------------------------------------------
definitions for the Request/Reply protocol
--------------------------------------------------------------------*/
/* Datentypen des Request/Reply: */
#define RQREP_TYPE_STRING 1
#define RQREP_TYPE_ENVSTR 2
#define RQREP_TYPE_BIN 3
#define RQREP_TYPE_CODE 4
/*--------------------------------------------------------------------
definitions for the Inquiery protocol
--------------------------------------------------------------------*/
#define DSI_VERSION 0x0100
/* field data-types:
* values lower than 128 are 'human readable types' and
* values greater/equal 128 are 'machine readable types'
*/
#define FT_CHAR 0x00 /* string */
#define FT_DATE 0x02 /* string in _IDT format. */
/* dflt: DD.MM.YY if no _IDT available */
/* For more about _IDT see MINT */
#define FT_TIME 0x03 /* string: HH:MM:SS */
#define FT_BYTE 0x80 /* 2 byte HEX-string */
#define FT_UBYTE 0x81 /* 2 byte HEX-string */
#define FT_SHORT 0x82 /* 4 byte HEX-string */
#define FT_USHORT 0x83 /* 4 byte HEX-string */
#define FT_LONG 0x84 /* 8 byte HEX-string */
#define FT_ULONG 0x85 /* 8 byte HEX-string */
#define FT_FLOAT 0x86 /* 8 byte HEX-string */
#define FT_DOUBLE 0x87 /* 20 byte HEX-string */
#define FT_ENUM 0x88 /* 4 byte HEX-string */
#define FT_BOOL 0x89 /* string: "T" or "F" */
#define FT_BITFLD 0x8A /* at 8 Bit aligned HEX-string */
#define FT_TIME_T 0x90 /* 8 byte HEX-string (time_t, see UNIX) */
typedef struct {
int version;
char field_types[32]; /* max. count of 256 fieldtypes are */
/* available (see definements above) */
/* Each bit in this field represents a */
/* valid field-type, where type 0 is */
/* the lowest bit of the first character */
/* and type 255 the highest bit of the */
/* last character */
} Xacc_Dsi_Request;
typedef struct {
int db_anz; /* count of available data bases */
} Xacc_Dsinfo;
typedef struct {
long db_id; /* ID of the data base */
char fname[32]; /* Filename of the data base. if you */
/* are using a GEMDOS or DOS filesystem */
/* it must have a <8.3> format. */
char title[32]; /* A max. 32 byte long description of */
/* the data base. */
time_t crea_time; /* The creation date/time of the data */
/* base file. */
time_t mod_time; /* The last modification date/time of */
/* the data base structure. */
int n_fields; /* The number of fields that are */
/* available corresponding to the */
/* requested field typs given by the */
/* ACC_GETDSI message */
} Xacc_File_Info;
typedef struct {
int fld_size; /* the count of bits into the field */
int n_fields; /* The count of field elements */
int elem_size; /* The length of one field element */
char field_buff[0]; /* from here the list of the <n_fields> */
/* elements follows in this format: */
/* 2 byte <bitno> and <elem_size> byte */
/* description. */
/* e.g. (<elem_size>=10): */
/* "\0\1private\0\0\0" */
/* "\0\2sex\0\0\0\0\0\0\0" */
/* "\0\4dealer\0\0\0\0" */
/* The value "06" identifies the 2nd */
/* and the 3rd element. */
/* NOTE that you can't use sizeof() */
/* because of this declaration. */
} Bitfld_Info;
typedef struct {
int n_enums; /* The count of enum-elements */
int elem_size; /* The length of one enum element */
char enum_buff[0]; /* from here the list of the <n_enums> */
/* elements follows in this format: */
/* 2 byte <id> and <elem_size> byte */
/* description. */
/* e.g. (<elem_size>=10): */
/* "\0Aprivate\0\0\0" */
/* "\0Bsex\0\0\0\0\0\0\0" */
/* "\0Edealer\0\0\0\0" */
/* The value "0042" identifies the 2nd */
/* element. */
/* NOTE that you can't use sizeof() */
/* because of this declaration. */
} Enum_Info;
typedef union {
ulong n_elems; /* for types like char,uchar this is */
/* the length of the field */
Enum_Info *enum_info; /* enum is a special type, which needs */
/* more description than the length! */
Bitfld_Info *bitfld_info; /* a bitfield like used in TA2 for the */
/* info-flags */
} Type_Desc;
typedef struct {
char id[8]; /* The export-identifier of the corres- */
/* ponding field, i.e. "A1" for the */
/* first address field of Clever or TA2 */
char name[16]; /* A short description */
char desc[32]; /* A long description */
int type; /* The data type. Must be one of the */
/* constants defined at the top of this */
/* file */
Type_Desc t_desc; /* This union contains either the length */
/* of the field or a pointer to a info- */
/* struct if the type is a special one */
/* like enum or other user-defined types */
} Xacc_Field_Info;
#endif /* #ifndef __XACC__ */