home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d534 / term.lha / Term / Libs.LZH / XprQuickB / quickb.h < prev    next >
C/C++ Source or Header  |  1991-07-26  |  7KB  |  205 lines

  1. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  2. /* |_o_o|\\ Copyright (c) 1990 The Software Distillery.  All Rights Reserved */
  3. /* |. o.| || This program may not be distributed without the permission of   */
  4. /* | .    | || the authors:                  BBS: (919) 382-8265    */
  5. /* | o    | ||   Dave Baker      Alan Beale      Jim Cooper             */
  6. /* |  . |//    Jay Denebeim    Bruce Drake      Gordon Keener          */
  7. /* ======      John Mainwaring Andy Mercier      Jack Rouse             */
  8. /*           John Toebes     Mary Ellen Toebes  Doug Walker  Mike Whitcher */
  9. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  10.    
  11. /*
  12.  *  portions are from QUICKB.C by Paul M. Resch
  13.  *  modified to function as an Amiga XPR protocol library by
  14.  *    Jack Rouse of the Software Distillery.
  15.  */
  16.  
  17. #include <exec/types.h>
  18. #include <proto/exec.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21. #include "xproto.h"
  22.  
  23. /*#define    TRUE    1*/
  24. /*#define    FALSE    0*/
  25.  
  26. #define CPMEOF        0x1A
  27.  
  28. #define    DLE        16
  29. #define    ETX        03
  30. #define    NAK        21
  31. #define    ENQ        05
  32. #define    CR        0x0D
  33. #define    LF        0x0A
  34. #define    MAX_BUF_SIZE    1032        /* Largest data block we can handle */
  35. #define    MAX_SA        2        /* Maximum number of waiting packets */
  36.  
  37. #define    DEF_BUF_SIZE    511        /* Default data block               */
  38. #define    DEF_WS        1        /* I can send 2 packets ahead       */
  39. #define    DEF_WR        1        /* I can receive single send-ahead  */
  40. #define    DEF_BS        8        /* I can handle 1024 bytes          */
  41. #define    DEF_CM        1        /* I can handle CRC                 */
  42. #define    DEF_DQ        1        /* I can handle non-quoted NUL      */
  43.  
  44. #define    MAX_ERRORS    10
  45.  
  46.  
  47. /* Receive States */
  48.  
  49. #define    R_GET_DLE    0
  50. #define    R_GET_B        1
  51. #define    R_GET_SEQ    2
  52. #define    R_GET_DATA    3
  53. #define    R_GET_CHECKSUM    4
  54. #define    R_SEND_ACK    5
  55. #define    R_TIMED_OUT    6
  56. #define    R_SUCCESS    7
  57.  
  58. /* Send States */
  59.  
  60. #define    S_GET_DLE    1
  61. #define    S_GET_NUM    2
  62. #define    S_HAVE_ACK    3
  63. #define    S_GET_PACKET    4
  64. #define    S_TIMED_OUT    5
  65. #define    S_SEND_NAK    6
  66. #define    S_SEND_ENQ    7
  67. #define    S_SEND_DATA    8
  68.  
  69. typedef    struct    PACKETB {
  70.     int    seq;    /* Packet's sequence number  */
  71.     int    num;    /* Number of bytes in packet */
  72.     unsigned char buf[MAX_BUF_SIZE]; /* Actual packet data */
  73.     } PACKET;
  74.  
  75.  
  76. struct XPR_DATA {
  77.    struct XPR_IO *xio;    /* back pointer to our XPR_IO structure */
  78.  
  79.    long (*__asm xpr_fopen)         /* Open file                */
  80.         (register __a0 char *filename,
  81.          register __a1 char *accessmode);
  82.    long (*__asm xpr_fclose)        /* Close file               */
  83.         (register __a0 long fileptr);
  84.    long (*__asm xpr_fread)        /* Get char from file       */
  85.         (register __a0 char *buffer,
  86.          register __d0 long size,
  87.          register __d1 long count,
  88.          register __a1 long fileptr);
  89.    long (*__asm xpr_fwrite)        /* Put string to file       */
  90.         (register __a0 char *buffer,
  91.          register __d0 long size,
  92.          register __d1 long count,
  93.          register __a1 long fileptr);
  94.    long (*__asm xpr_sread)        /* Get char from serial     */
  95.         (register __a0 char *buffer,
  96.          register __d0 long size,
  97.          register __d1 long timeout);
  98.    long (*__asm xpr_swrite)        /* Put string to serial     */
  99.         (register __a0 char *buffer,
  100.          register __d0 long size);
  101.    long (*__asm xpr_update)        /* Print stuff              */
  102.         (register __a0 struct XPR_UPDATE *updatestruct);
  103.    long (*xpr_chkabort)(void);        /* Check for abort          */
  104.    long (*xpr_chkmisc)(void);        /* Check misc. stuff        */
  105.    long (*__asm xpr_gets)        /* Get string interactively */
  106.         (register __a0 char *prompt,
  107.          register __a1 char *buffer);
  108.    long (*__asm xpr_setserial)        /* Set and Get serial info  */
  109.         (register __d0 long newstatus);
  110.    long (*__asm xpr_finfo)        /* Return file info         */
  111.            (register __a0 char *filename,
  112.          register __d0 long typeofinfo);
  113.    long (*__asm xpr_options)
  114.         (register __d0 long n,
  115.          register __a0 struct xpr_option **opt);
  116.    long (*__asm xpr_unlink)        /* Delete a file.           */
  117.         (register __a0 char *filename);
  118.  
  119.    int    seq_num;    /* Current Sequence Number - init by Term_ENQ */
  120.    int    checksum;    /* May hold CRC */
  121.    int    r_size;            /* size of receiver buffer */
  122.    unsigned int    s_counter;
  123.    unsigned int    r_counter;
  124.    int    timed_out;    /* we timed out before receiving character */
  125.    int    cchar;                  /* current character */
  126.    int    masked;            /* TRUE if ctrl character was 'masked' */
  127.    int    packet_received;    /* True if a packet was received */
  128.  
  129.    /* Other End's Parameters */
  130.    char    His_WS;                      /* Sender's Window Send     */
  131.    char    His_WR;                      /* Sender's Window Receive  */
  132.    char    His_BS;                      /* Sender's Block Size      */
  133.    char    His_CM;                        /* Sender's Check Method    */
  134.  
  135.    /* Negotiated Parameters */
  136.    char    Our_WS;            /* Negotiated Window Send   */
  137.    char    Our_WR;            /* Negotiated Window Receive */
  138.    char    Our_BS;            /* Negotiated Block Size     */
  139.    char    Our_CM;            /* Negotiated Check Method   */
  140.  
  141.    int    Quick_B;        /* True if Quick B in effect */
  142.    int    Use_CRC;        /* True if CRC in effect     */
  143.    int    buffer_size;        /* Our_BS * 4                */
  144.    int    SA_Max;            /* 1 if SA not enabled, else MAX_SA */
  145.    int    SA_Enabled;        /* True if Send-Ahead is permitted  */
  146.    int    ack_SA;        /* Which SA_Buf is waiting for an ACK */
  147.    int    fill_SA;    /* Which SA_Buf is ready for new data */
  148.    int    SA_Waiting;        /* Number of SA_Buf's waiting for ACK */
  149.    int    Aborting;        /* TRUE if aborting transfer */
  150.  
  151.    unsigned short    crc_16;
  152.  
  153.    int  Done;
  154.  
  155.    unsigned char r_buffer[MAX_BUF_SIZE];
  156.  
  157.    struct XPR_UPDATE xpru;
  158.  
  159.    /* options stuff */
  160.    char optText;    /* text processing control */
  161.    char optOwrt;    /* overwrite handling */
  162.    char optAuto;    /* auto-activate */
  163.    char optDelt;    /* delete after send */
  164.    char optKeep;    /* keep partial file */
  165.  
  166.    long TextMode;    /* do line terminator translation */
  167.    int TextC;        /* previous character for text processing */
  168.  
  169.    /* serial buffering */
  170. #define MAX_SERBUF 256
  171.    unsigned char serbuf[MAX_SERBUF];
  172.    int nserbuf;
  173.    unsigned char *serbufp;
  174.  
  175.    /* disk I/O buffering */
  176.    char *iobuf;
  177.    char *iobufp;
  178.    long maxiobuf;
  179.    long iobufn;
  180.    int writing;        /* buffer is for output */
  181.  
  182.    PACKET    SA_Buf[MAX_SA+1];  /* Send-ahead buffers */
  183. };
  184.  
  185. void bp_DLE(struct XPR_DATA *xd);
  186. void bp_ENQ(struct XPR_DATA *xd);
  187. void bp_ESC_I(struct XPR_DATA *xd);
  188.  
  189. long bfopen(struct XPR_DATA *xd, char *filename, char *mode);
  190. long bfclose(struct XPR_DATA *xd, long file);
  191. long bfwrite(struct XPR_DATA *xd, char *buf, long len, long file);
  192. long bfwread(struct XPR_DATA *xd, char *buf, long len, long file);
  193. long xbfwrite(struct XPR_DATA *xd, char *buf, long len, long file);
  194. long xbfwread(struct XPR_DATA *xd, char *buf, long len, long file);
  195.  
  196. void cputc(struct XPR_DATA *xd, int c);
  197. int cfilbuf(struct XPR_DATA *xd, long timeout);
  198. #define cgetc(xd, to) \
  199.     ((--(xd)->nserbuf < 0) ? cfilbuf((xd), (to)) : *(xd)->serbufp++)
  200.  
  201. void errormsg(struct XPR_DATA *xd, char *msg);
  202.  
  203. #define min(a, b) ((a)<=(b)?(a):(b))
  204. #define max(a, b) ((a)>=(b)?(a):(b))
  205.