You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
3.7 KiB
194 lines
3.7 KiB
/* File: C:\WACKER\tdll\mdmx_res.c (Created: 17-Jan-1994)
|
|
* created from HAWIN source file
|
|
* mdmx_res.c -- Routines to handle xmodem sending for HA5G
|
|
*
|
|
* Copyright 1989,1994 by Hilgraeve Inc. -- Monroe, MI
|
|
* All rights reserved
|
|
*
|
|
* $Revision: 1 $
|
|
* $Date: 10/05/98 1:16p $
|
|
*/
|
|
#include <windows.h>
|
|
#pragma hdrstop
|
|
|
|
#include <setjmp.h>
|
|
|
|
#define BYTE unsigned char
|
|
|
|
#include <tdll\stdtyp.h>
|
|
#include <tdll\session.h>
|
|
#include <tdll\xfer_msc.h>
|
|
#include <tdll\file_io.h>
|
|
#include "xfr_srvc.h"
|
|
#include "xfr_todo.h"
|
|
#include "xfr_dsp.h"
|
|
#include "xfer_tsc.h"
|
|
#include "foo.h"
|
|
|
|
#include "xfer.h"
|
|
#include "xfer.hh"
|
|
|
|
#include "mdmx.h"
|
|
#include "mdmx.hh"
|
|
|
|
/*lint -e502*/ /* lint seems to want the ~ operator applied
|
|
* only to unsigned, wer'e using uchar
|
|
*/
|
|
|
|
// #pragma optimize("a", on)
|
|
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
|
* load_pckt
|
|
*
|
|
* DESCRIPTION:
|
|
* Prepares an XMODEM packet for transmission by filling it with data and
|
|
* initializing other fields such as
|
|
*
|
|
* ARGUMENTS:
|
|
*
|
|
* RETURNS:
|
|
*
|
|
*/
|
|
int load_pckt(ST_MDMX *pX,
|
|
struct s_mdmx_pckt *p,
|
|
unsigned pcktnum,
|
|
int kpckt,
|
|
int chktype)
|
|
{
|
|
BYTE checksum;
|
|
unsigned int crc;
|
|
BYTE *cp;
|
|
int cnt;
|
|
int cc;
|
|
|
|
p->pcktnum = (BYTE)(pcktnum % 0x100);
|
|
p->npcktnum = (BYTE)(~p->pcktnum);
|
|
cp = p->bdata;
|
|
checksum = 0;
|
|
p->result = 0; /* will set TRUE if end of data is reached */
|
|
|
|
for (cnt = (kpckt ? LARGE_PACKET : SMALL_PACKET); cnt > 0; --cnt)
|
|
{
|
|
if ((cc = (*pX->p_getc)(pX)) == EOF)
|
|
{
|
|
p->result = 1; /* so compression display won't check */
|
|
#if FALSE
|
|
/* TODO: figure out how to do this */
|
|
if (nb_error(pX->fh))
|
|
return FALSE;
|
|
#endif
|
|
break;
|
|
}
|
|
checksum += (*cp++ = (BYTE)cc);
|
|
}
|
|
|
|
/* see if we're at end of file */
|
|
if (cnt == (kpckt ? LARGE_PACKET : SMALL_PACKET))
|
|
{
|
|
p->start_char = EOT;
|
|
p->pcktsize = 1;
|
|
return TRUE;
|
|
}
|
|
|
|
/* if using large packets but this one is small enough, switch */
|
|
if (kpckt && ((LARGE_PACKET-cnt) <= SMALL_PACKET))
|
|
{
|
|
kpckt = FALSE; /* set small packet flag */
|
|
/* set count to 128-(1024-cnt) */
|
|
cnt = (SMALL_PACKET - (LARGE_PACKET - cnt));
|
|
}
|
|
|
|
while (cnt-- > 0)
|
|
{
|
|
*cp++ = CPMEOF;
|
|
checksum += CPMEOF;
|
|
}
|
|
|
|
p->start_char = (BYTE)(kpckt ? STX : SOH);
|
|
p->pcktsize = (kpckt ? LARGE_PACKET : SMALL_PACKET) + 4;
|
|
p->byte_count = pX->mdmx_byte_cnt;/* amt. transferred after this packet */
|
|
/* is sent */
|
|
if (chktype == CHECKSUM)
|
|
{
|
|
*cp = checksum;
|
|
}
|
|
else
|
|
{
|
|
*cp = 0;
|
|
*(cp + 1) = 0;
|
|
|
|
crc = calc_crc(pX, (unsigned)0, p->bdata,
|
|
(kpckt ? LARGE_PACKET : SMALL_PACKET) + 2 );
|
|
|
|
*cp++ = (BYTE)(crc / 0x100);
|
|
*cp = (BYTE)(crc % 0x100);
|
|
++p->pcktsize;
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
|
* xm_getc
|
|
*
|
|
* DESCRIPTION:
|
|
*
|
|
* ARGUMENTS:
|
|
*
|
|
* RETURNS:
|
|
*
|
|
*/
|
|
int xm_getc(ST_MDMX *pX)
|
|
{
|
|
|
|
++pX->mdmx_byte_cnt;
|
|
return(fio_getc(pX->fh));
|
|
// return(nb_getc(pX->fh));
|
|
}
|
|
|
|
|
|
// Receive routines
|
|
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
|
* FUNCTION:
|
|
*
|
|
* DESCRIPTION:
|
|
*
|
|
*
|
|
* ARGUMENTS:
|
|
*
|
|
*
|
|
* RETURNS:
|
|
*
|
|
*/
|
|
int xs_unload(ST_MDMX *pX, BYTE *cp, int size)
|
|
{
|
|
int cnt;
|
|
|
|
for (cnt = size + 1; --cnt > 0; )
|
|
{
|
|
if ((*pX->p_putc)(pX, (int)*cp++) == (-1) /* ERROR */)
|
|
return ERROR;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
|
* xm_putc
|
|
*
|
|
* DESCRIPTION:
|
|
*
|
|
* ARGUMENTS:
|
|
*
|
|
* RETURNS:
|
|
*
|
|
*/
|
|
int NEAR xm_putc(ST_MDMX *pX, int c)
|
|
{
|
|
|
|
pX->mdmx_byte_cnt += 1;
|
|
return ((int)(fio_putc(c, pX->fh)));
|
|
// return ((int)(nb_putc(c, pX->fh)));
|
|
}
|