home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / archives / win100b.zip / wkkerm.h < prev    next >
Text File  |  1991-10-20  |  16KB  |  381 lines

  1. /*
  2.  * Windows Kermit header file
  3.  *
  4.  * Copyright (c) 1990, 1991 by
  5.  * William S. Hall
  6.  * 3665 Benton Street, #66
  7.  * Santa Clara, CA 95051
  8.  *
  9.  * This file should be included in one module in
  10.  * the code for the terminal in the following 
  11.  * way in order to declare the Kermit external variables:
  12.  * #if defined(KERMIT)
  13.  * #define KERMITEXTERN
  14.  * #include "wnkerm.h"
  15.  * #endif
  16.  *
  17.  */
  18.  
  19. /* This curious construction allows declaration of
  20.  * Kermit variables only in the module in which
  21.  * KERMITEXTERN is defined
  22.  */
  23. #if !defined(KERMITEXTERN)
  24. #define KERMITEXTERN extern
  25. #endif
  26.  
  27. /*
  28.  * Kermit function declarations
  29.  */
  30. /* from Kermit protocol module */
  31. int wart(void);
  32.  
  33. /* from Kermit function support module wnkfns.c */
  34. void    NEAR    krm_tinit(void);    /* initialize session */
  35. int    NEAR    krm_sinit(char);    /* send init packet */
  36. int    NEAR    krm_sendcmd(char cmd, BYTE *cmdstr);
  37. int    NEAR    krm_srinit(BYTE *filename);
  38. int    NEAR    krm_opent(void);
  39. void    NEAR    krm_err(int ref);    /* respond to error */
  40. void    NEAR    krm_spar(BYTE *data, short len);/* read remote's init params */
  41. char *    NEAR    krm_getnextfile(BOOL first);    /* build incoming packet */
  42. int    NEAR    krm_sfile(void);    /* send file name */
  43. int    NEAR    krm_seot(void);        /* send break packet */
  44. int    NEAR    krm_seof(char *s);    /* send end of file packet */
  45. int    NEAR    krm_sdata(void);    /* send file data */
  46. BOOL    NEAR    krm_rclose(BOOL);    /* close a file */
  47. void    NEAR    krm_tend(int code);    /* end session */
  48. void    NEAR    krm_checkcnx(void);    /* check for session cancellation */
  49. int    NEAR    krm_rpar(BYTE data[]);    /* prepare local init packet */
  50. /* encode data before transmission */
  51. int    NEAR    krm_encode(BYTE *outbuf, BYTE *inbuf, int maxlen, int *len);
  52. void    NEAR    krm_ack(short len, BYTE * str); /* ack a packet */
  53. BOOL    NEAR    krm_rcvfil(void);    /* receive a file name */
  54. BOOL    NEAR    krm_rcvdata(void);    /* receive data */
  55. int    NEAR    krm_rpack(void);    /* read a packet and return type */
  56. void    NEAR    krm_resend(void);    /* resend a packet */
  57. /* create a pseudo packet for handling internal errors */
  58. void    NEAR    krmCreatePseudoPacket(char type, short state, int msgnum);
  59. void    FAR    krmShowMessage(int msgnum);    /* show a message to user */
  60. BOOL    FAR    krmWndCommand(HWND hWnd, WORD mode); /* Kermit menu function */
  61. void    FAR    krmPaint(HWND hWnd, HDC hDC);    /* paint terminal's icon */
  62. void    NEAR    krm_savename(void);    /* show remote's name for file */
  63. void    NEAR    krmFlushQue(void);    /* flush the input and output queues */
  64. int    FAR    krmShutdown(void);    /* respond to terminal shutdown */
  65. /* handle packet timeouts */
  66. void FAR PASCAL krmDoTimeout(HWND hWnd,unsigned message,
  67.                  short event,DWORD time);
  68.  
  69. /* from Kermit dialog box routines module wnkmsc.c */
  70. /* open a dialog box */
  71. int  FAR    krmOpenDlgBox(HWND hWnd, FARPROC fpProc, WORD boxnum);
  72. /* show progress of transfers */
  73. BOOL FAR PASCAL krmXferDlgBox(HWND, unsigned, WORD, LONG);
  74. /* cancel session */
  75. BOOL FAR PASCAL krmCancelBoxProc(HWND, unsigned, WORD, LONG);
  76. /* select files for sending */
  77. BOOL FAR PASCAL krmSendFileProc(HWND, unsigned, WORD, LONG);
  78. /* modify protocol parameters */
  79. BOOL FAR PASCAL krmProtocol(HWND hDlg,unsigned message,
  80.                 WORD wParam,LONG lParam);
  81. /* modify inbound and outbound packet parameters */
  82. BOOL FAR PASCAL krmPackets(HWND hDlg,unsigned message,WORD wParam,LONG lParam);
  83. BOOL FAR PASCAL krmXferRemote(HWND hDlg,unsigned message,
  84.                   WORD wParam,LONG lParam);
  85. BOOL FAR PASCAL krmCWD(HWND hDlg, unsigned message, WORD wParam, LONG lParam);
  86. BOOL FAR PASCAL krmRemote1ParamCmd(register HWND hDlg, unsigned message, 
  87.                    register WORD wParam, LONG lParam);
  88. /* local file support */
  89. BOOL FAR PASCAL krmLocalFiles(HWND hDlg,unsigned message,
  90.                   WORD wParam,LONG lParam);
  91.  
  92. /* from Kermit initialization module wnkint.c */
  93. /* start up initialization of Kermit */
  94. BOOL    FAR    krmInit(HWND hWnd,BYTE *bufptr,int *buflen,
  95.             int *cid,int menupos);
  96.  
  97. /* macros */
  98. #define tochar(ch)    ((ch) + ' ')    /* convert int to printable char */
  99. #define unchar(ch)    ((ch) - ' ')    /* convert printable char to int */
  100. #define ctl(ch)        ((ch) ^ 64)    /* 'controllify' a char */
  101.  
  102. /* constants and defaults */
  103. #define KRM_MINTIMEOUT        2    /* packet timeout parameters */
  104. #define KRM_MAXTIMEOUT        60
  105. #define KRM_DEFTIMEOUT        5
  106. #define KRM_MINPACKETSIZE    10    /* packet sizes */
  107. #define KRM_MAXPACKETSIZE    94
  108. #define KRM_DEFPACKETSIZE    80
  109. #define KRM_MAXDATALEN        (KRM_MAXPACKETSIZE - 3) /* max data size */
  110. #define KRM_FILEABORT        1    /* file transfer abort flags */
  111. #define KRM_BATCHABORT        2
  112. #define KRM_DATA_PACKET        0    /* show data in packet */
  113. #define KRM_MAXPADCOUNT        94    /* packet padding paramters */
  114. #define KRM_DEFPADCOUNT        0
  115. #define KRM_DEFPADCHAR        '\000'
  116. #define KRM_DEFTIMER        TRUE    /* default to timer on */
  117. //#define KRM_DEFVERBOSE    TRUE    /* show transfer details */
  118. #define KRM_DEFFILEWARN        TRUE    /* warn about duplicate files */
  119. #define KRM_DEFDISCARD        TRUE    /* discard partial files */
  120. #define KRM_DEFBELL        TRUE    /* ring bell after transfer */
  121. #define KRM_DEFBLOCKCHECK    1    /* default block check type */
  122. #define KRM_DEFSENDDELAY    0    /* default delay before first packet */
  123. #define KRM_MAXSENDDELAY    60    /* maximum delay */
  124. #define KRM_DEFRETRYLIMIT    10    /* retry limits */
  125. #define KRM_MAXRETRYLIMIT    63
  126. #define KRM_MINRETRYLIMIT    1
  127. #define KRM_DEFMARK        '\001'    /* default start of packet char */
  128. #define KRM_DEFEOL        '\015'    /* default end of packet char */
  129. #define KRM_DEFQUOTE        '#'    /* default control char quote */
  130. #define KRM_DEFEBQUOTE        '&'    /* default 8-bit char quote */
  131. #define KRM_DEFRPTQUOTE        '~'    /* default repeat char quote */
  132.  
  133. /* menu items */
  134. #define KRM_MENUBASE        10000    /* adjust to avoid menu id conflicts */
  135. #define IDM_KRM_RECEIVE        KRM_MENUBASE
  136. #define IDM_KRM_SEND        KRM_MENUBASE+1
  137. #define IDM_KRM_CANCEL        KRM_MENUBASE+2
  138. #define IDM_KRM_FILEABORT    KRM_MENUBASE+3
  139. #define IDM_KRM_BATCHABORT    KRM_MENUBASE+4
  140. #define IDM_KRM_ERRORABORT    KRM_MENUBASE+5
  141. #define IDM_KRM_PROTOCOL    KRM_MENUBASE+6
  142. #define IDM_KRM_PACKETS        KRM_MENUBASE+7
  143. #define IDM_KRM_GET        KRM_MENUBASE+8
  144.  
  145. #define IDM_KRM_REMOTELOGIN    KRM_MENUBASE+9
  146. #define IDM_KRM_REMOTECWD    KRM_MENUBASE+10
  147. #define IDM_KRM_REMOTEBYE    KRM_MENUBASE+11
  148. #define IDM_KRM_REMOTELOGOUT    KRM_MENUBASE+12
  149. #define IDM_KRM_REMOTEFINISH    KRM_MENUBASE+13
  150. #define IDM_KRM_REMOTEDIR    KRM_MENUBASE+14
  151. #define IDM_KRM_REMOTESPACE    KRM_MENUBASE+15
  152. #define IDM_KRM_REMOTEERASE    KRM_MENUBASE+16
  153. #define IDM_KRM_REMOTETYPE    KRM_MENUBASE+17
  154. #define IDM_KRM_REMOTERENAME    KRM_MENUBASE+18
  155. #define IDM_KRM_REMOTECOPY    KRM_MENUBASE+19
  156. #define IDM_KRM_REMOTEWHO    KRM_MENUBASE+20
  157. #define IDM_KRM_REMOTEMESSAGE    KRM_MENUBASE+21
  158. #define IDM_KRM_REMOTEHELP    KRM_MENUBASE+22
  159. #define IDM_KRM_REMOTESTATUS    KRM_MENUBASE+23
  160. #define IDM_KRM_REMOTEPROGRAM    KRM_MENUBASE+24
  161. #define IDM_KRM_REMOTEJOURNAL    KRM_MENUBASE+25
  162. #define IDM_KRM_REMOTEVARIABLE    KRM_MENUBASE+26
  163. #define IDM_KRM_REMOTECOMMAND    KRM_MENUBASE+27
  164. #define IDM_KRM_LOCALFILES    KRM_MENUBASE+28
  165.  
  166. /* strings */
  167. #define KRM_STRINGBASE         10100 /* adjust to avoid string id conflicts */
  168. #define IDS_KRM_TRANSACTION_DONE    KRM_STRINGBASE
  169. #define IDS_KRM_UNKNOWN_PACKET        KRM_STRINGBASE+1
  170. #define IDS_KRM_CANCELLED        KRM_STRINGBASE+2
  171. #define IDS_KRM_TOOMANYRETRIES        KRM_STRINGBASE+3
  172. #define IDS_KRM_FILE_OPEN_ERROR        KRM_STRINGBASE+4
  173. #define IDS_KRM_FILE_READ_ERROR        KRM_STRINGBASE+5
  174. #define IDS_KRM_FILE_WRITE_ERROR    KRM_STRINGBASE+6
  175. #define IDS_KRM_FILE_CLOSE_ERROR    KRM_STRINGBASE+7
  176. #define IDS_KRM_SENDING            KRM_STRINGBASE+8
  177. #define IDS_KRM_SENDINIT_ERROR        KRM_STRINGBASE+9
  178. #define IDS_KRM_SENDFILENAME_ERROR    KRM_STRINGBASE+10
  179. #define IDS_KRM_SENDDATA_ERROR        KRM_STRINGBASE+11
  180. #define IDS_KRM_SENDEOF_ERROR        KRM_STRINGBASE+12
  181. #define IDS_KRM_SENDEOT_ERROR        KRM_STRINGBASE+13
  182. #define IDS_KRM_CANNOTINIT        KRM_STRINGBASE+14
  183. #define IDS_KRM_KERMITMENU        KRM_STRINGBASE+15
  184. #define IDS_KRM_KERMIT            KRM_STRINGBASE+16
  185. #define IDS_KRM_TIMER            KRM_STRINGBASE+17
  186. #define IDS_KRM_FILEWARN        KRM_STRINGBASE+18
  187. //#define IDS_KRM_VERBOSE            KRM_STRINGBASE+19
  188. #define IDS_KRM_DISCARD            KRM_STRINGBASE+20
  189. #define IDS_KRM_BELL            KRM_STRINGBASE+21
  190. #define IDS_KRM_BLOCKCHECKTYPE        KRM_STRINGBASE+22
  191. #define IDS_KRM_SENDDELAY        KRM_STRINGBASE+23
  192. #define IDS_KRM_RETRYLIMIT        KRM_STRINGBASE+24
  193. #define IDS_KRM_SENDMARK        KRM_STRINGBASE+25
  194. #define IDS_KRM_RCVMARK            KRM_STRINGBASE+26
  195. #define IDS_KRM_SENDMAXLEN        KRM_STRINGBASE+27
  196. #define IDS_KRM_RCVMAXLEN        KRM_STRINGBASE+28
  197. #define IDS_KRM_SENDTIMEOUT        KRM_STRINGBASE+29
  198. #define IDS_KRM_RCVTIMEOUT        KRM_STRINGBASE+30
  199. #define IDS_KRM_SENDPADCOUNT        KRM_STRINGBASE+31
  200. #define IDS_KRM_RCVPADCOUNT        KRM_STRINGBASE+32
  201. #define IDS_KRM_SENDPADCHAR        KRM_STRINGBASE+33
  202. #define IDS_KRM_RCVPADCHAR        KRM_STRINGBASE+34
  203. #define IDS_KRM_SENDEOL            KRM_STRINGBASE+35
  204. #define IDS_KRM_RCVEOL            KRM_STRINGBASE+36
  205. #define IDS_KRM_SENDQUOTE        KRM_STRINGBASE+37
  206. #define IDS_KRM_RCVQUOTE        KRM_STRINGBASE+38
  207. #define IDS_KRM_QUIT            KRM_STRINGBASE+39
  208. #define IDS_KRM_TERMINAL_OPEN_ERROR    KRM_STRINGBASE+40
  209. #define IDS_KRM_SENDCMD_ERROR        KRM_STRINGBASE+41
  210. #define IDS_KRM_SENDR_ERROR        KRM_STRINGBASE+42
  211. #define IDS_KRM_REMOTEHELP        KRM_STRINGBASE+43
  212. #define IDS_KRM_HELPTOPIC        KRM_STRINGBASE+44
  213. #define IDS_KRM_REMOTECOMMAND        KRM_STRINGBASE+45
  214. #define IDS_KRM_CMDTOPIC        KRM_STRINGBASE+46
  215. #define IDS_KRM_REMOTEDIR        KRM_STRINGBASE+47
  216. #define IDS_KRM_REMOTETYPE        KRM_STRINGBASE+48
  217. #define IDS_KRM_REMOTESPACE        KRM_STRINGBASE+49
  218. #define IDS_KRM_SPACETOPIC        KRM_STRINGBASE+50
  219. #define IDS_KRM_REMOTEWHO        KRM_STRINGBASE+51
  220. #define IDS_KRM_WHOTOPIC        KRM_STRINGBASE+52
  221. #define IDS_KRM_REMOTEERASE        KRM_STRINGBASE+53
  222. #define IDS_KRM_WINDOWOVERFLOW        KRM_STRINGBASE+54
  223.  
  224. /* timer values */
  225. #define KRM_TIMERBASE    10200    /* adjust as needed for timer conflicts */
  226. #define KRM_WAITPACKET    KRM_TIMERBASE    /* SetTimer parameter for timeout */
  227. #define KRM_WAITSEND    KRM_TIMERBASE+1    /* SetTimer parameter for send delay */
  228.  
  229. /* dialog boxes */
  230. #define KRM_DLGBASE    10300
  231. #define DT_KRM_XFER    10300
  232. #define DT_KRM_CANCEL    10301
  233. #define DT_KRM_SENDFILE    10302
  234. #define DT_KRM_PROTOCOL    10303
  235. #define DT_KRM_PACKETS    10304
  236. #define DT_KRM_GETFILE    10305
  237. #define DT_KRM_CWD    10306
  238. #define DT_KRM_REMOTE    10307
  239. #define DT_KRM_LOCALFILES 10308
  240.  
  241. /* this enumeration type is used to plot the
  242.  * progress of a packet as it is filled
  243.  */
  244. enum PACKETSTATE {PS_START,    /* start accumulating packet data */
  245.           PS_SYNCH,    /* waiting for start of header */
  246.           PS_LEN,    /* waiting for length byte */
  247.           PS_NUM,    /* waiting for packet number */
  248.           PS_TYPE,    /* waiting for packet type */
  249.           PS_DATA,    /* reading data */
  250.           PS_CHK,    /* reading checksum */
  251.           PS_DONE,    /* packet is complete */
  252. };
  253.  
  254. /*
  255.  * KERMITPARAMS
  256.  *
  257.  * This data structure is associated with the Kermit protocol
  258.  * settings dialog box.
  259.  *
  260.  */
  261. typedef struct _KERMITPARAMS {
  262.     BOOL Bell;                /* sound warning bell */
  263.     BOOL Timer;                /* use timer */
  264.     BOOL DiscardPartialFile;        /* discard partial file */
  265.     BOOL FileWarning;            /* rename incoming files if conflict */
  266.     short BlockCheckType;        /* char, word, or CRC block check */
  267.     short SendDelay;            /* delay before sending first packet */
  268.     short RetryLimit;            /* retry attempts before timing out */
  269.     BYTE ebquote;            /* eight bit quote character */
  270.     BYTE rpquote;            /* repeat quote character */
  271. //    BOOL verbose;            /* show progress of transfer */
  272. } KERMITPARAMS;
  273.  
  274. /*
  275.  * KRMPACKETPARAMS
  276.  *
  277.  * This data structure is associated with the Kermit packet
  278.  * settings dialog box.
  279.  *
  280.  */
  281. typedef struct _KRMPACKETPARAMS {
  282.     BYTE mark;            /* start of header character */
  283.     short maxpktsize;        /* maximum packet size */
  284.     short timeout;        /* timeout interval */
  285.     short padcount;        /* padding character count */
  286.     BYTE padchar;        /* padding character */
  287.     BYTE eol;            /* end of packet character */
  288.     BYTE quote;            /* control character quote */
  289. } KRMPACKETPARAMS;
  290.  
  291. /* 
  292.  * KERMITDATA
  293.  *
  294.  * This structure contains most of the additional parameters
  295.  * needed by Kermit.
  296.  */
  297. typedef struct _KERMITDATA {
  298.     HWND hWnd;                /* main window handle */
  299.     HANDLE hInst;            /* instance handle */
  300.     BOOL start;                /* start transfer */
  301.     BOOL InTransfer;            /* in transfer */
  302.     WORD mode;                /* mode of transfer - send, receive */
  303.     short bctu;                /* block check type used */
  304.     short bctr;                /* block check type requested */
  305.     short seq;                /* packet sequence number */
  306.     BOOL delay;                /* waiting to send first packet */
  307.     FARPROC fpTimer;            /* farproc pointer to Kermit timer */
  308.     short retries;            /* retries per packet */
  309.     short totalretries;            /* total retries */
  310.     OFSTRUCT fstruct;            /* file structure */
  311.     DWORD bytesmoved;            /* bytes transferred */
  312.     DWORD packetcount;            /* packets exchanged */
  313.     DWORD filesize;            /* size of send file */
  314.     int percentage;            /* percentage of file sent */
  315.     int maxsenddatalen;            /* max send packet data length */
  316.     int hFile;                /* file handle */
  317.     HANDLE hFilelist;            /* handle to send file list */
  318.     char *pFilelist;            /* pointer to send file list */
  319.     char *pFile;            /* pointer to single file */
  320.     HWND hWndXfer;            /* handle to transfer dialog box */
  321.     FARPROC fpXfer;            /* transfer dialog box farproc */
  322.     FARPROC fpXferRemote;        /* transfer dialog box farproc */
  323.     short abort;            /* abort type; file or group */
  324.     BOOL ebqflag;            /* using eight-bit quoting */
  325.     BOOL rptflag;            /* using run-length encoding */
  326.     BOOL putterm;
  327. } KERMITDATA;
  328.  
  329. /*
  330.  * KRMPACKET structure
  331.  *
  332.  * This data structure is used to hold the various fields
  333.  * of a packet received from the remote Kermit.
  334.  *
  335.  */
  336. typedef struct _KRMPACKET {
  337.     short len;                /* length of packet */
  338.     short seq;                /* packet sequence number */
  339.     BYTE type;                /* packet type */
  340.     BYTE data[KRM_MAXDATALEN + 1];    /* packet data */
  341.     char rchksum[3];            /* received checksum bytes */
  342.     short data_count;            /* current data count */
  343.     short chk_count;            /* current checksum data count */
  344.     enum KRMPACKETSTATE state;        /* state of packet decomposition */
  345. } KRMPACKET;
  346.  
  347. /*
  348.  * KRMSENDINIT structure
  349.  * 
  350.  * This structure is used to hold the parameters required
  351.  * to compose outbound packets and to decompose inbound packets.
  352.  *
  353.  */
  354. typedef struct _KRMSENDINIT {
  355.     BYTE mark;            /* start of packet header */
  356.     short maxpktsize;        /* maximum packet size */
  357.     short timeout;        /* how many seconds to wait before timing out */
  358.     short padcount;        /* how much padding to add to a packet */
  359.     BYTE padchar;        /* character used for padding */
  360.     BYTE eol;            /* character denoting end of packet */
  361.     BYTE quote;            /* control code quote character */
  362.     BYTE ebquote;        /* eight bit quote character */
  363.     BYTE rpquote;        /* run length quote character */
  364. } KRMSENDINIT;
  365.  
  366. /* External variables needed by Kermit */
  367. KERMITEXTERN KERMITPARAMS KermParams;   /* protocol dialog box values */
  368. KERMITEXTERN KRMPACKETPARAMS sndparams;    /* outbound packet dialog box values */
  369. KERMITEXTERN KRMPACKETPARAMS rcvparams;    /* inbound packet dialog box values */
  370.  
  371. KERMITEXTERN KRMSENDINIT krm_sndinit;   /* data for making outbound packets */
  372. KERMITEXTERN KRMSENDINIT krm_rcvinit;   /* data for making inbound packets */
  373. KERMITEXTERN KERMITDATA Kermit;        /* most other Kermit data */
  374. KERMITEXTERN KRMPACKET krm_rcvpkt;    /* holds data from incoming packet */
  375.  
  376. KERMITEXTERN BYTE krm_sndpkt[100]; /* Holds an assembled packet to be sent */
  377. KERMITEXTERN BYTE *krmBufptr;       /* Buffer holding data read from comm port */
  378. KERMITEXTERN int *krmBuflen;       /* Length of data in buffer */
  379. KERMITEXTERN int *krmcid;       /* Comm port identifier */
  380. KERMITEXTERN HICON krmIcon;       /* Kermit icon */
  381.