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

📄 cl_hq.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <windows.h>#include <windowsx.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <io.h>#include <sys\stat.h>#include <share.h>#include <fcntl.h>#include <time.h>#include "main.h"#include "hq.h"#include "sv_hq.h"#include "dbf_data.h"#include "data.h"#include "cl_hq.h"#include "cl_data.h"                              DBF_DATA HqkData[2], GpkData[2], SzZskData, SzMmpkData;ZX_DATA ZxData;extern void DelSpaces(LPSTR);extern BOOL clGetInitString(LPSTR, LPSTR, LPSTR);extern void clPutInitString(LPSTR, LPSTR, LPSTR);extern int GetInitInt(LPSTR, LPSTR);extern int UDPBlockingHook(void);extern BOOL run_cancelled;extern BOOL gfIsNewsSrcDel;extern int date_num,tim;extern char *HqItems[];LPDBF_DATA lpDbfDatas[]={&HqkData[0], &HqkData[1],						&GpkData[0],/* &GpkData[1],*/						&SzZskData,						&SzMmpkData,NULL};LPDBF_DATA 	lpDbfFile[2][5] ={								{&HqkData[0],&GpkData[0],&SzZskData,&SzMmpkData,NULL},								{&HqkData[1],NULL,       NULL,      NULL,       NULL}							};long oldDpCjss2[2][20];int gnHqRefreshTime =5;int Skip = -1,Idel;  int clHqInit(void){	int i, jys;	char tmp[256], temp[256];	OFSTRUCT os;		memset(&oldDpCjss2, 0, sizeof(oldDpCjss2));	memset(&zs_times, 0, sizeof(zs_times));	if(GetInitString("HQ", "RUN", tmp))	{		if(tmp[0]=='N')		{			HqIsRun=FALSE;			return 0;		}	}	for(i =0; i<2; i++)	{		memset(&HqData[i], 0, sizeof(HqData[i]));		memset(&MmpData[i], 0, sizeof(MmpData[i]));		memset(&HqTime[i], 0, sizeof(HqTime[i]));		memset(&GraphData[i], 0, sizeof(GraphData[i]));		memset(&DpData[i], 0, sizeof(DpData[i]));		hfHq[i] =HFILE_ERROR;		hfMmp[i] =HFILE_ERROR;		hfMaxMin[i] =HFILE_ERROR;	}	hfDp =HFILE_ERROR;	//初始化广告和新闻	memset(&ZxData, 0, sizeof(ZxData));	if(!GetInitString("ZX", "FILE0", ZxDataFile))	{		ErrMsg(ghWndMain, "get zx init failed!");		PutInitString("ZX", "FILE0", "");		return -1;	}	strupr(ZxDataFile);	hfZx =OpenFile(ZxDataFile, &os, OF_SHARE_DENY_NONE|OF_READ);	if(hfZx ==HFILE_ERROR)	{		ErrMsg(ghWndMain, "open zx file failed");		return -1;	}	szNewsPath[0] =0;	if(!GetInitString("NEWS", "DIR", szNewsPath))	{		ErrMsg(ghWndMain, "get news init failed!");		PutInitString("NEWS", "DIR", "");	}	szNewsSrc[0] =0;	if(!GetInitString("NEWS", "SRC", szNewsSrc))	{		ErrMsg(ghWndMain, "get news init failed!");		PutInitString("NEWS", "SRC", "");	}	if(GetInitString("NEWS", "DELSRC", tmp))	{		if(tmp[0]=='Y')			gfIsNewsSrcDel =TRUE;		else			gfIsNewsSrcDel =FALSE;	}	else		gfIsNewsSrcDel =FALSE;	i=0;	while(HqItems[i])	{		memset(lpDbfDatas[i], 0, sizeof(DBF_DATA));		lpDbfDatas[i]->hf =-1;		i++;	}	    memset(tmp,0,sizeof(tmp));	if(clGetInitString("GLOBAL", "IDEL", tmp))	{		Idel= atoi(tmp);	}	else	{		clPutInitString("GLOBAL", "IDEL", "0");		Idel=10;	}		//设置开闭市时间	for(jys =0; jys <2; jys++)	{		for(i =0; i<4; i++)		{			if(!GetInitString("TIME", HqTimeItems[i+4*jys], tmp))			{				strcpy(tmp, HqTimeDefs[i+4*jys]);				PutInitString("TIME", HqTimeItems[i+4*jys], tmp);			}			else			{				if(strlen(tmp) > 12 || strlen(tmp) <3)				{					ErrMsg(ghWndMain, "time set error!");					return -1;				}			}			*lpHqTimes[i+4*jys] =atoi(strtok(tmp, ":"))*60;			*lpHqTimes[i+4*jys] +=atoi(strtok(NULL, ":"));		}		}        //初始化DBF文件	i =0;	while(HqItems[i])	{		if(!clGetInitString("DBF", HqItems[i], tmp))		{			wsprintf(temp, "can not find %s:\n %s",					(LPSTR)HqItems[i], (LPSTR)tmp);			ErrMsg(ghWndMain, temp);			clPutInitString("DBF", HqItems[i], NULL);			return -1;		}				if(access(tmp,_S_IREAD) <0)		{			wsprintf(temp, "can not read %s:\n %s",					(LPSTR)HqItems[i], (LPSTR)tmp);			ErrMsg(ghWndMain, temp);			return -1;		}  		lpDbfDatas[i]->hf=OpenDbfBase(tmp,OF_READ);		if (lpDbfDatas[i]->hf==-1)		{			wsprintf(temp, "can not open %s:\n %s",					(LPSTR)HqItems[i], (LPSTR)tmp);			ErrMsg(ghWndMain, temp);			return -1;		}		strcpy(lpDbfDatas[i]->file,tmp); 				if (InitBase(lpDbfDatas[i]->hf,&lpDbfDatas[i]->dbfStruct,				&lpDbfDatas[i]->fldStruct,&lpDbfDatas[i]->fldCount)			!=SUCCEED) 		{			wsprintf(temp, "can not init %s:\n %s",					(LPSTR)HqItems[i], (LPSTR)tmp);			ErrMsg(ghWndMain, temp);			return -1;		}				i++;	}	    //初始化分时数据结构	if(!clGetInitString("HQ", "DATAPATH", szDataPath))	{		ErrMsg(ghWndMain, "not set datapath in [graph]");		PutInitString("HQ", "DATAPATH", NULL);		return -1;	}	i =strlen(szDataPath);	if(szDataPath[i] =='\\')		szDataPath[i] =0;		wsprintf(HqDataPath, "%s\\HQDATA", szDataPath);	wsprintf(GraphData[0].szGraPath, "%s\\SZDATA", szDataPath);	wsprintf(GraphData[1].szGraPath, "%s\\SHDATA", szDataPath);		//初始化行情数据文件	i =0;	while(HqDataFileName[i])	{		wsprintf(tmp, "%s\\%s.dat", HqDataPath, HqDataFileName[i]);		if(access(tmp,_S_IREAD) <0)		{			*HqDataFile[i] =OpenFile(tmp,&os, OF_SHARE_DENY_NONE|OF_CREATE|OF_READWRITE);			if(*HqDataFile[i] ==-1)			{				wsprintf(temp, "can not create hq_data_file %s:", tmp);				ErrMsg(ghWndMain, temp);				return -1;			}		}  		else 			*HqDataFile[i] =OpenFile(tmp, &os, OF_SHARE_DENY_NONE|OF_READWRITE);		if (*HqDataFile[i] ==HFILE_ERROR)		{			wsprintf(temp, "can not open hq_data_file %s:", tmp);			ErrMsg(ghWndMain, temp);			return -1;		} 		i++;	}	//gnHqRefreshTime =GetInitInt("HQ", "REF_TIME");	//if(gnHqRefreshTime <5 || gnHqRefreshTime >60) 	gnHqRefreshTime =5;        	for(jys =0; jys <2; jys++)	{		CloseDbfFile(jys);	}		return 0;}void clHqExit(void){	static BOOL fExit =FALSE;	int jys, i;		if(fExit ==TRUE) return;	fExit =TRUE;	for(jys =0; jys <2; jys++)	{		if(HqData[jys].lpPreData !=NULL) 			GlobalFreePtr(HqData[jys].lpPreData);		if(HqData[jys].lpRefData !=NULL) 			GlobalFreePtr(HqData[jys].lpRefData);		if(HqData[jys].lpbChanged !=NULL) 			GlobalFreePtr(HqData[jys].lpbChanged);		if(MmpData[jys].lpMmp) 			GlobalFreePtr(MmpData[jys].lpMmp);		if(GraphData[jys].lpGraData) 			GlobalFreePtr(GraphData[jys].lpGraData);		if(GraphData[jys].lpGraHead) 			GlobalFreePtr(GraphData[jys].lpGraHead);		if(LzwData202[jys].recCount)			GlobalFreePtr(LzwData202[jys].recCount);					if(hfHq[jys] !=HFILE_ERROR) _lclose(hfHq[jys]);		if(hfMmp[jys] !=HFILE_ERROR) _lclose(hfMmp[jys]);		if(hfMaxMin[jys] !=HFILE_ERROR) _lclose(hfMaxMin[jys]);	}	if(hfDp !=HFILE_ERROR) _lclose(hfDp);	i =0;	while(HqItems[i])	{		if(lpDbfDatas[i]->hf!=-1)		{			CloseDbf(lpDbfDatas[i]->hf);		}		if(lpDbfDatas[i]->fldStruct)			GlobalFreePtr(lpDbfDatas[i]->fldStruct);		i++;	}		if(ZxData.lpText) free(ZxData.lpText);}BOOL OpenDbfFile(int jys){	int i =0;		while(lpDbfFile[jys][i]!=NULL)	{   		if(lpDbfFile[jys][i]->hf==-1)			lpDbfFile[jys][i]->hf =OpenDbfBase(lpDbfFile[jys][i]->file,OF_READ);		if(lpDbfFile[jys][i]->hf == -1)			return FALSE;		i++;	}	return TRUE;}void CloseDbfFile(int jys){	int i=0;	    while(lpDbfFile[jys][i]!=NULL)    {    	if(lpDbfFile[jys][i]->hf!=-1)    	{ 			CloseDbf(lpDbfFile[jys][i]->hf); 			lpDbfFile[jys][i]->hf =-1; 			 		} 		i++; 	} 	}//zqdm,zrsp,jrkp,zgjg,zdjg,zgjm,zdjm,zjjg,zd,cjss,lc,npzl,wb,cjjeint HqFldLens[HQ_FLDS_COUNT]={	MAX_ZQDM_SIZE, sizeof(float),sizeof(float), sizeof(float), sizeof(float),	sizeof(float), sizeof(float), sizeof(float), sizeof(float),sizeof(int),	sizeof(int), sizeof(int), sizeof(float), sizeof(int)};int HqFldTypes[HQ_FLDS_COUNT]={	FLD_TYPE_STRING, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT,	FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT,	FLD_TYPE_FLOAT, FLD_TYPE_LONG,  FLD_TYPE_LONG, FLD_TYPE_LONG,	FLD_TYPE_FLOAT, FLD_TYPE_LONG};int HqFldPoss[2][HQ_FLDS_COUNT] ={	//0zqdm,1zrsp,2jrkp,3zgjg,4zdjg,5zgjm,6zdjm,7zjjg,8zd,9cjss,0lc,11npzl,	//12wb,13cjje	//{0, 2, 3, 5, 6, 8, 9, 7, -1,  4, -1,-1, -1, 15},	{0, 1, 2, 4, 5, 7, 8, 6, -1,  3, -1,-1, -1, 14},	{0, 2, 3, 5, 6, 8, 9, 7, -1, 10, -1, -1, -1, 4},};BOOL IsTodayHq(int jys){    struct _stat buff;    char tmp[10];        _strdate(tmp);        _fstat(HqkData[jys].hf,&buff);    	return TRUE;}#define	_hread	hRead#define	PER_READ_LEN	1024Llong hRead(HFILE hf,char * buff,long len){                             	long rlen=0;	UINT ret,plen ;		if(len<=PER_READ_LEN)	{		ret =_lread(hf,buff,(UINT)(len));		rlen =(long)(ret);	}	else	{		rlen =0;		do		{			if(len -rlen>=	PER_READ_LEN)			{				plen =(UINT)(PER_READ_LEN);			}			else			{				plen =(UINT)(len -rlen);			}						ret =_lread(hf,buff,plen);			if(ret!=HFILE_ERROR)						{                   				buff+=ret;				rlen +=ret;			}			else			{   				return -1;			}		}while(rlen<len&&ret!=HFILE_ERROR);	}		return rlen;	}////////////////////////////////////////////////////////////////////功能		:初始化内存行情数据对象、内存买卖盘对象、内存分时数据头部信息 ,       //          同时,填充相应的内存行情数据的股票名称字段, 三个内存对象与填充//          操作以内存行情数据的记录号为主索引 ,所以当行情数据的记录数有变化//          时,一定要更新其余的内存对象,并重作名称填充。该例程同时初始化大盘//          内存对象和排行榜内存对象//参数		://     		jys---交易所编码//返回码	://			TRUE---成功//          FALSE--失败//修改日期	:1997/10/15//修改建议	:可将内存行情数据放入BTREE,BTREE内包含其余的两内存数据对象,以股票//			代码作索引int ReadHqFirst(int jys){	int i, j ;	short reclen, headlen;	long recCount,bytes;	char *buffer;	char *lpTmp;	LPSTR lpFld;	char tmp[100];	static BOOL fFirst[2] ={TRUE, TRUE};			if(HqkData[jys].hf <0)	{ 	  	ErrMsg(ghWndMain, "ReadHqFirst 不能打开行情库句柄!");		return FALSE;    }	if(jys ==0) MsgLocal("读取深圳行情");	else MsgLocal("读取上海行情");		reclen=*(short *)HqkData[jys].dbfStruct.rlen;	headlen=*(short *)HqkData[jys].dbfStruct.hlen;	//计算行情库有效记录			//recCount =GetDbfRecCount(HqkData[jys].hf,headlen,reclen);	recCount =GetValidRecNum(jys);			if(jys ==1)	{		recCount --;	}	if(recCount <=0) 	{		ErrMsg(ghWndMain, "ReadHqFirst 行情库记录数为零!");		return FALSE;	}	// 分配内存,同时将分时数据结构等清零及初始化              	if(clHqAllocMem(jys, (int)recCount) <0) 	{		ErrMsg(ghWndMain, "ReadHqFirst:HqAllocMem错!");		return FALSE;	}	HqData[jys].recCount =(short)recCount; 	//读交易所行情文件	buffer =(char *)GlobalAllocPtr(GHND, recCount*reclen+1);	if (buffer==NULL) 	{		ErrMsg(ghWndMain, "ReadHqFirst:alloc buffer 错!");		return FALSE;    }	_llseek(HqkData[jys].hf,(long)headlen,SEEK_SET);	if(jys ==1)		_llseek(HqkData[jys].hf, reclen, SEEK_CUR);			bytes =hRead(HqkData[jys].hf, buffer, recCount*reclen);		if(bytes == -1)	{		ErrMsg(ghWndMain,"ReadHqFirst:hRead bytes =-1错");		GlobalFreePtr(buffer);  		return FALSE;	} 		if(bytes !=recCount*reclen)	{	 	ErrMsg(ghWndMain, "ReadHqFirst:bytes !=recCount*reclen");	 	GlobalFreePtr(buffer);  	 	return FALSE;	}	    	//初始化行情数据结构    	lpTmp =buffer;	for (i=0;i<recCount;i++) 	{		for(j =0; j<HQ_FLDS_COUNT; j++)		{			lpFld =GetHqFldPos(jys, i, j);			if(HqFldPoss[jys][j] >=0)			{				FldToString(lpTmp,					(FieldStruct *)&HqkData[jys].fldStruct[HqFldPoss[jys][j]],					tmp);				switch(HqFldTypes[j])				{					case FLD_TYPE_STRING:						strcpy(lpFld, tmp);					break;					case FLD_TYPE_FLOAT:						*(float *)lpFld =(float)atof(tmp);					break;					case FLD_TYPE_LONG:						*(int *)lpFld =atol(tmp);					break;				}			}		}				if(IsGuoZhai(jys, i))			HqData[jys].lpRefData[i].cjss /=10;     //单位:手		else			HqData[jys].lpRefData[i].cjss /=100;    //单位:手		HqData[jys].lpRefData[i].cjje /=1000;       //单位:万				HqData[jys].lpRefData[i].lc =0;				if(HqData[jys].lpPreData[i].zrsp ==0			||HqData[jys].lpRefData[i].zjcj ==0)			HqData[jys].lpRefData[i].zdf =0;		else			HqData[jys].lpRefData[i].zdf =					(HqData[jys].lpRefData[i].zjcj					- HqData[jys].lpPreData[i].zrsp)					/HqData[jys].lpPreData[i].zrsp*100;						if(clIsZsRec(jys, i))		{			if(jys ==1)			{				GetShZsFirst(lpTmp, DpData[jys].zsCount);				DpData[jys].zsCount++;			}		}				if(jys ==1)		{               			FldToString(lpTmp,(FieldStruct *)&HqkData[jys].fldStruct[1],				HqData[jys].lpPreData[i].zqmc);			GetShMmp(TRUE, i, lpTmp);		}		lpTmp +=reclen;	}	 	GlobalFreePtr(buffer);  	CheckGraHead(jys);		if(jys ==0)	{		if(!GetSzZqmc(jys)) 		{			ErrMsg(ghWndMain,"ReadHqFirst:GetSzZqmc(jys)错");			return FALSE;		}		if(!ReadSzZsFirst()) 		{		    ErrMsg(ghWndMain,"ReadHqFirst:ReadSzZsFirst()错");			return FALSE;		}		if(!ReadSzMmp(TRUE))				{		    ErrMsg(ghWndMain,"ReadHqFirst:ReadSzZsFirst()错");			return FALSE;		}	}	i =GetMaxMin10(jys);		GetDpData(jys, TRUE);	MsgLocal("OK.");	fFirst[jys] =FALSE;		return TRUE;}//////////////////////////////////////////////////////////功能		:根据股票代码、记录号获取股票名称,该功能只支持深股//参数		://			jys---交易所编号//          rec---记录标号(0-->记录数-1)//          gpdm--股票代码//          gpmc--股票名称//返回码	://			0   --成功//			-1  --失败//修改日期	:1997/10/15int GetZqmc(int jys,int rec,char *gpdm,char *gpmc){	int i;	short reclen, headlen, fldnum;	int rec_count;	char *buffer;	char tmp[40];		if(GpkData[jys].hf ==-1)		return -1;	if(jys==1)			return -1;				reclen=*(short *)GpkData[jys].dbfStruct.rlen;	headlen=*(short *)GpkData[jys].dbfStruct.hlen;			rec_count =(int)GetDbfRecCount(GpkData[jys].hf,headlen,reclen);

⌨️ 快捷键说明

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