#ifndef lint static const char rcsid[] = "$Id: utils.c,v 1.2 2001/10/25 23:56:29 efalk Exp $" ; #endif /* * Copyright (c) 1995 by Edward A. Falk */ /********** * * * @ @ @@@@@ @@@ @ @@@@ * @ @ @ @ @ @ * @ @ @ @ @ @@@ * @ @ @ @ @ @ * @@@ @ @@@ @@@@@ @@@@ * * UTILS - utilities used by xmodem library. * * Routines provided here: * * * name (args) * Brief description. * * int sendCancel() * * send cancel string * * * int sendFlush(c) * char c ; * * flush input, send one character, return nonzero on error * * * int sendChr(c) * char c ; * * send one character, return nonzero on error * * * int sendStr(str, len) * char *str ; * int len ; * * send string, return nonzero on error * * * int calcChecksum(ptr, count) * char *ptr ; * int count ; * * compute checksum (used by xmodem) * * * Edward A. Falk * * January, 1995 * * * **********/ #include #include #include "xmodem.h" int sendCancel() { return sendFlush(CAN) || sendFlush(CAN) ; } /* send one character, return nonzero on error */ int sendFlush(char c) { /* first, flush input port */ /* TODO: caller provide a way to do this? */ if( xmRfd == -1 ) return XmErrNotOpen ; /* TODO: caller provides flush */ if( ioctl(xmRfd, TCFLSH, TCIFLUSH) == -1 ) return XmErrSys ; return sendChr(c) ; } /* send one character, return nonzero on error */ int sendChr(char c) { /* TODO: caller provide character output func? */ if( xmTfd == -1 ) return XmErrNotOpen ; return write(xmTfd, &c, 1) ==1 ? 0 : XmErrSys ; } /* send multiple characters, return nonzero on error */ int sendStr(char *str, int len) { /* TODO: caller provide character output func? */ if( xmTfd == -1 ) return XmErrNotOpen ; return write(xmTfd, str, len) == len ? 0 : XmErrSys ; } /* compute checksum */ int calcChecksum(char *ptr, int count) { register int csum = 0 ; while( --count >= 0 ) csum += (u_char) *ptr++ ; return csum & 255 ; }