/* Copyright (C) Magna Carta Software, Inc. 1990-1991. All Rights Reserved. XFERMSG.C -- Sample file transfer status function. Do not execute directly. This file is #included by the examples. */ #if !defined(CCTZ_H_INCLUDED) #include #endif #if !defined(KERMIT_H_INCLUDED) #include #endif /* KERMIT PACKET TYPES */ static char *k_msg[] = { "ABORT", "BREAK", "DATA", "ERROR", "FILE HEADER", "SEND-INIT", "END OF FILE" }; static char *z_msg[] = {"ZRQINIT", "ZRINIT", "ZSINIT", "ZACK", "ZFILE", "ZSKIP", "ZNAK", "ZABORT", "ZFIN", "ZRPOS", "ZDATA", "ZEOF", "ZFERR", "ZCRC", "ZCHALLENGE", "ZCOMPL", "ZCAN", "ZFREECNT", "ZCMD", "ZSTDERR"}; char *a_cap[] = {"CANFDX", "CANOVIO", "CANBRK", "CANCRY", "CANLZW", "CANFC32", "ESCCTL", "ESC8"}; char *a_bool[] = {"FALSE", "TRUE"}; /* TRANSFER_PROGRESS -- This function is called during file transfer to report status. */ short CDECL_ xfer_progress(COMM_PORT *p, short status, unsigned long parm) { static short file_started; p = p; /* nuke compiler warning */ switch (status) { case 0: conouts("\nFile transfer successful"); break; case BAD_HEADER_FORMAT: conoutf("\nBad header format"); break; case BAD_PACKET_NUMBER: conoutf("\nBad packet number"); break; case CAN: conoutf("\nCAN received!"); break; case CONNECTION_LOST: conoutf("\nConnection lost at %ld bytes", parm); break; case CRC_ERROR: conoutf("\nCRC/checksum error"); break; case DISK_FULL: conoutf("\nI/O Error Writing to Disk"); break; case EOF: conoutf("\nNo character received"); break; case EOT: conoutf("\nFinal ACK received!"); break; case FILE_INFO_RECEIVED: conoutf("\nFile Information Received"); if (fname[0] != '\0') conoutf("\nFile Name: %s", fname); if (fsize != 0L) conoutf("\nFile Size: %lu\n", fsize); break; case FILE_SOURCE: conoutf("\nFile being sent from %s", (parm == DISK) ? "DISK" : "RAM"); break; case GARBAGE_RECEIVED: conoutf("\nUnrecognized character received"); break; case FILE_LENGTH_ERROR: conoutf("\nFile length error"); break; case HEADER_NOT_ACKNOWLEDGED: conoutf("\nHeader not acknowledged"); break; case MAX_ERRORS_REACHED: conoutf("\nMaximum number of errors reached"); break; case NAK: conoutf("\nNAK received"); break; case NO_RX_START: conoutf("\nFile receiver did not poll. Attempt %ld", parm); break; case NO_TX_START: conoutf("\nTransmitter did not start. Attempt %ld", parm); break; case RX_CANCELLED: conoutf("\nRemote Cancelled"); break; case RX_DATA_ERROR: conoutf("\nReceive data error"); break; case RX_TIMEOUT: conoutf("\nReceiver Timeout"); break; case SOH: case STX: if (!file_started) { if (parm == 0) conoutf("\nReceived Start of Header"); file_started = TRUE; } break; case TX_CANCELLED: conoutf("\nTransmitter cancelled"); break; case UNSPECIFIED: conoutf("\nUnspecified error"); break; case USER_CANCELLED: conoutf("\nKeyboard cancel received"); break; case USING_CHECKSUM: conoutf("\nUsing checksum error correction"); break; case USING_CRC: conoutf("\nUsing CRC error correction"); break; case XFER_POSITION: conoutf("\rBytes %ld", parm); break; case XMODEM: conoutf("\nUsing XMODEM"); break; case XMODEM_CRC: conoutf("\nUsing XMODEM-CRC"); break; case XMODEM_1K: conoutf("\nUsing XMODEM-1K"); break; case YMODEM: conoutf("\nUsing YMODEM protocol"); break; case YMODEM_G: conoutf("\nUsing YMODEM-g protocol"); break; #if 0 case 'A': conoutf("\nABORT received"); break; case 'B': conoutf("\nBREAK received"); break; case 'D': /* conoutf("\nSending DATA packet"); */ break; case 'E': conoutf("\nERROR packet received"); break; case 'F': conoutf("\nFile header OK"); break; case 'S': conoutf("\nSending Send-Init packet"); break; case 'Z': conoutf("\nSending End-of-File packet"); break; #endif /* THIS BLOCK HANDLES KERMIT-SPECIFIC STATUS CODES */ case K_ABORT | 0X1000: case K_BREAK | 0X1000: case K_DATA | 0X1000: case K_EOF | 0X1000: case K_ERROR | 0X1000: case K_FHEAD | 0X1000: case K_SINIT | 0X1000: status &= ~0X1000; if (status < sizeof(k_msg)/sizeof(k_msg[0])) conoutf("\r%s at packet %ld", k_msg[status], parm); break; /* THIS BLOCK HANDLES ZMODEM-SPECIFIC STATUS CODES */ case ZRQINIT | 0X2000: case ZSINIT | 0X2000: case ZACK | 0X2000: case ZFILE | 0X2000: case ZSKIP | 0X2000: case ZNAK | 0X2000: case ZABORT | 0X2000: case ZFIN | 0X2000: case ZRPOS | 0X2000: case ZDATA | 0X2000: case ZEOF | 0X2000: case ZFERR | 0X2000: case ZCRC | 0X2000: case ZCHALLENGE | 0X2000: case ZCOMPL | 0X2000: case ZCAN | 0X2000: case ZFREECNT | 0X2000: case ZCOMMAND | 0X2000: case ZSTDERR | 0X2000: status &= ~0X2000; if (status < sizeof(z_msg)/sizeof(z_msg[0])) conoutf("\nReceived %s", z_msg[status]); break; case ZRINIT | 0X2000: { short i; for (i=0; i < 8; i++) { conoutf("\nReceiver %s = %s", a_cap[i], (parm & (1 << i)) ? a_bool[1] : a_bool[0]); } break; } default: conoutf("\nUnrecognized error report %#x", status); break; } return (0); }