|
|
1.1 ! root 1: #ifndef lint ! 2: static char *rcsid_xload_c = "$Header: xload.c,v 1.32 87/09/09 12:06:08 swick Exp $"; ! 3: #endif lint ! 4: ! 5: /* ! 6: * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. ! 7: * ! 8: * All Rights Reserved ! 9: * ! 10: * Permission to use, copy, modify, and distribute this software and its ! 11: * documentation for any purpose and without fee is hereby granted, ! 12: * provided that the above copyright notice appear in all copies and that ! 13: * both that copyright notice and this permission notice appear in ! 14: * supporting documentation, and that the name of Digital Equipment ! 15: * Corporation not be used in advertising or publicity pertaining to ! 16: * distribution of the software without specific, written prior permission. ! 17: * ! 18: * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 19: * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 20: * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 21: * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 22: * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 23: * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 24: * SOFTWARE. ! 25: */ ! 26: ! 27: #include <stdio.h> ! 28: #include <strings.h> ! 29: #include <X11/Xatom.h> ! 30: #include <X11/Xlib.h> ! 31: #include <X11/Xutil.h> ! 32: #include <X11/Intrinsic.h> ! 33: #include <X11/Atoms.h> ! 34: #include <X11/Load.h> ! 35: #include <pwd.h> ! 36: #include "xload.bit" ! 37: ! 38: extern void exit(); ! 39: ! 40: /* Command line options table. Only resources are entered here...there is a ! 41: pass over the remaining options after XtParseCommand is let loose. */ ! 42: ! 43: static XrmOptionDescRec opTable[] = { ! 44: {"=", "geometry", XrmoptionIsArg, (caddr_t) NULL}, ! 45: {"-bd", XtNborder, XrmoptionSepArg, (caddr_t) NULL}, ! 46: {"-bg", XtNbackground, XrmoptionSepArg, (caddr_t) NULL}, ! 47: {"-bw", XtNborderWidth, XrmoptionSepArg, (caddr_t) NULL}, ! 48: {"-fg", XtNforeground, XrmoptionSepArg, (caddr_t) NULL}, ! 49: {"-fn", XtNfont, XrmoptionSepArg, (caddr_t) NULL}, ! 50: {"-update", XtNupdate, XrmoptionSepArg, (caddr_t) NULL}, ! 51: {"-scale", XtNminScale, XrmoptionSepArg, (caddr_t) NULL}, ! 52: {"-rv", XtNreverseVideo, XrmoptionNoArg, (caddr_t) "on"}, ! 53: {"+rv", XtNreverseVideo, XrmoptionNoArg, (caddr_t) "off"} ! 54: }; ! 55: ! 56: static char *geostr; ! 57: ! 58: static Resource rlist[]= ! 59: { ! 60: {"geometry", "Geometry", XrmRString, ! 61: sizeof(char *), (caddr_t) &geostr, (caddr_t) NULL} ! 62: }; ! 63: ! 64: ! 65: ! 66: /* Exit with message describing command line format */ ! 67: ! 68: void usage() ! 69: { ! 70: (void) fprintf(stderr, ! 71: "usage: xload [-fn {font}] [-update {seconds}] [-scale {integer}] [-rv]\n" ! 72: ); ! 73: (void) fprintf(stderr, ! 74: " [=[{width}][x{height}][{+-}{xoff}[{+-}{yoff}]]] [[{host}]:[{vs}]]\n" ! 75: ); ! 76: (void) fprintf(stderr, ! 77: " [-fg {color}] [-bg {color}] [-hl {color}] [-bd {color}] [-bw {pixels}]\n"); ! 78: exit(1); ! 79: } ! 80: void XtGetUsersDataBase() ! 81: { ! 82: XrmResourceDataBase resources, userResources; ! 83: int uid; ! 84: extern struct passwd *getpwuid(); ! 85: struct passwd *pw; ! 86: char filename[1024]; ! 87: FILE *f; ! 88: ! 89: /* Open .Xdefaults file and merge into existing data base */ ! 90: uid = getuid(); ! 91: pw = getpwuid(uid); ! 92: if (pw) { ! 93: (void) strcpy(filename, pw->pw_dir); ! 94: (void) strcat(filename, "/.Xdefaults"); ! 95: f = fopen(filename, "r"); ! 96: if (f) { ! 97: XrmGetCurrentDataBase(&resources); ! 98: XrmGetDataBase(f, &userResources); ! 99: XrmMergeDataBases(userResources, &resources); ! 100: XrmSetCurrentDataBase(userResources); ! 101: (void) fclose(f); ! 102: } ! 103: } ! 104: } ! 105: ! 106: void main(argc, argv) ! 107: int argc; ! 108: char **argv; ! 109: { ! 110: char display[256]; /* will contain vs host */ ! 111: char host[256]; ! 112: Display *dpy; ! 113: Window win; ! 114: XrmNameList names; ! 115: XrmClassList classes; ! 116: Arg arglist[20]; ! 117: int x, y; ! 118: unsigned int height, width; ! 119: int argCount = 0; ! 120: long flags; ! 121: XSizeHints sizehints; ! 122: XWMHints wmhints, *oldwmhints; ! 123: ! 124: ! 125: (void) gethostname(host,255); ! 126: XtSetArg(arglist[argCount], XtNlabel, host); ! 127: argCount++; ! 128: XtSetArg(arglist[argCount], XtNname, argv[0]); ! 129: argCount++; ! 130: display[0] = '\0'; ! 131: XtInitialize(); ! 132: XtGetUsersDataBase(); ! 133: ! 134: XrmParseCommand( opTable, XtNumber(opTable), argv[0], &argc, argv); ! 135: ! 136: if(argc > 1 && index(argv[1], ':') != NULL) { ! 137: argc--; ! 138: (void) strncpy(display, argv[1], sizeof(display)); ! 139: } ! 140: ! 141: if (argc != 1) usage(); ! 142: /* Open display */ ! 143: if (!(dpy = XOpenDisplay(display))) { ! 144: (void) fprintf(stderr, "%s: Can't open display '%s'\n", ! 145: argv[0], XDisplayName(display)); ! 146: exit(1); ! 147: } ! 148: geostr = NULL; ! 149: XtGetResources(dpy, rlist, XtNumber(rlist),arglist,2, ! 150: DefaultRootWindow(dpy), ! 151: "Xload", "xload", &names, &classes); ! 152: sizehints.flags = PAspect | PMinSize | PPosition | PSize; ! 153: sizehints.min_aspect.x = 1; ! 154: sizehints.min_aspect.y = 5; ! 155: sizehints.max_aspect.x = 5; ! 156: sizehints.max_aspect.y = 1; ! 157: sizehints.min_width = sizehints.min_height = 15; ! 158: sizehints.width = 100; ! 159: sizehints.height = 100; ! 160: sizehints.x = 0; ! 161: sizehints.y = 200; ! 162: ! 163: if( geostr != NULL ) { ! 164: flags = XParseGeometry(geostr, &x, &y, &width, &height); ! 165: if(WidthValue & flags) { ! 166: sizehints.flags |= USSize; ! 167: sizehints.width = width; ! 168: XtSetArg(arglist[argCount], XtNwidth, width); ! 169: argCount++; ! 170: } ! 171: if(HeightValue & flags) { ! 172: sizehints.flags |= USSize; ! 173: sizehints.height = height; ! 174: XtSetArg(arglist[argCount], XtNheight, height); ! 175: argCount++; ! 176: } ! 177: if(XValue & flags) { ! 178: if(XNegative & flags) ! 179: x = DisplayWidth(dpy, DefaultScreen(dpy)) + x ! 180: -sizehints.width; ! 181: sizehints.flags |= USPosition; ! 182: sizehints.x = x; ! 183: XtSetArg(arglist[argCount], XtNx, x); ! 184: argCount++; ! 185: } ! 186: if(YValue & flags) { ! 187: if(YNegative & flags) ! 188: y = DisplayHeight(dpy, DefaultScreen(dpy)) + y ! 189: -sizehints.height; ! 190: sizehints.flags |= USPosition; ! 191: sizehints.y = y; ! 192: XtSetArg(arglist[argCount], XtNy, y); ! 193: argCount++; ! 194: } ! 195: } ! 196: ! 197: win = XtLoadCreate(dpy, DefaultRootWindow(dpy), ! 198: arglist, argCount); ! 199: XtMakeMaster(dpy, win); ! 200: /* XSetSizeHints(dpy, win, &sizehints, XA_WM_NORMAL_HINTS); ! 201: */ ! 202: XSetStandardProperties ( dpy, win, "xload","Load Ave", ! 203: XCreateBitmapFromData(dpy, DefaultRootWindow(dpy), ! 204: xload_bits, xload_width, xload_height), ! 205: argv, argc, &sizehints); ! 206: oldwmhints = XGetWMHints(dpy, win); ! 207: if (oldwmhints) { ! 208: wmhints = *oldwmhints; ! 209: free((char *)oldwmhints); ! 210: } else wmhints.flags = 0; ! 211: wmhints.flags |= InputHint /* | StateHint */; ! 212: wmhints.input = FALSE; ! 213: /* wmhints.initial_state = IconicState; */ ! 214: XSetWMHints( dpy, win, &wmhints); ! 215: XMapWindow(dpy, win); /* Map window to screen */ ! 216: for(;;) { ! 217: XEvent event; ! 218: ! 219: XtNextEvent(dpy, &event); ! 220: (void) XtDispatchEvent(&event); ! 221: } ! 222: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.