?? transmit.c
字號(hào):
/*
filename: transmit.c
purpose: deal with the things about transfer
author: wx
date: 2003-3-20
*/
#include "..\\lib\\8000lib.h"
#include "..\\lib\\ucos.h"
#include "global.h"
static char *ACK = "ACK\r";
static char *NAK = "NAK\r";
int beep1[4] = {16, 5, 0, 0};
int beep2[8] = {30, 10, 0, 5, 30, 10, 0, 0};
BYTE szData [512];
BYTE szBuf [512];
static BOOL ConnectingPage (void);
static BOOL ConnectingPage (void)
{
clr_scr ();
SetFont (2);
DispString (0, 1, (char*)"Connecting. ", 0);
DispString (0, 3, SpaceBar, 0);
DispString (0, 5, (char*)"Press ESC to", 0);
DispString (0, 7, (char*)"cancel ", 0);
return TRUE;
}
BOOL DownloadLookup (int nPort, int file)
{
int i, j, k, m, sum;
BYTE c;
BYTE szData [256];
BYTE szBuf[256];
ConnectingPage ();
if (nPort == 1)
SetCommType (1, 0); // direct 232
else if (nPort == 2)
SetCommType (1, 2); // IR
else
SetCommType (1, 3); // IrDA
nPort = 1; // must use COM1
switch (SelectSpeed())
{
case 1: c = 0x08; break; // 115200,N,8,1
case 2: c = 0x0a; break; // 57600
case 3: c = 0x0b; break; // 38400
case 4: c = 0x0c; break; // 19200
case 5: c = 0x0d; break; // 9600
}
open_com (nPort, c);
ReTry :
i = 0;
while (i < 10)
{
if (read_com (nPort, (char *)&c))
szData [i++] = c;
if (c == '\r')
break;
if ((c = getchar()) == KEY_ESC)
{
close_com (nPort);
return TRUE;
}
}
szData [i] = 0;
if (!strcmp (szData, "CIPHER\r"))
{
DispString (0, 1, (char*)"Downloading", 0);
write_com (nPort, ACK);
while (!com_eot (nPort));
}
else
{
write_com (nPort, NAK);
while (!com_eot (nPort));
goto ReTry;
}
switch (file)
{
case 1:
remove ("PROV");
prov_file = create_DBF ((char *)"PROV", 20);
create_index (prov_file, 1, 0, 4);
break;
case 2:
remove ("CUST");
cust_file = create_DBF ((char *)"CUST", 20);
create_index (cust_file, 1, 0, 4);
break;
case 3:
remove ("OPER");
oper_file = create_DBF ((char *)"OPER", 20);
create_index (oper_file, 1, 0, 4);
break;
case 4:
remove ("ISHEE");
ishee_file = create_DBF ((char *)"ISHEE", 20);
create_index (ishee_file, 1, 0, 4);
break;
case 5:
remove ("OSHEE");
oshee_file = create_DBF ((char *)"OSHEE", 20);
create_index (oshee_file, 1, 0, 4);
break;
}//switch
m = 0;
while (1) // download lookup file
{
ReDo:
i = 0;
c = 0;
while (c != '\r')
{
if (read_com (nPort, (char *)&c))
*(szData+i++) = c;
if (getchar() == KEY_ESC)
{
close_com (nPort);
return FALSE;
}
}
i--;
*(szData+i) = 0;
if (!strcmp (szData, "OVER"))
{
write_com (nPort, ACK);
while (!com_eot (nPort));
break;
}
sum = 0;
for (j=0; j<i-2; j++)
sum += szData [j];
j = sum / 256;
if (j == 13)
j++;
k = sum % 256;
if (k == 13)
k++;
if (j != szData [i-2] || k != szData [i-1]) // checksum not correct
{
write_com (nPort, NAK);
while (!com_eot (nPort));
goto ReDo;
}
szData [i-2] = 0;
switch (file)
{
case 1:
add_member (prov_file, (char *)szData);
break;
case 2:
add_member (cust_file, (char *)szData);
break;
case 3:
add_member (oper_file, (char *)szData);
break;
case 4:
add_member (ishee_file, (char *)szData);
break;
case 5:
add_member (oshee_file, (char *)szData);
break;
}
itoa (++m, szBuf, 10);
DispString (1, 3, (char*)szBuf, 0); // show data transfered
write_com (nPort, ACK);
while (!com_eot (nPort));
}
close_com (nPort); // close COM
clr_scr ();
on_beeper (beep2);
DispString (0, 1, (char*)"OK!", 0);
DispString (0, 5, (char*)"Please wait", 0);
OSTimeDly (200);
return TRUE;
}
BOOL UploadData (int nPort, int DataFile)
{
int i, j, k;
unsigned sum;
BYTE Header [2];
BYTE c;
ConnectingPage ();
if (nPort == 1)
SetCommType (1, 0); // direct 232
else if (nPort == 2)
SetCommType (1, 2); // IR
else if (nPort == 3)
SetCommType (1, 3); // IrDA
nPort = 1; // must use COM1
switch (SelectSpeed())
{
case 1: c = 0x08; break; // 115200,N,8,1
case 2: c = 0x0a; break; // 57600
case 3: c = 0x0b; break; // 38400
case 4: c = 0x0c; break; // 19200
case 5: c = 0x0d; break; // 9600
}
open_com (nPort, c);
ReTry:
i = 0;
while (i < 10)
{
if (read_com (nPort, (char *)&c)) // if successful reading
szData [i++] = c;
if (c == '\r')
break;
if ((c = getchar()) == KEY_ESC)
{
close_com (nPort);
clr_scr ();
return FALSE;
}
}
szData [i] = 0;
if (!strcmp (szData, "READ\r"))
{
write_com (nPort, ACK);
while (!com_eot (nPort));
DispString (0, 1, (char*)"Sending ...", 0); // Sending data...
DispString (0, 3, (char*)"Transfered:", 0); // Transfered:
}
else
{
write_com (nPort, NAK);
while (!com_eot (nPort));
goto ReTry;
}
k = 0;
lseek (DataFile, 0L, 1); // move to file beginning
while ((j = readln (DataFile, (char *)szData, 400)) > 1)
{
//j--; // deduct the flag byte
/*if (szData [j-1] == 0x30) /// do nothing if it's delete flag
continue;*/
sum = Header [0] = k++ % 10; // rotate from 0 to 9
for (i=0; i<j-1; i++)
sum += szData [i];
szData [j-1] = sum & 0xFF;
if (szData [j-1] == '\r') // make sure the checksum isn't '\r'
szData [j-1]++;
szData [j] = sum >> 8;
if (szData [j] == '\r') // make sure the checksum isn't '\r'
szData [j]++;
szData [j+1] = '\r';
szData [j+2] = 0;
itoa (k, szBuf, 10);
DispString (11, 3, (char*)szBuf, 0); // show data transfered
ReSend:
nwrite_com (nPort, (char *)Header, 1);
while (com_eot(nPort)==0x00);
nwrite_com (nPort, (char *)szData, j+2);
while (!com_eot (nPort));
ReDo:
i = 0;
while (i < 10)
{
if (read_com (nPort, (char *)&c))
szBuf [i++] = c;
if (c == '\r')
break;
if ((c = getchar()) == KEY_ESC)
{
lseek (DataFile, 0L, -1); // move file pointer to the end
close_com (nPort);
clr_scr ();
return FALSE;
}
}
szBuf [i] = 0;
if (!strcmp (szBuf, NAK))
goto ReSend;
else if (strcmp (szBuf, ACK))
goto ReDo;
}
write_com (nPort, "OVER\r");
while (!com_eot (nPort));
write_com (nPort, "OVER\r");
while (!com_eot (nPort));
lseek (DataFile, 0L, -1); // move file pointer to the end
on_beeper (beep2);
DispString (11, 3, (char*)"Done", 0); // Done
DispString (0, 5, SpaceBar, 0);
DispString (0, 7, SpaceBar, 0);
close_com (nPort);
OSTimeDly (200);
return TRUE;
}
BOOL UploadDBF (int fDbf, int nPort)
{
int i, j, k, n;
unsigned sum;
BYTE Header [2];
BYTE c;
BYTE szData [256];
BYTE szBuf[256];
ConnectingPage ();
if (nPort == 1)
SetCommType (1, 0); // direct 232
else if (nPort == 2)
SetCommType (1, 2); // IR
else if (nPort == 3)
SetCommType (1, 3); // IrDA
nPort = 1; // must use COM2
switch (SelectSpeed())
{
case 1: c = 0x08; break; // 115200,N,8,1
case 2: c = 0x0a; break; // 57600
case 3: c = 0x0b; break; // 38400
case 4: c = 0x0c; break; // 19200
case 5: c = 0x0d; break; // 9600
}
open_com (nPort, c);
ReTry:
i = 0;
while (i < 10)
{
if (read_com (nPort, (char *)&c)) // if successful reading
szData [i++] = c;
if (c == '\r')
break;
if ((c = getchar()) == KEY_ESC)
{
close_com (nPort);
clr_scr ();
return FALSE;
}
}
szData [i] = 0;
if (!strcmp (szData, "READ\r"))
{
write_com (nPort, ACK);
while (!com_eot (nPort));
DispString (0, 1, (char*)"Sending ...", 0); // Sending data...
DispString (0, 3, (char*)"Transfered:", 0); // Transfered:
}
else
{
write_com (nPort, NAK);
while (!com_eot (nPort));
goto ReTry;
}
n = member_in_DBF (fDbf);
lseek_DBF (fDbf, 1, 0, SEEK_SET);
k = 0;
while (k < n)
{
get_member (fDbf, 1, (char *)szData);
lseek_DBF (fDbf, 1, 1, SEEK_CUR);
j = strlen (szData);
if (j < 2)
{
k++;
continue;
}
sum = Header [0] = k++ % 10; // rotate from 0 to 9
for (i=0; i<j; i++)
sum += szData [i];
szData [j] = sum & 0xFF;
if (szData [j] == '\r') // make sure the checksum isn't '\r'
szData [j]++;
j++;
szData [j] = sum >> 8;
if (szData [j] == '\r') // make sure the checksum isn't '\r'
szData [j]++;
szData [++j] = '\r';
szData [++j] = 0;
itoa (k, szBuf, 10);
DispString (11, 3, (char*)szBuf, 0); // show data transfered
ReSend:
nwrite_com (nPort, (char *)Header, 1);
while (com_eot(nPort) == 0x00);
nwrite_com (nPort, (char *)szData, j);
while (!com_eot (nPort));
ReDo:
i = 0;
while (i < 10)
{
if (read_com (nPort, (char *)&c))
szBuf [i++] = c;
if (c == '\r')
break;
if ((c = getchar()) == KEY_ESC)
{
close_com (nPort);
clr_scr ();
return FALSE;
}
}
szBuf [i] = 0;
if (!strcmp (szBuf, NAK))
goto ReSend;
else if (strcmp (szBuf, ACK))
goto ReDo;
}
write_com (nPort, "OVER\r");
while (!com_eot (nPort));
write_com (nPort, "OVER\r");
while (!com_eot (nPort));
on_beeper (beep2);
DispString (11, 3, (char*)"Done", 0); // Done
DispString (0, 5, SpaceBar, 0);
DispString (0, 7, SpaceBar, 0);
close_com (nPort);
OSTimeDly (200);
return TRUE;
}
int SelectSpeed()
{
return 1;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -