3 #include "../../config.h"
8 int cp(int var
, int min
, int max
, char* var_name
, char* function_name
)
10 if(var
< min
|| var
> max
)
12 fprintf(stderr
, "Error: Parameter %s (%d~%d) from function %s has value %d.\n", var_name
, min
, max
, function_name
, var
);
21 return open_connection("localhost");
34 const char* xd_version()
39 void xd_draw_point(uchar color
, uchar x
, uchar y
)
41 if(cp(x
, 0, 63, "x", "xd_draw_point")
42 && cp(y
, 0, 63, "y", "xd_draw_point"))
43 send_command(4, 0x1, color
, x
, y
);
46 void xd_draw_line(uchar color
, uchar x1
, uchar y1
, uchar x2
, uchar y2
)
48 if(cp(x1
, 0, 63, "x1", "xd_draw_line")
49 && cp(y1
, 0, 63, "y1", "xd_draw_line")
50 && cp(x2
, 0, 63, "x2", "xd_draw_line")
51 && cp(y2
, 0, 63, "y2", "xd_draw_line"))
52 send_command(6, 0x2, color
, x1
, y1
, x2
, y2
);
55 void xd_draw_rectangle(uchar color
, uchar x1
, uchar y1
, uchar x2
, uchar y2
)
57 if(cp(x1
, 0, 63, "x1", "xd_draw_rectangle")
58 && cp(y1
, 0, 63, "y1", "xd_draw_rectangle")
59 && cp(x2
, 0, 63, "x2", "xd_draw_rectangle")
60 && cp(y2
, 0, 63, "y2", "xd_draw_rectangle"))
61 send_command(6, 0x8, color
, x1
, y1
, x2
, y2
);
64 void xd_draw_box(uchar fgcolor
, uchar bgcolor
, uchar x1
, uchar y1
, uchar x2
, uchar y2
)
66 if(cp(x1
, 0, 63, "x1", "xd_draw_box")
67 && cp(y1
, 0, 63, "y1", "xd_draw_box")
68 && cp(x2
, 0, 63, "x2", "xd_draw_box")
69 && cp(y2
, 0, 63, "y2", "xd_draw_box"))
70 send_command(7, 0x9, fgcolor
, bgcolor
, x1
, y1
, x2
, y2
);
73 void xd_move_box(uchar x1
, uchar y1
, uchar x2
, uchar y2
, uchar direction
, uchar step
, uchar bg_color
)
75 if(cp(x1
, 0, 63, "x1", "xd_move_box")
76 && cp(y1
, 0, 63, "y1", "xd_move_box")
77 && cp(x2
, 0, 63, "x2", "xd_move_box")
78 && cp(y2
, 0, 63, "y2", "xd_move_box")
79 && cp(direction
, 0, 3, "direction", "xd_move_box"))
80 send_command(8, 0x3, x1
, y1
, x2
, y2
, direction
, step
, bg_color
);
83 void xd_set_color(uchar color
, uchar r
, uchar g
, uchar b
)
85 // can't send 0xFF since it's a EOF sign
93 if(cp(color
, 0x80, 0xFF, "color", "xd_set_color"))
94 send_command(5, 0x7, color
, r
, g
, b
);
97 void xd_write(uchar theme
, uchar font
, uchar x
, uchar y
, const char* text
)
99 if(cp(x
, 0, 63, "x", "xd_write")
100 && cp(y
, 0, 63, "y", "xd_write")
101 && cp(font
, 0, N_FONTS
-1, "font", "xd_write"))
103 send_without_eof(5, 0x4, theme
, font
, x
, y
);
104 send_bytes(strlen(text
), (unsigned char*)text
);
108 void xd_send_xpm(uchar n
, char** xpm
)
113 char* str
= malloc(1);
116 sscanf(xpm
[0], "%d %d %d", &junk
, &h
, &colors
);
118 for(i
=0; i
<(1+colors
+h
); i
++)
120 ct
+= strlen(xpm
[i
])+1;
121 str
= realloc(str
, ct
);
122 memcpy(&str
[ct
- (strlen(xpm
[i
])+1)], xpm
[i
], strlen(xpm
[i
])+1);
125 send_without_eof(2, 0x5, n
);
130 void xd_draw_image(uchar n
, uchar x
, uchar y
)
132 if(cp(x
, 0, 63, "x", "xd_draw_image")
133 && cp(y
, 0, 63, "y", "xd_draw_image"))
134 send_command(4, 0x6, n
, x
, y
);
137 void xd_led_draw_panel(uchar x1
, uchar y1
, uchar x2
, uchar y2
)
139 if(cp(x1
, 0, 63, "x1", "xd_led_draw_panel")
140 && cp(y1
, 0, 63, "y1", "xd_led_draw_panel")
141 && cp(x2
, 0, 63, "x2", "xd_led_draw_panel")
142 && cp(y2
, 0, 63, "y2", "xd_led_draw_panel"))
143 send_command(5, 0xA0, x1
, y1
, x2
, y2
);
146 void xd_draw_panel(uchar theme
, uchar x1
, uchar y1
, uchar x2
, uchar y2
)
148 if(cp(theme
, 0, 31, "theme", "xd_draw_panel")
149 && cp(x1
, 0, 63, "x1", "xd_draw_panel")
150 && cp(y1
, 0, 63, "y1", "xd_draw_panel")
151 && cp(x2
, 0, 63, "x2", "xd_draw_panel")
152 && cp(y2
, 0, 63, "y2", "xd_draw_panel"))
153 send_command(6, 0xA1, theme
, x1
, y1
, x2
, y2
);
156 void xd_grab_events(uchar event_mask
, uchar x1
, uchar y1
, uchar x2
, uchar y2
)
158 if(cp(x1
, 0, 63, "x1", "xd_grab_events")
159 && cp(y1
, 0, 63, "y1", "xd_grab_events")
160 && cp(x2
, 0, 63, "x2", "xd_grab_events")
161 && cp(y2
, 0, 63, "y2", "xd_grab_events")
162 && cp(event_mask
, 0, 7, "event_mask", "xd_grab_events"))
163 send_command(6, 0x0A, event_mask
, x1
, y1
, x2
, y2
);
166 int xd_next_event(xd_event_t
* event
)
168 unsigned char* c
= read_data(4);
176 event
->button
= c
[3];