Subversion Repositories Kolibri OS

Rev

Rev 6457 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #ifndef KOLIBRI_BUTTON_H
  2. #define KOLIBRI_BUTTON_H
  3.  
  4. typedef struct {
  5.   unsigned int x65536sizex;
  6.   unsigned int y65536sizey;
  7.   unsigned int color;
  8.   unsigned int identifier;
  9.   unsigned int XY;
  10. }kolibri_button;
  11.  
  12. kolibri_button *kolibri_new_button(unsigned int tlx, unsigned int tly, unsigned int sizex, unsigned int sizey,
  13.                                           unsigned int identifier, unsigned int color)
  14. {
  15.   kolibri_button* new_button = (kolibri_button *)malloc(sizeof(kolibri_button));
  16.   new_button -> x65536sizex = (tlx << 16) + sizex;
  17.   new_button -> y65536sizey = (tly << 16) + sizey;
  18.   new_button -> color = color;
  19.   new_button -> identifier = identifier;
  20.   new_button -> XY = 0;
  21.   return new_button;
  22. }
  23.  
  24. __attribute__((__stdcall__))
  25. static inline void draw_button(kolibri_button *some_button)
  26. {
  27.   define_button(some_button -> x65536sizex, some_button -> y65536sizey, some_button -> identifier, some_button -> color);
  28. }
  29.  
  30. unsigned int kolibri_button_get_identifier(void)
  31. {
  32.   unsigned int identifier;
  33.  
  34.   __asm__ __volatile__(
  35.                        "int $0x40"
  36.                        :"=a"(identifier)
  37.                        :"a"(17)
  38.                        );
  39.   /* If no button pressed, returns 1 */
  40.   /* Otherwise, returns identifier of button */
  41.  
  42.   if(identifier != 1) /* Button was detected indeed */
  43.     return identifier>>8;
  44.   else
  45.     return identifier; /* No button detected */
  46. }
  47.  
  48. #endif /* KOLIBRI_BUTTON_H */
  49.