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

金融证券系统

开发平台:

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> // read lseek access
  7. #include <sysstat.h> // _S_IREAD
  8. #include <share.h>
  9. #include <fcntl.h> //O_RDONLY
  10. #include <time.h>
  11. #include "hq.h"
  12. #include "sv_hq.h"
  13. #include "data.h"
  14. HQ_DATA HqData[2];
  15. DP_DATA DpData[2];
  16. MMP_DATA MmpData[2];
  17. HQ_TIME HqTime[2];
  18. GRAPH_DATA GraphData[2];
  19. MAXMIN_DATA MaxMinData[2][2];  //jys, 0:max, 1:min
  20. HQSEL_DATA HqSelData;
  21. LZW_DATA_202 LzwData202[2];
  22. short keys[600];     // must init first
  23. BOOL gfUseThrd =FALSE;
  24. BOOL HqIsRun=TRUE;
  25. extern BOOL fReadUDPData;
  26. extern BOOL gfIsNewsSrcDel;
  27. extern HWND ghWndMain;                           
  28. extern void MsgLocal(LPSTR msg);
  29. extern void DelSpaces(LPSTR);
  30. extern BOOL GetInitString(LPSTR, LPSTR, LPSTR);
  31. extern BOOL PutInitString(LPSTR, LPSTR, LPSTR);
  32. extern BOOL ErrMsg(HWND, LPSTR);
  33. extern short ShoutBlockingHook(void);
  34. char *HqItems[] ={"HQK_SZ", "HQK_SH", "GPK_SZ", /*"GPK_SH",*/
  35. "ZSK_SZ", "MMPK_SZ", NULL};
  36. LPSTR HqTimeItems[] ={"SZ_AM_START", "SZ_AM_END", "SZ_PM_START", "SZ_PM_END",
  37. "SH_AM_START", "SH_AM_END", "SH_PM_START", "SH_PM_END",
  38. };
  39. LPSTR HqTimeDefs[] ={"9:30", "11:30", "13:00", "15:00",
  40. "9:30", "11:30", "13:00", "15:00",
  41. };
  42. short *lpHqTimes[] ={&HqTime[0].am_min_start, &HqTime[0].am_min_end,
  43. &HqTime[0].pm_min_start, &HqTime[0].pm_min_end,
  44. &HqTime[1].am_min_start, &HqTime[1].am_min_end,
  45. &HqTime[1].pm_min_start, &HqTime[1].pm_min_end
  46. };
  47. short zsRecNum[2][50];
  48. short zsRecCount[2] ={0,0};
  49. char ZxDataFile[128], szDataPath[128] ,szNewsPath[128] ,szNewsSrc[128];
  50. char HqDataPath[128];
  51. HFILE hfZx;
  52. int *HqDataFile[] ={
  53. &hfHq[0], &hfHq[1], &hfMmp[0], &hfMmp[1], &hfDp,
  54. &hfMaxMin[0], &hfMaxMin[1], NULL
  55. };
  56. LPSTR HqDataFileName[] ={
  57. "SZHQ", "SHHQ", "SZMMP", "SHMMP", "DPDATA", "MAXMINSZ", "MAXMINSH", NULL
  58. };
  59. int HqInit(void)
  60. {
  61. short i, jys;
  62. char tmp[256], temp[256];
  63. OFSTRUCT os;
  64. if(GetInitString("HQ", "RUN", tmp))
  65. {
  66. if(tmp[0]=='N')
  67. {
  68. HqIsRun=FALSE;
  69. return 0;
  70. }
  71. }
  72. for(i =0; i<2; i++)
  73. {
  74. memset(&HqData[i], 0, sizeof(HqData[i]));
  75. memset(&MmpData[i], 0, sizeof(MmpData[i]));
  76. memset(&HqTime[i], 0, sizeof(HqTime[i]));
  77. memset(&GraphData[i], 0, sizeof(GraphData[i]));
  78. memset(&DpData[i], 0, sizeof(DpData[i]));
  79. hfHq[i] =HFILE_ERROR;
  80. hfMmp[i] =HFILE_ERROR;
  81. hfMaxMin[i] =HFILE_ERROR;
  82. }
  83. hfDp =HFILE_ERROR;
  84. ZxDataFile[0] =0;
  85. if(!GetInitString("ZX", "FILE0", ZxDataFile))
  86. {
  87. ErrMsg(ghWndMain, "get zx init failed!");
  88. PutInitString("ZX", "FILE0", "");
  89. return -1;
  90. }
  91. strupr(ZxDataFile);
  92. hfZx =OpenFile(ZxDataFile, &os, OF_SHARE_DENY_NONE|OF_READ);
  93. if(hfZx ==HFILE_ERROR)
  94. {
  95. ErrMsg(ghWndMain, "open zx file failed");
  96. return -1;
  97. }
  98. szNewsPath[0] =0;
  99. if(!GetInitString("NEWS", "DIR", szNewsPath))
  100. {
  101. ErrMsg(ghWndMain, "get news init failed!");
  102. PutInitString("NEWS", "DIR", "");
  103. }
  104. szNewsSrc[0] =0;
  105. if(!GetInitString("NEWS", "SRC", szNewsSrc))
  106. {
  107. ErrMsg(ghWndMain, "get news init failed!");
  108. PutInitString("NEWS", "SRC", "");
  109. }
  110. if(GetInitString("NEWS", "DELSRC", tmp))
  111. {
  112. if(tmp[0]=='Y')
  113. gfIsNewsSrcDel =TRUE;
  114. else
  115. gfIsNewsSrcDel =FALSE;
  116. }
  117. else
  118. gfIsNewsSrcDel =FALSE;
  119. for(jys =0; jys <2; jys++)
  120. {
  121. for(i =0; i<4; i++)
  122. {
  123. if(!GetInitString("TIME", HqTimeItems[i+4*jys], tmp))
  124. {
  125. strcpy(tmp, HqTimeDefs[i+4*jys]);
  126. PutInitString("TIME", HqTimeItems[i+4*jys], tmp);
  127. }
  128. else
  129. {
  130. if(strlen(tmp) > 12 || strlen(tmp) <3)
  131. {
  132. ErrMsg(ghWndMain, "time set error!");
  133. return -1;
  134. }
  135. }
  136. *lpHqTimes[i+4*jys] =atoi(strtok(tmp, ":"))*60;
  137. *lpHqTimes[i+4*jys] +=atoi(strtok(NULL, ":"));
  138. }
  139. }
  140. if(!GetInitString("HQ", "DATAPATH", szDataPath))
  141. {
  142. ErrMsg(ghWndMain, "get datapath of [hq] init failed!");
  143. PutInitString("HQ", "DATAPATH", "");
  144. return -1;
  145. }
  146. i =strlen(szDataPath);
  147. if(szDataPath[i-1] =='\')
  148. szDataPath[i-1] =0;
  149. wsprintf(GraphData[0].szGraPath, "%s\SZDATA", szDataPath);
  150. wsprintf(GraphData[1].szGraPath, "%s\SHDATA", szDataPath);
  151. wsprintf(HqDataPath, "%s\HQDATA", szDataPath);
  152. i =0;
  153. while(HqDataFileName[i])
  154. {
  155. sprintf(tmp, "%s\%s.dat", HqDataPath, HqDataFileName[i]);
  156. if(access(tmp,_S_IREAD) <0)
  157. {
  158. wsprintf(temp, "can not access hq_data_file %s:", tmp);
  159. ErrMsg(ghWndMain, temp);
  160. return -1;
  161. }  
  162. *HqDataFile[i] =OpenFile(tmp, &os, OF_SHARE_DENY_NONE|OF_READ);
  163. if (*HqDataFile[i] ==HFILE_ERROR)
  164. {
  165. wsprintf(temp, "can not open hq_data_file %s:", tmp);
  166. ErrMsg(ghWndMain, temp);
  167. return -1;
  168. i++;
  169. }
  170. return 0;
  171. }
  172. void HqExit(void)
  173. {
  174. static BOOL fExit =FALSE;
  175. short jys;
  176. if(fExit ==TRUE) return;
  177. fExit =TRUE;
  178. for(jys =0; jys <2; jys++)
  179. {
  180. if(HqData[jys].lpRefData !=NULL)
  181. GlobalFreePtr(HqData[jys].lpRefData);
  182. if(HqData[jys].lpPreData !=NULL)
  183. GlobalFreePtr(HqData[jys].lpPreData);
  184. //if(HqData[jys].lpbChanged !=NULL)
  185. // GlobalFreePtr(HqData[jys].lpbChanged);
  186. if(MmpData[jys].lpMmp)
  187. GlobalFreePtr(MmpData[jys].lpMmp);
  188. if(GraphData[jys].lpGraHead) GlobalFreePtr(GraphData[jys].lpGraHead);
  189. if(GraphData[jys].lpGraData) GlobalFreePtr(GraphData[jys].lpGraData);
  190. if(hfHq[jys] !=HFILE_ERROR) _lclose(hfHq[jys]);
  191. if(hfMmp[jys] !=HFILE_ERROR) _lclose(hfMmp[jys]);
  192. if(hfMaxMin[jys] !=HFILE_ERROR) _lclose(hfMaxMin[jys]);
  193. }
  194. if(hfDp !=HFILE_ERROR) _lclose(hfDp);
  195. //if(hfZx !=HFILE_ERROR) _lclose(hfZx);
  196. }
  197. int ReadHq(short jys)
  198. {
  199. short recCount;
  200. if(hfHq[jys] <0)
  201. return 0;
  202. _llseek(hfHq[jys], 0, SEEK_SET);
  203. if(_lread(hfHq[jys], &recCount,
  204. sizeof(short)) !=sizeof(short))
  205. {
  206. ErrMsg(ghWndMain, "Error read hqdata file");
  207. return -1;
  208. }
  209. if(HqAllocMem(jys, recCount)<0) return -1;
  210. if(ReadHqAll(jys) <0) return -1;
  211. return 0;
  212. }