Advertisement
Guest User

Untitled

a guest
Jun 16th, 2014
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.82 KB | None | 0 0
  1. #include <sys/select.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <X11/Xlib.h>
  5. #include <X11/Xutil.h>
  6. #include <X11/Xos.h>
  7. #include <X11/Xatom.h>
  8. #include <X11/keysym.h>
  9. #include <X11/extensions/XTest.h>
  10. Display *dis;
  11. Window root;
  12. typedef struct{
  13. int tv1;
  14. int tv2;
  15. int code;
  16. int value;
  17. }event;
  18. char ch,dn,se,sr;
  19. unsigned short x,y,sx,sy,mx,my,mxp,myp;
  20. short dx,dy;
  21. void move()
  22. {
  23. if(se)
  24. {
  25. mxp=mx,myp=my;
  26. mx=(x+sx)/2,my=(y+sy)/2;
  27. if(sr==0)myp=my,mxp=mx,dx=dy=0,sr=1,XTestFakeButtonEvent(dis,1,0,CurrentTime);
  28. //if(ch)myp=my,mxp=mx,dx=0,dy=0;
  29. dx+=mx-mxp,dy+=my-myp;
  30. //printf("%d %d\n",dx,dy);
  31. while(abs(dy)>30||abs(dx)>30)
  32. {
  33. if(dy>30)
  34. {
  35. dy-=30;
  36. XTestFakeButtonEvent(dis,4,1,CurrentTime);
  37. XTestFakeButtonEvent(dis,4,0,CurrentTime);
  38.  
  39. }
  40. if(dy<-30)
  41. {
  42. dy+=30;
  43. XTestFakeButtonEvent(dis,5,1,CurrentTime);
  44. XTestFakeButtonEvent(dis,5,0,CurrentTime);
  45.  
  46. }
  47. if(dx>30)
  48. {
  49. dx-=30;
  50. XTestFakeButtonEvent(dis,6,1,CurrentTime);
  51. XTestFakeButtonEvent(dis,6,0,CurrentTime);
  52.  
  53. }
  54. if(dx<-30)
  55. {
  56. dx+=30;
  57. XTestFakeButtonEvent(dis,7,1,CurrentTime);
  58. XTestFakeButtonEvent(dis,7,0,CurrentTime);
  59.  
  60. }
  61. }
  62. }
  63. else
  64. {
  65. //sr=0;
  66. XWarpPointer(dis,None,root,0,0,0,0,x,y);
  67. if(ch)ch=0,XTestFakeButtonEvent(dis,1,dn,CurrentTime);
  68. }
  69. XFlush(dis);
  70. }
  71. int main()
  72. {
  73. fd_set rfds;
  74. struct timeval tv;
  75. dis = XOpenDisplay(NULL);
  76. root=RootWindow(dis,0);
  77. event* ev;
  78. ev=calloc(1,16);
  79. //char down=0,prevdown=0;
  80. char second;
  81. char sm;
  82. unsigned short lx,ly;
  83. FD_ZERO(&rfds);
  84. int fd=open("/dev/input/gt82x",O_RDONLY);
  85. FD_SET(fd,&rfds);
  86. tv.tv_sec=1;
  87. tv.tv_usec=0;
  88. //XEvent xev;
  89. //memset(0x0,sizeof(xev),&xev);
  90. //xev.type=ButtornRelease;
  91. //xev.xbutton.button=1;
  92. //xev.xbutton.samescreen=True;
  93.  
  94. while(1)
  95. {/*
  96. if(dn&&!se&&!second&&sm)
  97. {
  98. tv.tv_sec=1;
  99. tv.tv_usec=0;
  100. FD_ZERO(&rfds);
  101. FD_SET(fd,&rfds);
  102. if(select(fd+1,&rfds,NULL,NULL,&tv))
  103. read(fd,ev,16);
  104. else
  105. {
  106. XTestFakeButtonEvent(dis,1,0,CurrentTime);
  107. XTestFakeButtonEvent(dis,3,1,CurrentTime);
  108. XTestFakeButtonEvent(dis,3,0,CurrentTime);
  109. XFlush(dis);
  110. printf("g-gurda\n");
  111. //dn=0,ch=0;
  112. sm=0;
  113. FD_SET(fd,&rfds);
  114. continue;
  115. }
  116. }
  117. else*/ read(fd,ev,16);
  118. //printf("%d %d %d %d\n",ev->tv1,ev->tv2,ev->code,ev->value);
  119. switch(ev->code)
  120. {
  121. case 131072:if(second==se)move(x,y);break;
  122. case 3473411:if(second)sx=ev->value*800/800;else x=ev->value*800/800;break;
  123. case 3538947:if(second)sy=450-ev->value*450/600;else y=450-ev->value*450/600;break;
  124. case 21626881:ch=1,dn=ev->value,sr=0,sm=dn,lx=x,ly=y;break;
  125. case 3735555:second=ev->value;break;
  126. case 0:se=second;if(ch&&dn)lx=x,ly=y;break;
  127. }
  128. //if(down!=prevdown){XTestFakeButtonEvent(dis,1,down,CurrentTime);XFlush(dis);}
  129. //prevdown=down;
  130. }
  131. return(0);
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement