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

金融证券系统

开发平台:

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