⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sv_dbf.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
字号:
#include <windows.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <malloc.h>#include <io.h>#include <time.h>#include <errno.h>#include <math.h>#include <share.h>#include <fcntl.h>#include "sv_dbf.h"#define TRUE  1#define FALSE 0extern BOOL ErrMsg(HWND, LPSTR);extern BOOL run_cancelled;extern void MsgLocal(LPSTR msg);void DelayMs(int ms){	extern int UDPBlockingHook(void);	clock_t i,j;	i=clock();	j=clock();	while(((j-i)*1000/CLK_TCK )< ms)	{		UDPBlockingHook();		j=clock();	}}int OpenDbfBase(char *file_name,int amode){   int try=0;	OFSTRUCT os;	HFILE handle;	   handle=OpenFile(file_name,&os, amode|OF_SHARE_DENY_NONE);   while(handle==HFILE_ERROR)   {	  handle=OpenFile(file_name,&os, amode|OF_SHARE_DENY_NONE);	  try++;	  if(try==OPEN_RETR)	  return(-1);	  DelayMs(OPEN_INTERVAL);   }   return(handle);}int CloseDbf(int hd){   return(_lclose(hd));}int CheckDbf(int hd,DbfStruct *d_info,FieldStruct *f_info,int f_num){   unsigned long flen1,flen2;   int i,rlen,wid;   flen1=filelength(hd);   flen2=(*(int *)d_info->rlen)*(*(unsigned long *)d_info->recnum)+	   *(int *)d_info->hlen;   if((flen1!=flen2)&&(flen1!=flen2+1)) {		return(DBF_DESTROYED);   }   rlen=0;   for(i=0;i<f_num;i++)	  rlen+=(int)f_info[i].wid;   rlen++;   if (*(int*)d_info->rlen!=rlen) {	   return(DBF_DESTROYED);   }			/* if offset of first Field is not valid */   if (*(int*)f_info[0].offset!=1) {	   return(DBF_DESTROYED);   }   for(i=0;i<f_num-1;i++) {	   wid=*(int*)f_info[i+1].offset-*(int*)f_info[i].offset;	   if (wid!=(int)f_info[i].wid) {		   return(DBF_DESTROYED);	   }   }   return(SUCCEED);}int InitBase(int hd, DbfStruct *BaseInfo,FieldStruct **FldInfo,int *FieldNum){	int ret;	int wid;	int i;		_llseek(hd,0l,SEEK_SET);	if((ret=_lread(hd,BaseInfo,sizeof(DbfStruct)))!=sizeof(DbfStruct)) {	   return(READ_ERROR);	}	if(BaseInfo->id!=0x03 && BaseInfo->id!=0x83) {	   return(DBF_ERR);	}	*FieldNum=(*(int*)(BaseInfo->hlen)-1)/32-1;				   /**				exclude one byte of 0x0d and 32 bytes of DBF				structure.				**/	if ((*FldInfo=malloc((*FieldNum)*sizeof(FieldStruct)))==NULL)		return(ALLOC_ERROR);	if(_lread(hd,(void*)*FldInfo,sizeof(FieldStruct)*(*FieldNum))	   !=sizeof(FieldStruct)*(*FieldNum)) {	   free(*FldInfo);	   *FldInfo =NULL;	   return(READ_ERROR);	}   /////////////////////	wid =1;	for(i =0; i<*FieldNum; i++)	{		*(int *)(*FldInfo)[i].offset =wid;		wid+=(int)(*FldInfo)[i].wid;	}	return(SUCCEED);}int ReadRecord(int hd,long no,int hlen,int rlen,char *rbuff){  _llseek(hd,(long)(hlen+rlen*(no-1l)),SEEK_SET);  if(_lread(hd,rbuff,rlen)!=(UINT)rlen)	 return(READ_ERROR);  return(SUCCEED);}long GetDbfRecCount(int hf,int hlen,int rlen){	//DbfStruct dbfStruct;	long bytes,total;	int i=0;	long rec;	char tmp[10];			total =_llseek(hf,0L,SEEK_END);	if(total == -1)		return 0;	if(total <=hlen)		return 0;			_llseek(hf,4l,SEEK_SET);		do	{		    		bytes =_lread(hf,tmp,4);		if(bytes!=4)		{		    MsgLocal("读取数据库记录数...");			if(run_cancelled) break;			DelayMs(4);			_llseek(hf,4l,SEEK_SET);    			i++;		}				if(i>5)			return 0L; 	}while(bytes !=4);		tmp[4] =0;	rec =*(long *)tmp;	    	return rec;	}int AppendRecord(int hDbf, DbfStruct *lpDbfInfo, char *lpDbfRecBuf){   unsigned char c[5];   char cEndOfFile;   int i;      if (*(long *)lpDbfInfo->recnum==0)	  _llseek(hDbf,0l,2);   else	  _llseek(hDbf,-1l,2);      if(_lwrite(hDbf,lpDbfRecBuf,*(int *)lpDbfInfo->rlen)       ==*(UINT *)lpDbfInfo->rlen)   {	  cEndOfFile=ENDOFFILE;	  _lwrite(hDbf,&cEndOfFile,1);	  _llseek(hDbf,4L,0);	  _lread(hDbf,c,4);	  (*(long *)c)++;	  _llseek(hDbf,4L,0);	  _lwrite(hDbf,c,4);	  for(i=0;i<4;i++)	    lpDbfInfo->recnum[i]=c[i];	  return 0;   }   return -1;}int FldToString(char huge*rbuff,FieldStruct *finfo,char *fstr){  int offs,inc;  offs=*(int *)(finfo->offset);      if(offs <0 || offs >256)  	return -1;  inc=0;  while(rbuff[offs+inc]==CH_SPACE && inc <(int)finfo->wid)	 inc++;  strncpy(fstr,&(rbuff[offs+inc]),(int)finfo->wid-inc);  fstr[(int)finfo->wid-inc]=0;  return(SUCCEED);}int StringToFld(char *fbuff,FieldStruct finfo,char *fstr){   int len,offs;   len=strlen(fstr);   if(len>(int)finfo.wid)   	len =(int)finfo.wid;   	   offs=*(int*)finfo.offset;   while(offs<(*(int*)finfo.offset+(int)finfo.wid-len))	   fbuff[offs++]=CH_SPACE;   strncpy(&(fbuff[offs]),fstr,len);   return(SUCCEED);}int EndOfDbf(int hd){   char id;   _lread(hd,&id,1);   if (id==ENDOFFILE)	   return(TRUE);   return(FALSE);}int DbfErrorPrint(int type,char _far *str,int no){	char temp[256];		switch(type) {	  case OPEN_ERROR:		sprintf(temp, "FILE OPEN ERROR: %s!",str);		break;	  case ALLOC_ERROR:		sprintf(temp, "ALLOCATION ERROR: %s!",str);		break;	  case DBF_ERR:		sprintf(temp, "DBF ERROR: name=%s,record=%d",str,no);		break;	  case READ_ERROR:		sprintf(temp,"FILE READ ERROR: %s!",str);		break;	  case LOCK_FAILED:		sprintf(temp, "FILE LOCK ERROR: %s!",str);		break;	  case DBF_DESTROYED:		sprintf(temp, "DBF DESTROYED: name=%s,record=%d!",str,no);		break;	  case INIT_DBF_ERROR:		sprintf(temp, "Initializing DBF Error: name=%s!",str);		break;	  default:		return SUCCEED;	 }	ErrMsg(NULL, temp); 	 return(SUCCEED);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -