|
|
1.1 ! root 1: #ifndef XFER_DOT_H ! 2: #define XFER_DOT_H ! 3: ! 4: /* ! 5: * XFER.H 5.20A June 8, 1995 ! 6: * ! 7: * The Greenleaf Comm Library ! 8: * ! 9: * Copyright (C) 1984-1995 Greenleaf Software Inc. All Rights Reserved. ! 10: * ! 11: * MODIFICATIONS ! 12: * ! 13: * December 12, 1992 4.00A : Initial release ! 14: * ! 15: * December 13, 1994 5.10A : Added the 5.00D patch. ! 16: * ! 17: * August 18, 1995 5.20B : Added the error_code member to the FILE_ENGINE ! 18: * structure. ! 19: */ ! 20: ! 21: /* ! 22: * This header file contains all the public definitions for the code ! 23: * that supports various types of file transfers. This header file ! 24: * defines the universal XFER protocol structure, plus a bunch of ! 25: * constants. Any defined file transfer taking place has a parameter ! 26: * block associated with it. This block contains nearly all of the ! 27: * information needed to figure out what is going on in the transfer at ! 28: * any given time. The only time the high level code really needs to care ! 29: * about the contents of this structure is if the idle routine is doing ! 30: * any processing on the data. The definitions of the structure elements ! 31: * follows: ! 32: * ! 33: * file_engine: This is a pointer to the file engine structure ! 34: * that helps the file transfer routines expand ! 35: * wild cards and open files. This is still ! 36: * undocumented, so it isn't real easy for a user ! 37: * to replace this with a function of their own. ! 38: * ! 39: * filename : A pointer to the name of the file presently ! 40: * being transferred. ! 41: * ! 42: * block_number: This is the file block number, which starts ! 43: * at 0 and keeps incrementing each time a new ! 44: * block is transferred. ! 45: * ! 46: * byte_count: This is the total byte count for the transfer. ! 47: * It starts at 0 and goes up when receiving a ! 48: * file. When sending a file it starts at the ! 49: * file size and counts down to 0. ! 50: * ! 51: * file_length: This is the number of bytes that are expected ! 52: * for the file to be transfered. This number is ! 53: * presently only used during YMODEM file reception. ! 54: * ! 55: * file_time: The time stamp for the file currently being ! 56: * transferred, in UNIX format. ! 57: * ! 58: * message_routine: This is a routine used to print out periodic ! 59: * transfer status messages. The parameter is a ! 60: * simple character string. ! 61: * ! 62: * idle_routine: This is the user defined idle routine which ! 63: * can print out more detailed information ! 64: * than the message_routine. It gets a pointer ! 65: * to the current status block. ! 66: * ! 67: * buffer: This is a pointer to the packet buffer. It ! 68: * gets set up during initialization, and is ! 69: * freed when the driver exits. ! 70: * ! 71: * file: This is a file pointer to the currently open ! 72: * file. It gets opened and closed by the driver ! 73: * routine. ! 74: * ! 75: * port: This is the port structure for the port being ! 76: * used for the transfer. It needs to be an open ! 77: * port. This was changed to be a PORT * in 3.10. ! 78: * ! 79: * abort_key: Anytime the user hits a key, the driver reads ! 80: * it out, and checks to see if it is the same ! 81: * as the abort_key in the structure. If it is, ! 82: * the protocol driver cleans up and exits. ! 83: * ! 84: * return_status: This is the current return status the driver ! 85: * has. This normally is the XFER_SUCCESS ! 86: * constant, unless an error has occurred. ! 87: * ! 88: * current_block_size: This is the size of the block currently being ! 89: * sent or received. ! 90: * ! 91: * current_block_checksum: After the block is read in, the block checksum ! 92: * is stored in this structure element. ! 93: * ! 94: * current_block_number: This is the block number that went out with ! 95: * the buffer currently being sent or received. ! 96: * ! 97: * monitor_cd: If this flag is set, the abort function will ! 98: * periodically check for loss of carrier. If ! 99: * carrier goes low, the transfer aborts. ! 100: * ! 101: * subdirectories: This flag is set if wildcard expansion is ! 102: * supposed to search through subdirectories. ! 103: * ! 104: * error_count: This counter keeps track of the number of errors ! 105: * that have occurred during this transfer. ! 106: * ! 107: * block_error_count: This int keeps track of the number of errors ! 108: * encountered during the current block. ! 109: * ! 110: * transfer_type: The protocol being used during this transfer. ! 111: * ! 112: * sending: This flag is set to be TRUE during uploads, and ! 113: * false during downloads. ! 114: * ! 115: * strip_path_from_filename: Some of the protocols in use here send and ! 116: * receive file names before each file. This ! 117: * element controls whether the path component is ! 118: * stripped from those file names, either before ! 119: * sending the name or after receiving it. ! 120: * ! 121: * x.xmodem.ack_timeout: This int contains the length in milliseconds of ! 122: * the XMODEM ACK timeout. It defaults to 10 ! 123: * seconds, but some installations may want to ! 124: * jack up the value. ! 125: * ! 126: * x.xmodem.last_control_character: ! 127: * This is the last character received while waiting ! 128: * for a control character, such as NAK, ACK or CAN ! 129: * during an xmodem file transfer. ! 130: * ! 131: * x.xmodem.crc_mode: This flag is set true if the 16 bit CRC checksum ! 132: * calculation method is in use, and false if ! 133: * the additive checksum system is in used during ! 134: * an xmodem file transfer. ! 135: * ! 136: * x.zmodem.cancel_count: During a ZMODEM file transfer, this element ! 137: * keeps track of the count of ZCAN characters. ! 138: * ! 139: * x.zmodem.garbage_count: Used to keep track of the number of garbage ! 140: * characters received during a ZMODEM receive. ! 141: * ! 142: * x.zmodem.rx_flag: The ZMODEM rx flags received from the remote ! 143: * end. ! 144: * ! 145: * x.zmodem.error_recovery: This element is set when the ZMODEM sender ! 146: * is undergoing an error recovery. ! 147: * ! 148: * x.zmodem.rx_buffer_size: The size of the receiver's RX buffer, sent ! 149: * during initialization. ! 150: * ! 151: * x.zmodem.rx_frame_output_count : ! 152: * This element keeps track of how many bytes have ! 153: * been sent in the current frame. The receiver ! 154: * may have sent a buffer size, and we don't ! 155: * want to exceed it. ! 156: * ! 157: * ! 158: * x.zmodem.header: A copy of the header bytes received when the ! 159: * last header was read in. ! 160: * ! 161: * x.zmodem.header_type: The type of the most recent header. ! 162: * ! 163: * x.zmodem.crash_recovery: If this flag is set, the ZMODEM receiver will ! 164: * always check to see if a file exsists before ! 165: * beginning to download. If the file does exist, ! 166: * ZMODEM will attempt to perform a crash recovery. ! 167: * ! 168: * x.zmodem.block_before_write: ! 169: * If this flag is set, ZMODEM will always try ! 170: * to block the sender before writing to the disk. ! 171: * This may be necessary to prevent hardware ! 172: * overrun errors during disk access. ! 173: * ! 174: * x.zmodem.use_window : If this flag is set, a window will be used for ! 175: * sending a file, which causes the sender to ! 176: * wait for a ZACK before continuing to next ! 177: * window. This is on by default and can be ! 178: * turned off with the XFER_ZMODEM_NO_WINDOW ! 179: * option. ! 180: * ! 181: * x.zmodem.window_size : This indicates the size of the window that ! 182: * the sender will use if use_window is set. ! 183: * ! 184: * x.zmodem.management_options : ! 185: * This will indicate which file management ! 186: * option is used. ! 187: * ! 188: * x.kermit.max_length: This is the maximum buffer size that the other ! 189: * end wants me to send. This size refers to ! 190: * the actual data size sent in the packet, which ! 191: * is the size of the data block plus 3. ! 192: * ! 193: * x.kermit.qbin: This flag is used to indicate whether binary ! 194: * characters should be quoted, i.e. eighth bit ! 195: * prefixing. It is set during the startup ! 196: * negotiation. ! 197: * ! 198: * x.kermit.text_mode: This flag indicates whether upper bits are to ! 199: * be stripped out of the file before it is sent, ! 200: * or as it is received. ! 201: * ! 202: * x.kermit.timeout: This is the time in seconds that the remote ! 203: * end wants me to use to time out his ! 204: * transmissions. ! 205: * ! 206: * x.kermit.pad_count: This is the number of pad characters that the ! 207: * remote end wants me to send before every packet. ! 208: * ! 209: * x.kermit.pad_char: This is the pad character the remote end expects. ! 210: * ! 211: * x.kermit.eol: This is the the line terminator that the remote ! 212: * end wants. ! 213: * ! 214: * x.kermit.quote_char: This is the quote character that the remote end ! 215: * will be using. ! 216: * ! 217: * x.kermit.his_qbin_char: This is the quote character that the remote end ! 218: * will be using for eight bit prefixing. ! 219: * ! 220: * x.kermit.my_qbin_char: This is the quote character that I will be ! 221: * using for eighth bit prefixing. ! 222: * ! 223: * x.kermit.repeat_flag: This is used to indicate whether or not run ! 224: * length encoding is to be used. It is set ! 225: * during the startup negotiation phase. ! 226: * ! 227: * x.kermit.his_repeat_char: This is the character the remote end has ! 228: * sent to tell what he wants as a repeat char ! 229: * when performing run length encoding. ! 230: * ! 231: * x.kermit.my_repeat_char: This is the character I want to use when ! 232: * when performing run length encoding. ! 233: * ! 234: * x.kermit.his_capbilities: A copy of the remote end's capability bits. ! 235: * We get this during startup. ! 236: * ! 237: * x.ascii.timeout_time: This is the timeout value that determines how ! 238: * long an ASCII receive will sit idle with no ! 239: * characters coming in. This used to be hardcoded, ! 240: * but now it is adjustable. ! 241: * ! 242: * x.ascii.received_character_printer: ! 243: * This is a pointer to a function used during ASCII ! 244: * file transfers. It is a user supplied function ! 245: * that will print out a character at a time to serve ! 246: * as a line monitor during the file transfer. ! 247: * ! 248: * x.ascii.delay_milliseconds_per_line: ! 249: * This is the value for the number of ms to be ! 250: * delayed after every line is sent during an ASCII ! 251: * file transfer. ! 252: * ! 253: * x.ascii.strip_lf: This is a flag which is used to tell whether or ! 254: * or not line feed characters should be stripped ! 255: * during Ascii file transfers. ! 256: * ! 257: */ ! 258: ! 259: #include <stdio.h> ! 260: #include "commlib.h" ! 261: ! 262: typedef struct t_file_engine { ! 263: int ( GF_CONV *get_next_filename )( struct t_file_engine GF_DLL_FAR *engine ); ! 264: int ( GF_CONV *destroy_file_engine )( struct t_file_engine GF_DLL_FAR *engine ); ! 265: void GF_DLL_FAR *local_data; ! 266: char output_name[ 512 ]; ! 267: long length; ! 268: long unix_time; ! 269: int year; ! 270: int month; ! 271: int day; ! 272: int hour; ! 273: int minutes; ! 274: int seconds; ! 275: int error_code; ! 276: } FILE_ENGINE; ! 277: ! 278: typedef struct xfer{ ! 279: FILE_ENGINE GF_DLL_FAR *file_engine; ! 280: char GF_DLL_FAR *filename; /* File presntly being xfered */ ! 281: long block_number; ! 282: long byte_count; ! 283: long file_length; ! 284: long file_time; ! 285: void (GF_CONV *message_routine)(char GF_DLL_FAR *message); ! 286: void (GF_CONV *idle_routine)(struct xfer GF_DLL_FAR *x); ! 287: char GF_DLL_FAR *buffer; ! 288: FILE GF_DLL_FAR *file; ! 289: PORT GF_DLL_FAR *port; ! 290: unsigned int abort_key; ! 291: int file_count; ! 292: int return_status; ! 293: int current_block_size; ! 294: int current_block_checksum; ! 295: int current_block_number; ! 296: int monitor_cd; ! 297: int subdirectories; ! 298: int error_count; ! 299: int block_error_count; ! 300: char sending; ! 301: char strip_path_from_filename; ! 302: int idle_window; ! 303: char transfer_type; ! 304: union { ! 305: struct x_options { ! 306: long ack_timeout; ! 307: int last_control_char; ! 308: char crc_mode; ! 309: } xmodem; ! 310: struct csb_options { ! 311: void GF_DLL_FAR *bplus_data; ! 312: int use_b_plus; ! 313: int want_7_bit; ! 314: char resume_download; ! 315: char resume_upload; ! 316: char send_file_info; ! 317: char window_size; ! 318: char rec_window_size; ! 319: char use_transport; ! 320: char check_method; ! 321: } csb; ! 322: struct z_options { ! 323: int cancel_count; ! 324: int garbage_count; ! 325: int rx_flags; ! 326: int error_recovery; ! 327: unsigned int rx_buffer_size; ! 328: unsigned int rx_frame_output_count; ! 329: unsigned char header[ 4 ]; ! 330: int header_type; ! 331: int crash_recovery; ! 332: int block_before_write; ! 333: int use_window; ! 334: int window_size; ! 335: int conversion_options; ! 336: int management_options; ! 337: int read_full_packet; ! 338: int max_errors; ! 339: int subpacket_size; ! 340: } zmodem; ! 341: struct k_options { ! 342: int max_length; ! 343: int qbin; ! 344: int text_mode; ! 345: char timeout; ! 346: char pad_count; ! 347: char pad_char; ! 348: char eol; ! 349: char quote_char; ! 350: char his_qbin_char; ! 351: char my_qbin_char; ! 352: char repeat_flag; ! 353: char his_repeat_char; ! 354: char my_repeat_char; ! 355: char his_capabilities; ! 356: } kermit; ! 357: struct a_options { ! 358: long timeout_time; ! 359: void (GF_CONV *received_character_printer)(char c); ! 360: int delay_milliseconds_per_line; ! 361: int delay_milliseconds_per_char; ! 362: char strip_lf; ! 363: } ascii; ! 364: } x; ! 365: } XFER; ! 366: ! 367: /* ! 368: * These seven constants define all the possible protocols used during ! 369: * file transfers. Note that type 0, standard XMODEM, can have crc_mode set ! 370: * to be true or false, so it looks kind of like two protocols in one. ! 371: */ ! 372: #define XFER_TYPE_XMODEM 0 ! 373: #define XFER_TYPE_XMODEM_1K 1 ! 374: #define XFER_TYPE_YMODEM 2 ! 375: #define XFER_TYPE_XMODEM_1KG 3 ! 376: #define XFER_TYPE_YMODEM_G 4 ! 377: #define XFER_TYPE_KERMIT 5 ! 378: #define XFER_TYPE_ASCII 6 ! 379: #define XFER_TYPE_ZMODEM 7 ! 380: #define XFER_TYPE_BPLUS 8 ! 381: /* ! 382: * These are several global constants used to define basic parameters used ! 383: * to define some of the transfer parameters for the various families. ! 384: */ ! 385: #define XMODEM_RECEIVE_TIMEOUT 10000L /*Buffer receive timeout in seconds */ ! 386: #define XMODEM_STARTUP_TIMEOUT 5000L /*Sender startup timeout */ ! 387: #define XMODEM_ACK_TIMEOUT 10000L /*Time to wait for ACK after buff */ ! 388: #define XMODEM_MAX_ERRORS 10 /*Maximum number of block retries */ ! 389: ! 390: #define KERMIT_MY_MAX_SIZE 94 /*My maximum kermit buffer size. */ ! 391: #define KERMIT_MY_PACKET_TIMEOUT 10 /*Buffer receive timeout in seconds */ ! 392: #define KERMIT_MY_EOL '\r'/*The EOL character I want. */ ! 393: #define KERMIT_MY_PAD_COUNT 0 /*My incoming pad character count. */ ! 394: #define KERMIT_MY_PAD_CHAR 0 /*My incoming pad characer. */ ! 395: #define KERMIT_MY_QUOTE_CHAR '#' /*My quote character. */ ! 396: #define KERMIT_MY_QBIN_CHAR '&' /*My default QBIN quoting character */ ! 397: #define KERMIT_MY_QBIN_DEFAULT 'Y' /*My default QBIN receive state */ ! 398: #define KERMIT_MY_MARK_CHARACTER 1 /*My mark character, normally ^A */ ! 399: #define KERMIT_MY_REPEAT_CHARACTER '~' /*My repeat char */ ! 400: #define KERMIT_MAX_ERRORS 10 /*Maximum number of errors in Kermit*/ ! 401: /* Change to 5 during debugging */ ! 402: #define ZMODEM_MAX_ERRORS 10 /*Maximum number of block retries */ ! 403: #define BPLUS_MAX_ERRORS 10 /*Maximum number of errors in */ ! 404: /*CompuServe B+ */ ! 405: #define BPLUS_DEFAULT_PACKET_SIZE 1031 /* Size of B+ packet */ ! 406: ! 407: #define ASCII_RECEIVE_TIMEOUT 10000 /* Timeout timer for ASCII download */ ! 408: ! 409: /* ! 410: * These are all the possible return values that can result from an ! 411: * transfer. They should all be somewhat self-explanatory. For deeper ! 412: * explanations, it is necessary to go to the source code. ! 413: */ ! 414: ! 415: #define XFER_RETURN_SUCCESS 0 /* Successfull file transfer */ ! 416: #define XFER_RETURN_CANT_GET_BUFFER -601/* Failed to allocate comm buffer */ ! 417: #define XFER_RETURN_CANT_OPEN_FILE -602/* Couldn't open transfer file */ ! 418: #define XFER_RETURN_CANT_SEND_NAK -603/* Buffer full, can't send NAK */ ! 419: #define XFER_RETURN_CANT_SEND_ACK -604/* Buffer full, can't send ACK */ ! 420: #define XFER_RETURN_KEYBOARD_ABORT -605/* User hit the abort key */ ! 421: #define XFER_RETURN_REMOTE_ABORT -606/* CAN-CAN abort from remote end */ ! 422: #define XFER_RETURN_FILE_ERROR -607/* Failure during file I/O */ ! 423: #define XFER_RETURN_PACKET_TIMEOUT -608/* Timed out waiting for packet */ ! 424: #define XFER_RETURN_BAD_PACKET_SIZE -609/* Got an invalid packet size */ ! 425: #define XFER_RETURN_TOO_MANY_ERRORS -610/* Got too many errors to go on */ ! 426: #define XFER_RETURN_LOGIC_ERROR -611/* Internal error, will never happen*/ ! 427: #define XFER_RETURN_CANT_PUT_BUFFER -612/* Error transmitting buffer */ ! 428: #define XFER_RETURN_CANT_SEND_EOT -613/* Buffer full, can't send EOT */ ! 429: #define XFER_RETURN_PROTOCOL_ERROR -614/* Usually a bad packet type in kerm*/ ! 430: #define XFER_RETURN_CANT_PUT_CHAR -615/* Error transmitting a character */ ! 431: #define XFER_RETURN_CANT_GET_CHAR -616/* Error receiving a character */ ! 432: #define XFER_RETURN_ASCII_TIMEOUT -617/* Nothing happening during ASCII */ ! 433: #define XFER_RETURN_LOST_CARRIER -618/* Lost carrier during Xfer */ ! 434: #define XFER_RETURN_NO_FILES -619/* Sent no files */ ! 435: #define XFER_SEND_ZSKIP -620/* Receiver should send ZSKIP */ ! 436: #define XFER_RETURN_BAD_PACKET_SEQ -621/* CompuServe B+ packet sequence err*/ ! 437: #define XFER_RETURN_PACKET_ARRIVED -622/* CompuServe B+ packet arrived */ ! 438: #define XFER_RETURN_FILE_ENGINE_ERR -623/* File engine failed */ ! 439: ! 440: /* ! 441: * File management options supported by Zmodem ! 442: */ ! 443: #define ZMRECOV 3 ! 444: #define ZMNEWL 1 ! 445: #define ZMAPND 3 ! 446: #define ZMCLOB 4 ! 447: #define ZMNEW 5 ! 448: #define ZMDIFF 6 ! 449: #define ZMPROT 7 ! 450: ! 451: enum FileTransferOptions { XFER_END_OPTIONS = 0, ! 452: XFER_NOP = 1001, ! 453: XFER_KERMIT_BINARY_PREFIX = 1002, ! 454: XFER_KERMIT_TEXT_MODE = 1003, ! 455: XFER_KERMIT_DISABLE_RLE = 1004, ! 456: XFER_USE_FULL_PATH_NAME = 1005, ! 457: XFER_MONITOR_CARRIER = 1006, ! 458: XFER_ABORT_KEY = 1007, ! 459: XFER_ADDITIVE_CHECKSUM = 1008, ! 460: XFER_SUBDIRECTORIES = 1009, ! 461: XFER_FILE_ENGINE_CONSTRUCTOR = 1010, ! 462: XFER_USE_G_OPTION = 1011, ! 463: XFER_ASCII_TIMEOUT_TIME = 1012, ! 464: XFER_ASCII_CHAR_DELAY = 1013, ! 465: XFER_ZMODEM_CRASH_RECOVERY = 1014, ! 466: XFER_ZMODEM_BLOCK_BEFORE_WRITE = 1015, ! 467: XFER_XMODEM_ACK_TIMEOUT = 1016, ! 468: XFER_ZMODEM_NO_WINDOW = 1017, ! 469: XFER_ZMODEM_OVERWRITE_NEWL = 1018, ! 470: XFER_ZMODEM_OVERWRITE_APPEND = 1019, ! 471: XFER_ZMODEM_OVERWRITE_ALWAYS = 1020, ! 472: XFER_ZMODEM_OVERWRITE_DIFF = 1021, ! 473: XFER_ZMODEM_OVERWRITE_PROT = 1022, ! 474: XFER_ZMODEM_OVERWRITE_NEW = 1023, ! 475: XFER_BPLUS_CHECK_METHOD = 1024, ! 476: XFER_BPLUS_SEND_FILE_INFO = 1025, ! 477: XFER_BPLUS_RESUME_DOWNLOAD = 1026, ! 478: XFER_DISPLAY_IDLE = 1027, ! 479: XFER_ZMODEM_SET_MAX_ERRORS = 1028, ! 480: XFER_ZMODEM_SET_WINDOW_SIZE = 1029 ! 481: }; ! 482: ! 483: typedef struct xfer_options { ! 484: int kermit_bin_prefix; ! 485: int kermit_text_mode; ! 486: int kermit_disable_rle; ! 487: int full_path; ! 488: int monitor_cd; ! 489: int abort_key_opt; ! 490: int abort_key; ! 491: int additive_checksum; ! 492: int xmodem_ack_timeout_opt; ! 493: int xmodem_ack_timeout; ! 494: int subdirectories; ! 495: int g_option; ! 496: int ascii_timeout_opt; ! 497: int ascii_timeout; ! 498: int crash_recovery; ! 499: int blocking; ! 500: int zmodem_window; ! 501: int ovw_mgmt; ! 502: int bp_check_opt; ! 503: int bp_check_method; ! 504: int bp_file_info; ! 505: int bp_resume_dl; ! 506: int idle_display; ! 507: int idle_hwnd; ! 508: int zmodem_errors_opt; ! 509: int zmodem_max_errors; ! 510: int zmodem_window_opt; ! 511: int zmodem_window_size; ! 512: } XFER_OPTIONS; ! 513: ! 514: ! 515: /* FILE TRANSFER FUNCTION PROTOTYPES ! 516: * ! 517: * These are the function prototypes for the user interface routines. ! 518: * ! 519: */ ! 520: ! 521: #ifdef __cplusplus ! 522: ! 523: extern "C" { ! 524: #endif ! 525: ! 526: #define XmodemReceive( p, f, m, i ) /* Tag: File Xfer public */ \ ! 527: XmodemReceiveWithOptions( p, f, m, i, XFER_END_OPTIONS ) ! 528: ! 529: #define Xmodem1KReceive( p, f, m, i ) /* Tag: File Xfer public */ \ ! 530: Xmodem1KReceiveWithOptions( p, f, m, i, XFER_END_OPTIONS ) ! 531: ! 532: #define YmodemReceive( p, m, i ) /* Tag: File Xfer public */ \ ! 533: YmodemReceiveWithOptions( p, m, i, XFER_END_OPTIONS ) ! 534: ! 535: #define KermitReceive( p, m, i ) /* Tag: File Xfer public */ \ ! 536: KermitReceiveWithOptions( p, m, i, XFER_END_OPTIONS ) ! 537: ! 538: #define AsciiReceive( p, f, m, i, e, s ) /* Tag: File Xfer public */ \ ! 539: AsciiReceiveWithOptions( p, f, m, i, e, s, XFER_END_OPTIONS ) ! 540: ! 541: #define ZmodemReceive( p, m, i ) /* Tag: File Xfer public */ \ ! 542: ZmodemReceiveWithOptions( p, m, i, XFER_END_OPTIONS ) ! 543: ! 544: #define XmodemSend( p, f, m, i ) /* Tag: File Xfer public */ \ ! 545: XmodemSendWithOptions( p, f, m, i, XFER_END_OPTIONS ) ! 546: ! 547: #define Xmodem1KSend( p, f, m, i ) /* Tag: File Xfer public */ \ ! 548: Xmodem1KSendWithOptions( p, f, m, i, XFER_END_OPTIONS ) ! 549: ! 550: #define YmodemSend( p, f, m, i ) /* Tag: File Xfer public */ \ ! 551: YmodemSendWithOptions( p, f, m, i, XFER_END_OPTIONS ) ! 552: ! 553: #define KermitSend( p, f, m, i ) /* Tag: File Xfer public */ \ ! 554: KermitSendWithOptions( p, f, m, i, XFER_END_OPTIONS ) ! 555: ! 556: #define AsciiSend( p, f, m, i, e, s, l ) /* Tag: File Xfer public */ \ ! 557: AsciiSendWithOptions( p, f, m, i, e, s, l, XFER_END_OPTIONS ) ! 558: ! 559: #define ZmodemSend( p, f, m, i ) /* Tag: File Xfer public */ \ ! 560: ZmodemSendWithOptions( p, f, m, i, XFER_END_OPTIONS ) ! 561: ! 562: int GF_CDECL YmodemReceiveWithOptions( ! 563: PORT GF_DLL_FAR *port, ! 564: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 565: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 566: enum FileTransferOptions first_option, ! 567: ... ); ! 568: ! 569: int GF_CDECL KermitReceiveWithOptions( ! 570: PORT GF_DLL_FAR *port, ! 571: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 572: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 573: enum FileTransferOptions first_option, ! 574: ... ); ! 575: ! 576: int GF_CDECL ZmodemReceiveWithOptions( ! 577: PORT GF_DLL_FAR *port, ! 578: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 579: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 580: enum FileTransferOptions first_option, ! 581: ... ); ! 582: ! 583: int GF_CDECL YmodemSendWithOptions( ! 584: PORT GF_DLL_FAR *port, ! 585: char GF_DLL_FAR *file_name_list, ! 586: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 587: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 588: enum FileTransferOptions first_option, ! 589: ... ); ! 590: ! 591: int GF_CDECL KermitSendWithOptions( ! 592: PORT GF_DLL_FAR *port, ! 593: char GF_DLL_FAR *file_name_list, ! 594: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 595: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 596: enum FileTransferOptions first_option, ! 597: ... ); ! 598: ! 599: int GF_CDECL ZmodemSendWithOptions( ! 600: PORT GF_DLL_FAR *port, ! 601: char GF_DLL_FAR *file_name, ! 602: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 603: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 604: enum FileTransferOptions first_option, ! 605: ... ); ! 606: ! 607: int GF_CDECL XmodemReceiveWithOptions( ! 608: PORT GF_DLL_FAR *port, ! 609: char GF_DLL_FAR *file_name, ! 610: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 611: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 612: enum FileTransferOptions first_option, ! 613: ... ); ! 614: ! 615: int GF_CDECL Xmodem1KReceiveWithOptions( ! 616: PORT GF_DLL_FAR *port, ! 617: char GF_DLL_FAR *file_name, ! 618: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 619: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 620: enum FileTransferOptions first_option, ! 621: ... ); ! 622: ! 623: int GF_CDECL AsciiReceiveWithOptions( ! 624: PORT GF_DLL_FAR *port, ! 625: char GF_DLL_FAR *file_name, ! 626: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 627: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 628: void ( GF_DLL_FAR GF_CONV *echo_routine )( char c ), ! 629: char strip_lf, ! 630: enum FileTransferOptions first_option, ! 631: ... ); ! 632: ! 633: int GF_CDECL XmodemSendWithOptions( ! 634: PORT GF_DLL_FAR *port, ! 635: char GF_DLL_FAR *file_name, ! 636: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 637: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 638: enum FileTransferOptions first_option, ! 639: ... ); ! 640: ! 641: int GF_CDECL Xmodem1KSendWithOptions( ! 642: PORT GF_DLL_FAR *port, ! 643: char GF_DLL_FAR *file_name, ! 644: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 645: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 646: enum FileTransferOptions first_option, ! 647: ... ); ! 648: ! 649: int GF_CDECL AsciiSendWithOptions( ! 650: PORT GF_DLL_FAR *port, ! 651: char GF_DLL_FAR *file_name, ! 652: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 653: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 654: void ( GF_DLL_FAR GF_CONV *echo_routine )( char c ), ! 655: char strip_lf, ! 656: int line_delay, ! 657: enum FileTransferOptions first_option, ! 658: ... ); ! 659: ! 660: int GF_CDECL CompuServeBPlusWithOptions( ! 661: PORT GF_DLL_FAR *port, ! 662: void ( GF_DLL_FAR GF_CONV *message_routine )( char GF_DLL_FAR *message ), ! 663: void ( GF_DLL_FAR GF_CONV *idle_routine )( XFER GF_DLL_FAR *status_block ), ! 664: enum FileTransferOptions first_option, ! 665: ... ); ! 666: ! 667: int GF_CONV CompuServeBPlusRespond( PORT GF_DLL_FAR *port, int use_bplus ); ! 668: XFER_OPTIONS GF_DLL_FAR * GF_CONV CLSetFileTransferOptions( int GF_DLL_FAR options[] ); ! 669: int GF_CONV CLFileSend( PORT GF_DLL_FAR *port, ! 670: int transfer_type, ! 671: char GF_DLL_FAR *file_name_list, ! 672: int ascii_strip_lf, ! 673: int ascii_line_delay, ! 674: XFER_OPTIONS GF_DLL_FAR *send_options ); ! 675: int GF_CONV CLFileReceive( PORT GF_DLL_FAR *port, ! 676: int transfer_type, ! 677: char GF_DLL_FAR *file_name, ! 678: int ascii_strip_lf, ! 679: XFER_OPTIONS GF_DLL_FAR *rec_options ); ! 680: ! 681: ! 682: /* ! 683: * A couple of file transfer utilities. ! 684: */ ! 685: ! 686: FILE_ENGINE GF_DLL_FAR * GF_CONV CreateDosFileEngine( char GF_DLL_FAR *input_names, ! 687: int recurse_flag ); ! 688: char GF_DLL_FAR * GF_CONV XferStripPathComponent( char GF_DLL_FAR *name ); ! 689: void GF_CONV ProcessTXFile( FILE_ENGINE GF_DLL_FAR *engine ); ! 690: void GF_CONV CloseXferFile( XFER GF_DLL_FAR *xfer ); ! 691: long GF_CONV CreateUnixTime( int year, ! 692: int month, ! 693: int day, ! 694: int hour, ! 695: int minute, ! 696: int second ); ! 697: ! 698: /* ! 699: * Global variables used by the file transfer routines. ! 700: */ ! 701: ! 702: void GF_CONV SetXferFileOpenFunctionPtr( FILE *(GF_CONV *f)( XFER GF_DLL_FAR *status, ! 703: char GF_DLL_FAR *name, ! 704: char GF_DLL_FAR *mode ) ); ! 705: void GF_CONV SetDefaultAbortKey( int abort_key ); ! 706: void GF_CONV SetGlobalXmodemPadCharacter( int new_pad_char ); ! 707: ! 708: /* ! 709: * To get around a compiler warning from Watcom, I have to ! 710: * typedef the function called by the abort function. ! 711: * void GF_CONV SetAbortXferFunctionPtr( int (GF_CONV *f)( XFER GF_DLL_FAR *status ) ); ! 712: */ ! 713: ! 714: typedef int (GF_DLL_FAR GF_CONV *GF_ABORT_FN)(XFER GF_DLL_FAR *); ! 715: void GF_CONV SetAbortXferFunctionPtr( GF_ABORT_FN ); ! 716: ! 717: #ifdef __cplusplus ! 718: } ! 719: #endif ! 720: ! 721: #endif /* #ifndef XFER_DOT_H */ ! 722:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.