Advertisement
Guest User

eqyqw

a guest
Nov 27th, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. int test_xpm(unsigned short xi, unsigned short yi, char *xpm[])
  2. {
  3. int flag=0;
  4.  
  5. if(kbd_subscribe()<0)
  6. return 1;
  7.  
  8. Sprite* sp;
  9.  
  10. vg_init(TEST_MODE);
  11.  
  12. if((yi<0)||(xi<0)||(yi>get_v_res())||(xi>get_h_res()))
  13. {
  14. flag=1;
  15. goto FUNC_EXIT;
  16. }
  17. else
  18. {
  19. sp = create_sprite(xpm);
  20. int a;
  21. a=draw_sprite(sp, xi, yi);
  22.  
  23. switch(a)
  24. {
  25. case 1:
  26. flag=1;
  27. goto FUNC_EXIT;
  28. case 2:
  29. goto FUNC_EXIT;
  30. }
  31.  
  32. }
  33.  
  34. while(waitEscKey()!=0)
  35. {
  36.  
  37. }
  38.  
  39. FUNC_EXIT:
  40. if(vg_exit()!=0)
  41. flag=1;
  42.  
  43. if(kbd_unsubscribe()!=0)
  44. flag=1;
  45.  
  46. return flag;
  47.  
  48.  
  49. }
  50.  
  51.  
  52. int test_move(unsigned short xi, unsigned short yi, char *xpm[], unsigned short hor, short delta, unsigned short time)
  53. {
  54.  
  55. int flag = 0;
  56. int acc = 0;
  57. int x = xi;
  58. if(timer_subscribe_int()<0)
  59. return 1;
  60. if(kbd_subscribe()<0)
  61. return 1;
  62. vg_init(TEST_MODE);
  63.  
  64. Sprite* sp;
  65.  
  66. if((yi<0)||(xi<0)||(yi>get_v_res())||(xi>get_h_res()))
  67. {
  68. flag=1;
  69. goto FUNC_EXIT;
  70. }
  71. else
  72. {
  73. sp = create_sprite(xpm);
  74. draw_sprite(sp, x, yi);
  75.  
  76. sprite_handler(sp,x,yi,time,1,1);
  77. }
  78.  
  79. while(waitEscKey()!=0)
  80. {
  81. }
  82.  
  83. FUNC_EXIT:
  84. if(vg_exit()!=0)
  85. flag=1;
  86.  
  87. if(kbd_unsubscribe()!=0)
  88. flag=1;
  89.  
  90. if(timer_unsubscribe_int()!=0)
  91. flag=1;
  92.  
  93. return flag;
  94.  
  95.  
  96. }
  97.  
  98.  
  99. int sprite_handler(Sprite* sp,unsigned short x, unsigned short y, unsigned short delay, unsigned short delta, unsigned short hor)
  100. {
  101. int irq_set_timer, irq_set_kbd;
  102. int ipc_status;
  103. message msg;
  104.  
  105. int inc,u;
  106. int x_s,y_s;
  107.  
  108. x_s=x;
  109. y_s=y;
  110.  
  111. u=0;
  112.  
  113. if(delta>0)
  114. {
  115. inc=1;
  116. }
  117. else
  118. {
  119. inc=-1;
  120. }
  121.  
  122. int acc = 0;
  123. int time=delay;
  124.  
  125. irq_set_timer = BIT(0);
  126. irq_set_kbd = BIT(1);
  127.  
  128. //Cycle
  129. while( acc < 60*time)
  130. {
  131. if ( driver_receive(ANY, &msg, &ipc_status) != 0 )
  132. {
  133. printf("driver_receive failed with: %d", 0);
  134. continue;
  135. }
  136.  
  137. if (is_ipc_notify(ipc_status)) {
  138.  
  139. switch (_ENDPOINT_P(msg.m_source)) {
  140.  
  141. case HARDWARE:
  142.  
  143. if (msg.NOTIFY_ARG & irq_set_timer)
  144. {
  145.  
  146. if(hor!=0)
  147. {
  148. erase_sprite(sp);
  149. y_s=y_s+1;
  150. draw_sprite(sp, x_s, y_s);
  151. }
  152. else
  153. {
  154.  
  155. erase_sprite(sp);
  156. x_s=x_s+1;
  157. draw_sprite(sp, x_s, y_s);
  158.  
  159. }
  160.  
  161.  
  162. /*
  163. erase_sprite(sp);
  164. x_s=x_s+inc;
  165. draw_sprite(sp, x_s, y_s);
  166. */
  167.  
  168. acc++;
  169. }
  170. if (msg.NOTIFY_ARG & irq_set_kbd)
  171. {
  172. return 0;
  173. }
  174. break;
  175. default:
  176. break;
  177. }
  178. } else {
  179.  
  180. }
  181. }
  182.  
  183. return 0;
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement