/** xproto.h
*
*   Include file for External Protocol Handling
*
**/
/*
*   The structure
*/
struct XPR_IO {
                  /* File name(s)             */
                  char  *xpr_filename;
                  /* Open file                */
                  void *(*xpr_fopen)(char *filename,char *accessmode);
                  /* Close file               */
                  void (*xpr_fclose)(void *fileptr);
                  /* Get char from file       */
                  long (*xpr_fread)(char *buffer,long size,long count,void *fileptr);
                  /* Put string to file       */
                  long (*xpr_fwrite)(char *buffer,long size,long count,void *fileptr);
                  /* Get char from serial     */
                  long (*xpr_sread)(char *buffer,long size,long timeout);
                  /* Put string to serial     */
                  long (*xpr_swrite)(char *buffer,long size);
                  /* Flush serial input buffer*/
                  long (*xpr_sflush)(void);
                  /* Print stuff              */
                  void (*xpr_update)(struct XPR_UPDATE *updatestruct);
                  /* Check for abort          */
                  long (*xpr_chkabort)(void);
                  /* Check misc. stuff        */
                  void (*xpr_chkmisc)(void);
                  /* Get string interactively */
                  long (*xpr_gets)(char *prompt,char *buffer);
                  /* Set and Get serial info  */
                  long (*xpr_setserial)(long newstatus);
                  /* Find first file name     */
                  long (*xpr_ffirst)(char *buffer,char *pattern);
                  /* Find next file name      */
                  long (*xpr_fnext)(long oldstate,char *buffer,char *pattern);
                  /* Return file info         */
                  long (*xpr_finfo)(char *filename,long typeofinfo);
                  /* Seek in a file           */
                  long (*xpr_fseek)(void *fileptr,long position,long origin);
                  /* Number of extensions     */
                  long   xpr_extension;
                  /* Initialized by Setup.    */
                  void  *xpr_data;
                  /* Multiple XPR options.    */
                  long (*xpr_options)(long n,struct xpr_option *opt[]);
                  /* Delete a file.           */
                  long (*xpr_unlink)(char *filename);
                  /* Query serial device      */
                  long (*xpr_squery)(void);
                  /* Get various host ptrs    */
                  void *(*xpr_getptr)(long type);
              };
/*
*   Number of defined extensions
*/
#define XPR_EXTENSION 4L

/*
*   Flags returned by XProtocolSetup()
*/
#define XPRS_FAILURE  0x00000000L
#define XPRS_SUCCESS  0x00000001L
#define XPRS_NORECREQ 0x00000002L
#define XPRS_NOSNDREQ 0x00000004L
#define XPRS_HOSTMON  0x00000008L
#define XPRS_USERMON  0x00000010L
/*
*   The update structure
*/
struct XPR_UPDATE {     long  xpru_updatemask;
                        char *xpru_protocol;
                        char *xpru_filename;
                        long  xpru_filesize;
                        char *xpru_msg;
                        char *xpru_errormsg;
                        long  xpru_blocks;
                        long  xpru_blocksize;
                        long  xpru_bytes;
                        long  xpru_errors;
                        long  xpru_timeouts;
                        long  xpru_packettype;
                        long  xpru_packetdelay;
                        long  xpru_chardelay;
                        char *xpru_blockcheck;
                        char *xpru_expecttime;
                        char *xpru_elapsedtime;
                        long  xpru_datarate;
                        long  xpru_reserved1;
                        long  xpru_reserved2;
                        long  xpru_reserved3;
                        long  xpru_reserved4;
                        long  xpru_reserved5;
                   };
/*
*   The possible bit values for the xpru_updatemask are:
*/
#define XPRU_PROTOCOL           0x00000001L
#define XPRU_FILENAME           0x00000002L
#define XPRU_FILESIZE           0x00000004L
#define XPRU_MSG                0x00000008L
#define XPRU_ERRORMSG           0x00000010L
#define XPRU_BLOCKS             0x00000020L
#define XPRU_BLOCKSIZE          0x00000040L
#define XPRU_BYTES              0x00000080L
#define XPRU_ERRORS             0x00000100L
#define XPRU_TIMEOUTS           0x00000200L
#define XPRU_PACKETTYPE         0x00000400L
#define XPRU_PACKETDELAY        0x00000800L
#define XPRU_CHARDELAY          0x00001000L
#define XPRU_BLOCKCHECK         0x00002000L
#define XPRU_EXPECTTIME         0x00004000L
#define XPRU_ELAPSEDTIME        0x00008000L
#define XPRU_DATARATE           0x00010000L
/*
*   The xpro_option structure
*/
struct xpr_option {
   char *xpro_description;      /* description of the option                  */
   long  xpro_type;             /* type of option                             */
   char *xpro_value;            /* pointer to a buffer with the current value */
   long  xpro_length;           /* buffer size                                */
};
/*
*   Valid values for xpro_type are:
*/
#define XPRO_BOOLEAN 1L         /* xpro_value is "yes", "no", "on" or "off"   */
#define XPRO_LONG    2L         /* xpro_value is string representing a number */
#define XPRO_STRING  3L         /* xpro_value is a string                     */
#define XPRO_HEADER  4L         /* xpro_value is ignored                      */
#define XPRO_COMMAND 5L         /* xpro_value is ignored                      */
#define XPRO_COMMPAR 6L         /* xpro_value contains command parameters     */

