+
+void app_rband(int x, int y, int w, int h)
+{
+ if(!(w | h)) {
+ w = h = 0;
+ }
+
+ rband.x = x;
+ rband.y = y;
+ rband.width = w;
+ rband.height = h;
+}
+
+static void draw_cursor(int x, int y)
+{
+ int i;
+ uint32_t *fbptr = vmem + y * win_width + x;
+
+ for(i=0; i<3; i++) {
+ int offs = i + 1;
+ if(y > offs) fbptr[-win_width * offs] ^= 0xffffff;
+ if(y < win_height - offs - 1) fbptr[win_width * offs] ^= 0xffffff;
+ if(x > offs) fbptr[-offs] ^= 0xffffff;
+ if(x < win_width - offs - 1) fbptr[offs] ^= 0xffffff;
+ }
+}
+
+static void draw_rband(rtk_rect *r)
+{
+ int i;
+ rtk_rect rect;
+ uint32_t *fbptr, *bptr;
+
+ rect = *r;
+ rtk_fix_rect(&rect);
+
+ if(rect.width <= 0 || rect.height <= 0) {
+ return;
+ }
+
+ fbptr = vmem + rect.y * win_width + rect.x;
+ bptr = fbptr + win_width * (rect.height - 1);
+
+ for(i=0; i<rect.width; i++) {
+ fbptr[i] ^= 0xffffff;
+ bptr[i] ^= 0xffffff;
+ }
+ fbptr += win_width;
+ for(i=0; i<rect.height-2; i++) {
+ fbptr[0] ^= 0xffffff;
+ fbptr[rect.width - 1] ^= 0xffffff;
+ fbptr += win_width;
+ }
+}