CL_HQ.C
上传用户:bjghjy
上传日期:2007-01-07
资源大小:379k
文件大小:49k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <windowsx.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <io.h>
  7. #include <sysstat.h>
  8. #include <share.h>
  9. #include <fcntl.h>
  10. #include <time.h>
  11. #include "main.h"
  12. #include "hq.h"
  13. #include "sv_hq.h"
  14. #include "dbf_data.h"
  15. #include "data.h"
  16. #include "cl_hq.h"
  17. #include "cl_data.h"
  18.                               
  19. DBF_DATA HqkData[2], GpkData[2], SzZskData, SzMmpkData;
  20. ZX_DATA ZxData;
  21. extern void DelSpaces(LPSTR);
  22. extern BOOL clGetInitString(LPSTR, LPSTR, LPSTR);
  23. extern void clPutInitString(LPSTR, LPSTR, LPSTR);
  24. extern int GetInitInt(LPSTR, LPSTR);
  25. extern int UDPBlockingHook(void);
  26. extern BOOL run_cancelled;
  27. extern BOOL gfIsNewsSrcDel;
  28. extern int date_num,tim;
  29. extern char *HqItems[];
  30. LPDBF_DATA lpDbfDatas[]={&HqkData[0], &HqkData[1],
  31. &GpkData[0],/* &GpkData[1],*/
  32. &SzZskData,
  33. &SzMmpkData,NULL};
  34. LPDBF_DATA  lpDbfFile[2][5] ={
  35. {&HqkData[0],&GpkData[0],&SzZskData,&SzMmpkData,NULL},
  36. {&HqkData[1],NULL,       NULL,      NULL,       NULL}
  37. };
  38. long oldDpCjss2[2][20];
  39. int gnHqRefreshTime =5;
  40. int Skip = -1,Idel;
  41.   
  42. int clHqInit(void)
  43. {
  44. int i, jys;
  45. char tmp[256], temp[256];
  46. OFSTRUCT os;
  47. memset(&oldDpCjss2, 0, sizeof(oldDpCjss2));
  48. memset(&zs_times, 0, sizeof(zs_times));
  49. if(GetInitString("HQ", "RUN", tmp))
  50. {
  51. if(tmp[0]=='N')
  52. {
  53. HqIsRun=FALSE;
  54. return 0;
  55. }
  56. }
  57. for(i =0; i<2; i++)
  58. {
  59. memset(&HqData[i], 0, sizeof(HqData[i]));
  60. memset(&MmpData[i], 0, sizeof(MmpData[i]));
  61. memset(&HqTime[i], 0, sizeof(HqTime[i]));
  62. memset(&GraphData[i], 0, sizeof(GraphData[i]));
  63. memset(&DpData[i], 0, sizeof(DpData[i]));
  64. hfHq[i] =HFILE_ERROR;
  65. hfMmp[i] =HFILE_ERROR;
  66. hfMaxMin[i] =HFILE_ERROR;
  67. }
  68. hfDp =HFILE_ERROR;
  69. //初始化广告和新闻
  70. memset(&ZxData, 0, sizeof(ZxData));
  71. if(!GetInitString("ZX", "FILE0", ZxDataFile))
  72. {
  73. ErrMsg(ghWndMain, "get zx init failed!");
  74. PutInitString("ZX", "FILE0", "");
  75. return -1;
  76. }
  77. strupr(ZxDataFile);
  78. hfZx =OpenFile(ZxDataFile, &os, OF_SHARE_DENY_NONE|OF_READ);
  79. if(hfZx ==HFILE_ERROR)
  80. {
  81. ErrMsg(ghWndMain, "open zx file failed");
  82. return -1;
  83. }
  84. szNewsPath[0] =0;
  85. if(!GetInitString("NEWS", "DIR", szNewsPath))
  86. {
  87. ErrMsg(ghWndMain, "get news init failed!");
  88. PutInitString("NEWS", "DIR", "");
  89. }
  90. szNewsSrc[0] =0;
  91. if(!GetInitString("NEWS", "SRC", szNewsSrc))
  92. {
  93. ErrMsg(ghWndMain, "get news init failed!");
  94. PutInitString("NEWS", "SRC", "");
  95. }
  96. if(GetInitString("NEWS", "DELSRC", tmp))
  97. {
  98. if(tmp[0]=='Y')
  99. gfIsNewsSrcDel =TRUE;
  100. else
  101. gfIsNewsSrcDel =FALSE;
  102. }
  103. else
  104. gfIsNewsSrcDel =FALSE;
  105. i=0;
  106. while(HqItems[i])
  107. {
  108. memset(lpDbfDatas[i], 0, sizeof(DBF_DATA));
  109. lpDbfDatas[i]->hf =-1;
  110. i++;
  111. }
  112.     memset(tmp,0,sizeof(tmp));
  113. if(clGetInitString("GLOBAL", "IDEL", tmp))
  114. {
  115. Idel= atoi(tmp);
  116. }
  117. else
  118. {
  119. clPutInitString("GLOBAL", "IDEL", "0");
  120. Idel=10;
  121. }
  122. //设置开闭市时间
  123. for(jys =0; jys <2; jys++)
  124. {
  125. for(i =0; i<4; i++)
  126. {
  127. if(!GetInitString("TIME", HqTimeItems[i+4*jys], tmp))
  128. {
  129. strcpy(tmp, HqTimeDefs[i+4*jys]);
  130. PutInitString("TIME", HqTimeItems[i+4*jys], tmp);
  131. }
  132. else
  133. {
  134. if(strlen(tmp) > 12 || strlen(tmp) <3)
  135. {
  136. ErrMsg(ghWndMain, "time set error!");
  137. return -1;
  138. }
  139. }
  140. *lpHqTimes[i+4*jys] =atoi(strtok(tmp, ":"))*60;
  141. *lpHqTimes[i+4*jys] +=atoi(strtok(NULL, ":"));
  142. }
  143. }
  144.     
  145.     //初始化DBF文件
  146. i =0;
  147. while(HqItems[i])
  148. {
  149. if(!clGetInitString("DBF", HqItems[i], tmp))
  150. {
  151. wsprintf(temp, "can not find %s:n %s",
  152. (LPSTR)HqItems[i], (LPSTR)tmp);
  153. ErrMsg(ghWndMain, temp);
  154. clPutInitString("DBF", HqItems[i], NULL);
  155. return -1;
  156. }
  157. if(access(tmp,_S_IREAD) <0)
  158. {
  159. wsprintf(temp, "can not read %s:n %s",
  160. (LPSTR)HqItems[i], (LPSTR)tmp);
  161. ErrMsg(ghWndMain, temp);
  162. return -1;
  163. }  
  164. lpDbfDatas[i]->hf=OpenDbfBase(tmp,OF_READ);
  165. if (lpDbfDatas[i]->hf==-1)
  166. {
  167. wsprintf(temp, "can not open %s:n %s",
  168. (LPSTR)HqItems[i], (LPSTR)tmp);
  169. ErrMsg(ghWndMain, temp);
  170. return -1;
  171. }
  172. strcpy(lpDbfDatas[i]->file,tmp); 
  173. if (InitBase(lpDbfDatas[i]->hf,&lpDbfDatas[i]->dbfStruct,
  174. &lpDbfDatas[i]->fldStruct,&lpDbfDatas[i]->fldCount)
  175. !=SUCCEED) 
  176. {
  177. wsprintf(temp, "can not init %s:n %s",
  178. (LPSTR)HqItems[i], (LPSTR)tmp);
  179. ErrMsg(ghWndMain, temp);
  180. return -1;
  181. }
  182. i++;
  183. }
  184.     //初始化分时数据结构
  185. if(!clGetInitString("HQ", "DATAPATH", szDataPath))
  186. {
  187. ErrMsg(ghWndMain, "not set datapath in [graph]");
  188. PutInitString("HQ", "DATAPATH", NULL);
  189. return -1;
  190. }
  191. i =strlen(szDataPath);
  192. if(szDataPath[i] =='\')
  193. szDataPath[i] =0;
  194. wsprintf(HqDataPath, "%s\HQDATA", szDataPath);
  195. wsprintf(GraphData[0].szGraPath, "%s\SZDATA", szDataPath);
  196. wsprintf(GraphData[1].szGraPath, "%s\SHDATA", szDataPath);
  197. //初始化行情数据文件
  198. i =0;
  199. while(HqDataFileName[i])
  200. {
  201. wsprintf(tmp, "%s\%s.dat", HqDataPath, HqDataFileName[i]);
  202. if(access(tmp,_S_IREAD) <0)
  203. {
  204. *HqDataFile[i] =OpenFile(tmp,&os, OF_SHARE_DENY_NONE|OF_CREATE|OF_READWRITE);
  205. if(*HqDataFile[i] ==-1)
  206. {
  207. wsprintf(temp, "can not create hq_data_file %s:", tmp);
  208. ErrMsg(ghWndMain, temp);
  209. return -1;
  210. }
  211. }  
  212. else 
  213. *HqDataFile[i] =OpenFile(tmp, &os, OF_SHARE_DENY_NONE|OF_READWRITE);
  214. if (*HqDataFile[i] ==HFILE_ERROR)
  215. {
  216. wsprintf(temp, "can not open hq_data_file %s:", tmp);
  217. ErrMsg(ghWndMain, temp);
  218. return -1;
  219. i++;
  220. }
  221. //gnHqRefreshTime =GetInitInt("HQ", "REF_TIME");
  222. //if(gnHqRefreshTime <5 || gnHqRefreshTime >60) 
  223. gnHqRefreshTime =5;
  224.     
  225.     
  226. for(jys =0; jys <2; jys++)
  227. {
  228. CloseDbfFile(jys);
  229. }
  230. return 0;
  231. }
  232. void clHqExit(void)
  233. {
  234. static BOOL fExit =FALSE;
  235. int jys, i;
  236. if(fExit ==TRUE) return;
  237. fExit =TRUE;
  238. for(jys =0; jys <2; jys++)
  239. {
  240. if(HqData[jys].lpPreData !=NULL) 
  241. GlobalFreePtr(HqData[jys].lpPreData);
  242. if(HqData[jys].lpRefData !=NULL) 
  243. GlobalFreePtr(HqData[jys].lpRefData);
  244. if(HqData[jys].lpbChanged !=NULL) 
  245. GlobalFreePtr(HqData[jys].lpbChanged);
  246. if(MmpData[jys].lpMmp) 
  247. GlobalFreePtr(MmpData[jys].lpMmp);
  248. if(GraphData[jys].lpGraData) 
  249. GlobalFreePtr(GraphData[jys].lpGraData);
  250. if(GraphData[jys].lpGraHead) 
  251. GlobalFreePtr(GraphData[jys].lpGraHead);
  252. if(LzwData202[jys].recCount)
  253. GlobalFreePtr(LzwData202[jys].recCount);
  254. if(hfHq[jys] !=HFILE_ERROR) _lclose(hfHq[jys]);
  255. if(hfMmp[jys] !=HFILE_ERROR) _lclose(hfMmp[jys]);
  256. if(hfMaxMin[jys] !=HFILE_ERROR) _lclose(hfMaxMin[jys]);
  257. }
  258. if(hfDp !=HFILE_ERROR) _lclose(hfDp);
  259. i =0;
  260. while(HqItems[i])
  261. {
  262. if(lpDbfDatas[i]->hf!=-1)
  263. {
  264. CloseDbf(lpDbfDatas[i]->hf);
  265. }
  266. if(lpDbfDatas[i]->fldStruct)
  267. GlobalFreePtr(lpDbfDatas[i]->fldStruct);
  268. i++;
  269. }
  270. if(ZxData.lpText) free(ZxData.lpText);
  271. }
  272. BOOL OpenDbfFile(int jys)
  273. {
  274. int i =0;
  275. while(lpDbfFile[jys][i]!=NULL)
  276. {   
  277. if(lpDbfFile[jys][i]->hf==-1)
  278. lpDbfFile[jys][i]->hf =OpenDbfBase(lpDbfFile[jys][i]->file,OF_READ);
  279. if(lpDbfFile[jys][i]->hf == -1)
  280. return FALSE;
  281. i++;
  282. }
  283. return TRUE;
  284. }
  285. void CloseDbfFile(int jys)
  286. {
  287. int i=0;
  288.     while(lpDbfFile[jys][i]!=NULL)
  289.     {
  290.      if(lpDbfFile[jys][i]->hf!=-1)
  291.      {
  292.   CloseDbf(lpDbfFile[jys][i]->hf);
  293.   lpDbfFile[jys][i]->hf =-1; 
  294.   }
  295.   i++;
  296.   } 
  297. }
  298. //zqdm,zrsp,jrkp,zgjg,zdjg,zgjm,zdjm,zjjg,zd,cjss,lc,npzl,wb,cjje
  299. int HqFldLens[HQ_FLDS_COUNT]=
  300. {
  301. MAX_ZQDM_SIZE, sizeof(float),sizeof(float), sizeof(float), sizeof(float),
  302. sizeof(float), sizeof(float), sizeof(float), sizeof(float),sizeof(int),
  303. sizeof(int), sizeof(int), sizeof(float), sizeof(int)
  304. };
  305. int HqFldTypes[HQ_FLDS_COUNT]=
  306. {
  307. FLD_TYPE_STRING, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT,
  308. FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT,
  309. FLD_TYPE_FLOAT, FLD_TYPE_LONG,  FLD_TYPE_LONG, FLD_TYPE_LONG,
  310. FLD_TYPE_FLOAT, FLD_TYPE_LONG
  311. };
  312. int HqFldPoss[2][HQ_FLDS_COUNT] =
  313. {
  314. //0zqdm,1zrsp,2jrkp,3zgjg,4zdjg,5zgjm,6zdjm,7zjjg,8zd,9cjss,0lc,11npzl,
  315. //12wb,13cjje
  316. //{0, 2, 3, 5, 6, 8, 9, 7, -1,  4, -1,-1, -1, 15},
  317. {0, 1, 2, 4, 5, 7, 8, 6, -1,  3, -1,-1, -1, 14},
  318. {0, 2, 3, 5, 6, 8, 9, 7, -1, 10, -1, -1, -1, 4},
  319. };
  320. BOOL IsTodayHq(int jys)
  321. {
  322.     struct _stat buff;
  323.     char tmp[10];
  324.     
  325.     _strdate(tmp);    
  326.     _fstat(HqkData[jys].hf,&buff);
  327.     
  328. return TRUE;
  329. }
  330. #define _hread hRead
  331. #define PER_READ_LEN 1024L
  332. long hRead(HFILE hf,char * buff,long len)
  333. {                             
  334. long rlen=0;
  335. UINT ret,plen ;
  336. if(len<=PER_READ_LEN)
  337. {
  338. ret =_lread(hf,buff,(UINT)(len));
  339. rlen =(long)(ret);
  340. }
  341. else
  342. {
  343. rlen =0;
  344. do
  345. {
  346. if(len -rlen>= PER_READ_LEN)
  347. {
  348. plen =(UINT)(PER_READ_LEN);
  349. }
  350. else
  351. {
  352. plen =(UINT)(len -rlen);
  353. }
  354. ret =_lread(hf,buff,plen);
  355. if(ret!=HFILE_ERROR)
  356. {                   
  357. buff+=ret;
  358. rlen +=ret;
  359. }
  360. else
  361. {   
  362. return -1;
  363. }
  364. }while(rlen<len&&ret!=HFILE_ERROR);
  365. }
  366. return rlen;
  367. }
  368. //////////////////////////////////////////////////////////////////
  369. //功能 :初始化内存行情数据对象、内存买卖盘对象、内存分时数据头部信息 ,       
  370. //          同时,填充相应的内存行情数据的股票名称字段, 三个内存对象与填充
  371. //          操作以内存行情数据的记录号为主索引 ,所以当行情数据的记录数有变化
  372. //          时,一定要更新其余的内存对象,并重作名称填充。该例程同时初始化大盘
  373. //          内存对象和排行榜内存对象
  374. //参数 :
  375. //      jys---交易所编码
  376. //返回码 :
  377. // TRUE---成功
  378. //          FALSE--失败
  379. //修改日期 :1997/10/15
  380. //修改建议 :可将内存行情数据放入BTREE,BTREE内包含其余的两内存数据对象,以股票
  381. // 代码作索引
  382. int ReadHqFirst(int jys)
  383. {
  384. int i, j ;
  385. short reclen, headlen;
  386. long recCount,bytes;
  387. char *buffer;
  388. char *lpTmp;
  389. LPSTR lpFld;
  390. char tmp[100];
  391. static BOOL fFirst[2] ={TRUE, TRUE};
  392. if(HqkData[jys].hf <0)
  393.    ErrMsg(ghWndMain, "ReadHqFirst 不能打开行情库句柄!");
  394. return FALSE;
  395.     }
  396. if(jys ==0) MsgLocal("读取深圳行情");
  397. else MsgLocal("读取上海行情");
  398. reclen=*(short *)HqkData[jys].dbfStruct.rlen;
  399. headlen=*(short *)HqkData[jys].dbfStruct.hlen;
  400. //计算行情库有效记录
  401. //recCount =GetDbfRecCount(HqkData[jys].hf,headlen,reclen);
  402. recCount =GetValidRecNum(jys);
  403. if(jys ==1)
  404. {
  405. recCount --;
  406. }
  407. if(recCount <=0) 
  408. {
  409. ErrMsg(ghWndMain, "ReadHqFirst 行情库记录数为零!");
  410. return FALSE;
  411. }
  412. // 分配内存,同时将分时数据结构等清零及初始化              
  413. if(clHqAllocMem(jys, (int)recCount) <0) 
  414. {
  415. ErrMsg(ghWndMain, "ReadHqFirst:HqAllocMem错!");
  416. return FALSE;
  417. }
  418. HqData[jys].recCount =(short)recCount; 
  419. //读交易所行情文件
  420. buffer =(char *)GlobalAllocPtr(GHND, recCount*reclen+1);
  421. if (buffer==NULL) 
  422. {
  423. ErrMsg(ghWndMain, "ReadHqFirst:alloc buffer 错!");
  424. return FALSE;
  425.     }
  426. _llseek(HqkData[jys].hf,(long)headlen,SEEK_SET);
  427. if(jys ==1)
  428. _llseek(HqkData[jys].hf, reclen, SEEK_CUR);
  429. bytes =hRead(HqkData[jys].hf, buffer, recCount*reclen);
  430. if(bytes == -1)
  431. {
  432. ErrMsg(ghWndMain,"ReadHqFirst:hRead bytes =-1错");
  433. GlobalFreePtr(buffer);  
  434. return FALSE;
  435. if(bytes !=recCount*reclen)
  436. {
  437.   ErrMsg(ghWndMain, "ReadHqFirst:bytes !=recCount*reclen");
  438.   GlobalFreePtr(buffer);  
  439.   return FALSE;
  440. }
  441.     
  442. //初始化行情数据结构    
  443. lpTmp =buffer;
  444. for (i=0;i<recCount;i++) 
  445. {
  446. for(j =0; j<HQ_FLDS_COUNT; j++)
  447. {
  448. lpFld =GetHqFldPos(jys, i, j);
  449. if(HqFldPoss[jys][j] >=0)
  450. {
  451. FldToString(lpTmp,
  452. (FieldStruct *)&HqkData[jys].fldStruct[HqFldPoss[jys][j]],
  453. tmp);
  454. switch(HqFldTypes[j])
  455. {
  456. case FLD_TYPE_STRING:
  457. strcpy(lpFld, tmp);
  458. break;
  459. case FLD_TYPE_FLOAT:
  460. *(float *)lpFld =(float)atof(tmp);
  461. break;
  462. case FLD_TYPE_LONG:
  463. *(int *)lpFld =atol(tmp);
  464. break;
  465. }
  466. }
  467. }
  468. if(IsGuoZhai(jys, i))
  469. HqData[jys].lpRefData[i].cjss /=10;     //单位:手
  470. else
  471. HqData[jys].lpRefData[i].cjss /=100;    //单位:手
  472. HqData[jys].lpRefData[i].cjje /=1000;       //单位:万
  473. HqData[jys].lpRefData[i].lc =0;
  474. if(HqData[jys].lpPreData[i].zrsp ==0
  475. ||HqData[jys].lpRefData[i].zjcj ==0)
  476. HqData[jys].lpRefData[i].zdf =0;
  477. else
  478. HqData[jys].lpRefData[i].zdf =
  479. (HqData[jys].lpRefData[i].zjcj
  480. - HqData[jys].lpPreData[i].zrsp)
  481. /HqData[jys].lpPreData[i].zrsp*100;
  482. if(clIsZsRec(jys, i))
  483. {
  484. if(jys ==1)
  485. {
  486. GetShZsFirst(lpTmp, DpData[jys].zsCount);
  487. DpData[jys].zsCount++;
  488. }
  489. }
  490. if(jys ==1)
  491. {               
  492. FldToString(lpTmp,(FieldStruct *)&HqkData[jys].fldStruct[1],
  493. HqData[jys].lpPreData[i].zqmc);
  494. GetShMmp(TRUE, i, lpTmp);
  495. }
  496. lpTmp +=reclen;
  497. }
  498.  
  499. GlobalFreePtr(buffer);  
  500. CheckGraHead(jys);
  501. if(jys ==0)
  502. {
  503. if(!GetSzZqmc(jys)) 
  504. {
  505. ErrMsg(ghWndMain,"ReadHqFirst:GetSzZqmc(jys)错");
  506. return FALSE;
  507. }
  508. if(!ReadSzZsFirst()) 
  509. {
  510.     ErrMsg(ghWndMain,"ReadHqFirst:ReadSzZsFirst()错");
  511. return FALSE;
  512. }
  513. if(!ReadSzMmp(TRUE))
  514. {
  515.     ErrMsg(ghWndMain,"ReadHqFirst:ReadSzZsFirst()错");
  516. return FALSE;
  517. }
  518. }
  519. i =GetMaxMin10(jys);
  520. GetDpData(jys, TRUE);
  521. MsgLocal("OK.");
  522. fFirst[jys] =FALSE;
  523. return TRUE;
  524. }
  525. ////////////////////////////////////////////////////////
  526. //功能 :根据股票代码、记录号获取股票名称,该功能只支持深股
  527. //参数 :
  528. // jys---交易所编号
  529. //          rec---记录标号(0-->记录数-1)
  530. //          gpdm--股票代码
  531. //          gpmc--股票名称
  532. //返回码 :
  533. // 0   --成功
  534. // -1  --失败
  535. //修改日期 :1997/10/15
  536. int GetZqmc(int jys,int rec,char *gpdm,char *gpmc)
  537. {
  538. int i;
  539. short reclen, headlen, fldnum;
  540. int rec_count;
  541. char *buffer;
  542. char tmp[40];
  543. if(GpkData[jys].hf ==-1)
  544. return -1;
  545. if(jys==1)
  546. return -1;
  547. reclen=*(short *)GpkData[jys].dbfStruct.rlen;
  548. headlen=*(short *)GpkData[jys].dbfStruct.hlen;
  549. rec_count =(int)GetDbfRecCount(GpkData[jys].hf,headlen,reclen);
  550. if(rec_count <=0) return -1;
  551. fldnum =GpkData[jys].fldCount;
  552. buffer =(char *)malloc(reclen+1);
  553. if (buffer==NULL) 
  554. {
  555. ErrMsg(ghWndMain, "GetZqmc:alloc buffer failed!");
  556. return -1;
  557.     }
  558.     //用记录数定位
  559. if(rec<rec_count)
  560. {
  561. _llseek(GpkData[jys].hf,(long)(headlen+reclen*rec),SEEK_SET);
  562. if(_lread(GpkData[jys].hf,buffer,reclen) ==(UINT)reclen)
  563. {
  564. FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[0], tmp);
  565. if(!strcmp(tmp, gpdm))
  566. {
  567. FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[1],gpmc);
  568.      free(buffer);
  569. return 0;
  570. }
  571. }
  572. }
  573. //线性搜索
  574. _llseek(GpkData[jys].hf,(long)headlen,SEEK_SET);
  575. for (i=0;i<rec_count;i++) 
  576. {
  577. if(_lread(GpkData[jys].hf,buffer,reclen) !=(UINT)reclen) break;
  578. FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[0], tmp);
  579. if(!strcmp(tmp, gpdm))
  580. {
  581. FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[1],gpmc);     
  582.     free(buffer);
  583. return 0;
  584. }
  585. }
  586. free(buffer);
  587. return -1;
  588. }
  589. /////////////////////////////////////////////////
  590. //功能 :刷新行情数据
  591. //参数 :
  592. //      jys---交易所编码
  593. //返回码 :
  594. // 0---成功
  595. //          -1--失败
  596. //修改日期 :1997/10/15
  597. int HqRefresh(int jys)
  598. {
  599. int i, j;
  600. short reclen, headlen ;
  601. int zs_num[2] ={0, 0};
  602. char *buffer;
  603. char *lpTmp;
  604. LPSTR lpFld;
  605. char tmp[50];
  606. long l,bytes;
  607. HQ_REF_DATA LastHq;
  608. char LastZqdm[MAX_ZQDM_SIZE];
  609.     int recCount;
  610. if(HqkData[jys].hf ==-1)
  611. {   
  612. ErrMsg(ghWndMain, "HqRefresh:不能打开行情库文件句柄");
  613. return FALSE;
  614.     }
  615. if(jys ==0) MsgLocal("刷新深圳行情");
  616. else MsgLocal("刷新上海行情");
  617. reclen=*(short *)HqkData[jys].dbfStruct.rlen;
  618. headlen=*(short *)HqkData[jys].dbfStruct.hlen;
  619. //recCount =(int)GetDbfRecCount(HqkData[jys].hf,headlen,reclen);
  620. recCount =GetValidRecNum(jys);
  621. //检查行情库记录数有无增减,如有效记录数发生变化,则应从新调整内存 ,
  622. if(recCount ==0)
  623. {
  624. ErrMsg(ghWndMain,"HqRefresh:GetDbfRecCount =0");
  625. return FALSE;
  626. }
  627. //上海行情库少采集一条记录
  628. if(jys ==1) recCount --;
  629. if(recCount <=0)
  630. {
  631. ErrMsg(ghWndMain,"HqRefresh:调整recCount <=0");
  632. return FALSE;
  633. }
  634. //HqData[jys].recCount =recCount;  ///add for deal with GetV function
  635. if(recCount!=HqData[jys].recCount)
  636. {
  637. MsgLocal("HqRefresh:记录数不匹配,重新初始化");
  638. return FALSE;
  639. }
  640. if(HqData[jys].recCount <=0)
  641. {   
  642.     ErrMsg(ghWndMain, "HqRefresh:行情库记录数错");
  643.   return FALSE;
  644. }
  645. l =HqData[jys].recCount;
  646. if ((buffer=(char *)GlobalAllocPtr(GHND, l*reclen+1))==NULL) 
  647. {
  648. ErrMsg(ghWndMain, "HqRefresh:行情采集分配缓冲区错!");
  649. return FALSE;
  650. }
  651. _llseek(HqkData[jys].hf,(long)headlen,SEEK_SET);
  652.     
  653.     //上海行情库第一条记录不能采集
  654. if(jys ==1)
  655. _llseek(HqkData[jys].hf, reclen, SEEK_CUR);
  656. bytes =hRead(HqkData[jys].hf, buffer, l*reclen);
  657. if(bytes == -1)
  658. {
  659. ErrMsg(ghWndMain,"HqRefresh:bytes == -1");
  660. GlobalFreePtr(buffer);
  661. return FALSE;
  662. }
  663. if(bytes!=l*reclen)
  664. {
  665. ErrMsg(ghWndMain, "HqRefresh:bytes!=l*reclen");
  666. GlobalFreePtr(buffer);
  667. return FALSE;
  668. }
  669. else
  670. {
  671. lpTmp =buffer;
  672. for (i=0;i<HqData[jys].recCount;i++) 
  673. {    
  674. while(UDPBlockingHook());
  675. if(run_cancelled) break;
  676. //拷贝行情老数据,作增量判断
  677. memcpy(&LastHq,&HqData[jys].lpRefData[i],
  678. sizeof(HQ_REF_DATA));
  679. //拷贝股票代码,以下用于股票数量加减判断
  680. strcpy(LastZqdm,HqData[jys].lpPreData[i].zqdm);
  681. for(j =0; j<HQ_FLDS_COUNT; j++)
  682. {
  683. lpFld =GetHqFldPos(jys, i, j);
  684. if(HqFldPoss[jys][j] >=0)
  685. {
  686. FldToString(lpTmp,(FieldStruct *)&HqkData[jys].fldStruct[HqFldPoss[jys][j]],
  687. tmp);
  688. switch(HqFldTypes[j])
  689. {
  690. case FLD_TYPE_STRING:
  691. strcpy(lpFld, tmp);
  692. break;
  693. case FLD_TYPE_FLOAT:
  694. *(float *)lpFld =(float)atof(tmp);
  695. break;
  696. case FLD_TYPE_LONG:
  697. *(int *)lpFld =atol(tmp);
  698. break;
  699. }
  700. }
  701. }
  702. //判断股票代码有无改变,如改变,则应获取正确的行情老数据
  703. //如股票代码有改变,则相应的名称也应改变
  704. if(strcmp(HqData[jys].lpPreData[i].zqdm,LastZqdm)!=0)
  705. {
  706.      //重读股票名称
  707. if(jys==0)
  708. {
  709. if(GetZqmc(jys,i,HqData[jys].lpPreData[i].zqdm,
  710. HqData[jys].lpPreData[i].zqmc)!=0)
  711. {
  712. strcpy(HqData[jys].lpPreData[i].zqmc,
  713. HqData[jys].lpPreData[i].zqdm);
  714. }
  715. }
  716. if(jys==1)
  717. {
  718. FldToString(lpTmp,(FieldStruct *)&HqkData[jys].fldStruct[1],
  719. HqData[jys].lpPreData[i].zqmc);
  720. }
  721. //放弃该次采集,处理下一条
  722. lpTmp +=reclen;
  723. continue;
  724. }
  725. if(IsGuoZhai(jys, i))
  726. HqData[jys].lpRefData[i].cjss /=10;     //单位:手
  727. else
  728. HqData[jys].lpRefData[i].cjss /=100;    //单位:手
  729. HqData[jys].lpRefData[i].cjje /=1000;       //单位:万
  730. if(jys ==1)
  731. {
  732. //FldToString(lpTmp,(FieldStruct *)&HqkData[jys].fldStruct[1],
  733. // HqData[jys].lpPreData[i].zqmc);
  734. if(clIsZsRec(jys, i))
  735. {
  736. RefreshShZs(lpTmp, zs_num[1]);
  737. zs_num[1] ++;
  738. }
  739. else GetShMmp(FALSE, i, lpTmp);
  740. }
  741. HqData[jys].lpRefData[i].lc =
  742. HqData[jys].lpRefData[i].cjss -LastHq.cjss;
  743. //没有成交 ,处理下一条
  744. if(HqData[jys].lpRefData[i].lc <=0)
  745. {
  746. lpTmp +=reclen;
  747. continue;
  748. }
  749. //有成交,计算涨跌              
  750. if(HqData[jys].lpPreData[i].zrsp ==0
  751. ||HqData[jys].lpRefData[i].zjcj ==0)
  752. HqData[jys].lpRefData[i].zdf =0;
  753. else
  754. HqData[jys].lpRefData[i].zdf =
  755. (HqData[jys].lpRefData[i].zjcj
  756. - HqData[jys].lpPreData[i].zrsp)
  757. /HqData[jys].lpPreData[i].zrsp*100;
  758. //如果是指数,则不处理
  759. if(!clIsZsRec(jys, i))
  760. {
  761. GetGraData(jys, i, &LastHq);
  762. if(HqData[jys].lpRefData[i].lc >0)
  763. WriteGraData(jys, i);
  764. }
  765. lpTmp +=reclen;
  766. }       
  767. }
  768. GlobalFreePtr(buffer);
  769. MsgLocal("OK.");
  770. if(jys ==0)
  771. {
  772. ReadSzMmp(FALSE);
  773. RefreshSzZs();
  774. }
  775. GetMaxMin10(jys);
  776. GetDpData(jys, FALSE);
  777. return TRUE;
  778. }
  779. int ReadSzZsFirst(void)
  780. {
  781. int i ; 
  782. short reclen, headlen;
  783. char *buffer;
  784.     char tmp[100];
  785.     
  786. if(SzZskData.hf <0)
  787. {
  788.     ErrMsg(ghWndMain, "ReadSzZsFirst:SzZskData.hf <0!");
  789. return FALSE;
  790.     }
  791. DpData[0].zsCount =*(int *)SzZskData.dbfStruct.recnum;
  792. if(DpData[0].zsCount >15) DpData[0].zsCount =15;
  793. reclen=*(short *)SzZskData.dbfStruct.rlen;
  794. headlen=*(short *)SzZskData.dbfStruct.hlen;
  795. if(DpData[0].zsCount <=0) 
  796. {
  797.     ErrMsg(ghWndMain, "ReadSzZsFirst:DpData[0].recCount <=0!");
  798. return FALSE;
  799. }
  800. buffer =(char *)malloc(reclen*DpData[0].zsCount+1);
  801. if (buffer==NULL) 
  802. {
  803. ErrMsg(ghWndMain, "ReadSzZsFirst:alloc buffer failed!");
  804. return FALSE;
  805.     }
  806. memset(buffer, 0, reclen*DpData[0].zsCount+1);
  807. _llseek(SzZskData.hf,(long)headlen,SEEK_SET);
  808. _lread(SzZskData.hf,buffer, reclen*DpData[0].zsCount);
  809. for (i=0;i<DpData[0].zsCount;i++) 
  810. {
  811. FldToString(buffer+i*reclen,
  812. (FieldStruct *)&SzZskData.fldStruct[2],tmp);
  813. DpData[0].sp[i] =(float)atof(tmp);
  814. FldToString(buffer+i*reclen,
  815. (FieldStruct *)&SzZskData.fldStruct[6],
  816. tmp);
  817. DpData[0].zs[i] =(float)atof(tmp);
  818. DpData[0].zd[i] =DpData[0].zs[i] -DpData[0].sp[i];
  819. }
  820. free(buffer);
  821. return TRUE;
  822. }
  823. int GetShZsFirst(LPSTR lpbuf, int zsnum)
  824. {
  825. char tmp[100];
  826. if(zsnum >15) return 0;
  827. FldToString(lpbuf,(FieldStruct *)&HqkData[1].fldStruct[7],
  828. tmp);
  829. DpData[1].zs[zsnum] =(float)atof(tmp);
  830. FldToString(lpbuf,(FieldStruct *)&HqkData[1].fldStruct[2],
  831. tmp);
  832. DpData[1].sp[zsnum] =(float)atof(tmp);
  833. //FldToString(lpbuf,(FieldStruct *)&HqkData[1].fldStruct[3],
  834. // tmp);
  835. //if((float)atof(tmp)!=0.00)
  836. // DpData[1].zd[zsnum] =(float)atof(tmp)-DpData[1].sp[zsnum];
  837.     //else
  838. DpData[1].zd[zsnum] =DpData[1].zs[zsnum]-DpData[1].sp[zsnum];    
  839. return 0;
  840. }
  841. int GetShMmp(BOOL fFirst, int rec_num, LPSTR buffer)
  842. {
  843. int i;
  844. char tmp[100];
  845.     double f1, f2;
  846. MMP LastMmp;
  847.     long tmpl;
  848.     float tmpf;
  849.     
  850. memcpy(&LastMmp, &MmpData[1].lpMmp[rec_num], sizeof(MMP));
  851. MmpData[1].lpMmp[rec_num].jwBuy[0]
  852. =HqData[1].lpRefData[rec_num].zgjm;
  853. MmpData[1].lpMmp[rec_num].jwSell[0]
  854. =HqData[1].lpRefData[rec_num].zdjm;
  855. f1 =f2 =0;
  856. for(i =0; i<3; i++)
  857. {
  858. FldToString(buffer,(FieldStruct *)&HqkData[1].fldStruct[12+i*2],
  859. tmp);
  860. MmpData[1].lpMmp[rec_num].slBuy[i] =atol(tmp)/100;
  861. if(i !=2)
  862. {
  863. FldToString(buffer,(FieldStruct *)&HqkData[1].fldStruct[12+i*2+1],
  864. tmp);
  865. MmpData[1].lpMmp[rec_num].jwBuy[i+1] =(float)atof(tmp);
  866. }
  867. f2+=MmpData[1].lpMmp[rec_num].slBuy[i];
  868. }
  869. for(i =0; i<3; i++)
  870. {
  871. FldToString(buffer,(FieldStruct *)&HqkData[1].fldStruct[17+i*2],
  872. tmp);
  873. MmpData[1].lpMmp[rec_num].slSell[i] =atol(tmp)/100;
  874. if(i !=2)
  875. {
  876. FldToString(buffer,(FieldStruct *)&HqkData[1].fldStruct[17+i*2+1],
  877. tmp);
  878. MmpData[1].lpMmp[rec_num].jwSell[i+1] =(float)atof(tmp);
  879. }
  880. f1+=MmpData[1].lpMmp[rec_num].slSell[i];
  881. }
  882. tmpl=MmpData[1].lpMmp[rec_num].slSell[0];
  883. tmpf=MmpData[1].lpMmp[rec_num].jwSell[0];
  884. MmpData[1].lpMmp[rec_num].slSell[0]=
  885. MmpData[1].lpMmp[rec_num].slSell[2];
  886. MmpData[1].lpMmp[rec_num].jwSell[0]=
  887. MmpData[1].lpMmp[rec_num].jwSell[2];
  888. MmpData[1].lpMmp[rec_num].slSell[2]=tmpl;
  889. MmpData[1].lpMmp[rec_num].jwSell[2]=tmpf;
  890.                                        
  891. if(f1+f2 ==0)
  892. HqData[1].lpRefData[rec_num].wb =0;
  893. else
  894. HqData[1].lpRefData[rec_num].wb =(float)((f2-f1)/(f2+f1));                                               
  895. if(memcmp(&LastMmp, &MmpData[1].lpMmp[rec_num], sizeof(MMP)))
  896. MmpData[1].lpChanged[rec_num] =TRUE;
  897. else MmpData[1].lpChanged[rec_num] =FALSE;
  898. return 0;
  899. }
  900. int ReadSzMmp(BOOL fFirst)
  901. {
  902. int i, j ;
  903. short reclen, headlen;
  904. char *buffer;
  905. char *lpTmp;
  906. char tmp[100];
  907. double f1, f2;
  908. int rec_count;
  909. MMP LastMmp;
  910. long bytes;
  911. if(SzMmpkData.hf <0)
  912. {
  913.     ErrMsg(ghWndMain, "ReadSzMmp:SzMmpkData.hf <0!");
  914. return FALSE;
  915. }
  916. MsgLocal("read Sz_Mmp...");
  917. rec_count =HqData[0].recCount*6;
  918. reclen=*(short *)SzMmpkData.dbfStruct.rlen;
  919. headlen=*(short *)SzMmpkData.dbfStruct.hlen;
  920. //加入以下代码处理买卖盘库尚未传完的情况
  921. i=(int)GetDbfRecCount(SzMmpkData.hf,headlen,reclen);
  922. if(rec_count>i) rec_count =i;
  923. buffer =(char *)GlobalAllocPtr(GHND, (long)rec_count*reclen+1);
  924. if (buffer==NULL) 
  925. {
  926. ErrMsg(ghWndMain, "ReadSzMmp:alloc buffer failed!");
  927. return FALSE;
  928. }
  929. _llseek(SzMmpkData.hf,(long)headlen,SEEK_SET);
  930. bytes =hRead(SzMmpkData.hf, buffer, (long)rec_count*reclen);
  931. if(bytes ==-1)
  932. {
  933. MsgLocal("HqRefresh:重新初化szmmpk");
  934. GlobalFreePtr(buffer);
  935. return FALSE;
  936. }
  937. if(bytes !=(long)rec_count*reclen)
  938. {
  939. ErrMsg(ghWndMain, "error read sz_mmpk");
  940. }
  941. else
  942. {
  943. lpTmp =buffer;
  944. for(i =0; i<rec_count/6; i++)
  945. {
  946. while(UDPBlockingHook());
  947. if(run_cancelled) break;
  948. if(clIsZsRec(0, i)) continue;
  949. memcpy(&LastMmp, &MmpData[0].lpMmp[i], sizeof(MMP));
  950. f1 =f2 =0;
  951. //应加入股票代码检查
  952. for(j =0; j<3; j++)
  953. {
  954. //if(_lread(SzMmpkData.hf,buffer, reclen) !=(UINT)reclen) break;
  955. //if(fFirst && j==0)
  956. //      FldToString(lpTmp,
  957. //              (FieldStruct *)&SzMmpkData.fldStruct[0],
  958. //              MmpData[0].lpMmp[i].zqdm);
  959. FldToString(lpTmp,(FieldStruct *)&SzMmpkData.fldStruct[2],
  960. tmp);
  961. MmpData[0].lpMmp[i].jwSell[j] =(float)atof(tmp);
  962. FldToString(lpTmp,(FieldStruct *)&SzMmpkData.fldStruct[4],
  963. tmp);
  964. MmpData[0].lpMmp[i].slSell[j] =atol(tmp)/100;
  965. f1+=(double)MmpData[0].lpMmp[i].slSell[j];
  966. lpTmp +=reclen;
  967. }
  968. if(j !=3) break;
  969. for(j =0; j<3; j++)
  970. {
  971. //if(_lread(SzMmpkData.hf,buffer, reclen) !=(UINT)reclen) break;;
  972. FldToString(lpTmp,(FieldStruct *)&SzMmpkData.fldStruct[2],
  973. tmp);
  974. MmpData[0].lpMmp[i].jwBuy[j] =(float)atof(tmp);
  975. FldToString(lpTmp,(FieldStruct *)&SzMmpkData.fldStruct[3],
  976. tmp);
  977. MmpData[0].lpMmp[i].slBuy[j] =atol(tmp)/100;
  978. f2+=(double)MmpData[0].lpMmp[i].slBuy[j];
  979. lpTmp +=reclen;
  980. }                                               
  981. if(j !=3) break;
  982. if(f1+f2 !=0)
  983. HqData[0].lpRefData[i].wb
  984. =(float)((f2-f1)/(f1+f2));
  985. else HqData[0].lpRefData[i].wb =0;
  986. if(memcmp(&LastMmp, &MmpData[0].lpMmp[i], sizeof(MMP)))
  987. MmpData[0].lpChanged[i] =TRUE;
  988. else MmpData[0].lpChanged[i] =FALSE;
  989. //rec_num++;
  990. }
  991. }
  992. //没有初始化的买卖盘数据
  993. if(rec_count/6<HqData[0].recCount)
  994. {         
  995. memset(&MmpData[0].lpMmp[rec_count/6],0,
  996. sizeof(MMP)*(HqData[0].recCount -rec_count/6));
  997. }
  998. GlobalFreePtr(buffer);
  999. MsgLocal("OK.");
  1000. return TRUE;
  1001. }
  1002. int RefreshSzZs(void)
  1003. {
  1004. int i ;
  1005. short reclen, headlen;
  1006. char *buffer;
  1007. char tmp[100];
  1008. static int times =0;
  1009. if(SzZskData.hf <0)
  1010. return 0;
  1011. reclen=*(short *)SzZskData.dbfStruct.rlen;
  1012. headlen=*(short *)SzZskData.dbfStruct.hlen;
  1013. buffer =(char *)malloc(reclen*DpData[0].zsCount+1);
  1014. if (buffer==NULL) 
  1015. {
  1016. ErrMsg(ghWndMain, "RefreshSzZs:alloc buffer failed!");
  1017. return -1;
  1018. }
  1019. memset(buffer, 0, reclen*DpData[0].zsCount+1);
  1020. _llseek(SzZskData.hf,(long)headlen,SEEK_SET);
  1021. _lread(SzZskData.hf,buffer, reclen*DpData[0].zsCount);
  1022. for (i=0;i<DpData[0].zsCount;i++) 
  1023. {
  1024. FldToString(buffer+i*reclen,
  1025. (FieldStruct *)&SzZskData.fldStruct[6],
  1026. tmp);
  1027. DpData[0].zs[i] =(float)atof(tmp);
  1028. DpData[0].zd[i] =DpData[0].zs[i]-DpData[0].sp[i];
  1029. }
  1030. free(buffer);
  1031. return 0;
  1032. }
  1033. int RefreshShZs(LPSTR lpbuf, int zsnum)
  1034. {
  1035. char tmp[100];
  1036. if(zsnum >15) return 0;
  1037. FldToString((char *)lpbuf,(FieldStruct *)&HqkData[1].fldStruct[7],
  1038. tmp);
  1039. DpData[1].zs[zsnum] =(float)atof(tmp);
  1040.     
  1041. FldToString((char *)lpbuf,(FieldStruct *)&HqkData[1].fldStruct[2],
  1042. tmp);
  1043. DpData[1].sp[zsnum] =(float)atof(tmp);
  1044.     
  1045. DpData[1].zd[zsnum] =DpData[1].zs[zsnum]-DpData[1].sp[zsnum];
  1046. return 0;
  1047. }
  1048. int GetSzZqmc(int jys)
  1049. {
  1050. int i, j ;
  1051. short reclen, headlen, fldnum;
  1052. int rec_count;
  1053. char *buffer;
  1054. char tmp[40];
  1055. if(GpkData[jys].hf ==-1)
  1056. {
  1057. ErrMsg(ghWndMain, "GetSzZqmc:GpkData[jys].hf ==-1!");
  1058. return FALSE;
  1059. }
  1060. rec_count =*(int *)GpkData[jys].dbfStruct.recnum;
  1061. if(rec_count <HqData[jys].recCount) rec_count =HqData[jys].recCount;
  1062. fldnum =GpkData[jys].fldCount;
  1063. reclen=*(short *)GpkData[jys].dbfStruct.rlen;
  1064. headlen=*(short *)GpkData[jys].dbfStruct.hlen;
  1065. if(rec_count <=0)
  1066. {   
  1067.      ErrMsg(ghWndMain, "GetSzZqmc:rec_count <=0!");
  1068.  return FALSE;
  1069. }
  1070. buffer =(char *)malloc(reclen+1);
  1071. if (buffer==NULL) 
  1072. {
  1073. ErrMsg(ghWndMain, "GetSzZqmc:alloc buffer failed!");
  1074. return FALSE;
  1075.     }
  1076. _llseek(GpkData[jys].hf,(long)headlen,SEEK_SET);
  1077. for (i=0;i<rec_count;i++) 
  1078. {
  1079. if(_lread(GpkData[jys].hf,buffer,reclen) !=(UINT)reclen) break;
  1080. // get zqdm
  1081. FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[0], tmp);
  1082. for(j =0; j<HqData[jys].recCount; j++)
  1083. if(!strcmp(tmp, HqData[jys].lpPreData[j].zqdm))
  1084. break;
  1085. if(j <HqData[jys].recCount)
  1086. FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[1],
  1087. HqData[jys].lpPreData[j].zqmc);
  1088. }
  1089. if(i <rec_count)
  1090. {
  1091. for(; i<HqData[jys].recCount; i++)
  1092. {
  1093. strcpy(HqData[jys].lpPreData[i].zqmc,
  1094. HqData[jys].lpPreData[i].zqdm);
  1095. }
  1096. }
  1097. free(buffer);
  1098. return TRUE;
  1099. }
  1100. int CheckZqdm(LPSTR lpzqdm)
  1101. {
  1102. return 0;
  1103. }
  1104. extern long tim_seconds;
  1105. //取大盘数据
  1106. int GetDpData(int jys, BOOL fFirst)
  1107. {
  1108. int i;
  1109. //int jys;
  1110. float oldjg;
  1111. long b_lc =0L, s_lc =0L;
  1112. HQ_REF_DATA LastHq;
  1113. DP_DATA LastDp;
  1114. int rec_num;
  1115. memcpy(&LastDp, &DpData[jys], sizeof(DP_DATA));
  1116. DpData[jys].cjzje =CalcCjzje(jys);
  1117. DpData[jys].npbl =CalcNpbl(jys);
  1118. DpData[jys].cjss =CalcCjss(jys);
  1119. DpData[jys].upCount =DpData[jys].downCount =DpData[jys].equalCount =0;
  1120. for(i =0; i<HqData[jys].recCount; i++)
  1121. {
  1122. oldjg =HqData[jys].lpRefData[i].zjcj;
  1123. //如果不是指数,则计算升跌家数
  1124. if(!clIsZsRec(jys, i))
  1125. {
  1126. if(HqData[jys].lpRefData[i].zdf >0)
  1127. DpData[jys].upCount ++;
  1128. else if(HqData[jys].lpRefData[i].zdf <0)
  1129. DpData[jys].downCount ++;
  1130. else DpData[jys].equalCount ++;
  1131. }
  1132. else
  1133. {
  1134. memcpy(&LastHq, &HqData[jys].lpRefData[i], sizeof(HQ_REF_DATA));
  1135. HqData[jys].lpRefData[i].cjss =DpData[jys].cjss;
  1136. HqData[jys].lpRefData[i].cjje =DpData[jys].cjzje;
  1137. HqData[jys].lpRefData[i].npzl 
  1138. =(int)((double)DpData[jys].npbl*(double)DpData[jys].cjss);
  1139. HqData[jys].lpRefData[i].wb =0;
  1140. HqData[jys].lpRefData[i].lc =DpData[jys].cjss-LastDp.cjss;
  1141. if(HqData[jys].lpRefData[i].lc <0)
  1142. HqData[jys].lpRefData[i].lc =0L;
  1143. if(jys ==0) rec_num =HqData[jys].recCount-i;
  1144. else rec_num =i;
  1145. if(!fFirst)
  1146. {
  1147. if(tim_seconds -zs_times[jys][rec_num] >gnHqRefreshTime)
  1148. {
  1149. GraphData[jys].lpGraData[i].lc =
  1150. DpData[jys].cjss-oldDpCjss2[jys][rec_num];
  1151. GetDpGraData(jys, i);
  1152. if(GraphData[jys].lpGraData[i].lc)
  1153. WriteGraData(jys, i);
  1154. zs_times[jys][rec_num] =tim_seconds;
  1155. oldDpCjss2[jys][rec_num] =DpData[jys].cjss;
  1156. }
  1157. }
  1158. else
  1159. {
  1160. zs_times[jys][rec_num] =tim_seconds;
  1161. oldDpCjss2[jys][rec_num] =DpData[jys].cjss;
  1162. }
  1163. }
  1164. }
  1165. if(memcmp(&LastDp, &DpData[jys], sizeof(DP_DATA))) return 1;
  1166. return 0;
  1167. }
  1168. int GetMaxMin10(int jys)
  1169. {
  1170. int ret =0;
  1171. MAXMIN_DATA LastMaxMin[2];
  1172. memcpy(&LastMaxMin[0], &MaxMinData[jys][0], sizeof(MAXMIN_DATA));
  1173. memcpy(&LastMaxMin[1], &MaxMinData[jys][1], sizeof(MAXMIN_DATA));
  1174. GetMaxZd10(jys);
  1175. GetMaxZdf10(jys);
  1176. GetMaxCjss10(jys);
  1177. GetMaxCjje10(jys);
  1178. if(memcmp(&MaxMinData[jys][0], &LastMaxMin[0], sizeof(MAXMIN_DATA)))
  1179. ret++;
  1180. GetMinZd10(jys);
  1181. GetMinZdf10(jys);
  1182. GetMinCjss10(jys);
  1183. GetMinCjje10(jys);
  1184. if(memcmp(&MaxMinData[jys][1], &LastMaxMin[1], sizeof(MAXMIN_DATA)))
  1185. ret+=2;
  1186. return ret;
  1187. }
  1188. void GetMaxZdf10(int jys)
  1189. {
  1190. GetFloatSort10(jys, 8, SORT_UP, &MaxMinData[jys][0].recNum[0][0]);
  1191. }
  1192. void GetMinZdf10(int jys)
  1193. {
  1194. GetFloatSort10(jys, 8, SORT_DOWN, &MaxMinData[jys][1].recNum[0][0]);
  1195. }
  1196. void GetMaxCjss10(int jys)
  1197. {
  1198. GetLongSort10(jys, 9, SORT_UP, &MaxMinData[jys][0].recNum[2][0]);
  1199. }
  1200. void GetMinCjss10(int jys)
  1201. {
  1202. GetLongSort10(jys, 9, SORT_DOWN, &MaxMinData[jys][1].recNum[2][0]);
  1203. }
  1204. void GetMaxCjje10(int jys)
  1205. {
  1206. GetLongSort10(jys, 13, SORT_UP, &MaxMinData[jys][0].recNum[3][0]);
  1207. }
  1208. void GetMinCjje10(int jys)
  1209. {
  1210. GetLongSort10(jys, 13, SORT_DOWN, &MaxMinData[jys][1].recNum[3][0]);
  1211. }
  1212. void GetMaxZd10(int jys)
  1213. {
  1214. int key, i, j, n;
  1215. float fval, f1, f;
  1216. int count =0;
  1217. int fldNum =8;
  1218. for(i =0; i<10; i++)
  1219. MaxMinData[jys][0].recNum[1][i] =i;
  1220. for(i =0; i<HqData[jys].recCount; i++)
  1221. keys[i] =i;
  1222. for(i =0; i<HqData[jys].recCount; i++)
  1223. {
  1224. if(!IsMaxMin(jys, keys[i])) continue;
  1225. if(HqData[jys].lpRefData[keys[i]].zjcj ==0) continue;
  1226. key =i;
  1227. if(HqData[jys].lpPreData[keys[key]].zrsp)
  1228. fval =HqData[jys].lpRefData[keys[key]].zjcj
  1229. -HqData[jys].lpPreData[keys[key]].zrsp;
  1230. else fval =-100;
  1231. for(j =i+1; j<HqData[jys].recCount; j++)
  1232. {
  1233. if(!IsMaxMin(jys, keys[j])) continue;
  1234. if(HqData[jys].lpRefData[keys[j]].zjcj ==0) continue;
  1235. if(HqData[jys].lpPreData[keys[j]].zrsp)
  1236. f1 =HqData[jys].lpRefData[keys[j]].zjcj
  1237. -HqData[jys].lpPreData[keys[j]].zrsp;
  1238. else f1 =-100;
  1239. f =f1-fval;
  1240. if(f1>fval)
  1241. {
  1242. key =j;
  1243. fval =f1;
  1244. }
  1245. }
  1246. if(key >i)
  1247. {
  1248. n =keys[i];
  1249. keys[i] =keys[key];
  1250. keys[key] =n;
  1251. }
  1252. MaxMinData[jys][0].recNum[1][count] =key;
  1253. if(++count >=10) break;
  1254. }
  1255. }
  1256. void GetMinZd10(int jys)
  1257. {
  1258. int key, i, j, n;
  1259. float fval, f1, f;
  1260. int count =0;
  1261. int fldNum =8;
  1262. for(i =0; i<10; i++)
  1263. MaxMinData[jys][1].recNum[1][i] =i;
  1264. for(i =0; i<HqData[jys].recCount; i++)
  1265. keys[i] =i;
  1266. for(i =0; i<HqData[jys].recCount; i++)
  1267. {
  1268. if(!IsMaxMin(jys, keys[i])) continue;
  1269. if(HqData[jys].lpRefData[keys[i]].zjcj ==0) continue;
  1270. key =i;
  1271. if(HqData[jys].lpPreData[keys[key]].zrsp)
  1272. fval =HqData[jys].lpRefData[keys[key]].zjcj
  1273. -HqData[jys].lpPreData[keys[key]].zrsp;
  1274. else fval =100;
  1275. for(j =i+1; j<HqData[jys].recCount; j++)
  1276. {
  1277. if(!IsMaxMin(jys, keys[j])) continue;
  1278. if(HqData[jys].lpRefData[keys[j]].zjcj ==0) continue;
  1279. if(HqData[jys].lpPreData[keys[j]].zrsp)
  1280. f1 =HqData[jys].lpRefData[keys[j]].zjcj
  1281. -HqData[jys].lpPreData[keys[j]].zrsp;
  1282. else f1 =100;
  1283. f =f1-fval;
  1284. if(f1<fval)
  1285. {
  1286. key =j;
  1287. fval =f1;
  1288. }
  1289. }
  1290. if(key >i)
  1291. {
  1292. n =keys[i];
  1293. keys[i] =keys[key];
  1294. keys[key] =n;
  1295. }
  1296. MaxMinData[jys][1].recNum[1][count] =key;
  1297. if(++count >=10) break;
  1298. }
  1299. }
  1300. BOOL CheckTpbz(int jys, LPSTR buffer)
  1301. {
  1302. return FALSE;
  1303. }
  1304. BOOL clIsZsRec(int jys, int rec_num)
  1305. {
  1306. if(jys ==0)
  1307. {
  1308. if(!strncmp(HqData[jys].lpPreData[rec_num].zqdm, "99", 2))
  1309. return TRUE;
  1310. }
  1311. else
  1312. if(!strncmp(HqData[jys].lpPreData[rec_num].zqdm, "0000", 4)
  1313. && (HqData[jys].lpPreData[rec_num].zqdm[4] =='0'
  1314. ||HqData[jys].lpPreData[rec_num].zqdm[4] =='1'))
  1315. return TRUE;
  1316. return FALSE;
  1317. }
  1318. LPSTR GetHqFldPos(int jys, int rec_num, int fld_num)
  1319. {
  1320. switch(fld_num)
  1321. {
  1322. case 0:
  1323. return (LPSTR)&HqData[jys].lpPreData[rec_num].zqdm[0];
  1324. case 1:
  1325. return (LPSTR)&HqData[jys].lpPreData[rec_num].zrsp;
  1326. case 2:
  1327. return (LPSTR)&HqData[jys].lpPreData[rec_num].jrkp;
  1328. case 3:
  1329. return (LPSTR)&HqData[jys].lpRefData[rec_num].zgjg;
  1330. case 4:
  1331. return (LPSTR)&HqData[jys].lpRefData[rec_num].zdjg;
  1332. case 5:
  1333. return (LPSTR)&HqData[jys].lpRefData[rec_num].zgjm;
  1334. case 6:
  1335. return (LPSTR)&HqData[jys].lpRefData[rec_num].zdjm;
  1336. case 7:
  1337. return (LPSTR)&HqData[jys].lpRefData[rec_num].zjcj;
  1338. case 8:
  1339. return (LPSTR)&HqData[jys].lpRefData[rec_num].zdf;
  1340. case 9:
  1341. return (LPSTR)&HqData[jys].lpRefData[rec_num].cjss;
  1342. case 10:
  1343. return (LPSTR)&HqData[jys].lpRefData[rec_num].lc;
  1344. case 11:
  1345. return (LPSTR)&HqData[jys].lpRefData[rec_num].npzl;
  1346. case 12:
  1347. return (LPSTR)&HqData[jys].lpRefData[rec_num].wb;
  1348. case 13:
  1349. return (LPSTR)&HqData[jys].lpRefData[rec_num].cjje;
  1350. }
  1351. }
  1352. int GetFloatSort10(int jys, short fldNum, int type, short *lpKeys)
  1353. {
  1354. int key, i, j, n;
  1355. float fval, f1, f;
  1356. int count =0;
  1357. for(i =0; i<10; i++)
  1358. lpKeys[i] =i;
  1359. for(i =0; i<HqData[jys].recCount; i++)
  1360. keys[i] =i;
  1361. for(i =0; i<HqData[jys].recCount; i++)
  1362. {
  1363. if(!IsMaxMin(jys, keys[i])) continue;
  1364. if(HqData[jys].lpRefData[keys[i]].zjcj ==0) continue;
  1365. key =i;
  1366. fval =*(float*)GetHqFldPos(jys, keys[key], fldNum);
  1367. for(j =i+1; j<HqData[jys].recCount; j++)
  1368. {
  1369. if(!IsMaxMin(jys, keys[j])) continue;
  1370. if(HqData[jys].lpRefData[keys[j]].zjcj ==0) continue;
  1371. f1 =*(float *)GetHqFldPos(jys, keys[j], fldNum);
  1372. f =f1-fval;
  1373. if(type ==SORT_UP && f>.0)
  1374. {
  1375. key =j;
  1376. fval =f1;
  1377. }
  1378. else if(type ==SORT_DOWN && f<.0)
  1379. {
  1380. key =j;
  1381. fval =f1;
  1382. }
  1383. }
  1384. if(key >i)
  1385. {
  1386. n =keys[i];
  1387. keys[i] =keys[key];
  1388. keys[key] =n;
  1389. }
  1390. lpKeys[count] =key;
  1391. if(++count >=10) break;
  1392. }
  1393. return 0;
  1394. }
  1395. int GetLongSort10(int jys, short fldNum, int type, short *lpKeys)
  1396. {
  1397. int key, i, j, n;
  1398. int lval, l1, l;
  1399. int count =0;
  1400. for(i =0; i<10; i++)
  1401. lpKeys[i] =i;
  1402. for(i =0; i<HqData[jys].recCount; i++)
  1403. keys[i] =i;
  1404. for(i =0; i<HqData[jys].recCount; i++)
  1405. {
  1406. if(!IsMaxMin(jys, keys[i])) continue;
  1407. if(HqData[jys].lpRefData[keys[i]].zjcj ==0) continue;
  1408. key =i;
  1409. lval =*(int*)GetHqFldPos(jys, keys[key], fldNum);
  1410. for(j =i+1; j<HqData[jys].recCount; j++)
  1411. {
  1412. if(!IsMaxMin(jys, keys[j])) continue;
  1413. if(HqData[jys].lpRefData[keys[j]].zjcj ==0) continue;
  1414. l1 =*(int *)GetHqFldPos(jys, keys[j], fldNum);
  1415. l =l1-lval;
  1416. if(type ==SORT_UP && l>.0)
  1417. {
  1418. key =j;
  1419. lval =l1;
  1420. }
  1421. else if(type ==SORT_DOWN && l<.0)
  1422. {
  1423. key =j;
  1424. lval =l1;
  1425. }
  1426. }
  1427. if(key >i)
  1428. {
  1429. n =keys[i];
  1430. keys[i] =keys[key];
  1431. keys[key] =n;
  1432. }
  1433. lpKeys[count] =key;
  1434. if(++count >=10) break;
  1435. }
  1436. return 0;
  1437. }
  1438. long CalcCjzje(int jys)
  1439. {
  1440. int i;
  1441. long l =0;
  1442. for(i =0; i<HqData[jys].recCount; i++)
  1443. {   
  1444. if(jys==0)
  1445. {
  1446. if(HqData[jys].lpPreData[i].zqdm[0]=='1'||HqData[jys].lpPreData[i].zqdm[0]=='9')
  1447. continue;
  1448. if(HqData[jys].lpPreData[i].zqdm[0]=='3'||HqData[jys].lpPreData[i].zqdm[0]=='8')
  1449. continue;
  1450. }
  1451. if(jys==1)
  1452. {   
  1453. //if(strncmp(HqData[jys].lpPreData[i].zqdm,"70",2)!=0&&strncmp(HqData[jys].lpPreData[i].zqdm,"71",2)!=0)
  1454.             {
  1455. if(HqData[jys].lpPreData[i].zqdm[0]=='0'||HqData[jys].lpPreData[i].zqdm[0]=='1'||
  1456. HqData[jys].lpPreData[i].zqdm[0]=='2'||HqData[jys].lpPreData[i].zqdm[0]=='7')
  1457. continue;
  1458. }
  1459. }
  1460. if(!clIsZsRec(jys, i))    
  1461. l +=HqData[jys].lpRefData[i].cjje;
  1462. }
  1463. return l;
  1464. }
  1465. float CalcNpbl(int jys)
  1466. {
  1467. int i;
  1468. long double lfbuy =0, lftotal =0;
  1469. float lf;
  1470. for(i =0; i<HqData[jys].recCount; i++)
  1471. {   
  1472. if(jys==0)
  1473. {
  1474. if(HqData[jys].lpPreData[i].zqdm[0]=='1'||HqData[jys].lpPreData[i].zqdm[0]=='9')
  1475. continue;
  1476. if(HqData[jys].lpPreData[i].zqdm[0]=='3'||HqData[jys].lpPreData[i].zqdm[0]=='8')
  1477. continue;
  1478. }
  1479. if(jys==1)
  1480. //if(strncmp(HqData[jys].lpPreData[i].zqdm,"70",2)!=0&&strncmp(HqData[jys].lpPreData[i].zqdm,"71",2)!=0)
  1481.     {
  1482. if(HqData[jys].lpPreData[i].zqdm[0]=='0'||HqData[jys].lpPreData[i].zqdm[0]=='1'||
  1483. HqData[jys].lpPreData[i].zqdm[0]=='2'||HqData[jys].lpPreData[i].zqdm[0]=='7')
  1484. continue;
  1485. }
  1486. }
  1487. if(!clIsZsRec(jys, i))
  1488. {
  1489. lfbuy +=(long double)HqData[jys].lpRefData[i].npzl;
  1490. lftotal +=(long double)HqData[jys].lpRefData[i].cjss;
  1491. }
  1492. }
  1493. if(lftotal ==0) return (float)0;
  1494. lf =(float)(lfbuy/lftotal);
  1495. return lf;
  1496. }
  1497. long CalcCjss(int jys)
  1498. {
  1499. int i;
  1500. long l =0;
  1501. for(i =0; i<HqData[jys].recCount; i++)
  1502. {
  1503. if(jys==0)
  1504. {
  1505. if(HqData[jys].lpPreData[i].zqdm[0]=='1'||HqData[jys].lpPreData[i].zqdm[0]=='9')
  1506. continue;
  1507. if(HqData[jys].lpPreData[i].zqdm[0]=='3'||HqData[jys].lpPreData[i].zqdm[0]=='8')
  1508. continue;
  1509. }
  1510. if(jys==1)
  1511. {    
  1512. //if(strncmp(HqData[jys].lpPreData[i].zqdm,"70",2)!=0&&strncmp(HqData[jys].lpPreData[i].zqdm,"71",2)!=0)
  1513. {
  1514. if(HqData[jys].lpPreData[i].zqdm[0]=='0'||HqData[jys].lpPreData[i].zqdm[0]=='1'||
  1515. HqData[jys].lpPreData[i].zqdm[0]=='2'||HqData[jys].lpPreData[i].zqdm[0]=='7')
  1516. continue;
  1517. }
  1518. }
  1519. if(!clIsZsRec(jys, i))
  1520. l +=HqData[jys].lpRefData[i].cjss;
  1521. }
  1522. return l;
  1523. }
  1524. int UDPBlockingHook(void)
  1525. {
  1526. MSG msg;
  1527. if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  1528. {
  1529. if(!ghWndMain || !IsDialogMessage(ghWndMain, &msg))
  1530. {
  1531. TranslateMessage(&msg);
  1532. DispatchMessage(&msg);   
  1533. if(msg.message ==WM_QUIT)
  1534. {
  1535. PostQuitMessage(0);
  1536. run_cancelled =TRUE;               
  1537. return FALSE;
  1538. }
  1539. }            
  1540. return TRUE;
  1541. }
  1542. return FALSE;
  1543. }
  1544. int clHqAllocMem(int jys, int recCount)
  1545. {
  1546. static MAX_REC_NUM =1000;
  1547. unsigned int ReqBytes;
  1548. if(recCount>MAX_REC_NUM)
  1549. return -1;
  1550. if(HqData[jys].recCount ==0)
  1551. {
  1552. HqData[jys].recCount =recCount;
  1553. ReqBytes =MAX_REC_NUM*sizeof(HQ_PRE_DATA);
  1554. HqData[jys].lpPreData =(LPHQ_PRE_DATA)GlobalAllocPtr(GHND, 
  1555. ReqBytes);
  1556. ReqBytes =MAX_REC_NUM*sizeof(HQ_REF_DATA);
  1557. HqData[jys].lpRefData =(LPHQ_REF_DATA)GlobalAllocPtr(GHND, 
  1558. ReqBytes);
  1559. ReqBytes =MAX_REC_NUM*HQ_REF_ITEM_COUNT;
  1560. HqData[jys].lpbChanged =(BYTE *)GlobalAllocPtr(GHND, 
  1561. ReqBytes);
  1562. ReqBytes =MAX_REC_NUM*sizeof(GRA_DATA);
  1563. GraphData[jys].lpGraData =(LPGRA_DATA)GlobalAllocPtr(GHND,
  1564. HqData[jys].recCount*sizeof(GRA_DATA));
  1565. ReqBytes =MAX_REC_NUM*sizeof(GRA_HEAD);
  1566. GraphData[jys].lpGraHead =(LPGRA_HEAD)GlobalAllocPtr(GHND,
  1567. ReqBytes);
  1568. ReqBytes =MAX_REC_NUM*sizeof(MMP);
  1569. MmpData[jys].lpMmp =(LPMMP)GlobalAllocPtr(GHND,
  1570. ReqBytes);
  1571. ReqBytes =MAX_REC_NUM;
  1572. MmpData[jys].lpChanged =(BYTE *)GlobalAllocPtr(GHND,
  1573. ReqBytes);
  1574. ReqBytes =MAX_REC_NUM*sizeof(HQ_REF_DATA_V202)+sizeof(short);
  1575. LzwData202[jys].recCount =(short *)GlobalAllocPtr(GHND,
  1576.   ReqBytes);
  1577. LzwData202[jys].lpData202 =(LPHQ_REF_DATA_V202)(LzwData202[jys].recCount +1);
  1578. }
  1579. /*
  1580. else if(HqData[jys].recCount <recCount)
  1581. {
  1582. HqData[jys].recCount =recCount;
  1583. HqData[jys].lpPreData =(LPHQ_PRE_DATA)GlobalReAllocPtr(HqData[jys].lpPreData,
  1584. HqData[jys].recCount*sizeof(HQ_PRE_DATA), GMEM_MOVEABLE);
  1585. HqData[jys].lpRefData =(LPHQ_REF_DATA)GlobalReAllocPtr(HqData[jys].lpRefData,
  1586. HqData[jys].recCount*sizeof(HQ_REF_DATA), GMEM_MOVEABLE);
  1587. HqData[jys].lpbChanged =(BYTE *)GlobalReAllocPtr(HqData[jys].lpbChanged,
  1588. HqData[jys].recCount*HQ_REF_ITEM_COUNT, GMEM_MOVEABLE);
  1589. GraphData[jys].lpGraHead =(LPGRA_HEAD)GlobalReAllocPtr(GraphData[jys].lpGraHead,
  1590. HqData[jys].recCount*sizeof(GRA_HEAD),GMEM_MOVEABLE);
  1591. GraphData[jys].lpGraData =(LPGRA_DATA)GlobalReAllocPtr(GraphData[jys].lpGraData,
  1592. HqData[jys].recCount*sizeof(GRA_DATA),GMEM_MOVEABLE);
  1593. MmpData[jys].lpMmp =(LPMMP)GlobalReAllocPtr(MmpData[jys].lpMmp,
  1594. HqData[jys].recCount*sizeof(MMP), GMEM_MOVEABLE);
  1595. MmpData[jys].lpChanged =(BYTE *)GlobalReAllocPtr(MmpData[jys].lpChanged,
  1596. HqData[jys].recCount, GHND);
  1597. LzwData202[jys].recCount =(short *)GlobalReAllocPtr(LzwData202[jys].recCount,
  1598. HqData[jys].recCount*sizeof(HQ_REF_DATA_V202)+sizeof(short), GMEM_MOVEABLE);
  1599. LzwData202[jys].lpData202 =(LPHQ_REF_DATA_V202)( LzwData202[jys].recCount+1);
  1600. }
  1601. */
  1602. if(HqData[jys].lpPreData ==NULL)
  1603. {
  1604. ErrMsg(ghWndMain, "alloc mem pre data failed!");
  1605. return -1;
  1606. }
  1607. if(HqData[jys].lpRefData ==NULL)
  1608. {
  1609. ErrMsg(ghWndMain, "alloc mem ref data failed!");
  1610. return -1;
  1611. }
  1612. if(HqData[jys].lpbChanged ==NULL)
  1613. {
  1614. ErrMsg(ghWndMain, "alloc mem chg data failed!");
  1615. return -1;
  1616. }
  1617. if(GraphData[jys].lpGraData ==NULL || GraphData[jys].lpGraHead ==NULL)
  1618. {
  1619. ErrMsg(ghWndMain, "alloc mem graph data failed!");
  1620. return -1;
  1621. }
  1622. if(MmpData[jys].lpMmp ==NULL)
  1623. {
  1624. ErrMsg(ghWndMain, "alloc mem mmp failed!");
  1625. return -1;
  1626. }
  1627. if(MmpData[jys].lpChanged ==NULL)
  1628. {
  1629. ErrMsg(ghWndMain, "alloc mem mmp changed failed!");
  1630. return -1;
  1631. }
  1632. if(LzwData202[jys].recCount==NULL)
  1633. {
  1634. ErrMsg(ghWndMain, "alloc mem DataV202 failed!");
  1635. return -1;
  1636. }
  1637. return 0;       
  1638. }
  1639. BOOL IsMaxMin(int jys, int rec_num)
  1640. {
  1641. char c;
  1642. c =HqData[jys].lpPreData[rec_num].zqdm[0];      
  1643. if(clIsZsRec(jys, rec_num)) return FALSE;
  1644. if(jys ==0)
  1645. {
  1646. if(c =='0' || c =='4') return TRUE;             
  1647. }
  1648. else if((c =='0' && !clIsZsRec(jys, rec_num))
  1649. || c =='5' || c=='6')
  1650. return TRUE;
  1651. return FALSE;
  1652. }
  1653. BOOL IsB(int jys, int rec_num)
  1654. {
  1655. if((jys ==0 && HqData[jys].lpPreData[rec_num].zqdm[0] =='2')
  1656. || (jys ==1 && HqData[jys].lpPreData[rec_num].zqdm[0] =='2'))
  1657. return TRUE;
  1658. return FALSE;
  1659. }
  1660. BOOL IsGuoZhai(int jys, int rec_num)
  1661. {
  1662. return FALSE;
  1663. }
  1664. int GetGraData(int jys, int i, LPHQ_REF_DATA lpLastHq)
  1665. {
  1666. float jg1, jg2;
  1667. if(HqData[jys].lpRefData[i].lc>0)
  1668. {
  1669. //计算内盘
  1670. //GraphData[jys].lpGraHead[i].dateNum==date_num;
  1671. GraphData[jys].lpGraData[i].tim=tim;                                    
  1672. if(GraphData[jys].lpGraHead[i].recCount==0)
  1673. {
  1674. //第一次有正量差,开市初始化
  1675. //HqData[jys].lpPreData[i].jrkp=lpLastHq->zjcj;
  1676. //初始化分时数据