/*---------------------------------------------------------------------------*/ static PT_THREAD(handle_output(void)) { ctk_arch_key_t c; char *ptr; PT_BEGIN(&s.outpt); while(1) { PT_WAIT_UNTIL(&s.outpt, (ctk_mode_get() == CTK_MODE_EXTERNAL) && kbhit()); ptr = s.outputbuf; s.len = 0; while(kbhit() && s.len < sizeof(s.outputbuf)) { c = cgetc(); *ptr = c; ++ptr; ++s.len; } PT_WAIT_THREAD(&s.outpt, send()); } PT_END(&s.outpt); }
/*---------------------------------------------------------------------------*/ static void pollhandler(void) { if(ctk_mode_get() == CTK_MODE_EXTERNAL) { if(CIA1.prb == 0x7f) { ctkmode(); } else if(kbhit() && conn != NULL) { tcpip_poll_tcp(conn); } } }
static void pollhandler(void) { if(ctk_mode_get() == CTK_MODE_SCREENSAVER) { fire_burn(); /* Display flames on screen. */ flameptr = flames; colorptr1 = COLOR_RAM + 40*10; colorptr2 = colorptr1 + 0x20; for(y = 0; y < 15; ++y) { for(x = 0; x < 8; ++x) { colorptr1[x] = colorptr2[x] = flamecolors[flameptr[x]]; } colorptr1 += 0x28; colorptr2 += 0x28; flameptr += 8; } } }
/*--------------------------------------------------------------------------*/ static void s_ctk_draw_window(struct ctk_window *window, unsigned char focus, unsigned char clipy1, unsigned char clipy2) { struct ctk_widget *w; unsigned char wfocus; int x, y, x1, y1, x2, y2; x = window->x; y = window->y + MENU_HEIGHT; x1 = x + WINDOWBORDER_WIDTH; y1 = y + WINDOWTITLE_HEIGHT; x2 = x1 + window->w; y2 = y1 + window->h; /* Draw window border */ gdk_draw_rectangle(ctk_gtksim_pixmap, darkgray, FALSE, x * RASTER_X, y * RASTER_Y + MENUBAR_HEIGHT, (window->w + 2 * WINDOWBORDER_WIDTH) * RASTER_X, (window->h + WINDOWTITLE_HEIGHT + WINDOWBORDER_HEIGHT) * RASTER_Y); if(ctk_mode_get() == CTK_MODE_WINDOWMOVE) { if(focus & CTK_FOCUS_WINDOW) { gdk_draw_rectangle(ctk_gtksim_pixmap, white, TRUE, x * RASTER_X + 1, y * RASTER_Y + MENUBAR_HEIGHT + 1, (window->w + 2 * WINDOWBORDER_WIDTH) * RASTER_X - 2, (window->h + WINDOWTITLE_HEIGHT + WINDOWBORDER_HEIGHT) * RASTER_Y - 2); } else { gdk_draw_rectangle(ctk_gtksim_pixmap, midgray, TRUE, x * RASTER_X + 1, y * RASTER_Y + MENUBAR_HEIGHT + 1, (window->w + 2 * WINDOWBORDER_WIDTH) * RASTER_X - 2, (window->h + WINDOWTITLE_HEIGHT + WINDOWBORDER_HEIGHT) * RASTER_Y - 2); } return; } if(windowborder == NULL) { gdk_draw_rectangle(ctk_gtksim_pixmap, midgray, TRUE, x * RASTER_X, y * RASTER_Y + MENUBAR_HEIGHT, (window->w + 2 * WINDOWBORDER_WIDTH) * RASTER_X, WINDOWTITLE_HEIGHT * RASTER_Y); } else { gdk_draw_pixbuf(ctk_gtksim_pixmap, midgray, windowborder, 0, 0, x * RASTER_X, y * RASTER_Y + MENUBAR_HEIGHT, (window->w + 2 * WINDOWBORDER_WIDTH) * RASTER_X, WINDOWTITLE_HEIGHT * RASTER_Y, GDK_RGB_DITHER_NONE, 0, 0); } gdk_draw_line(ctk_gtksim_pixmap, darkgray, x * RASTER_X, (y + WINDOWTITLE_HEIGHT) * RASTER_Y - 1 + MENUBAR_HEIGHT, (x + window->w + 2 * WINDOWBORDER_WIDTH) * RASTER_X, (y + WINDOWTITLE_HEIGHT) * RASTER_Y - 1 + MENUBAR_HEIGHT); /* Draw inactive widgets. */ for(w = window->inactive; w != NULL; w = w->next) { draw_widget(w, x1, y1, x2, y2, clipy1, clipy2, focus); } /* Draw active widgets. */ for(w = window->active; w != NULL; w = w->next) { wfocus = focus; if(w == window->focused) { wfocus |= CTK_FOCUS_WIDGET; } draw_widget(w, x1, y1, x2, y2, clipy1, clipy2, wfocus); } ctk_gtksim_set_redrawflag(); }