134 lines
2.1 KiB
C
134 lines
2.1 KiB
C
|
#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 <CAN><CAN>
|
||
|
*
|
||
|
*
|
||
|
* 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 <sys/termios.h>
|
||
|
#include <sys/ioctl.h>
|
||
|
#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 ;
|
||
|
}
|