📄 stock.c
字号:
fprintf(fp," m_time=%d\n",m_Minute[MinNumber].m_time);
fprintf(fp," m_fPrice=%7.2f\n",m_Minute[MinNumber].m_fPrice);
fprintf(fp," m_fVolume=%7.2f\n",m_Minute[MinNumber].m_fVolume);
fprintf(fp," m_fAmount=%7.2f\n",m_Minute[MinNumber].m_fAmount);
fflush(fp);*/
MinNumber+=2;
}
//////////////////////////////////////////
}
//extern char NewsPath[80];
void ReceiveNews()
{
int i,j=0;
int x=0;
unsigned char *Data=NULL;//[256*34];
int DataLen=0;
// FILE *fpNew=NULL;
unsigned char End=(rs.Info[0]&0x10)>>4;
unsigned char Address=(unsigned char)rs.Address;
unsigned char InfoCode=rs.Info[0]&0x07;
int NewsNumber[256];
char Tag[3]="";
char Serial[5]="";
char FileName[256];
struct tm when;
time_t now;
for(i=0;i<MAX_NEW_NUMBER;i++)
{
if(!g_News[i].Flag)
{
if((rs.Info[0]&0x08)<<3)
{
if(rs.Info[2]>34)
{
#ifdef _DEBUG
fprintf(fp,"InfoLength=%d\n",rs.InfoLength);
for(x=0;x<36;x++)
fprintf(fp,"%02x,",rs.Info[x]);
fprintf(fp,"\n");
fprintf(fp,"===========Error! rs.Info Len=%d.\n",rs.Info[2]);
fflush(fp);
#endif
continue;
}
memcpy(g_News[i].Info,rs.Info+3,rs.Info[2]);
g_News[i].InfoLen=rs.Info[2];
}
else
{
if(rs.InfoLength>36)
{
#ifdef _DEBUG
fprintf(fp,"InfoLength=%d\n",rs.InfoLength);
for(x=0;x<36;x++)
fprintf(fp,"%02x,",rs.Info[x]);
fprintf(fp,"\n");
fprintf(fp,"===========Error! rs.InfoLength Len=%d.\n",rs.InfoLength);
fflush(fp);
#endif
continue;
}
memcpy(g_News[i].Info,rs.Info+2,rs.InfoLength-2);
g_News[i].InfoLen=rs.InfoLength-2;
}
g_News[i].Flag=1;
g_News[i].Address=Address;
g_News[i].End=End;
g_News[i].InfoCode=InfoCode;
g_News[i].LineNumber=rs.Info[1];
for(j=0;j<g_News[i].InfoLen;j++)
if((g_News[i].Info[j]==0x0a)&&(g_News[i].Info[j+1]==0x00))
{
g_News[i].Info[j]=0x0c;
g_News[i].Info[j+1]=0x0a;
}
break;
}
}
/////////
// if(i==MAX_NEW_NUMBER)printf("not enogh memory!");
if(!End)return;
for(i=0;i<256;i++)NewsNumber[i]=-1;
for(i=0;i<MAX_NEW_NUMBER;i++)
if(g_News[i].Flag)//
if((Address==g_News[i].Address)&&(InfoCode==g_News[i].InfoCode))
{
NewsNumber[j++]=i;
if(g_News[i].LineNumber==0)
{
memcpy(Tag,g_News[i].Info+0,2);Tag[2]='\0';
memcpy(Serial,g_News[i].Info+8,4);
Serial[4]='\0';
}
if(strcmp(Tag,"")==0)return;
}
// memcpy(FileName,NewsPath,strlen(NewsPath));
if(strcmp(Tag,"15")==0)
memcpy(FileName,"上证公告\\",9);
else
if(strcmp(Tag,"25")==0)
memcpy(FileName,"深证公告\\",9);
else
if(strcmp(Tag,"05")==0)
memcpy(FileName,"财经新闻\\",9);
else return;
time( &now );
when = *localtime( &now );
sprintf(FileName+9,"%2d%2d",when.tm_mon+1,when.tm_mday);
memcpy(FileName+13,Serial,4);
memcpy(FileName+13+4,".txt",4);
FileName[13+8]='\0';
for(i=0;i<j;i++) DataLen+=g_News[NewsNumber[i]].InfoLen;
Data=(unsigned char *)malloc(DataLen);
if(Data==NULL)
{
#ifdef _DEBUG
fprintf(fp,"Not enough memory!.\n");
fflush(fp);
#endif
return;
}
DataLen=0;
for(i=0;i<j;i++)
{
memcpy(Data+DataLen,g_News[NewsNumber[i]].Info,g_News[NewsNumber[i]].InfoLen);
DataLen+=g_News[NewsNumber[i]].InfoLen;
/*
g_News[NewsNumber[i]].Address=0;
g_News[NewsNumber[i]].End=0;
g_News[NewsNumber[i]].Flag=0;
g_News[NewsNumber[i]].Info="";
g_News[NewsNumber[i]].InfoCode=0;
g_News[NewsNumber[i]].InfoLen=0;
g_News[NewsNumber[i]].LineNumber=0;
*/
g_News[NewsNumber[i]].Flag=0;
}
/////////////////////////////
ReceiveData.m_wDataType=FILE_NEWS_EX;
ReceiveData.m_nPacketNum=1;
ReceiveData.m_File.m_dwAttrib=0;
ReceiveData.m_File.m_dwLen=DataLen;
ReceiveData.m_File.m_dwSerialNo=0;
memcpy(ReceiveData.m_File.m_szFileName,FileName,21);
ReceiveData.m_bDISK=0;
ReceiveData.m_pData=Data;
SendMessage(hWndBak,MsgBak,RCV_FILEDATA,(LPARAM)&ReceiveData);
free(Data);
/*
fpNew=fopen(FileName,"wb+");
if(fpNew==NULL) return;
fseek(fpNew,0,SEEK_SET);
//排序
////////////////
for(i=0;i<j;i++)
{
fwrite(g_News[NewsNumber[i]].Info,g_News[NewsNumber[i]].InfoLen,1,fpNew);
g_News[NewsNumber[i]].Flag=0;
}
fclose(fpNew);*/
}
void ReceiveStock(int Market)
{
RowNumber = rs.Info[1];
RowNumber <<=8;
RowNumber |= rs.Info[0];
if(RowNumber == 0) // 指数
{
memmove(IndexStr.str,rs.Info,rs.InfoLength);
PackedIndex = IndexStr.Index;
Index.RowNumber=RowNumber;
Index.TotalRows=PackedIndex.TotalRows;
Index.Date=s3tol(PackedIndex.Date);
Index.Time=s3tol(PackedIndex.Time);
Index.Index=s3tol(PackedIndex.Index);
Index.AIndex=s3tol(PackedIndex.AIndex);
Index.BIndex=s3tol(PackedIndex.BIndex);
Index.Volume=s3tol(PackedIndex.Volume);
// SHIndex++;
// if(SHIndex>=SHMAX) SHIndex=0;
// sprintf(SHData[SHIndex],
// "[Index] %u %lx %lx %8.3f %8.3f %8.3f %8ld",
// Index.TotalRows, Index.Date, Index.Time,Index.Index,
// Index.AIndex,Index.BIndex,Index.Volume);
// SHData[SHIndex][100]='\0';
}
else // 各股
{
if((RowNumber &0x8000)==0) // 不变量/微变量
{
RowNumber = RowNumber & 0x7fff;
if(RowNumber>=STOCKMAX) return;
pShNode[RowNumber].RowNumber = RowNumber;
memmove(IF.String,rs.Info,rs.InfoLength);
pShNode[RowNumber].StockNo = s3tol(IF.CR[0].StockNumber);
memmove(pShNode[RowNumber].StockName,IF.CR[0].StockName,8);
pShNode[RowNumber].StockName[8]='\0';
pShNode[RowNumber].LastClose=(unsigned short)IF.String[14];
pShNode[RowNumber].LastClose<<=8;
pShNode[RowNumber].LastClose|=(unsigned short)IF.String[13];
pShNode[RowNumber].Open=(unsigned short)IF.String[16];
pShNode[RowNumber].Open<<=8;
pShNode[RowNumber].Open|=(unsigned short)IF.String[15];
pShNode[RowNumber].flag = 0x01;
if(rs.InfoLength >= sizeof(IF.CR[0]) *2)
{
RowNumber = IF.CR[1].RowNumber & 0xfff;
if(RowNumber>=STOCKMAX) return;
pShNode[RowNumber].RowNumber=RowNumber;
memmove(IF.String,rs.Info,rs.InfoLength);
pShNode[RowNumber].StockNo = s3tol(IF.CR[1].StockNumber);
memmove(pShNode[RowNumber].StockName,IF.CR[1].StockName,8);
pShNode[RowNumber].StockName[8]='\0';
pShNode[RowNumber].LastClose=(unsigned short)IF.String[31];
pShNode[RowNumber].LastClose<<=8;
pShNode[RowNumber].LastClose|=IF.String[30];
pShNode[RowNumber].Open=(unsigned short)IF.String[33];
pShNode[RowNumber].Open<<=8;
pShNode[RowNumber].Open|=IF.String[32];
pShNode[RowNumber].flag = 0x01;
}
}
else // 变化量
{
memmove(IF.String,rs.Info,rs.InfoLength);
RowNumber = IF.VR.RowNumber & 0x7fff;
if(RowNumber>=STOCKMAX) return;
pShNode[RowNumber].Volume = (unsigned long)IF.String[4];
pShNode[RowNumber].Volume <<= 8;
pShNode[RowNumber].Volume |= (unsigned long)IF.String[3];
if(IF.VR.Factor & 1)
pShNode[RowNumber].Volume *= 100L;
pShNode[RowNumber].Amount = (unsigned long)IF.String[6];
pShNode[RowNumber].Amount <<= 8;
pShNode[RowNumber].Amount |= (unsigned long)IF.String[5];
if(IF.VR.Factor & 2)
pShNode[RowNumber].Amount *=10L;
pShNode[RowNumber].Highest = (unsigned long)IF.String[8];
pShNode[RowNumber].Highest <<= 8;
pShNode[RowNumber].Highest |= (unsigned long)IF.String[7];
pShNode[RowNumber].Lowest = (unsigned long)IF.String[10];
pShNode[RowNumber].Lowest <<= 8;
pShNode[RowNumber].Lowest |= (unsigned long)IF.String[9];
pShNode[RowNumber].Newest = (unsigned long)IF.String[12];
pShNode[RowNumber].Newest <<= 8;
pShNode[RowNumber].Newest |= (unsigned long)IF.String[11];
pShNode[RowNumber].Buy = (unsigned long)IF.String[14];
pShNode[RowNumber].Buy <<= 8;
pShNode[RowNumber].Buy |= (unsigned long)IF.String[13];
pShNode[RowNumber].Sell = (unsigned long)IF.String[16];
pShNode[RowNumber].Sell <<= 8;
pShNode[RowNumber].Sell |= (unsigned long)IF.String[15];
pShNode[RowNumber].BuyHands1 = (unsigned short)IF.String[18];
pShNode[RowNumber].BuyHands1 <<= 8;
pShNode[RowNumber].BuyHands1 |= (unsigned short)IF.String[17];
pShNode[RowNumber].BuyHands2 = (unsigned short)IF.String[20];
pShNode[RowNumber].BuyHands2 <<= 8;
pShNode[RowNumber].BuyHands2 |= (unsigned short)IF.String[19];
pShNode[RowNumber].BuyHands3 = (unsigned short)IF.String[22];
pShNode[RowNumber].BuyHands3 <<= 8;
pShNode[RowNumber].BuyHands3 |= (unsigned short)IF.String[21];
pShNode[RowNumber].BuyPrice2 = pShNode[RowNumber].Buy - (unsigned long)IF.String[23];
pShNode[RowNumber].BuyPrice3 = pShNode[RowNumber].Buy - (unsigned long)IF.String[24];
pShNode[RowNumber].SellHands1 = (unsigned short)IF.String[26];
pShNode[RowNumber].SellHands1 <<= 8;
pShNode[RowNumber].SellHands1 |= (unsigned short)IF.String[25];
pShNode[RowNumber].SellHands2 = (unsigned short)IF.String[28];
pShNode[RowNumber].SellHands2 <<= 8;
pShNode[RowNumber].SellHands2 |= (unsigned short)IF.String[27];
pShNode[RowNumber].SellHands3 = (unsigned short)IF.String[30];
pShNode[RowNumber].SellHands3 <<= 8;
pShNode[RowNumber].SellHands3 |= (unsigned short)IF.String[29];
pShNode[RowNumber].SellPrice2 = pShNode[RowNumber].Sell + (unsigned long)IF.String[31];
pShNode[RowNumber].SellPrice3 = pShNode[RowNumber].Sell + (unsigned long)IF.String[32];
pShNode[RowNumber].flag |= 2;
tn=pShNode[RowNumber];
if(tn.flag == 3)
{
SendStockMessage(Market);
}
}
}
}
//extern "C"
void ExpandData(unsigned long * target, unsigned char * source, int Factor)
{
int i;
long l;
l=0;
Factor = 3 - Factor;
for(i = 2; i >= 0; i--)
{
l <<= 8;
l |= source[i];
}
for(i=0; i<Factor; i++)
l *= 10;
*target = l;
return;
}
unsigned long s3tol(unsigned char string[])
{
int i;
unsigned long l=0L;
unsigned long l1;
for(i=0;i<3;i++)
{
l1 = string[i];
l1 <<= 8*(2-i);
l |= l1;
}
return l;
}
float Divide100(unsigned long Number)
{
return((float)(Number/100.0));
}
//#ifdef __cplusplus
//}
//#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -