#include #include #include #include #include "lx.h" #define INTERVAL 100000 #define LINESTEP 13 typedef unsigned long long int TIME; static int bid; static LX_CONN *xc; static LX_XID root; static int depth; static LX_XID win; static LX_XID visual; static LX_XID cmap; static unsigned int pixv[8]; static LX_XID gc; static LX_XID pm; static TIME exp; static int x; static int pixx; static TIME now_time(void) { struct timeval tv; gettimeofday(&tv,0); return((tv.tv_sec*1000000ULL)+tv.tv_usec); } static void one_tick(void) { LX_SEGMENT seg; seg.x1 = 0; seg.y1 = 0; seg.x2 = x; seg.y2 = 255; lx_PolySegment(xc,win,gc,1,&seg); x = (x + LINESTEP) & 255; if (x == 0) { pixx = (pixx + 1) & 7; lx_ChangeGC(xc,gc,LX_GCV_Foreground(pixv[pixx]),LX_GCV_END); } } static int tick(void *arg __attribute__((__unused__))) { TIME now; int d; now = now_time(); if (now < exp) { d = (exp - now) / 1000; if (d < 1) d = 1; return(d); } exp += INTERVAL; one_tick(); return(AIO_BLOCK_LOOP); } static void startup3(void *arg __attribute__((__unused__))) { LX_POINT pt[2]; gc = lx_CreateGC(xc,root,LX_GCV_Foreground(pixv[0]),LX_GCV_END); printf("gc = %08lx\n",(unsigned long int)gc); pm = lx_CreatePixmap(xc,root,depth,2,2); printf("pm = %08lx\n",(unsigned long int)pm); pt[0].x = 0; pt[0].y = 0; pt[1].x = 1; pt[1].y = 1; lx_PolyPoint(xc,pm,gc,LX_COORDMODE_Origin,2,&pt[0]); lx_ChangeGC(xc,gc,LX_GCV_Foreground(pixv[7]),LX_GCV_END); pt[0].x = 0; pt[0].y = 1; pt[1].x = 1; pt[1].y = 0; lx_PolyPoint(xc,pm,gc,LX_COORDMODE_Origin,2,&pt[0]); win = lx_CreateWindow( xc, root, 100, 100, 256, 256, 1, depth, LX_WCLASS_InputOutput, visual, LX_CWV_BackPixmap(pm), LX_CWV_BorderPixel(pixv[7]), LX_CWV_END ); printf("win = %08lx\n",(unsigned long int)win); lx_MapWindow(xc,win); pixx = 7; x = 0; exp = now_time() + INTERVAL; aio_add_block(&tick,0); } static void startup2(LX_CONN *newc, void *arg __attribute__((__unused__))) { int i; LX_OP *op; xc = newc; printf("open worked\n"); lx_Bell(xc,0); printf("screen count = %d\n",lx_nscreens(xc)); root = lx_root(xc,0); depth = lx_root_depth(xc,0); visual = lx_root_visual(xc,0); printf("root = %08lx, depth %d\n",(unsigned long int)root,depth); cmap = lx_CreateColormap(xc,visual,root,LX_AllocNone); printf("cmap = %08lx\n",(unsigned long int)cmap); op = 0; for (i=7;i>=0;i--) { if (op) lx_op_drop(op); op = lx_AllocColor(xc,cmap,(i&1)*65535,((i>>1)&1)*65535,((i>>2)&1)*65535,&pixv[i],0,0,0); } lx_op_callback(op,&startup3,0,0); } static int startup(void *arg __attribute__((__unused__))) { aio_remove_block(bid); lx_open(0,0,&startup2,0,0,getenv("TESTER_DEBUG")?LX_OPENF_DEBUG:0); return(AIO_BLOCK_LOOP); } int main(void); int main(void) { aio_poll_init(); bid = aio_add_block(&startup,0); aio_event_loop(); return(0); }