📄 network.cpp
字号:
#include <dos.h>
#include <fcntl.h>
#include <io.h>
#include <stdlib.h>
#include <sys\stat.h>
#include <string.h>
#include "salewin.h"
#include "sysinfo.h"
#include "def.h"
static int diskError;
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
//原来中断处理程序指针。
void interrupt (*oldHandler)(__CPPARGS);
//新中断处理程序。
int myHandler( int errval, int , int , int )
{
diskError = ((int)errval) &0xff;
hardretn( _HARDERR_ABORT );
return 0;
}
//测试网络是否连通。
int test_drive()
{
char fname[64];
strcpy(fname, sys->PubSPath);
strcat(fname, "\\t.t");
int fhandle;
oldHandler = _dos_getvect(0x24);
harderr( myHandler );
diskError = -1;
fhandle = open( fname, O_CREAT, S_IREAD|S_IWRITE );
_dos_setvect( 0x24, oldHandler );
if ( fhandle >= 0 )
{
close( fhandle );
unlink( fname );
return L_YES;//成功.
}
return L_NO;//失败.
}
//测试网络状态并且发送数据。
void
SaleWin::TestNetwork()
{
if(sys->NetSW==L_NO)
{
IsNetwork->SetText("不联网");
return;
}
IsNetwork->SetText("测网络");
if(test_drive() == L_YES)
{
IsNetwork->SetText("联 网");
PutDataToNet();
}
else
{
IsNetwork->SetText("不联网");
}
}
//将本地缓冲中的数据发送到网络上。
void
SaleWin::PutDataToNet()
{
char temp[80];
MoveData("Sales",149);
MoveData("Total",100);
MoveData("Mulpay",96);
strcpy(temp, "copy ");
strcat(temp, sys->PubRPath);
strcat(temp, "\\CodeNew.dat Data >NULL");
system(temp);
strcpy(temp, "copy ");
strcat(temp, sys->PubRPath);
strcat(temp, "\\CodeNew.dax Data >Null");
system(temp);
}
int
SaleWin::MoveData(char *filename, int reclen)
{
char FName[64];
char Buff[200];
FILE *fp1,*fpa;
long len1,lena,len;
//产生临时文件名。
strcpy(FName, ".\\data\\");
strcat(FName, filename);
strcat(FName, ".tmp");
//打开临时文件。
if((fp1 = fopen(FName, "rb"))==NULL)
{
printf("\007\007");
return L_ERROR;
}
fseek(fp1, 0, 0);
len1 = filelength(fileno(fp1));
//产生网络文件名。
strcpy(FName, sys->PubSPath);
strcat(FName, "\\");
strcat(FName, filename);
strcat(FName, ".dat");
//打开网络文件,如果文件不存在,先产生它。
if((fpa = fopen(FName, "a+b"))==NULL)
{
printf("\007\007");
fclose(fp1);
return L_ERROR;
}
fclose(fpa);
//以修改模式打开文件。
if((fpa = fopen(FName, "r+b"))==NULL)
{
printf("\007\007");
fclose(fp1);
return L_ERROR;
}
//获取文件长度。
fseek(fpa, 0, 0);
lena = filelength(fileno(fpa));
for(int i=0; i<len1/reclen; i++)
{
//从临时文件读取数据.
if(fread(Buff, reclen, 1, fp1)!=1)
{
printf("\007\007");
chsize(fileno(fpa), lena);
fclose(fpa);
fclose(fp1);
return L_ERROR;
}
fseek(fpa, 0, 2);
//向网络文件写数据.
if(fwrite(Buff, reclen, 1, fpa)!=1)
{
printf("\007\007");
chsize(fileno(fpa), lena);
fclose(fpa);
fclose(fp1);
return L_ERROR;
}
}
//重新获取文件长度,以便验证写文件是否正确.
fseek(fpa,0,0);
len = filelength(fileno(fpa));
//验证文件长度.
if(len != lena + len1)
{
//文件长度不符,将文件改为原来长度。
printf("\007\007");
chsize(fileno(fpa), lena);
fclose(fp1);
fclose(fpa);
return L_ERROR;
}
fclose(fp1);
fclose(fpa);
//产生临时文件名.
strcpy(FName, ".\\data\\");
strcat(FName, filename);
strcat(FName, ".tmp");
//删除临时文件.
remove(FName);
return L_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -