/* Copyright (C) Magna Carta Software, Inc. 1990. All Rights Reserved. C COMMUNICATIONS TOOLKIT KERMIT.H -- C Communications Toolkit header file for Kermit file transfer. */ #if !defined(KERMIT_H_INCLUDED) #define KERMIT_H_INCLUDED #if !defined(COMM_H_INCLUDED) #include #endif #if !defined(XFER_H_INCLUDED) #include #endif typedef struct kermit_parms { /* defaults in parens */ /* PARAMETERS THAT WE DESIRE TO USE ("M" for "my) */ WORD mmark; /* mark character (CTRL-A) */ WORD mmaxl; /* max. length of packet I want to receive (80) */ WORD mtimeout; /* no. secs. after which you time out (5) */ WORD mnpad; /* no. of pad chars that precede each pkt. (0) */ WORD mpadc; /* control char for padding (NUL) */ WORD meol; /* my packet terminator (CR) */ WORD mqctl; /* control quote character ('#') */ WORD mqbin; /* 8-bit quote character ('&'-- not done) */ WORD mchkt; /* check type '1', '2', or '3' ('1') */ WORD mrept; /* repeat quote character ('~'-- not done) */ WORD mcapas; /* capability bit mask ('0') */ /* PARAMETERS THE REMOTE SYSTEM WILL USE (INITIALIZED TO KERMIT DEFAULTS) */ WORD mark; /* mark character (CTRL-A) */ WORD maxl; /* max. length of packet I want to receive (80) */ WORD timeout; /* no. secs. after which you time out (5) */ WORD npad; /* no. of pad chars that precede each pkt. (0) */ WORD padc; /* control char for padding (NUL) */ WORD eol; /* my packet terminator (CR) */ WORD qctl; /* control quote character ('#') */ WORD qbin; /* 8-bit quote character ('&'-- not done) */ WORD chkt; /* check type '1', '2', or '3' ('1') */ WORD rept; /* repeat quote character ('~'-- not done) */ WORD capas; /* capability bit mask ('0') */ /* PARAMETERS REQUIRED IN ORDER TO USE KERMIT */ WORD max_retry; /* number of retries before quitting */ WORD iobufsize; /* size of rx and tx buffers of data */ WORD parity; /* data format parity setting in use */ /* RUN-TIME PARAMETERS */ WORD paknum; /* our record of current packet number */ WORD num; /* received packet number */ WORD dlen; /* length of data field */ WORD ptype; /* type of last packet received */ char *rxbuf; /* buffer for received packets */ char *txbuf; /* buffer for transmitted packets */ short (*c_puts)(void *v, char *s); /* fn. to write string to port */ short (*c_waitc)(void *v, short ch, WORD duration); /* fn. to write string to port */ short (*c_rxflush)(void *v, WORD numbytes); /* fn. to clear RX buffer */ short (*fmakebuf_)(void *v); /* fn. to clear RX buffer */ short (*c_fwrite_)(void *v0, void *v1); /* fn. to write file to disk */ short (*c_out)(const char *s); /* fn. to write string to screen */ void *port; /* ptr. to the CCT COMM_PORT structure */ XFER *x; /* ptr. to CCT XFER structure */ /* THIS FUNCTION IS CALLED DURING FILE TRANSFER TO REPORT PROGRESS */ short (CDECL_ *p_user)(struct comm_port *, short, unsigned long); short flags; /* flag to indicate initialization */ } KERMIT_PARMS; /* MACROS */ #define tochar(x) ((x)+32) #define unchar(x) ((x)-32) #define ctl(x) ((x)^64) /* PACKET TYPES (values also returned to tranfer status functions) */ #define K_PKT_DATA 'D' #define K_PKT_ACKNOWLEDGE 'Y' #define K_PKT_NEGATIVE_ACKNOWLEDGE 'N' #define K_PKT_SEND_INITIATE 'S' #define K_PKT_BREAK_TRANSMISSION 'B' #define K_PKT_FILE_HEADER 'F' #define K_PKT_END_OF_FILE 'Z' #define K_PKT_ERROR 'E' /* PACKET FIELDS */ #define K_MARK '\x01' #define K_MAXL 94 #define K_TIMEOUT 3 #define K_NPAD 0 #define K_PADC '\x00' #define K_EOL CR #define K_QCTL '#' #define K_QBIN '&' #define K_CHKT '1' #define K_REPT '~' #define K_CAPAS 11 #define KMARK 0 #define KMAXL 1 #define KTIMEOUT 2 #define KNPAD 3 #define KPADC 4 #define KEOL 5 #define KQCTL 6 #define KQBIN 7 #define KCHKT 8 #define KREPT 9 #define KCAPAS 10 #define KMMARK 11 #define KMMAXL 12 #define KMTIMEOUT 13 #define KMNPAD 14 #define KMPADC 15 #define KMEOL 16 #define KMQCTL 17 #define KMQBIN 18 #define KMCHKT 19 #define KMREPT 20 #define KMCAPAS 21 #define K_PADCHAR 12 #define KERMIT_BUF_SIZE 4096 #define KERMIT_PAK_SIZE 106 /* KERMIT PACKET TYPES */ #define K_ABORT 0 #define K_BREAK 1 #define K_DATA 2 #define K_ERROR 3 #define K_FHEAD 4 #define K_SINIT 5 #define K_EOF 6 /* FUNCTION PROTOTYPES */ void FCALL_ k_build_init_(KERMIT_PARMS *k); short FCALL_ k_build_pkt_(KERMIT_PARMS *k, char *s, short type); WORD FCALL_ k_check_(KERMIT_PARMS *k, char *buf, WORD count); short FCALL_ k_config_(KERMIT_PARMS *k, short item, short value); short FCALL_ k_decode_(KERMIT_PARMS *k, WORD len); short FCALL_ k_deinit(KERMIT_PARMS *k); short FCALL_ k_encode_(KERMIT_PARMS *k, XFER *x, char *pb); short FCALL_ k_get(KERMIT_PARMS *k, short parm); short FCALL_ k_init(void *v, XFER *x, KERMIT_PARMS *k); WORD FCALL_ k_make_data_(KERMIT_PARMS *k, char *n); short FCALL_ k_neg_parms_(KERMIT_PARMS *k); void FCALL_ k_pkt_(KERMIT_PARMS *k, char ch); short FCALL_ k_r_(KERMIT_PARMS *k); short FCALL_ k_rcv_(KERMIT_PARMS *k); short FCALL_ k_rd_(KERMIT_PARMS *k); short FCALL_ k_rf_(KERMIT_PARMS *k); short FCALL_ k_receive_pkt_(KERMIT_PARMS *k); short FCALL_ k_s_(KERMIT_PARMS *k); short FCALL_ k_sb_(KERMIT_PARMS *k); short FCALL_ k_sd_(KERMIT_PARMS *k); short FCALL_ k_send_(KERMIT_PARMS *k, XFER *x, WORD len, short (CDECL_ *progress)(struct comm_port *, short, DWORD)); short FCALL_ k_set(KERMIT_PARMS *k, short parm, short val); short FCALL_ k_sf_(KERMIT_PARMS *k); short FCALL_ k_sz_(KERMIT_PARMS *k); short FCALL_ k_send_pkt_(KERMIT_PARMS *k); WORD FCALL_ strcount_(char *s, short ch); short FCALL_ strkermit_(KERMIT_PARMS *k, char *n, char *o); #define k_ack_(a) k_pkt_((a), ('Y')) #define k_brk_(a) k_pkt_((a), ('B')) #define k_nak_(a) k_pkt_((a), ('N')) #endif