#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "wllib.h" #define SAFE_BORDER (4) #define SIZE_MIN (16) extern char *icon_xpm[]; extern void drawgfx(void); long xcur,ycur,xmin,xmax,ymin,ymax; int winx,winy,iniline,minimax=1; float coefx,coefy; Display *dp; Screen *scr; int scrnum; Colormap cmap; unsigned long fgpen,bgpen; XrmDatabase rdb; Window win,rootw; GC gc; Cursor curs; Atom atdel; XrmOptionDescRec opts[]={ {"-bg", ".background", XrmoptionSepArg,NULL}, /* 0! */ {"-background", ".background", XrmoptionSepArg,NULL}, /* 1! */ {"-bd", ".borderColor", XrmoptionSepArg,NULL}, /* 2! */ {"-bordercolor", ".borderColor", XrmoptionSepArg,NULL}, /* 3! */ {"-bw", ".borderWidth", XrmoptionSepArg,NULL}, /* 4! */ {"-borderwidth", ".borderWidth", XrmoptionSepArg,NULL}, /* 5! */ {"-display", ".display", XrmoptionSepArg,NULL}, /* 6! */ {"-fg", ".foreground", XrmoptionSepArg,NULL}, /* 7! */ {"-foreground", ".foreground", XrmoptionSepArg,NULL}, /* 8! */ {"-geometry", ".geometry", XrmoptionSepArg,NULL}, /* 9! */ {"-iconic", ".iconStartup", XrmoptionNoArg, "on"}, /* 10! */ {"-name", ".name", XrmoptionSepArg,NULL}, /* 11! */ {"-rv", ".reverseVideo",XrmoptionNoArg, "on"}, /* 12! */ {"-reverse", ".reverseVideo",XrmoptionNoArg, "on"}, /* 13! */ {"+rv", ".reverseVideo",XrmoptionNoArg, "on"}, /* 14! */ {"+reverse", ".reverseVideo",XrmoptionNoArg, "on"}, /* 15! */ {"-title", ".title", XrmoptionSepArg,NULL}, /* 16! */ {"-xrm", NULL, XrmoptionResArg,NULL}, /* 17! */ }; #define opts_num (sizeof(opts)/sizeof(*opts)) char *pname; size_t pnamelen; char fn[128]="/usr/lib/X11/app-defaults/",resnam[sizeof(fn)],rescls[sizeof(fn)]; #define APPDEFNL (26) size_t classlen; void wl_line(long x,long y) { if (iniline) { iniline=0; if (minimax) { xmin=xmax=x; ymin=ymax=y; } else { xcur=rint(coefx*(x-xmin))+SAFE_BORDER; ycur=winy-SAFE_BORDER-rint(coefy*(y-ymin)); } } else { if (minimax) { if (xxmax) xmax=x; if (yymax) ymax=y; } else { int xcur2,ycur2; XDrawLine(dp,win,gc,xcur,ycur, xcur2=rint(coefx*(x-xmin))+SAFE_BORDER,ycur2=winy-SAFE_BORDER-rint(coefy*(y-ymin))); xcur=xcur2; ycur=ycur2; } } } int stricmp(char *s1,char *s2) { int i; char c1,c2; while (*s1&&*s2) if ((i=(c1=toupper(*s1++))>(c2=toupper(*s2++))-(c1flags=(i=XWMGeometry(dp,scrnum,res_string(9,".Geometry"),fn,bw,sizh, &sizh->x,&sizh->y,&winx,&winy,&sizh->win_gravity) &(XValue|YValue)?USPosition:PPosition)|(i&(WidthValue|HeightValue)?USSize:PSize) |PMinSize|PWinGravity; sizh->min_height=sizh->min_width=2*SAFE_BORDER+SIZE_MIN; if (!(win=XCreateSimpleWindow(dp,rootw=RootWindowOfScreen(scr), sizh->x,sizh->y,sizh->width=winx,sizh->height=winy,bw,bdpen,bgpen))) iofail(); icon.attr.valuemask=0; if ((i=XpmCreatePixmapFromData(dp,win,icon_xpm,&icon.data,&icon.mask,&icon.attr))) { fprintf(stderr,"XpmCreatePixmapFromData() error #%d\n",i); iofail(); } if (!(icon.siz=XAllocIconSize())) iofail(); icon.siz->max_width =icon.siz->min_width =icon.attr.width; icon.siz->max_height=icon.siz->min_height=icon.attr.height; icon.siz->height_inc=icon.siz->width_inc=0; XSetIconSizes(dp,win,icon.siz,1); XFree(icon.siz); if (!(icon.win=XCreateSimpleWindow(dp,rootw,0,0, icon.attr.width,icon.attr.height,0,bdpen,bgpen))) iofail(); XpmFreeAttributes(&icon.attr); XSetWindowBackgroundPixmap(dp,icon.win,icon.data); XFreePixmap(dp,icon.data); if (icon.mask) { XShapeCombineMask(dp,icon.win,ShapeBounding,0,0,icon.mask,ShapeSet); XFreePixmap(dp,icon.mask); } XClearWindow(dp,icon.win); if (!(wmh=XAllocWMHints())) iofail(); wmh->flags=StateHint|IconWindowHint; wmh->initial_state=res_bool(res_string(10,".IconStartup"))?IconicState:NormalState; wmh->icon_window=icon.win; if (!(clsh=XAllocClassHint())) iofail(); clsh->res_name=pname; clsh->res_class=(char *)class; if (!(s=res_string(16,".Title"))) s=(char *)class; XmbSetWMProperties(dp,win,s,class,argv,*argcp,sizh,wmh,clsh); XFree(sizh); XFree(wmh); XFree(clsh); wina.backing_store=WhenMapped; wina.event_mask=ButtonPressMask|KeyPressMask|StructureNotifyMask|ExposureMask; wina.cursor=curs=XCreateFontCursor(dp,XC_watch); XChangeWindowAttributes(dp,win,CWBackingStore|CWEventMask|CWCursor,&wina); atdel=XInternAtom(dp,"WM_DELETE_WINDOW",False); XSetWMProtocols(dp,win,&atdel,1); XMapWindow(dp,win); XFlush(dp); gc=DefaultGCOfScreen(scr); }