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

金融证券系统

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <windowsx.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <malloc.h>
  7. #include <winsock.h>
  8. #include <time.h>
  9. #include <dos.h>
  10. #include <io.h>
  11. #include "appmain.h"
  12. #include "pctcp.h"
  13. #include "hq.h"
  14. #include "hq_cl.h"
  15. #include "hq_tcp.h" 
  16. #include "caption.h"
  17. #include "msg.h"
  18. #include "fx.h"
  19. #include "lzw.h"
  20. #include "zlib.h"
  21. extern BOOL ErrMsg(HWND, LPSTR);
  22. extern HWND ghWndMain, ghWndHq, ghWndXlt, ghWndJlt, ghWndCj, ghWndLitHq,
  23. ghWndMmp, ghWndMaxMin, ghWndStatus, ghWndCaption;
  24. extern HWND ghDlgJy, ghDlgChkUsr, ghDlgChgPwd, ghDlgBuySell, ghDlgCancel,
  25. ghDlgYecx, ghDlgWtcx, ghDlgCjcx;
  26. extern BOOL run_cancelled;
  27. extern int sdHq, sdJy;
  28. extern char * ReadBuf; //[MAX_READ_BUF_SIZE+1];  
  29. extern char szDataPath[128];
  30. extern BOOL IsZsRec(int, int);
  31. extern LPSTR GetError(LPSTR);
  32. extern HFILE hfZx;
  33. extern int FxInit(LPFX Fx);
  34. extern LPFX Fx;
  35. extern BOOL gfOnLine,gfConnecting;
  36. BOOL HqAllocMem(int);
  37. int date_num =-1;
  38. int GraRecalcJgMax();
  39. int GraRecalcLcMax();
  40. int MaxMinChangeHqData(int jys, int maxmin);
  41. int GraGetMinPos(void);
  42. void WriteMsg(LPSTR msg);
  43. int UDP_Read_GetZqmc(LPSTR lpTmp, int len);
  44. int UDP_Read_DataDay(LPSTR lpTmp, int len);
  45. int UDP_Read_ChkUsr(LPSTR lpTmp, int len);
  46. #define  DATA_START_SIGN  -16
  47. extern char *IpSendBuffer,*IpCommitBuffer;
  48. extern unsigned int IpSendLen,IpCommitLen;
  49. void Ip_Commit_Pack(int len,char *buff)
  50. {   
  51. IpCommitLen =len;
  52. memcpy(IpCommitBuffer,buff,len);
  53. }
  54. BOOL  Ip_Send_Pack()
  55. {   
  56. int x,k,this;
  57.     char tmp[100];
  58. if(IpCommitLen ==0)
  59. return TRUE;
  60. if(IpSendLen!=0)
  61. return TRUE;
  62. //if((x=check_socket_status(sdHq))!=0)
  63. // return TRUE;
  64. memcpy(IpSendBuffer,IpCommitBuffer,IpCommitLen);
  65. IpSendLen = IpCommitLen;
  66. IpCommitLen =0;
  67. for(k=0,x=0;k<1000;k++)
  68. {
  69. this = send(sdHq,IpSendBuffer, IpSendLen-x, 0);
  70. if (this == SOCKET_ERROR)
  71. {                          
  72. if ((this =h_errno) != WSAEWOULDBLOCK)
  73. {
  74. strcpy(tmp,"不能接收主机信息!");
  75. ErrMsg(ghWndMain, GetError(tmp));
  76. gfOnLine=FALSE;
  77. return FALSE;
  78. }
  79. }
  80. if(x+this!=(int)IpSendLen)
  81. x+=this;
  82. else
  83. break;
  84. }
  85. IpSendLen =0;
  86. return TRUE;
  87. }   
  88. int UDP_Send_Hq(LPSTR lpString, LPSTR lpHead, int len)
  89. {
  90. char tmp2[MAX_WRITE_BUF_SIZE+1];
  91. int x=0,tlen;
  92. if(!gfOnLine||gfConnecting) return 0;
  93.     
  94.     memset(&tmp2[0],0,sizeof(MAX_WRITE_BUF_SIZE));
  95.     tmp2[0]=DATA_START_SIGN;
  96.     *(int *)&tmp2[1]=len;    
  97. memcpy(&tmp2[1+sizeof(int)], lpString, len);
  98. tlen = 1+sizeof(int) + len;
  99. Ip_Commit_Pack(tlen, &tmp2[0]);
  100. return len;
  101. }
  102. extern FILE *fp;
  103. #define DATA_HEAD_SIZE 3
  104. char dataHead[DATA_HEAD_SIZE+1];
  105. int  HeadPrt=0,dataPrt=0 ;
  106.  
  107. int AnaRecvData(void)
  108. {
  109.   int prt,len,try_times,dataNum,ret;
  110.   char temp[MAX_READ_BUF_SIZE+1];  
  111.    prt=len=try_times=dataNum=0;
  112.    
  113. retry_read:
  114. if(try_times ++>MAX_UDP_TRY_TIMES)
  115. {
  116. ErrMsg(ghDlgJy, "recv error");
  117. DrawTime(RED_SIGN);
  118. return -1;
  119. }
  120. DrawTime(GREEN_SIGN);
  121. memset((char *)&temp[0],0,MAX_READ_BUF_SIZE*sizeof(char));
  122. len = recv(sdHq,(char *)&temp[0],MAX_READ_BUF_SIZE*sizeof(char),0);
  123. if (len == SOCKET_ERROR) 
  124. {
  125. ret =h_errno;
  126. if (ret == WSAEWOULDBLOCK)
  127. goto retry_read;
  128. else if(ret ==WSAEINPROGRESS)
  129. return 0;
  130. else
  131. {
  132. ErrMsg(ghDlgJy, GetError("recv cancel error"));
  133. if(ConnectHost(0, -1)<0)
  134. {
  135. ErrMsg(ghDlgJy, "Reconnect failed");
  136. DrawTime(RED_SIGN);
  137. return -1;
  138. }
  139. }
  140. }
  141. if(len <=0) 
  142. {
  143. DrawTime(RED_SIGN);
  144. return -1;
  145.     } 
  146.     if(len>4)
  147.     {
  148.      if(temp[0]==DATA_START_SIGN && HeadPrt!=0 &&temp[3]>='A' && temp[3]<='Z')
  149.      {
  150.       dataPrt=0; 
  151.       HeadPrt=0;
  152.      }
  153.     }
  154.     while(prt<len)
  155.     {
  156.       if(HeadPrt<DATA_HEAD_SIZE)
  157.       {
  158.       if(HeadPrt==0)
  159.       {
  160.       if(temp[prt]!=DATA_START_SIGN)
  161.       {
  162.       prt++;         //Data frame lose its start mark!
  163. DrawTime(RED_SIGN);
  164.       continue;
  165.       }     
  166.       else
  167.       {
  168. DrawTime(GREEN_SIGN);
  169.           dataHead[HeadPrt]=temp[prt];
  170.           HeadPrt++;
  171.       prt++;
  172.       }
  173.       }
  174.       if(prt>=len)
  175.       {                      //Data frame just include its start mark
  176.       DrawTime(YELLOW_SIGN);
  177.       return 0;
  178.       }
  179.       if(DATA_HEAD_SIZE - HeadPrt >len-prt)
  180.       {                      //data frame not total head info
  181.       memcpy((char*)&dataHead[HeadPrt],(char*)&temp[prt],len-prt);
  182.       HeadPrt+=len-prt;
  183. DrawTime(YELLOW_SIGN);
  184.     return 0;
  185.       }
  186.       else
  187.       {
  188.       memcpy((char*)&dataHead[HeadPrt],(char*)&temp[prt],DATA_HEAD_SIZE - HeadPrt);
  189.       prt+=DATA_HEAD_SIZE - HeadPrt;
  190.       HeadPrt=DATA_HEAD_SIZE;
  191.       }     
  192.       }
  193.      
  194.       if(prt>=len)
  195.       {                          //Just head info
  196. DrawTime(YELLOW_SIGN);
  197.       return 0;
  198.       }
  199.       dataNum=*(int *)&dataHead[1];
  200.       if(dataNum<=0)
  201.       {                          //Data Error,we must lose this bad data frame!
  202. DrawTime(RED_SIGN);
  203.       return -1;
  204.       }
  205.       if(dataNum-dataPrt  > len - prt)
  206.       {                          //Not total data frame
  207.       memcpy((char FAR *)&ReadBuf[dataPrt],(char*)&temp[prt],len-prt);
  208.       dataPrt+=len-prt;
  209. DrawTime(YELLOW_SIGN);
  210.       return 0;
  211.       }
  212.       else
  213.       {
  214.       memcpy((char FAR *)&ReadBuf[dataPrt],(char*)&temp[prt],dataNum-dataPrt);
  215.       prt+=dataNum-dataPrt;
  216.       dataPrt=dataNum;
  217.       UDP_Client_ReadHq();
  218.       dataPrt=0; 
  219.       HeadPrt=0;
  220.       dataNum=0;
  221.       }
  222.      
  223.       if(prt>=len)
  224.       {
  225.       dataPrt=0; 
  226.       HeadPrt=0;
  227.       dataNum=0;
  228. DrawTime(BLACK_SIGN);
  229.       return 0;     
  230.       }
  231.     }
  232.     DrawTime(BLACK_SIGN);
  233.     return 0;    
  234.     
  235. }
  236. int curPos =0, curLen =0;;
  237. int UDP_Client_ReadHq(void)
  238. {
  239. LPSTR lpTmp;
  240. int len;        
  241.     
  242.     len=dataPrt;
  243.     
  244. lpTmp =&ReadBuf[0];
  245. if(!strnicmp(HQ00_HEAD, lpTmp, strlen(HQ00_HEAD)))
  246. UDP_Read_Hq00(lpTmp+strlen(HQ00_HEAD)+sizeof(short), len -strlen(HQ00_HEAD)-sizeof(short));
  247. else if(!strnicmp(HQ01_HEAD, lpTmp, strlen(HQ01_HEAD)))
  248. UDP_Read_Hq01(lpTmp+strlen(HQ01_HEAD)+sizeof(short), len -strlen(HQ01_HEAD)-sizeof(short));
  249. else if(!strnicmp(HQ10_HEAD, lpTmp, strlen(HQ10_HEAD)))
  250. UDP_Read_Hq10(lpTmp+strlen(HQ10_HEAD)+sizeof(short), len -strlen(HQ10_HEAD)-sizeof(short));
  251. else if(!strnicmp(GRA00_HEAD, lpTmp, strlen(GRA00_HEAD)))
  252. UDP_Read_Gra00(lpTmp+strlen(GRA00_HEAD)+sizeof(short), len -strlen(GRA00_HEAD)-sizeof(short));
  253. else if(!strnicmp(GRA01_HEAD, lpTmp, strlen(GRA01_HEAD)))
  254. UDP_Read_Gra01(lpTmp+strlen(GRA01_HEAD)+sizeof(short), len -strlen(GRA01_HEAD)-sizeof(short));
  255. else if(!strnicmp(GRA10_HEAD, lpTmp, strlen(GRA10_HEAD)))
  256. UDP_Read_Gra10(lpTmp+strlen(GRA10_HEAD)+sizeof(short), len -strlen(GRA10_HEAD)-sizeof(short));
  257. else if(!strnicmp(MMP_HEAD, lpTmp, strlen(MMP_HEAD)))
  258. UDP_Read_Mmp(lpTmp+strlen(MMP_HEAD)+sizeof(short), len -strlen(MMP_HEAD)-sizeof(short));
  259. else if(!strnicmp(MAXMIN10_HEAD, lpTmp, strlen(MAXMIN10_HEAD)))
  260. UDP_Read_MaxMin10(lpTmp+strlen(MAXMIN10_HEAD)+sizeof(short), len -strlen(MAXMIN10_HEAD)-sizeof(short));
  261. else if(!strnicmp(DP_HEAD, lpTmp, strlen(DP_HEAD)))
  262. UDP_Read_Dp(lpTmp+strlen(DP_HEAD)+sizeof(short), len -strlen(DP_HEAD)-sizeof(short));
  263. else if(!strnicmp(ZX_HEAD, lpTmp, strlen(ZX_HEAD)))
  264. UDP_Read_Zx(lpTmp+strlen(ZX_HEAD)+sizeof(short), len -strlen(ZX_HEAD)-sizeof(short));
  265. else if(!strnicmp(MSG_HEAD, lpTmp, strlen(MSG_HEAD)))
  266. MessageBox(NULL, lpTmp+strlen(MSG_HEAD)+sizeof(short),"主机信息", MB_OK);
  267. else if(!strnicmp(GETZQMC_HEAD, lpTmp, strlen(GETZQMC_HEAD)))
  268. UDP_Read_GetZqmc(lpTmp+strlen(GETZQMC_HEAD)+sizeof(short), len -strlen(GETZQMC_HEAD)-sizeof(short));
  269. else if(!strnicmp(DATA_DAY_HEAD,lpTmp,strlen(DATA_DAY_HEAD)))
  270. UDP_Read_DataDay(lpTmp+strlen(DATA_DAY_HEAD)+sizeof(short),len -strlen(DATA_DAY_HEAD)-sizeof(short));
  271. else if(!strnicmp(HQ_CHKUSR_HEAD, lpTmp, strlen(HQ_CHKUSR_HEAD)))
  272. UDP_Read_ChkUsr(lpTmp+strlen(HQ_CHKUSR_HEAD)+sizeof(short),len -strlen(HQ_CHKUSR_HEAD)-sizeof(short));
  273. else if(!strnicmp(RECV_FILE_HEAD, lpTmp, strlen(RECV_FILE_HEAD)))
  274. UDP_Recv_File(lpTmp+strlen(RECV_FILE_HEAD),len-strlen(RECV_FILE_HEAD));
  275. else if(!strnicmp(ERROR_HEAD, lpTmp, strlen(ERROR_HEAD)))
  276. MessageBeep(0);
  277. else
  278. {
  279. DrawTime(3);
  280. MessageBeep(0);
  281. }       
  282. curPos =len-curLen;
  283. return 0;
  284. }
  285. int UDP_Read_NotRun(LPSTR lpTmp, int len)
  286. {
  287. HqTime[HqPaintData.jys].fRunning =FALSE;
  288. return 0;
  289. }
  290. extern int CheckTime(BOOL);
  291. int hq_state =-1, hq_jys =0, hq_rec_first =0, hq_rec_count =0;
  292. int UDP_Read_Hq00(LPSTR lpTmp, int len)
  293. {
  294. int i, j, jys;
  295. static int fFirst[2];
  296. time_t ltime;
  297. //struct tm *ptm;
  298. //struct _dostime_t dtime;
  299. jys =*lpTmp;
  300. lpTmp +=1;          
  301. len -=1;
  302. if(len <=0) goto readhq00Err;
  303. HqData[jys].recCount =*(short *)lpTmp;
  304. if(jys ==HqPaintData.jys)
  305. HqPaintData.recCount =HqData[jys].recCount;
  306. if(HqData[jys].recCount >MAX_HQ_REC_COUNT) goto readhq00Err;
  307. lpTmp +=sizeof(short);
  308. len -=sizeof(short);
  309. if(len <sizeof(short)*4) goto readhq00Err;
  310. memcpy(&HqTime[jys], lpTmp, sizeof(HqTime[jys])-sizeof(BOOL));
  311. len -=sizeof(HqTime[jys])-sizeof(BOOL);
  312. lpTmp +=sizeof(HqTime[jys])-sizeof(BOOL);
  313. if(jys ==0 && len >0)
  314. {
  315. memcpy(&ltime, lpTmp, sizeof(time_t));
  316. len -=sizeof(time_t);
  317. lpTmp +=sizeof(time_t);
  318. //ptm =gmtime(&ltime);
  319. //dtime.hour =ptm->tm_hour;
  320. //dtime.minute =ptm->tm_min;
  321. //dtime.second =ptm->tm_sec;
  322. //_dos_settime(&dtime);
  323. date_num =*lpTmp;
  324. lpTmp ++;
  325. len --;
  326. }
  327. HqTime[jys].am_min_count -=HqTime[jys].am_min_start;
  328. HqTime[jys].pm_min_count -=HqTime[jys].pm_min_start;
  329. i =HqTime[0].am_min_count+HqTime[0].pm_min_count+2;
  330. j =HqTime[1].am_min_count+HqTime[1].pm_min_count+2;
  331. if(j>i) i =j;
  332. if(GraphData.lpMinPos ==NULL)
  333. GraphData.lpMinPos =(short *)GlobalAllocPtr(GHND, i*sizeof(short));
  334. else
  335. GraphData.lpMinPos =(short *)GlobalReAllocPtr(GraphData.lpMinPos,
  336. i*sizeof(short), GMEM_MOVEABLE);
  337. if(GraphData.lpMinPos ==NULL)
  338. {
  339. GraphData.minEnd =0;
  340. ErrMsg(NULL,"alloc record data memory failed!");
  341. return FALSE;
  342. }
  343. if(GraphData.lpMinLc ==NULL)
  344. GraphData.lpMinLc =(long *)GlobalAllocPtr(GHND, i*sizeof(long));
  345. else
  346. GraphData.lpMinLc =(long *)GlobalReAllocPtr(GraphData.lpMinLc,
  347. i*sizeof(long), GHND);
  348. if(GraphData.lpMinLc ==NULL)
  349. {
  350. GraphData.minEnd =0;
  351. ErrMsg(NULL,"alloc record data memory failed!");
  352. return FALSE;
  353. }
  354. if(!HqAllocMem(jys))
  355. goto readhq00Err;
  356. if(HqPaintData.fldCount <=0)
  357. {
  358. HqPaintData.fldCount =HQ_FLDS_COUNT;
  359. for(i =0; i<HqPaintData.fldCount; i++)
  360. HqPaintData.fldNum[i] =i;
  361. }
  362. for(i =0; i<HqData[jys].recCount; i++)
  363. HqPaintData.sortData.key[i] =i;
  364. fFirst[jys] =0;
  365. CheckTime(FALSE);
  366. hq_state =1;
  367. return 0;
  368. readhq00Err:
  369. DrawTime(3);
  370. MessageBeep(0);
  371. return -1;
  372. }
  373. int UDP_Read_Hq01(LPSTR lpTmp, int len)
  374. {
  375. int i, jys;
  376. int recCount, recNum;
  377. BOOL isRefresh =FALSE, isSel =FALSE;
  378. jys =(BOOL)*lpTmp;
  379. lpTmp +=1; len -=1;
  380. if(len <=0)
  381. {
  382. KillTimer(ghWndHq, 5);
  383. ErrMsg(ghWndMain, "读HQ01错,数据包长度不足!");
  384.   goto readhq01Err;  
  385. }
  386. if(HqData[jys].recCount <=0)
  387. KillTimer(ghWndHq, 5);
  388. ErrMsg(ghWndMain, "读HQ01错,数据包记录数错!");
  389. goto readhq01Err;
  390. }
  391. isRefresh =(BOOL)*lpTmp;
  392. lpTmp++; len --;
  393. isSel =(BOOL)*lpTmp;
  394. lpTmp++; len --;
  395. recCount =*(short *)lpTmp; 
  396. if(recCount <=0)
  397. {
  398. KillTimer(ghWndHq, 5);
  399. ErrMsg(ghWndMain, "读HQ01错,读记录数为零!");
  400. goto readhq01Err;
  401. }
  402. lpTmp +=sizeof(short);
  403. len -=sizeof(short);
  404. if(len <=0) goto readhq01Err;   
  405. for(i =0; i<recCount; i++)
  406. {
  407. if(len <0) break;
  408. recNum =*(short *)lpTmp;
  409. len-=2; lpTmp +=2;
  410. if(recNum >=HqData[jys].recCount)
  411. {
  412. ErrMsg(ghWndMain, "读HQ01错,读记录编号大于记录数!");
  413. goto readhq01Err;
  414. }   
  415. if(!isRefresh)
  416. {
  417. memcpy(&HqData[jys].lpPreData[recNum],
  418. lpTmp, sizeof(HQ_PRE_DATA));
  419. len -=sizeof(HQ_PRE_DATA);
  420. lpTmp +=sizeof(HQ_PRE_DATA);
  421. }
  422. memcpy(&HqData[jys].lpRefData[recNum],
  423. lpTmp, sizeof(HQ_REF_DATA));
  424. len -=sizeof(HQ_REF_DATA);
  425. lpTmp +=sizeof(HQ_REF_DATA);
  426. HqData[jys].isReadOK[recNum] =TRUE;
  427. }
  428. if(IsWindowVisible(ghWndHq))
  429. SendMessage(ghWndHq, WM_HQ_REFRESH, jys, 0L);
  430. return 0;
  431. readhq01Err:
  432. DrawTime(3);
  433. MessageBeep(0);
  434. return -1;
  435. }
  436. int UDP_Read_Hq10(LPSTR lpTmp, int len)
  437. {
  438. int i, jys;
  439. int rec_count, rec_num;
  440. float oldjg;
  441. //long lc;
  442. jys =*lpTmp++;
  443. len --;
  444. if(jys >1) goto readhq10Err;
  445. rec_count =*(short *)lpTmp; 
  446. lpTmp+=2; len -=2;
  447. if(rec_count >HqData[jys].recCount || rec_count <=0) goto readhq10Err;
  448. //if(rec_count >MAX_HQ_SENDCOUNT) goto readhq10Err;
  449. if(len <rec_count*(int)sizeof(HQ_REF_DATA))
  450. goto readhq10Err;
  451. //memcpy(&HqData[jys].lpRefData[rec_first], rec_count*sizeof(HQ_REF_DATA));
  452. for(i =0; i<rec_count; i++)
  453. {
  454. if(len <=0) break;
  455. rec_num =*(short *)lpTmp;
  456. if(rec_num >HqData[jys].recCount) break;
  457. lpTmp+=sizeof(short);
  458. len -=sizeof(short);
  459. oldjg =HqData[jys].lpRefData[rec_num].zjjg;
  460. memcpy(&HqData[jys].lpRefData[rec_num], lpTmp, sizeof(HQ_REF_DATA));
  461. HqData[jys].isJgChanged[rec_num] =(BOOL)((HqData[jys].lpRefData[rec_num].zjjg-oldjg)*100);
  462. if(HqData[jys].isJgChanged[rec_num])    MessageBeep(0);
  463. len -=sizeof(HQ_REF_DATA);
  464. lpTmp +=sizeof(HQ_REF_DATA);
  465. HqData[jys].isLcChanged[rec_num] =TRUE;
  466. }
  467. if(IsWindowVisible(ghWndHq))
  468. SendMessage(ghWndHq, WM_HQ_REFRESH, jys, 0L);
  469. else if(IsWindowVisible(ghWndLitHq))
  470. {
  471. SendMessage(ghWndLitHq, WM_READ_OK, jys, 0L);
  472. }
  473. return 0;
  474. readhq10Err:
  475. DrawTime(3);
  476. return -1;
  477. }
  478. ////////////////////////////////////////////////////////////////////////////
  479. //Function:This func receive deatial pricr voulmn file head information data
  480. //         from server,then get memory according to minTotal data.
  481. //
  482. int UDP_Read_Gra00(LPSTR lpTmp, int len)
  483. {
  484. int jys;
  485. jys =*lpTmp;
  486. if(GraphData.jys !=jys) return 0;
  487. lpTmp +=1; len -=1;
  488. if(len <=0) return -1;
  489. memcpy(&GraphData.GraHead, lpTmp, sizeof(GRA_HEAD));
  490. //GraphData.GraHead.zrsp =HqData[jys].lpPreData[GraphData.recNum].zrsp;
  491. if(GraphData.lpGraData ==NULL)
  492. GraphData.lpGraData =(GRA_DATA huge *)GlobalAllocPtr(GHND,
  493. (long)GraphData.GraHead.minTotal*sizeof(GRA_DATA));
  494. else
  495. GraphData.lpGraData =(GRA_DATA huge *)GlobalReAllocPtr(
  496. GraphData.lpGraData,(long)GraphData.GraHead.minTotal*sizeof(GRA_DATA),
  497. GMEM_MOVEABLE);
  498. if(GraphData.lpGraData ==NULL)
  499. {
  500. ErrMsg(NULL, "不能分配成交明细数据内存!");
  501. return -1;
  502. }
  503. GraRecalcJgMax();
  504. GraRecalcLcMax();
  505. return 0;
  506. }
  507. ////////////////////////////////////////////////////////////////////////
  508. //This func to get data info from server,then compute it
  509. //
  510. int UDP_Read_Gra01(LPSTR lpTmp, int len)
  511. {
  512. int min_num, min_count;
  513. char temp[128];
  514. HFILE hf;
  515. OFSTRUCT os;
  516. if(GraphData.lpGraData ==NULL)
  517. return 0;
  518. if(*lpTmp++ !=GraphData.jys)
  519. return -1;
  520. len -=1;
  521. if(len <=0) return -1;
  522. if(*(int *)lpTmp !=GraphData.recNum)
  523. return -1;
  524. lpTmp +=sizeof(int);
  525. len -=sizeof(int);
  526. if(len <=0) return -1;
  527. min_count =*(int *)lpTmp; //data num this times
  528. lpTmp +=sizeof(int);
  529. len -=sizeof(int);
  530. if(len <=0) return -1;
  531. min_num =*(int *)lpTmp;   //Last data tail
  532. lpTmp +=sizeof(int);
  533. len -=sizeof(int);
  534. if(len <=0) return -1;
  535. if(min_num +min_count >GraphData.GraHead.minTotal) return -1;
  536. min_count =len/sizeof(GRA_DATA);
  537. memcpy(&GraphData.lpGraData[min_num], lpTmp, min_count*sizeof(GRA_DATA));
  538. //GraphData.GraHead.zrsp =HqData[GraphData.jys].lpPreData[GraphData.recNum].zrsp;
  539. GraphData.minEndPrev =min_num;
  540. GraphData.minEnd =min_num+min_count;
  541. GraphData.fRefreshDraw =TRUE;
  542. GraGetMinPos();
  543. wsprintf(temp, "%s\%s.dat", szDataPath, HqData[GraphData.jys].lpPreData[GraphData.recNum].zqdm);
  544. hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_READWRITE);
  545. if(hf ==HFILE_ERROR)
  546. hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_CREATE|OF_WRITE);
  547. if(hf !=HFILE_ERROR)
  548. {
  549. if(_lwrite(hf, &GraphData.GraHead, sizeof(GraphData.GraHead))
  550. ==sizeof(GraphData.GraHead))
  551. {
  552. if(_llseek(hf, (long)sizeof(GRA_HEAD)
  553. +(long)sizeof(GRA_DATA)*min_num, SEEK_SET)
  554. ==HFILE_ERROR)
  555. {
  556. _llseek(hf, sizeof(GRA_HEAD), SEEK_SET);
  557. _hwrite(hf, &GraphData.lpGraData[0],
  558. (long)sizeof(GRA_DATA)*min_num);
  559. }
  560. _hwrite(hf, &GraphData.lpGraData[min_num],
  561. (long)sizeof(GRA_DATA)*min_count);
  562. }
  563. _lclose(hf);
  564. }
  565. GraphData.fRefreshDraw =FALSE;
  566. if(IsWindowVisible(ghWndXlt))
  567. {
  568. if(GraRecalcJgMax() ==0)
  569. SendMessage(ghWndXlt, WM_READ_OK, 1, 0L);
  570. else SendMessage(ghWndXlt, WM_READ_OK, 0, 0L);
  571. if(GraRecalcLcMax() ==0)
  572. InvalidateRect(ghWndJlt, NULL, TRUE);
  573. else
  574. InvalidateRect(ghWndJlt, NULL, FALSE);
  575. SendMessage(ghWndCj, WM_READ_OK, 0, 0L);
  576. }
  577. return 0;
  578. }
  579. int UDP_Read_Gra10(LPSTR lpTmp, int len)
  580. {
  581. int min_num, min_count;
  582. char temp[128];
  583. HFILE hf;
  584. OFSTRUCT os;
  585. GRA_HEAD GraHead;
  586. if(GraphData.lpGraData ==NULL) return 0;
  587. if(*lpTmp++ !=GraphData.jys !=0) goto readgra10Err;
  588.     
  589. len -=1;
  590. if(len <=0) goto readgra10Err;
  591. if(*(int *)lpTmp !=GraphData.recNum) goto readgra10Err;
  592. lpTmp+=sizeof(int);
  593. len-=sizeof(int);
  594. min_count =*(int *)lpTmp;
  595. lpTmp +=sizeof(int);
  596. len -=sizeof(int);
  597. if(len <=0) goto readgra10Err;
  598. min_num =*(int *)lpTmp;
  599. if(min_num !=GraphData.minEnd)
  600. {
  601. MessageBeep(0);
  602. //goto readgra10Err;
  603. }
  604. lpTmp +=sizeof(int);
  605. len -=sizeof(int);
  606. if(len <=0) goto readgra10Err;
  607. //memcpy(&GraHead, lpTmp, sizeof(GRA_HEAD));
  608. //lpTmp +=sizeof(GRA_HEAD);
  609. //len -=sizeof(GRA_HEAD);
  610. min_count =len/sizeof(GRA_DATA);
  611. GraphData.lpGraData =(GRA_DATA huge *)GlobalReAllocPtr(
  612. GraphData.lpGraData,
  613. (long)(min_num+min_count)*sizeof(GRA_DATA),
  614. GMEM_MOVEABLE);
  615. if(GraphData.lpGraData ==NULL)
  616. {
  617. ErrMsg(NULL, "Gra10: alloc mem failed");
  618. return -1;
  619. }
  620. memcpy(&GraphData.lpGraData[min_num], lpTmp, min_count*sizeof(GRA_DATA));
  621. GraphData.minEndPrev =min_num;
  622. GraphData.GraHead.minTotal =GraphData.minEnd =min_num+min_count;
  623. GraphData.fRefreshDraw =TRUE;
  624. GraGetMinPos();
  625. if(IsWindowVisible(ghWndXlt))
  626. {
  627. if(GraRecalcJgMax() ==0)
  628. SendMessage(ghWndXlt, WM_READ_OK, 1, 0L);
  629. else SendMessage(ghWndXlt, WM_READ_OK, 0, 0L);
  630. if(GraRecalcLcMax() ==0)
  631. InvalidateRect(ghWndJlt, NULL, TRUE);
  632. else
  633. InvalidateRect(ghWndJlt, NULL, FALSE);
  634. InvalidateRect(ghWndCj, NULL, TRUE);
  635. }
  636. wsprintf(temp, "%s\%s.dat", szDataPath, HqData[GraphData.jys].lpPreData[GraphData.recNum].zqdm);
  637. hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_READ);
  638. if(hf !=HFILE_ERROR)
  639. {
  640. memcpy(&GraHead, &GraphData.GraHead, sizeof(GraHead));
  641. GraHead.minTotal =GraphData.minEnd;
  642. if(_lwrite(hf, &GraHead, sizeof(GraHead)) ==sizeof(GraHead))
  643. {
  644. if(_llseek(hf, (long)sizeof(GRA_HEAD)
  645. +(long)sizeof(GRA_DATA)*min_num, SEEK_SET)
  646. ==HFILE_ERROR)
  647. {
  648. _llseek(hf, sizeof(GRA_HEAD), SEEK_SET);
  649. _hwrite(hf, &GraphData.lpGraData[0],
  650. (long)sizeof(GRA_DATA)*min_num);
  651. }
  652. _hwrite(hf, &GraphData.lpGraData[min_num],
  653. (long)sizeof(GRA_DATA)*min_count);
  654. }
  655. _lclose(hf);
  656. }
  657. GraphData.fRefreshDraw =FALSE;
  658. if(IsWindowVisible(ghWndXlt))
  659. {
  660. if(GraRecalcJgMax() ==0)
  661. SendMessage(ghWndXlt, WM_READ_OK, 1, 0L);
  662. else SendMessage(ghWndXlt, WM_READ_OK, 0, 0L);
  663. if(GraRecalcLcMax() ==0)
  664. InvalidateRect(ghWndJlt, NULL, TRUE);
  665. else
  666. InvalidateRect(ghWndJlt, NULL, FALSE);
  667. InvalidateRect(ghWndCj, NULL, TRUE);
  668. }
  669. return 0;
  670. readgra10Err:
  671. DrawTime(3);
  672. return -1;      
  673. }
  674. int UDP_Read_Mmp(LPSTR lpTmp, int len)
  675. {
  676. int jys;
  677. jys =*lpTmp;
  678. lpTmp ++;          
  679. len --;
  680. if(len <=0) goto readmmpErr;
  681. //if(*(int *)lpTmp !=rec_num) goto sendmmp;
  682. len -=sizeof(int);
  683. lpTmp +=sizeof(int);
  684.     
  685. if(len !=sizeof(MMP_DATA)-2*sizeof(int)) goto readmmpErr;
  686. memcpy(&MmpData.jwBuy[0], lpTmp, sizeof(MMP_DATA)-2*sizeof(int));
  687. InvalidateRect(ghWndMmp, NULL, TRUE);
  688. return 0;
  689. readmmpErr:
  690. DrawTime(3);
  691. return -1;
  692. }
  693. int UDP_Read_MaxMin10(LPSTR lpTmp, int len)
  694. {
  695. int jys, i, j, recCount;
  696. int maxmin;
  697. char  WriteBuf[MAX_WRITE_BUF_SIZE+1];
  698.    
  699. jys =*lpTmp;
  700. if(jys !=GraphData.jys) return 0;
  701. lpTmp +=1;          
  702. len -=1;
  703. maxmin =*lpTmp;
  704. if(maxmin >1)
  705. {
  706. MessageBeep(0);
  707. return -1;
  708. }
  709. lpTmp++;
  710. len --;
  711. if(len <sizeof(MAXMIN_DATA)) goto readmaxmin10Err;
  712. memcpy(&MaxMinData[jys][maxmin], lpTmp, sizeof(MAXMIN_DATA));
  713. MaxMinChangeHqData(jys, maxmin);
  714. strcpy(WriteBuf, GETZQMC_HEAD);
  715. len =strlen(WriteBuf);
  716. WriteBuf[len++] =jys;
  717. *(short *)&WriteBuf[len] =0;
  718. len +=sizeof(short);
  719. recCount =0;
  720. for(i =0; i<4; i++)
  721. {
  722. for(j =0; j<10; j++)
  723. {
  724. if(HqData[jys].lpPreData[MaxMinData[jys][maxmin].recNum[i][j]].zqmc[0] ==0)
  725. {
  726. *(short *)&WriteBuf[len] =MaxMinData[jys][maxmin].recNum[i][j];
  727. len +=sizeof(short);
  728. recCount ++;
  729. }
  730. }
  731. }
  732. if(recCount)
  733. {
  734. *(short *)&WriteBuf[strlen(GETZQMC_HEAD)+1] =recCount;
  735. UDP_Send_Hq(WriteBuf, GETZQMC_HEAD, len);
  736. }       
  737. InvalidateRect(ghWndMaxMin, NULL, TRUE);
  738. return 0;
  739. readmaxmin10Err:
  740. DrawTime(3);
  741. return -1;
  742. }
  743. int UDP_Read_GetZqmc(LPSTR lpTmp, int len)
  744. {
  745. int jys, i, recCount, recNum;
  746. jys =*lpTmp++;
  747. recCount =*(short *)lpTmp;
  748. lpTmp +=sizeof(short);
  749. for(i =0; i<recCount; i++)
  750. {
  751. recNum =*(short *)lpTmp;
  752. lpTmp+=sizeof(short);
  753. if(recNum >HqData[jys].recCount) return -1;
  754. strncpy(HqData[jys].lpPreData[recNum].zqmc, lpTmp, MAX_ZQMC_SIZE);
  755. lpTmp +=MAX_ZQMC_SIZE;
  756. }
  757. if(IsWindowVisible(ghWndMaxMin))
  758. InvalidateRect(ghWndMaxMin, NULL, FALSE);
  759. return 0;
  760. }
  761. int UDP_Read_Dp(LPSTR lpTmp, int len)
  762. {
  763. int jys;
  764. if(len <sizeof(DpData)) goto readdpErr;
  765. memcpy(&DpData, lpTmp, sizeof(DpData));
  766. for(jys =0; jys<2; jys ++)
  767. if(DpData[jys].npbl >(float)1 || DpData[jys].npbl <(float)0)
  768. DpData[jys].npbl =(float)0.5;
  769. if(ghWndStatus) InvalidateRect(ghWndStatus, NULL, FALSE);
  770. return 0;
  771. readdpErr:
  772. DrawTime(3);
  773. return -1;
  774. }
  775. int UDP_Send_Zx(void)
  776. {
  777. int len;
  778. char  WriteBuf[MAX_WRITE_BUF_SIZE+1];
  779. strcpy(WriteBuf, ZX_HEAD);
  780. len =strlen(WriteBuf);
  781. *(long *)&WriteBuf[len] =ZxData.len;
  782. len +=sizeof(long);
  783. return UDP_Send_Hq(WriteBuf, ZX_HEAD, len);
  784. }
  785. int UDP_Send_Stock_Info(STOCK_INFO_FRAME *StockInfoFrame)
  786. {
  787.    int len;
  788.    char  WriteBuf[MAX_WRITE_BUF_SIZE+1];
  789.    
  790.    strcpy(WriteBuf,STOCK_INFO_HEAD);
  791.    len=strlen(STOCK_INFO_HEAD);
  792.    memcpy(&WriteBuf[len],StockInfoFrame,sizeof(STOCK_INFO_FRAME));
  793.    len+=sizeof(STOCK_INFO_FRAME);
  794.    return UDP_Send_Hq(WriteBuf,STOCK_INFO_HEAD,len);
  795. }
  796. int UDP_Read_Zx(LPSTR lpTmp, int len)
  797. {
  798.     char temp[80];
  799.     OFSTRUCT os;
  800.     
  801. strcpy(temp, szDataPath);
  802. strcat(temp, "\zx.txt");
  803. hfZx =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_READWRITE);
  804. if(hfZx ==HFILE_ERROR) return(-1);
  805. if(len <=0)
  806. {
  807. _lclose(hfZx);
  808. return(-1);
  809. }
  810. _llseek(hfZx, 0, SEEK_END);
  811. ZxData.len +=len;
  812. _lwrite(hfZx, lpTmp, len);
  813. _lclose(hfZx);
  814. SendMessage(ghWndCaption, WM_USER+1, 0, (LPARAM)(ZxData.len-len));
  815. return 0;
  816. }
  817. int UDP_Send_Hq00(int jys, BOOL fFirst, int fRefresh, int fSel, int recCount, short *recList)
  818. {
  819. int i, len, rec_num, list_count;
  820. char WriteBuf[MAX_WRITE_BUF_SIZE+1];
  821. //hq_state =0;
  822. //hq_jys =jys;
  823. KillTimer(ghWndHq, 5);
  824. SetTimer(ghWndHq, 5, 5000, NULL);
  825. strcpy(WriteBuf, HQ00_HEAD);
  826. len =strlen(HQ00_HEAD);
  827. WriteBuf[len++] =CLIENT_VERSION;
  828. WriteBuf[len++] =(BYTE)jys;
  829. if(HqData[jys].isReadOK ==NULL || HqData[jys].isReadOK[0] ==FALSE)
  830. fFirst =TRUE;
  831. WriteBuf[len++] =(BYTE)fFirst;
  832. WriteBuf[len++] =(BYTE)fRefresh;
  833. WriteBuf[len++] =(BYTE)fSel;
  834. *(short *)&WriteBuf[len] =recCount;
  835. len +=sizeof(short);
  836. if(!fSel) list_count =1;
  837. else list_count =recCount;
  838. memcpy(&WriteBuf[len], recList, sizeof(short)*list_count);
  839. len +=sizeof(short)*list_count;
  840. if(fRefresh)
  841. {
  842. for(i =0; i<recCount; i++)
  843. {
  844. if(fSel) rec_num =recList[i];
  845. else rec_num =recList[0]+i;
  846. *(long *)&WriteBuf[len] =HqData[jys].lpRefData[rec_num].cjss;
  847. len +=sizeof(long);
  848. }
  849. }
  850. return UDP_Send_Hq(&WriteBuf[0], HQ00_HEAD, len);
  851. }
  852. ////////////////////////////////////////////////////////////////////////
  853. //Function :to draw price-volumn diagram per min,This func open deatail 
  854. //           data file according to stock code,compute it,biuld integer
  855. //  set diagram data.then send a requst to server to get other 
  856. //           deatail voulmn file on server
  857. //
  858. //
  859. int UDP_Send_Gra00(int jys, int rec_num)
  860. {
  861. HFILE hf;
  862. OFSTRUCT os;
  863. char temp[100];
  864. int len = 0;   
  865. char  WriteBuf[MAX_WRITE_BUF_SIZE+1];
  866.                 
  867. KillTimer(ghWndHq, 5);
  868. GraphData.jys =jys;
  869. GraphData.recNum =rec_num;
  870. GraphData.minEndPrev =0;
  871. GraphData.minEnd =0;
  872. GraphData.GraHead.dateNum =date_num;
  873.     
  874. wsprintf(temp, "%s\%s.dat", szDataPath, HqData[jys].lpPreData[rec_num].zqdm);
  875. hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_READ);
  876. if(hf !=HFILE_ERROR)
  877. {
  878. if(_lread(hf, &GraphData.GraHead, sizeof(GraphData.GraHead))
  879. ==sizeof(GraphData.GraHead))
  880. {
  881. if(gfOnLine && GraphData.GraHead.dateNum !=date_num)
  882. {
  883. GraphData.GraHead.dateNum =date_num;
  884. GraphData.minEnd =GraphData.minEndPrev =GraphData.GraHead.minTotal =0;
  885. goto read_ok;
  886. }
  887. if(GraphData.GraHead.minTotal)
  888. {
  889. if(GraphData.lpGraData ==NULL)
  890. GraphData.lpGraData =(GRA_DATA huge *)GlobalAllocPtr(GHND,
  891. (long)GraphData.GraHead.minTotal*sizeof(GRA_DATA));
  892. else
  893. GraphData.lpGraData =(GRA_DATA huge *)GlobalReAllocPtr(
  894. GraphData.lpGraData,
  895. (long)GraphData.GraHead.minTotal*sizeof(GRA_DATA),
  896. GHND);
  897. if(GraphData.lpGraData !=NULL)
  898. {
  899. if(_hread(hf, &GraphData.lpGraData[0],
  900. (long)GraphData.GraHead.minTotal*sizeof(GRA_DATA))
  901. !=(long)GraphData.GraHead.minTotal*sizeof(GRA_DATA))
  902. {
  903. GraphData.GraHead.dateNum =date_num;
  904. GraphData.minEndPrev =GraphData.minEnd =0;
  905. }
  906. else
  907. {
  908. GraphData.minEndPrev =0;
  909. GraphData.minEnd =GraphData.GraHead.minTotal;
  910. GraGetMinPos();
  911. GraRecalcJgMax();
  912. GraRecalcLcMax();
  913. if(IsWindowVisible(ghWndXlt))
  914. {
  915. SendMessage(ghWndJlt, WM_READ_OK, 0, 0L);
  916. if(!IsZsRec(GraphData.jys, GraphData.recNum))
  917. SendMessage(ghWndCj, WM_READ_OK, 0, 0L);
  918. }
  919. }
  920. }
  921. else
  922. {
  923. ErrMsg(NULL, "Alloc mem failed!");
  924. _lclose(hf);
  925. return -1;
  926. }
  927. }
  928. }
  929. read_ok:
  930. _lclose(hf);
  931. }                       
  932. //GraphData.GraHead.zrsp =HqData[jys].lpPreData[rec_num].zrsp;
  933. strcpy(WriteBuf, GRA00_HEAD);
  934. len =strlen(WriteBuf);
  935. WriteBuf[len++] =jys;
  936. WriteBuf[len++] =(BYTE)GraphData.GraHead.dateNum;
  937. *((int *)&WriteBuf[len]) =rec_num;
  938. len +=sizeof(int);
  939. *(short *)&WriteBuf[len] =GraphData.minEnd;
  940. len +=sizeof(short);
  941. return UDP_Send_Hq(&WriteBuf[0], GRA00_HEAD, len);
  942. }
  943. int UDP_Send_Gra01(void)//int min_first, int min_count)
  944. {
  945. int len= 0;   
  946. char  WriteBuf[MAX_WRITE_BUF_SIZE+1];
  947. strcpy(WriteBuf, GRA01_HEAD);
  948. len =strlen(WriteBuf);
  949. WriteBuf[len++] =(BYTE)GraphData.jys;
  950. *((int *)&WriteBuf[len]) =GraphData.recNum;
  951. len +=sizeof(int);
  952. *((int *)&WriteBuf[len]) =GraphData.minEnd;
  953. len +=sizeof(int);
  954. return UDP_Send_Hq(&WriteBuf[0], GRA00_HEAD, len);
  955. }
  956. /////////////////////////////////////////////////////////
  957. int CompString(LPSTR lpstr1, LPSTR lpstr2)
  958. {
  959. int len;
  960. if(*lpstr1 =='-' && *lpstr2 !='-') return -1;
  961. if(*lpstr1 !='-' && *lpstr2 =='-') return 1;
  962. len =strlen(lpstr1) -strlen(lpstr2);
  963. if(*lpstr1 =='-' && *lpstr2 =='-')
  964. {
  965. if(len) return 0-len;
  966. return (0-strcmp(lpstr1, lpstr2));
  967. }
  968. else
  969. {
  970.     if(len) return len;
  971. return strcmp(lpstr1, lpstr2);
  972. }
  973. }
  974. int StringSub(LPSTR lpstr1, LPSTR lpstr2, LPSTR lpres, int s_type)
  975. {
  976. int n;
  977. double f;
  978. long l;
  979. switch(s_type)
  980. {
  981. case SSUB_FLOAT:
  982. f =atof(lpstr1)-atof(lpstr2);
  983. wsprintf(lpres, "%f", (float)f);
  984. break;
  985. case SSUB_INT:
  986. n =atoi(lpstr1)-atoi(lpstr2);
  987. wsprintf(lpres, "%d", n);
  988. break;
  989. case SSUB_LONG:
  990. l =atol(lpstr1)-atol(lpstr2);
  991. wsprintf(lpres, "%ld", l);
  992. break;
  993. default:
  994. return -1;
  995. }
  996. return 0;
  997. }
  998. int GraGetMinPos(void)
  999. {
  1000. int i, j;
  1001. int tim, tim1;
  1002. long lc;
  1003. if(GraphData.minEnd <=0)
  1004. {
  1005. GraphData.minCount =0;
  1006. return 0;
  1007. }
  1008. tim =GraphData.lpGraData[0].tim;
  1009. tim1 =tim;
  1010. GraphData.minCount =0;
  1011. GraphData.lpMinPos[0] =0;
  1012. for(i =0; i<GraphData.minEnd;)
  1013. {      
  1014.     
  1015. lc =0;
  1016. while(i<GraphData.minEnd)
  1017. {
  1018. tim1 =GraphData.lpGraData[i].tim;
  1019. if(tim1 >tim)
  1020. {
  1021. //i++;
  1022. //tim=tim1;
  1023. break;
  1024. }
  1025. lc +=GraphData.lpGraData[i].lc;
  1026. i++;
  1027. }
  1028. if(i-1<GraphData.minEnd && tim >0)
  1029. {
  1030. j =i-1;
  1031. GraphData.lpMinLc[GraphData.minCount] =lc;
  1032. GraphData.lpMinPos[GraphData.minCount++] =j;
  1033. }
  1034. tim =tim1;
  1035. }
  1036. return 0;
  1037. }
  1038. int GraRecalcJgMax()
  1039. {
  1040. int i;
  1041. float min_val, max_val, f1;
  1042. if(GraphData.minCount <=0) return 0;
  1043. min_val =max_val =GraphData.lpGraData[0].zjjg;
  1044. //max_val =GraphData.GraHead.zgjg;
  1045. for(i =1; i<GraphData.minCount && i<GraphData.minEnd; i++)
  1046. {
  1047. if(min_val >GraphData.lpGraData[GraphData.lpMinPos[i]].zjjg)
  1048. min_val =GraphData.lpGraData[GraphData.lpMinPos[i]].zjjg;
  1049. if(max_val <GraphData.lpGraData[GraphData.lpMinPos[i]].zjjg)
  1050. max_val =GraphData.lpGraData[GraphData.lpMinPos[i]].zjjg;
  1051. }
  1052. if(min_val ==0) min_val -=(float)0.001;
  1053. if(max_val ==0) max_val +=(float)0.001;
  1054. //min_val =(float)(min_val*(1-0.001)-0.01);
  1055. //max_val =(float)(max_val*(1+0.001)+0.01);
  1056. if(max_val <0) max_val *=-1;
  1057. if(min_val <0) min_val *=-1;
  1058. if(min_val >max_val) max_val =min_val;
  1059. f1 =0;
  1060. /*while(1)
  1061. {
  1062. if((f1+0.05)*5>max_val)
  1063. {
  1064. max_val =(float)((f1+0.05)*5);
  1065. f1+=(float)0.05;
  1066. break;
  1067. }
  1068. f1+=(float)0.05;
  1069. }
  1070. */
  1071. max_val =max_val+GraphData.GraHead.zrsp*(float)0.002;
  1072. GraphData.GraHead.zgjg =max_val;
  1073. GraphData.GraHead.zdjg =0-max_val;
  1074. return 0;
  1075. }
  1076. int GraRecalcLcMax()
  1077. {
  1078. int i;
  1079. long max_val =GraphData.lpMinLc[0];
  1080. if(GraphData.minCount <=0) return 0;
  1081. for(i =1; i<GraphData.minCount && i<GraphData.minEnd; i++)
  1082. {
  1083. if(max_val <GraphData.lpMinLc[i])
  1084. max_val =GraphData.lpMinLc[i];
  1085. }
  1086. max_val =(long)((double)max_val*(1+0.2)+5);
  1087. GraphData.GraHead.zglc =max_val;
  1088. return 0;
  1089. }
  1090. int MaxMinChangeHqData(int jys, int maxmin)
  1091. {
  1092. int i, j;
  1093. for(i =0; i<4; i++)
  1094. for(j =0; j<10; j++)
  1095. {
  1096. /////////////
  1097. if(MaxMinData[jys][maxmin].recNum[i][j] >=HqData[jys].recCount)
  1098. return -1;
  1099. HqData[jys].lpRefData[MaxMinData[jys][maxmin].recNum[i][j]].zjjg
  1100. =MaxMinData[jys][maxmin].MaxMin[i][j].zjjg;
  1101. HqData[jys].lpRefData[MaxMinData[jys][maxmin].recNum[i][j]].zdf
  1102. =MaxMinData[jys][maxmin].MaxMin[i][j].zdf;
  1103. HqData[jys].lpRefData[MaxMinData[jys][maxmin].recNum[i][j]].cjss
  1104. =MaxMinData[jys][maxmin].MaxMin[i][j].cjss;
  1105. }
  1106. return 0;
  1107. }
  1108. void UDP_Send_Exit(void)
  1109. {
  1110. int i, len,x,tlen;
  1111. char temp[40];
  1112. temp[0]=DATA_START_SIGN;
  1113. *(int*)&temp[1]=strlen(CLNT_EXIT);
  1114. memcpy(&temp[1+sizeof(int)],CLNT_EXIT,strlen(CLNT_EXIT));
  1115. tlen =1+sizeof(int)+strlen(CLNT_EXIT);
  1116. for(i =0,x=0; i<10; i++)
  1117. {
  1118. len =send(sdHq, &temp[x],tlen -x, 0);
  1119. if (len == SOCKET_ERROR)
  1120. {
  1121. if (h_errno == WSAEWOULDBLOCK)
  1122. continue;
  1123. else 
  1124. return;
  1125. }
  1126. if(x+len!=tlen)
  1127. x+=len;
  1128. else
  1129. break;
  1130. }
  1131. }
  1132. int UDP_Read_DataDay(LPSTR lpTmp, int len)
  1133. {
  1134. char temp[128];
  1135. char jys;
  1136. int gp_rec_num,sendCount,sendNum,i;
  1137. HFILE hf;
  1138. OFSTRUCT os;
  1139. DAY_DATA DataDayBuff;
  1140. jys=*lpTmp++;
  1141. len -=1;
  1142. if(len <=0) goto ReadDataDayErr;
  1143. gp_rec_num=*(int *)lpTmp;
  1144. lpTmp +=sizeof(int);
  1145. len -=sizeof(int);
  1146. if(len <=0) goto ReadDataDayErr;
  1147. sendCount=*(int *)lpTmp;
  1148. lpTmp +=sizeof(int);
  1149. len -=sizeof(int);
  1150. if(len <=0) goto ReadDataDayErr;
  1151. sendNum=*(int *)lpTmp;
  1152. lpTmp +=sizeof(int);
  1153. len -=sizeof(int);
  1154. if(len <=0) goto ReadDataDayErr;
  1155. wsprintf(temp, "%s\%s.day",szDataPath, HqData[GraphData.jys].lpPreData[GraphData.recNum].zqdm);
  1156. hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_READWRITE);
  1157. if(hf ==HFILE_ERROR)
  1158. hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_CREATE|OF_WRITE);
  1159. if(hf !=HFILE_ERROR)
  1160. {
  1161. for(i=0;i<sendCount;i++) 
  1162. {
  1163.        memset(&DataDayBuff,0,sizeof(DAY_DATA));
  1164.        memcpy(&DataDayBuff,lpTmp,sizeof(DAY_DATA));
  1165.        lpTmp+=sizeof(DAY_DATA);
  1166.        len-=sizeof(DAY_DATA);
  1167.        if(len<0)
  1168.        {
  1169.     goto  ReadDataDayErr;
  1170.        }
  1171.        _llseek(hf, 0l, SEEK_END);
  1172.        _lwrite(hf, &DataDayBuff, sizeof(DAY_DATA));
  1173. }
  1174. _lclose(hf);
  1175. }
  1176. if(IsWindowVisible(ghWndFx))
  1177. {   
  1178.     Fx->IsDataOk=FALSE;
  1179. InvalidateRect(ghWndFx, NULL, TRUE);
  1180. }
  1181. return TRUE;
  1182. ReadDataDayErr:
  1183. return FALSE;
  1184. }
  1185. int UDP_Send_DataDay(int jys, int rec_num)
  1186. {
  1187. int len = 0,data_rec_end;   
  1188.     char temp[128];
  1189. char  WriteBuf[MAX_WRITE_BUF_SIZE+1];
  1190.     
  1191. HFILE hf;
  1192. OFSTRUCT os;
  1193. wsprintf(temp, "%s\%s.day", szDataPath,HqData[GraphData.jys].lpPreData[GraphData.recNum].zqdm);
  1194. hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_READWRITE);
  1195. if(hf ==HFILE_ERROR)
  1196. data_rec_end=0;
  1197.     else
  1198.     {
  1199. data_rec_end=(int)_llseek(hf, 0l, SEEK_END)/sizeof(DAY_DATA);
  1200.     }           
  1201.     _lclose(hf);
  1202. strcpy(WriteBuf, DATA_DAY_HEAD);
  1203. len=strlen(DATA_DAY_HEAD);
  1204. WriteBuf[len]=jys;
  1205. len++;
  1206. *((int *)&WriteBuf[len]) =rec_num;
  1207. len +=sizeof(int);
  1208. *((int *)&WriteBuf[len]) =data_rec_end;        
  1209. len +=sizeof(int);
  1210. return UDP_Send_Hq(&WriteBuf[0], DATA_DAY_HEAD, len);
  1211. }
  1212. int HqCheckUser(char *userID, char *userPwd)
  1213. {
  1214. int len;
  1215. char  WriteBuf[MAX_WRITE_BUF_SIZE+1];
  1216.                
  1217.                
  1218. strcpy(WriteBuf, HQ_CHKUSR_HEAD);
  1219. len=strlen(HQ_CHKUSR_HEAD);
  1220. memcpy(&WriteBuf[len], userID, HQ_USERID_SIZE);
  1221. len +=HQ_USERID_SIZE;
  1222. memcpy(&WriteBuf[len], userPwd, HQ_USERPWD_SIZE);
  1223. len +=HQ_USERPWD_SIZE;
  1224. return UDP_Send_Hq(&WriteBuf[0], HQ_CHKUSR_HEAD, len);
  1225. }
  1226. extern HWND ghDlgChkUsr;
  1227. int UDP_Read_ChkUsr(LPSTR lpTmp, int len)
  1228. {
  1229. SendMessage(ghDlgChkUsr, WM_COMMAND, 100, (LPARAM)(int)*lpTmp);
  1230. return 0;
  1231. }
  1232. BOOL HqAllocMem(int jys)
  1233. {
  1234. if(HqData[jys].lpPreData ==NULL)
  1235. HqData[jys].lpPreData =(LPHQ_PRE_DATA)GlobalAllocPtr(GHND,
  1236. HqData[jys].recCount*sizeof(HQ_PRE_DATA));
  1237. else
  1238. HqData[jys].lpPreData =(LPHQ_PRE_DATA)GlobalReAllocPtr(HqData[jys].lpPreData,
  1239. HqData[jys].recCount*sizeof(HQ_PRE_DATA), GMEM_MOVEABLE);
  1240. if(HqData[jys].lpRefData ==NULL)
  1241. HqData[jys].lpRefData =(LPHQ_REF_DATA)GlobalAllocPtr(GHND,
  1242. HqData[jys].recCount*sizeof(HQ_REF_DATA));
  1243. else
  1244. HqData[jys].lpRefData =(LPHQ_REF_DATA)GlobalReAllocPtr(HqData[jys].lpRefData,
  1245. HqData[jys].recCount*sizeof(HQ_REF_DATA), GMEM_MOVEABLE);
  1246. if(HqData[jys].lpPreData ==NULL || HqData[jys].lpRefData ==NULL)
  1247. {
  1248. HqData[jys].recCount =0;
  1249. ErrMsg(NULL,"alloc record data memory failed!");
  1250. return FALSE;
  1251. }
  1252. if(HqData[jys].isLcChanged ==NULL)
  1253. HqData[jys].isLcChanged =(BOOL *)GlobalAllocPtr(GHND,
  1254. HqData[jys].recCount*sizeof(BOOL));
  1255. else
  1256. HqData[jys].isLcChanged =(BOOL *)GlobalReAllocPtr(HqData[jys].isLcChanged,
  1257. HqData[jys].recCount*sizeof(BOOL), GHND);
  1258. if(HqData[jys].isJgChanged ==NULL)
  1259. HqData[jys].isJgChanged =(BOOL *)GlobalAllocPtr(GHND,
  1260. HqData[jys].recCount*sizeof(BOOL));
  1261. else
  1262. HqData[jys].isJgChanged =(BOOL *)GlobalReAllocPtr(HqData[jys].isJgChanged,
  1263. HqData[jys].recCount*sizeof(BOOL), GHND);
  1264. if(HqData[jys].isJgChanged ==NULL || HqData[jys].isLcChanged ==NULL)
  1265. {
  1266. HqData[jys].recCount =0;
  1267. ErrMsg(NULL,"alloc changed data memory failed!");
  1268. return FALSE;
  1269. }
  1270. if(HqData[jys].isReadOK ==NULL)
  1271. HqData[jys].isReadOK =(BOOL *)GlobalAllocPtr(GHND,
  1272. HqData[jys].recCount*sizeof(BOOL));
  1273. else
  1274. HqData[jys].isReadOK =(BOOL *)GlobalReAllocPtr(HqData[jys].isReadOK,
  1275. HqData[jys].recCount*sizeof(BOOL), GHND);
  1276. if(HqData[jys].isReadOK ==NULL)
  1277. {
  1278. HqData[jys].recCount =0;
  1279. ErrMsg(NULL,"alloc readok data memory failed!");
  1280. return FALSE;
  1281. }
  1282. return TRUE;
  1283. }
  1284. /*
  1285. int UDP_Recv_File(LPSTR lpTmp,int len)
  1286. {
  1287.     RECV_FILE_FRAME RecvFileFrame;
  1288.     char temp[80],tmp[80],*ptr,file[14];
  1289.     HFILE hf;
  1290.     OFSTRUCT os;
  1291.     
  1292.     if(len<sizeof(RECV_FILE_FRAME))
  1293.     {
  1294.      ErrMsg(NULL,"接收文件帧头长度不足"); 
  1295.      return FALSE;
  1296.     }
  1297.     memcpy(&RecvFileFrame,lpTmp,sizeof(RECV_FILE_FRAME));
  1298.     lpTmp+=sizeof(RECV_FILE_FRAME);
  1299.     len-=sizeof(RECV_FILE_FRAME);
  1300.     if(len!=RecvFileFrame.filelen)
  1301.     {
  1302.      ErrMsg(NULL,"接收文件数据区长度不足"); 
  1303.      return FALSE;    
  1304.     }
  1305.     
  1306.     memset(file,0,14);
  1307.     strncpy(file,RecvFileFrame.filename,12);
  1308.     file[12] =0;
  1309.     strcpy(tmp,file);
  1310.     ptr=strchr(tmp,'.');
  1311.     if(ptr!=NULL)
  1312.      *ptr=0;
  1313. wsprintf(temp, "%s\%s.tmp",szDataPath,tmp);
  1314.     if(RecvFileFrame.sign=='B'||RecvFileFrame.sign=='e'||
  1315.      RecvFileFrame.sign=='f')
  1316. unlink(temp);
  1317. if(access(temp,0)==0)
  1318. hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_WRITE);
  1319. else
  1320. hf =OpenFile(temp, &os, OF_CREATE|OF_SHARE_DENY_NONE|OF_WRITE);
  1321. if(hf==HFILE_ERROR)
  1322. {
  1323. sprintf(tmp,"不能建立接收文件:%s",temp);
  1324.      ErrMsg(NULL,tmp); 
  1325.      return FALSE;
  1326. }
  1327. if(_lseek(hf,0L,SEEK_END)==-1)
  1328. {
  1329.      ErrMsg(NULL,"接收文件不能定位到尾部!");
  1330.      return FALSE;
  1331. }
  1332. if(_lwrite(hf,lpTmp,len)!=(UINT)len)
  1333. {
  1334.      ErrMsg(NULL,"接收文件不能正确写入数据!");
  1335.      return FALSE;
  1336. }
  1337. _lclose(hf);
  1338. if(RecvFileFrame.sign=='E'||RecvFileFrame.sign=='e')
  1339. {
  1340. sprintf(tmp,"%s\%s",szDataPath,file);
  1341. unlink(tmp);
  1342. rename(temp,tmp);
  1343. _strlwr(tmp);
  1344. if(strstr(tmp,"szhq.dat")!=NULL)
  1345. PostMessage(ghWndMain,WM_USER +5,0,0L);
  1346. if(strstr(tmp,"shhq.dat")!=NULL)
  1347. PostMessage(ghWndMain,WM_USER +6,0,0L);
  1348. }
  1349. if(RecvFileFrame.sign=='F'||RecvFileFrame.sign=='f')
  1350. {
  1351. sprintf(tmp,"%s\%s",szDataPath,file);
  1352. unlink(tmp);
  1353. ExpandFile(temp,tmp);
  1354. unlink(temp);
  1355. _strlwr(tmp);
  1356. if(strstr(tmp,"szhq.dat")!=NULL)
  1357. PostMessage(ghWndMain,WM_USER +5,0,0L);
  1358. if(strstr(tmp,"shhq.dat")!=NULL)
  1359. PostMessage(ghWndMain,WM_USER +6,0,0L);
  1360. }
  1361. return TRUE;
  1362. }
  1363. */
  1364. int UDP_Recv_File(LPSTR lpTmp,int len)
  1365. {
  1366.     RECV_FILE_FRAME RecvFileFrame;
  1367.     char temp[80],tmp[80],*ptr,file[14];
  1368.     
  1369.     char buf[4096];
  1370.     int bytes;
  1371.     gzFile in;   
  1372.     
  1373.     HFILE hf;
  1374.     OFSTRUCT os;
  1375.     
  1376.     if(len<sizeof(RECV_FILE_FRAME))
  1377.     {
  1378.      ErrMsg(NULL,"接收文件帧头长度不足"); 
  1379.      return FALSE;
  1380.     }
  1381.     memcpy(&RecvFileFrame,lpTmp,sizeof(RECV_FILE_FRAME));
  1382.     lpTmp+=sizeof(RECV_FILE_FRAME);
  1383.     len-=sizeof(RECV_FILE_FRAME);
  1384.     if(len!=RecvFileFrame.filelen)
  1385.     {
  1386.      ErrMsg(NULL,"接收文件数据区长度不足"); 
  1387.      return FALSE;    
  1388.     }
  1389.     
  1390.     memset(file,0,14);
  1391.     strncpy(file,RecvFileFrame.filename,12);
  1392.     file[12] =0;
  1393.     if(RecvFileFrame.sign<=GZ_OVER)
  1394.     {   
  1395.      wsprintf(temp, "%s\temp.tmp",szDataPath);    
  1396.      switch(RecvFileFrame.sign)
  1397.      {
  1398.      case GZ_STAR:
  1399.      hf =OpenFile(temp, &os, OF_CREATE|OF_SHARE_DENY_NONE|OF_WRITE);
  1400.      break;
  1401.      case GZ_SING:
  1402.          hf =OpenFile(temp, &os, OF_CREATE|OF_SHARE_DENY_NONE|OF_WRITE);
  1403.      break; 
  1404.      case GZ_CONT:
  1405.      hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_WRITE);    
  1406.      break;
  1407.      case GZ_OVER:
  1408.      hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_WRITE);    
  1409.      break;
  1410.      }
  1411. if(hf==HFILE_ERROR)
  1412. {
  1413. sprintf(tmp,"不能建立接收文件:%s",temp);
  1414.      ErrMsg(NULL,tmp); 
  1415.      return FALSE;
  1416. }
  1417.      _lseek(hf,0L,SEEK_END);
  1418. if(_lwrite(hf,lpTmp,len)!=(UINT)len)
  1419. {
  1420.      ErrMsg(NULL,"接收文件不能正确写入数据!");
  1421.      return FALSE;
  1422. }
  1423.      _lclose(hf);
  1424.      if(RecvFileFrame.sign ==GZ_SING ||RecvFileFrame.sign ==GZ_OVER)
  1425.      {    
  1426.           in = gzopen(temp, "rb");
  1427.           if(in ==NULL)
  1428.           {
  1429.              ErrMsg(NULL,"不能打开压缩文件!");
  1430.      return FALSE;
  1431.           }            
  1432.           
  1433.           _strlwr(file);
  1434.           if(strstr(file,"winpy.dat")!=NULL)
  1435.            strcpy(tmp,file);
  1436.           else
  1437.           wsprintf(tmp, "%s\%s",szDataPath,file);          
  1438.           
  1439.           hf =OpenFile(tmp, &os, OF_CREATE|OF_SHARE_DENY_NONE|OF_WRITE);
  1440.       for (;;) 
  1441.       {
  1442.          bytes = gzread(in, buf, sizeof(buf));
  1443.          if (bytes < 0)
  1444.          {
  1445.      ErrMsg(NULL,"不能解压数据文件!");
  1446.      break;
  1447.          }
  1448.          if (bytes == 0) break;
  1449. if(_lwrite(hf,buf,bytes)!=(UINT)bytes)
  1450. {
  1451.      ErrMsg(NULL,"解压数据不能正确写入文件!");
  1452.      break;
  1453. }
  1454.       }
  1455.       
  1456.       _lclose(hf);
  1457.       if (gzclose(in) != Z_OK)
  1458.       {
  1459.      ErrMsg(NULL,"压缩文件不能正常关闭!");
  1460.      return FALSE;      
  1461.       }      
  1462. if(strstr(tmp,"szhq.dat")!=NULL)
  1463. PostMessage(ghWndMain,WM_USER +5,0,0L);
  1464. else if(strstr(tmp,"shhq.dat")!=NULL)
  1465. PostMessage(ghWndMain,WM_USER +6,0,0L);
  1466. else if(strstr(tmp,"winpy.dat")!=NULL)
  1467. PostMessage(ghWndMain,WM_USER +7,0,0L);
  1468. else
  1469. {
  1470. sprintf(tmp,"接收文件%s",file);
  1471. Msg(tmp,MSG_VERT);
  1472. }
  1473.      }
  1474.      return 0;
  1475.     }
  1476.     strcpy(tmp,file);
  1477.     ptr=strchr(tmp,'.');
  1478.     if(ptr!=NULL)
  1479.      *ptr=0;
  1480. wsprintf(temp, "%s\%s.tmp",szDataPath,tmp);
  1481.     if(RecvFileFrame.sign=='B'||RecvFileFrame.sign=='e'||
  1482.      RecvFileFrame.sign=='f')
  1483. unlink(temp);
  1484. if(access(temp,0)==0)
  1485. hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_WRITE);
  1486. else
  1487. hf =OpenFile(temp, &os, OF_CREATE|OF_SHARE_DENY_NONE|OF_WRITE);
  1488. if(hf==HFILE_ERROR)
  1489. {
  1490. sprintf(tmp,"不能建立接收文件:%s",temp);
  1491.      ErrMsg(NULL,tmp); 
  1492.      return FALSE;
  1493. }
  1494. if(_lseek(hf,0L,SEEK_END)==-1)
  1495. {
  1496.      ErrMsg(NULL,"接收文件不能定位到尾部!");
  1497.      return FALSE;
  1498. }
  1499. if(_lwrite(hf,lpTmp,len)!=(UINT)len)
  1500. {
  1501.      ErrMsg(NULL,"接收文件不能正确写入数据!");
  1502.      return FALSE;
  1503. }
  1504. _lclose(hf);
  1505. if(RecvFileFrame.sign=='E'||RecvFileFrame.sign=='e')
  1506. {
  1507. sprintf(tmp,"%s\%s",szDataPath,file);
  1508. unlink(tmp);
  1509. rename(temp,tmp);
  1510. _strlwr(tmp);
  1511. if(strstr(tmp,"szhq.dat")!=NULL)
  1512. PostMessage(ghWndMain,WM_USER +5,0,0L);
  1513. if(strstr(tmp,"shhq.dat")!=NULL)
  1514. PostMessage(ghWndMain,WM_USER +6,0,0L);
  1515. }
  1516. if(RecvFileFrame.sign=='F'||RecvFileFrame.sign=='f')
  1517. {
  1518. sprintf(tmp,"%s\%s",szDataPath,file);
  1519. unlink(tmp);
  1520. ExpandFile(temp,tmp);
  1521. unlink(temp);
  1522. _strlwr(tmp);
  1523. if(strstr(tmp,"szhq.dat")!=NULL)
  1524. PostMessage(ghWndMain,WM_USER +5,0,0L);
  1525. if(strstr(tmp,"shhq.dat")!=NULL)
  1526. PostMessage(ghWndMain,WM_USER +6,0,0L);
  1527. }
  1528. return TRUE;
  1529. }