home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 11 / 11.iso / n / n002 / 4.ddi / ECLHEAD.ZIP / KM.H < prev    next >
Encoding:
C/C++ Source or Header  |  1989-11-28  |  14.6 KB  |  261 lines

  1. #ifndef KM_H
  2. #define KM_H
  3.   
  4. #include <stdio.h>
  5.   
  6. /* Kermit file transfer states : allowable values for km_xfer_state[comm port] */
  7. #define KM_NOT_IN_PROGRESS      0
  8.                                   /* Kermit Send File */
  9. #define KM_FORM_S_PKT           1   /* Form Send Init packet */
  10. #define KM_WAIT_S_PKT_ACK       2   /* Wait for S packet ACK */
  11. #define KM_FORM_F_PKT           3   /* Form Frame Header packet */
  12. #define KM_WAIT_F_PKT_ACK       4   /* Wait for F packet ACK */
  13. #define KM_OPEN_SEND_FILE       5   /* Open file to xfer */
  14. #define KM_FORM_D_PKT           6   /* Form Data packet */
  15. #define KM_WAIT_D_PKT_ACK       7   /* Wait for D packet ACK */
  16. #define KM_FORM_Z_PKT           8   /* Form End of File (Z) packet */
  17. #define KM_WAIT_Z_PKT_ACK       9   /* Wait for Z packet ACK */
  18. #define KM_FORM_B_PKT          10   /* Form B packet */
  19. #define KM_WAIT_B_PKT_ACK      11   /* Wait for B packet ACK */
  20.                                   /* Kermit Receive File */
  21. #define KM_REC_WAIT_S_PKT      12   /* Wait for Send Init (S) packet */
  22. #define KM_FORM_ACK_S_PKT      13   /* Form ACK Send Init (Y) packet */
  23. #define KM_FORM_ACK_PKT        14   /* Form ACK (Y) packet */
  24. #define KM_FORM_NAK_PKT        15   /* Form NAK (N) packet */
  25. #define KM_REC_WAIT_F_PKT      16   /* Wait for Frame Header (F) packet or Break (B) packet */
  26. #define KM_OPEN_REC_FILE       17   /* Open file to receive */
  27. #define KM_REC_WAIT_D_PKT      18   /* Wait for Data (D) Packet or End of File (Z) Packet */
  28. #define KM_SENT_ACK_B_PKT      19   /* B packet sent, now close session */
  29.                                  /* Kermit Receive and Send File */
  30. #define KM_SND_PKT             20   /* Send packet */
  31. #define KM_SET_TIMER           21   /* Wait for packet to be sent, then set timer */
  32. #define KM_FORM_E_PKT          22   /* Form Error (E) packet */
  33. #define KM_ABORT_XFER          23   /* Abort file transfer session */
  34.   
  35.   
  36. /* Allowable values to KM_REC_PKT_STATE(port_no) */
  37. #define KM_REC_MARK             0   /* Receive packet MARK field */
  38. #define KM_REC_LEN              1   /* Receive packet LEN field */
  39. #define KM_REC_SEQ              2   /* Receive packet SEQ field */
  40. #define KM_REC_TYPE             3   /* Receive packet TYPE field */
  41. #define KM_REC_DATA_AND_CHKT    4   /* Receive DATA and CHECK fields */
  42.   
  43. /* Recognizable Kermit Packet Types */
  44. #define KM_ACK_PKT            'Y'   /* ACKNOWLEDGE PACKET */
  45. #define KM_NAK_PKT            'N'   /* NAK PACKET */
  46. #define KM_DATA_PKT           'D'   /* DATA PACKET */
  47. #define KM_SEND_INIT_PKT      'S'   /* SEND INIT PACKET */
  48. #define KM_BREAK_PKT          'B'   /* BREAK PACKET */
  49. #define KM_FILE_HDR_PKT       'F'   /* FILE HEADER PACKET */
  50. #define KM_EOF_PKT            'Z'   /* END OF FILE PACKET */
  51. #define KM_ERROR_PKT          'E'   /* ERROR PACKET */
  52.   
  53. /* Allowable values for CHKT */
  54. #define KM_1BYTE_XSUM      '1'  /* ONE BYTE CHECKSUM ERROR CHECK */
  55.   
  56. /* Kermit protocol design constraints */
  57. #define KM_MAX_PKT_LEN      96  /* max length of packet */
  58. #define KM_MAX_LEN          94  /* max value of LEN */
  59. #define KM_MAX_DATA_LEN     93  /* max length of data info */
  60. #define KM_MARK           0X01  /* SOH */
  61.   
  62. /* Kermit default file transfer constraining parameters */
  63. #define KM_DEFAULT_MAXL     90    /* Default max length of packet */
  64. #define KM_DEFAULT_TIME     10    /* Default timeout value (in seconds) */
  65. #define KM_DEFAULT_NPAD      0    /* Default number of padding characters */
  66. #define KM_DEFAULT_PADC      0    /* Default control character used for padding */
  67. #define KM_DEFAULT_EOL      13    /* Default character used to terminate an incomming packet */
  68. #define KM_DEFAULT_QCTL     '#'   /* Default printable character I will us to quote control characters */
  69. #define KM_DEFAULT_QBIN     'Y'   /* I agree to 8 bit quoting but I don't need it */
  70. #define KM_7BIT_QBIN        '&'   /* (0X21<=QBIN<=0X3E)||(0X60<=QBIN<=0X7E) */
  71. #define KM_DEFAULT_CHKT     '1'   /* Default error check type */
  72. #define KM_DEFAULT_REPT     ' '   /* No repeat count used */
  73. #define KM_DEFAULT_CAPASA    0    /* Default capability bit mask */
  74. #define KM_DEFAULT_RETRIES   9    /* Default retry count */
  75.   
  76. #define KM_FIO_BUF_SIZE    1024   /* file I/O information buffer */
  77.   
  78. /* Allowable values for KM_ABORT_FLAG */
  79. #define KM_NO_ABORT          0   /* Cntrl-Break not enabled, DCD not enabled */
  80. #define KM_CB                1   /* Only Control-break enabled */
  81. #define KM_DCD               2   /* Only Data Carrier Detect enabled */
  82. #define KM_CB_AND_DCD        3   /* Control-break and Data Carrier Detect enabled */
  83.   
  84. /* Kermit function return status values */
  85. #define KM_COMPL             1
  86. #define KM_OK                0
  87. #define KM_SESS             -1
  88. #define KM_NAK              -2
  89. #define KM_ABORT            -4
  90. #define KM_FIO              -6
  91. #define KM_SILENCE          -7
  92. #define KM_OUT_OF_MEM       -8
  93. #define KM_BAD_CHKT         -9
  94. #define KM_NO_DCD           -10
  95. #define KM_EOF              -11
  96. #define KM_INVAL_PKT        -12
  97. #define KM_REC_EPKT         -13
  98. #define KM_REC_BPKT         -14
  99. #define KM_REC_SPKT         -15
  100. #define KM_REC_FPKT         -16
  101. #define KM_REC_PREV_DPKT    -17
  102. #define KM_REC_DPKT         -18
  103. #define KM_NO_XMIT_RESIZE   -19
  104. #define KM_UNMATCHED_QBIN   -20
  105. #define KM_NO_8TH_PREFIX    -21  
  106.   
  107. /* Kermit File Transfer Data Structures */
  108.   
  109. /* structure to hold info pertaining to each file in xfer */
  110. typedef struct  {
  111.     char    filename[13];      /* file to be xfered */
  112.     char    file_length[10];   /* decimal string */
  113.     unsigned int    mod_date;          /* modification date */
  114.     unsigned int    file_time;         /* time file was created */
  115. } KM_FILE_DESC;
  116.   
  117. /* structure to hold info for each xfer session on a particular comm port */
  118. typedef struct  {
  119.     char   path[64];         /* path to files */
  120.     char   filespec[77];     /* path + filename of current file */
  121.     int   no_of_files;      /* no. of files to be xfered */
  122.     int   file_cnt;         /* cnt of files xfered (start w/ 1) */
  123.     int   current_file;     /* current file index in file xfer array */
  124.     int   next_xfer_state;  /* next xfer state */
  125.     unsigned long int   bytes_xfered;     /* number of bytes currently xfered */
  126.     int   prev_seq;         /* previous pkt SEQ no. */
  127.     int   seq;              /* current pkt SEQ no. */
  128.     int   next_seq;         /* next pkt SEQ no. */
  129.     int   retries;          /* current no. of retries */
  130.     int   timeout;          /* timeout value (clock ticks) */
  131.     char   abort_flag;       /* cntl-break enable flag */
  132.     char   print_stat;       /* print xfer status flag */
  133.     int   acked;            /* no. ACKs received */
  134.     int   naked;            /* no. NAKs received */
  135.     int   timed;            /* no. timeouts received */
  136.     int   junked;           /* no. junk info. received */
  137.     char   xfer_msg[60];     /* message to copy into E pkt */
  138.     int   abort_err;        /* error which caused session to abort */
  139.     char   *xmit_buffer_ptr; /* padding chars + xmit packet + EOL */
  140.     int   xmit_cnt;         /* cnt of bytes in xmit buf, for cur pkt */
  141.     char   pkt_type;         /* current pkt type to xmit */
  142.     int   data_len;         /* no. of bytes in data field of xmit pkt */
  143.     char   *rec_buffer_ptr;  /* received packet + EOL */
  144.     int   rec_pkt_state;    /* receive packet xfer states */
  145.     int   expected;         /* no. of bytes expected */
  146.     FILE   *file_ptr;        /* pointer to current file xfered */
  147.     char   *fio_buf_ptr;     /* buffer between xfer file and xfer session */
  148.     int   fio_buf_cnt;      /* current position in fio_buf_ptr */
  149.     unsigned char   maxl;             /* max length of packet to send */
  150.     unsigned char   time;             /* timeout value in seconds */
  151.     unsigned char   npad;             /* no. of padding characters */
  152.     unsigned char   padc;             /* paddind character */
  153.     unsigned char   eol;              /* EOL character */
  154.     unsigned char   qctl;             /* quote cntrl char */
  155.     unsigned char   qbin;             /* 8th bit set quote char */
  156.     unsigned char   chkt;             /* check type */
  157.     unsigned char   chkt_len;         /* no. of bytes in CHKT */
  158.     unsigned char   rept;             /* repeate char */
  159.     unsigned char   capasa;           /* capability bit mask */
  160.     unsigned char   windo;            /* window size */
  161.     unsigned char   maxlx1;           /* extended packet length */
  162.     unsigned char   maxlx2;           /* extended packet length */
  163.     KM_FILE_DESC   *km_file_info_ptr;/* ptr to array of files to xfer */
  164. }  KM_FILE_TABLE;
  165.   
  166. /************* MACRO EXPANSIONS FOR km_file_table_ptr[] *********************/
  167. /* general info pertaining with entire file xfer session */
  168. #define  KM_PATH(comm_port)            km_file_table_ptr[comm_port]->path
  169. #define  KM_FILESPEC(comm_port)        km_file_table_ptr[comm_port]->filespec
  170. #define  KM_FILES(comm_port)           km_file_table_ptr[comm_port]->no_of_files
  171. #define  KM_FILE_CNT(comm_port)        km_file_table_ptr[comm_port]->file_cnt
  172. #define  KM_CUR_FILE(comm_port)        km_file_table_ptr[comm_port]->current_file
  173. #define  KM_NEXT_XFER_STATE(comm_port) km_file_table_ptr[comm_port]->next_xfer_state
  174. #define  KM_BYTES_XFERED(comm_port)    km_file_table_ptr[comm_port]->bytes_xfered
  175. #define  KM_PREV_SEQ(comm_port)        km_file_table_ptr[comm_port]->prev_seq
  176. #define  KM_SEQ(comm_port)             km_file_table_ptr[comm_port]->seq
  177. #define  KM_NEXT_SEQ(comm_port)        km_file_table_ptr[comm_port]->next_seq
  178. #define  KM_RETRIES(comm_port)         km_file_table_ptr[comm_port]->retries
  179. #define  KM_TIMEOUT(comm_port)         km_file_table_ptr[comm_port]->timeout
  180. #define  KM_ABORT_FLAG(comm_port)      km_file_table_ptr[comm_port]->abort_flag
  181. #define  KM_PRINT_STAT(comm_port)      km_file_table_ptr[comm_port]->print_stat
  182. #define  KM_ACKED(comm_port)           km_file_table_ptr[comm_port]->acked
  183. #define  KM_NAKED(comm_port)           km_file_table_ptr[comm_port]->naked
  184. #define  KM_TIMED(comm_port)           km_file_table_ptr[comm_port]->timed
  185. #define  KM_JUNKED(comm_port)          km_file_table_ptr[comm_port]->junked
  186. #define  KM_XFER_MSG(comm_port)        km_file_table_ptr[comm_port]->xfer_msg
  187. #define  KM_ABORT_ERR(comm_port)       km_file_table_ptr[comm_port]->abort_err
  188.   
  189. /* pointer to xmit buffer */
  190. #define  KM_XMIT_BUF_PTR(comm_port)    km_file_table_ptr[comm_port]->xmit_buffer_ptr
  191. #define  KM_XMIT_CNT(comm_port)        km_file_table_ptr[comm_port]->xmit_cnt
  192. #define  KM_PKT_TYPE(comm_port)        km_file_table_ptr[comm_port]->pkt_type
  193. #define  KM_DATA_LEN(comm_port)        km_file_table_ptr[comm_port]->data_len
  194. /* index to starting position of data in xmit buffer */
  195. #define  KM_XDS(comm_port)             (KM_NPAD(comm_port) + 4)
  196. /* pointer to staring position of data in xmit buffer */
  197. #define  KM_XMIT_PKT_DATA(comm_port)   (&(km_file_table_ptr[comm_port]->xmit_buffer_ptr[KM_XDS(comm_port)]))
  198.   
  199. /* pointer to receive buffer: receive buffer always begins with MARK, padding discarded */
  200. #define  KM_REC_BUF_PTR(comm_port)     km_file_table_ptr[comm_port]->rec_buffer_ptr
  201. #define  KM_REC_PKT_STATE(comm_port)   km_file_table_ptr[comm_port]->rec_pkt_state
  202. #define  KM_EXPECTED(comm_port)        km_file_table_ptr[comm_port]->expected
  203. #define  KM_REC_PKT_MARK(comm_port)    km_file_table_ptr[comm_port]->rec_buffer_ptr[0]
  204. #define  KM_REC_PKT_LEN(comm_port)     km_file_table_ptr[comm_port]->rec_buffer_ptr[1]
  205. #define  KM_REC_PKT_SEQ(comm_port)     km_file_table_ptr[comm_port]->rec_buffer_ptr[2]
  206. #define  KM_REC_PKT_TYPE(comm_port)    km_file_table_ptr[comm_port]->rec_buffer_ptr[3]
  207. #define  KM_REC_PKT_DATA(comm_port)    (&(km_file_table_ptr[comm_port]->rec_buffer_ptr[4]))
  208.   
  209. /* pointer to xfer file and file I/O buffer */
  210. #define  KM_FILE_PTR(comm_port)        km_file_table_ptr[comm_port]->file_ptr
  211. #define  KM_FIO_BUF_PTR(comm_port)     km_file_table_ptr[comm_port]->fio_buf_ptr
  212. #define  KM_FIO_BUF_CNT(comm_port)     km_file_table_ptr[comm_port]->fio_buf_cnt
  213.   
  214. /* info from & for SEND-INIT packets */
  215. #define  KM_MAXL(comm_port)            km_file_table_ptr[comm_port]->maxl
  216. #define  KM_TIME(comm_port)            km_file_table_ptr[comm_port]->time
  217. #define  KM_NPAD(comm_port)            km_file_table_ptr[comm_port]->npad
  218. #define  KM_PADC(comm_port)            km_file_table_ptr[comm_port]->padc
  219. #define  KM_EOL(comm_port)             km_file_table_ptr[comm_port]->eol
  220. #define  KM_QCTL(comm_port)            km_file_table_ptr[comm_port]->qctl
  221. #define  KM_QBIN(comm_port)            km_file_table_ptr[comm_port]->qbin
  222. #define  KM_CHKT(comm_port)            km_file_table_ptr[comm_port]->chkt
  223. #define  KM_CHKT_LEN(comm_port)        km_file_table_ptr[comm_port]->chkt_len
  224. #define  KM_REPT(comm_port)            km_file_table_ptr[comm_port]->rept
  225. #define  KM_CAPASA(comm_port)          km_file_table_ptr[comm_port]->capasa
  226. #define  KM_WINDO(comm_port)           km_file_table_ptr[comm_port]->windo
  227. #define  KM_MAXLX1(comm_port)          km_file_table_ptr[comm_port]->maxlx1
  228. #define  KM_MAXLX2(comm_port)          km_file_table_ptr[comm_port]->maxlx2
  229. /* pointer to file info structure */
  230. #define  KM_FILE_DESC_PTR(comm_port)   km_file_table_ptr[comm_port]->km_file_info_ptr
  231.   
  232. /* Macro expansions for current file (being xferred) information */
  233. #define  KM_CUR_FILE_PTR(comm_port)    (KM_FILE_DESC*)(KM_FILE_DESC_PTR(comm_port)+KM_CUR_FILE(comm_port))
  234. #define  KM_CUR_FILE_INFO(comm_port)   km_file_table_ptr[comm_port]->km_file_info_ptr[KM_CUR_FILE(comm_port)]
  235. #define  KM_CUR_FILENAME(comm_port)    KM_CUR_FILE_INFO(comm_port).filename
  236. #define  KM_CUR_FILELENGTH(comm_port)  KM_CUR_FILE_INFO(comm_port).file_length
  237. #define  KM_CUR_FMOD_DATE(comm_port)   KM_CUR_FILE_INFO(comm_port).mod_date
  238. #define  KM_CUR_FMOD_TIME(comm_port)   KM_CUR_FILE_INFO(comm_port).file_time
  239.   
  240. /* MACRO EXPANSIONS USED IN km_bld_xfer_table() FOR COMPILER PORTABILITY */
  241. #ifdef __TURBOC__
  242. #define KM_FIND_FIRST(path,buf_ptr)    findfirst(path,buf_ptr,0)
  243. #define KM_FIND_NEXT(buf_ptr)          findnext(buf_ptr)
  244. #define KM_FILE_NAME                   fib.ff_name
  245. #define KM_FILE_LENGTH                 fib.ff_fsize
  246. #define KM_FILE_DATE                   fib.ff_fdate
  247. #define KM_FILE_TIME                   fib.ff_ftime
  248. #endif
  249.   
  250. #ifdef M_I86
  251. #define KM_FIND_FIRST(path,buf_ptr)     _dos_findfirst(path,_A_NORMAL,buf_ptr)
  252. #define KM_FIND_NEXT(buf_ptr)           _dos_findnext(buf_ptr)
  253. #define KM_FILE_NAME                    fib.name
  254. #define KM_FILE_LENGTH                  fib.size
  255. #define KM_FILE_DATE                    fib.wr_date
  256. #define KM_FILE_TIME                    fib.wr_time
  257. #endif
  258.   
  259. /***************************************************************************/
  260. #endif /* KM_H */
  261.