diff --git a/xdu.c b/xdu.c index 7412f60..35eaf29 100644 --- a/xdu.c +++ b/xdu.c @@ -1,6 +1,6 @@ /* - * X D U . C + * X D U . C * * Display the output of "du" in an X window. * @@ -8,7 +8,7 @@ * * 4 Sep 1991. * - * Copyright (c) Phillip C. Dykstra 1991, 1993, 1994 + * Copyright (c) Phillip C. Dykstra 1991, 1993, 1994 * The X Consortium, and any party obtaining a copy of these files from * the X Consortium, directly or indirectly, is granted, free of charge, a * full and unrestricted irrevocable, world-wide, paid up, royalty-free, @@ -54,33 +54,50 @@ #include #include "version.h" -/*extern char *malloc(), *calloc();*/ +/* + * extern char *malloc(), *calloc(); + */ -#define MAXDEPTH 80 /* max elements in a path */ -#define MAXNAME 1024 /* max pathname element length */ -#define MAXPATH 4096 /* max total pathname length */ -#define NCOLS 5 /* default number of columns in display */ +#define MAXDEPTH 80 /* max elements in a path */ +#define MAXNAME 1024 /* max pathname element length */ +#define MAXPATH 4096 /* max total pathname length */ +#define NCOLS 5 /* default number of columns in display */ -char* root_prefix = "[root]"; +char *root_prefix = "[root]"; -/* What we IMPORT from xwin.c */ -extern int xsetup(), xmainloop(), xdrawrect(), xrepaint(); +/* + * What we IMPORT from xwin.c + */ +extern int xsetup(), + xmainloop(), + xdrawrect(), + xrepaint(); -/* What we EXPORT to xwin.c */ -/* extern int press(), reset(), repaint(), setorder(), reorder(); */ -/* extern nodeinfo(), helpinfo(); */ -int ncols = NCOLS; +/* + * What we EXPORT to xwin.c + */ +/* + * extern int press(), reset(), repaint(), setorder(), reorder(); + */ +/* + * extern nodeinfo(), helpinfo(); + */ +int ncols = NCOLS; -/* internal routines */ +/* + * internal routines + */ // char *strdup(); -void addtree(); -void parse_file(); -void parse_entry(); -void dumptree(); -void clearrects(); -void sorttree(); - -/* order to sort paths by */ +void addtree(); +void parse_file(); +void parse_entry(); +void dumptree(); +void clearrects(); +void sorttree(); + +/* + * order to sort paths by + */ #define ORD_FIRST 1 #define ORD_LAST 2 #define ORD_ALPHA 3 @@ -88,7 +105,7 @@ void sorttree(); #define ORD_RALPHA 5 #define ORD_RSIZE 6 #define ORD_DEFAULT ORD_FIRST -int order = ORD_DEFAULT; +int order = ORD_DEFAULT; /* * Rectangle Structure @@ -96,10 +113,10 @@ int order = ORD_DEFAULT; * so that we can "find" it again on key presses. */ struct rect { - int left; - int top; - int width; - int height; + int left; + int top; + int width; + int height; }; /* @@ -107,26 +124,27 @@ struct rect { * Each node in the path tree is linked in with one of these. */ struct node { - char *name; - long long size; /* from here down in the tree */ - long num; /* entry number - for resorting */ - struct rect rect; /* last drawn screen rectangle */ - struct node *peer; /* siblings */ - struct node *child; /* list of children if !NULL */ - struct node *parent; /* backpointer to parent */ + char *name; + long long size; /* from here down in the tree */ + long num; /* entry number - for resorting */ + struct rect rect; /* last drawn screen rectangle */ + struct node *peer; /* siblings */ + struct node *child; /* list of children if !NULL */ + struct node *parent; /* backpointer to parent */ } top; -struct node *topp = ⊤ +struct node *topp = ⊤ #define NODE_NULL ((struct node *)0) -long nnodes = 0; +long nnodes = 0; /* * create a new node with the given name and size info */ -struct node *makenode(name, size) -char *name; -long long size; +struct node * +makenode(name, size) + char *name; + long long size; { - struct node *np; + struct node *np; np = (struct node *) calloc(1, sizeof(struct node)); np->name = strdup(name); @@ -141,25 +159,33 @@ long long size; * Return the node (if any) which has a draw rectangle containing * the given x,y point. */ -struct node *findnode(treep, x, y) -struct node *treep; -int x, y; +struct node * +findnode(treep, x, y) + struct node *treep; + int x, + y; { - struct node *np; - struct node *np2; + struct node *np; + struct node *np2; if (treep == NODE_NULL) - return NODE_NULL; - - if (x >= treep->rect.left && x < treep->rect.left + treep->rect.width && y >= treep->rect.top && y < treep->rect.top + treep->rect.height) { - /*printf("found %s\n", treep->name); */ - return treep; /* found */ + return NODE_NULL; + + if (x >= treep->rect.left && x < treep->rect.left + treep->rect.width + && y >= treep->rect.top + && y < treep->rect.top + treep->rect.height) { + /* + * printf("found %s\n", treep->name); + */ + return treep; /* found */ } - /* for each child */ + /* + * for each child + */ for (np = treep->child; np != NULL; np = np->peer) { - if ((np2 = findnode(np, x, y)) != NODE_NULL) - return np2; + if ((np2 = findnode(np, x, y)) != NODE_NULL) + return np2; } return NODE_NULL; } @@ -167,44 +193,46 @@ int x, y; /* * return a count of the number of children of a given node */ -int numchildren(nodep) -struct node *nodep; +int +numchildren(nodep) + struct node *nodep; { - int n; + int n; if (nodep == NODE_NULL) - return 0; + return 0; n = 0; for (nodep = nodep->child; nodep != NODE_NULL; nodep = nodep->peer) - n++; + n++; return n; } /* * fix_tree - This function repairs the tree when certain nodes haven't - * had their sizes initialized. [DPT911113] - * * * * This function is recursive * * * + * had their sizes initialized. [DPT911113] + * * * * This function is recursive * * * */ -long fix_tree(top) -struct node *top; +long +fix_tree(top) + struct node *top; { - struct node *nd; + struct node *nd; - if (top == NODE_NULL) /* recursion end conditions */ - return 0; - if (top->size >= 0) /* also halt recursion on valid size */ - return top->size; /* (remember: sizes init. to -1) */ + if (top == NODE_NULL) /* recursion end conditions */ + return 0; + if (top->size >= 0) /* also halt recursion on valid size */ + return top->size; /* (remember: sizes init. to -1) */ top->size = 0; for (nd = top->child; nd != NODE_NULL; nd = nd->peer) - top->size += fix_tree(nd); + top->size += fix_tree(nd); return top->size; } -static char usage[] = "\ +static char usage[] = "\ Usage: xdu [-options ...] filename\n\ or xdu [-options ...] < du.out\n\ \n\ @@ -221,89 +249,109 @@ Graphically displays the output of du in an X window\n\ Toolkit options: -fg, -bg, -rv, -display, -geometry, etc.\n\ "; -int main(argc, argv) -int argc; -char **argv; +int +main(argc, argv) + int argc; + char **argv; { top.name = root_prefix; top.size = -1; xsetup(&argc, argv); if (argc == 1) { - if (isatty(fileno(stdin))) { - fprintf(stderr, "%s", usage); - exit(1); - } else { - parse_file("-"); - } + if (isatty(fileno(stdin))) { + fprintf(stderr, "%s", usage); + exit(1); + } else { + parse_file("-"); + } } else if (argc == 2 && strcmp(argv[1], "-help") != 0) { - parse_file(argv[1]); + parse_file(argv[1]); } else { - fprintf(stderr, "%s", usage); - exit(1); + fprintf(stderr, "%s", usage); + exit(1); } top.size = fix_tree(&top); - /*dumptree(&top,0); */ + /* + * dumptree(&top,0); + */ if (order != ORD_DEFAULT) - sorttree(&top, order); + sorttree(&top, order); topp = ⊤ - /* don't display root if only one child */ + /* + * don't display root if only one child + */ if (numchildren(topp) == 1) - topp = topp->child; + topp = topp->child; xmainloop(); exit(0); } -void parse_file(filename) -char *filename; +void +parse_file(filename) + char *filename; { - char buf[4096]; - char name[4096]; - long long size; - FILE *fp; - char *buff; + char buf[4096]; + char name[4096]; + long long size; + FILE *fp; + char *buff; if (strcmp(filename, "-") == 0) { - fp = stdin; + fp = stdin; } else { - if ((fp = fopen(filename, "r")) == 0) { - fprintf(stderr, "xdu: can't open \"%s\"\n", filename); - exit(1); - } + if ((fp = fopen(filename, "r")) == 0) { + fprintf(stderr, "xdu: can't open \"%s\"\n", filename); + exit(1); + } } while (fgets(buf, sizeof(buf), fp) != NULL) { -/* sscanf(buf, "%lld %s\n", &size, name); */ - sscanf(buf, "%lld", &size); - buff = buf; - while ((*buff >= '0' && *buff <= '9') || (*buff == ' ' || *buff == '\t')) { - buff++; - } - strncpy(name, buff, strlen(buff) - 1); - name[strlen(buff) - 1] = '\0'; -/* printf("%d %s\n", size, name); */ - parse_entry(name, size); + /* + * sscanf(buf, "%lld %s\n", &size, name); + */ + sscanf(buf, "%lld", &size); + buff = buf; + while ((*buff >= '0' && *buff <= '9') + || (*buff == ' ' || *buff == '\t')) { + buff++; + } + strncpy(name, buff, strlen(buff) - 1); + name[strlen(buff) - 1] = '\0'; + /* + * printf("%d %s\n", size, name); + */ + parse_entry(name, size); } fclose(fp); } -/* bust up a path string and link it into the tree */ -void parse_entry(char *name, long long size) +/* + * bust up a path string and link it into the tree + */ +void +parse_entry(name, size) + char *name; + long long size; { - char *path[MAXDEPTH]; /* break up path into this list */ - char buf[MAXNAME]; /* temp space for path element name */ - int arg, indx; - int length; /* nelson@reed.edu - trailing / fix */ + char *path[MAXDEPTH]; /* break up path into this list */ + char buf[MAXNAME]; /* temp space for path element + * name */ + int arg, + indx; + int length; /* nelson@reed.edu - trailing / fix */ if (*name == '/') - name++; /* skip leading / */ + name++; /* skip leading / */ length = strlen(name); if ((length > 0) && (name[length - 1] == '/')) { - /* strip off trailing / (e.g. GNU du) */ - name[length - 1] = 0; + /* + * strip off trailing / (e.g. GNU du) + */ + name[length - 1] = 0; } arg = 0; @@ -311,18 +359,18 @@ void parse_entry(char *name, long long size) bzero((char *) path, sizeof(path)); bzero(buf, sizeof(buf)); while (*name) { - if (*name == '/') { - buf[indx] = 0; - path[arg++] = strdup(buf); - indx = 0; - if (arg >= MAXDEPTH) - break; - } else { - buf[indx++] = *name; - if (indx >= MAXNAME) - break; - } - name++; + if (*name == '/') { + buf[indx] = 0; + path[arg++] = strdup(buf); + indx = 0; + if (arg >= MAXDEPTH) + break; + } else { + buf[indx++] = *name; + if (indx >= MAXNAME) + break; + } + name++; } buf[indx] = 0; path[arg++] = strdup(buf); @@ -336,180 +384,238 @@ void parse_entry(char *name, long long size) * based on the current sorting order. * Return -1 if is should be before. * 0 if it is a toss up. - * 1 if it should go after. + * 1 if it should go after. */ -int compare(n1, n2, order) -struct node *n1, *n2; -int order; +int +compare(n1, n2, order) + struct node *n1, + *n2; + int order; { switch (order) { case ORD_SIZE: - if (n2->size > n1->size) { - return 1; - } else if (n2->size < n1->size) { - return -1; - } else { - return strcmp(n1->name, n2->name); - } - /* not reached */ + if (n2->size > n1->size) { + return 1; + } else if (n2->size < n1->size) { + return -1; + } else { + return strcmp(n1->name, n2->name); + } + /* + * not reached + */ case ORD_RSIZE: - if (n1->size > n2->size) { - return 1; - } else if (n1->size < n2->size) { - return -1; - } else { - return strcmp(n1->name, n2->name); - } - /* not reached */ + if (n1->size > n2->size) { + return 1; + } else if (n1->size < n2->size) { + return -1; + } else { + return strcmp(n1->name, n2->name); + } + /* + * not reached + */ case ORD_ALPHA: - return strcmp(n1->name, n2->name); - break; + return strcmp(n1->name, n2->name); + break; case ORD_RALPHA: - return strcmp(n2->name, n1->name); - break; + return strcmp(n2->name, n1->name); + break; case ORD_FIRST: - /*return -1; */ - return (n1->num - n2->num); - break; + /* + * return -1; + */ + return (n1->num - n2->num); + break; case ORD_LAST: - /*return 1; */ - return (n2->num - n1->num); - break; + /* + * return 1; + */ + return (n2->num - n1->num); + break; } - /* shouldn't get here */ + /* + * shouldn't get here + */ fprintf(stderr, "xdu: bad insertion order\n"); return 0; } -void insertchild(nodep, childp, order) -struct node *nodep; /* parent */ -struct node *childp; /* child to be added */ -int order; /* FIRST, LAST, ALPHA, SIZE */ +void +insertchild(nodep, childp, order) + struct node *nodep; /* parent */ + struct node *childp; /* child to be added */ + int order; /* FIRST, LAST, ALPHA, SIZE */ { - struct node *np, *np1; + struct node *np, + *np1; if (nodep == NODE_NULL || childp == NODE_NULL) - return; + return; if (childp->peer != NODE_NULL) { - fprintf(stderr, "xdu: can't insert child with peers\n"); - return; + fprintf(stderr, "xdu: can't insert child with peers\n"); + return; } childp->parent = nodep; if (nodep->child == NODE_NULL) { - /* no children, order doesn't matter */ - nodep->child = childp; - return; + /* + * no children, order doesn't matter + */ + nodep->child = childp; + return; } - /* nodep has at least one child already */ + /* + * nodep has at least one child already + */ if (compare(childp, nodep->child, order) < 0) { - /* new first child */ - childp->peer = nodep->child; - nodep->child = childp; - return; + /* + * new first child + */ + childp->peer = nodep->child; + nodep->child = childp; + return; } np1 = nodep->child; for (np = np1->peer; np != NODE_NULL; np = np->peer) { - if (compare(childp, np, order) < 0) { - /* insert between np1 and np */ - childp->peer = np; - np1->peer = childp; - return; - } - np1 = np; + if (compare(childp, np, order) < 0) { + /* + * insert between np1 and np + */ + childp->peer = np; + np1->peer = childp; + return; + } + np1 = np; } - /* at end, link new child on */ + /* + * at end, link new child on + */ np1->peer = childp; } -/* add path as a child of top - recursively */ -void addtree(top, path, size) -struct node *top; -char *path[]; -long long size; +/* + * add path as a child of top - recursively + */ +void +addtree(top, path, size) + struct node *top; + char *path[]; + long long size; { - struct node *np; + struct node *np; - /*printf("addtree(\"%s\",\"%s\",%d)\n", top->name, path[0], size); */ + /* + * printf("addtree(\"%s\",\"%s\",%d)\n", top->name, path[0], size); + */ - /* check all children for a match */ + /* + * check all children for a match + */ for (np = top->child; np != NULL; np = np->peer) { - if (strcmp(path[0], np->name) == 0) { - /* name matches */ - if (path[1] == NULL) { - /* end of the chain, save size */ - np->size = size; - return; - } - /* recurse */ - addtree(np, &path[1], size); - return; - } + if (strcmp(path[0], np->name) == 0) { + /* + * name matches + */ + if (path[1] == NULL) { + /* + * end of the chain, save size + */ + np->size = size; + return; + } + /* + * recurse + */ + addtree(np, &path[1], size); + return; + } } - /* no child matched, add a new child */ + /* + * no child matched, add a new child + */ np = makenode(path[0], -1); insertchild(top, np, order); if (path[1] == NULL) { - /* end of the chain, save size */ - np->size = size; - return; + /* + * end of the chain, save size + */ + np->size = size; + return; } - /* recurse */ + /* + * recurse + */ addtree(np, &path[1], size); return; } -/* debug tree print */ -void dumptree(np, level) -struct node *np; -int level; +/* + * debug tree print + */ +void +dumptree(np, level) + struct node *np; + int level; { - int i; - struct node *subnp; + int i; + struct node *subnp; for (i = 0; i < level; i++) - printf(" "); + printf(" "); printf("%s %lld\n", np->name, np->size); for (subnp = np->child; subnp != NULL; subnp = subnp->peer) { - dumptree(subnp, level + 1); + dumptree(subnp, level + 1); } } -void sorttree(np, order) -struct node *np; -int order; +void +sorttree(np, order) + struct node *np; + int order; { - struct node *subnp; - struct node *np0, *np1, *np2, *np3; - - /* sort the trees of each of this nodes children */ + struct node *subnp; + struct node *np0, + *np1, + *np2, + *np3; + + /* + * sort the trees of each of this nodes children + */ for (subnp = np->child; subnp != NODE_NULL; subnp = subnp->peer) { - sorttree(subnp, order); + sorttree(subnp, order); } - /* then put the given nodes children in order */ - np0 = np; /* np0 points to node before np1 */ + /* + * then put the given nodes children in order + */ + np0 = np; /* np0 points to node before np1 */ for (np1 = np->child; np1 != NODE_NULL; np1 = np1->peer) { - np2 = np1; /* np2 points to node before np3 */ - for (np3 = np1->peer; np3 != NODE_NULL; np3 = np3->peer) { - if (compare(np3, np1, order) < 0) { - /* swap links */ - if (np0 == np) - np0->child = np3; - else - np0->peer = np3; - np2->peer = np3->peer; - np3->peer = np1; - - /* adjust pointers */ - np1 = np3; - np3 = np2; - } - np2 = np3; - } - np0 = np1; + np2 = np1; /* np2 points to node before np3 */ + for (np3 = np1->peer; np3 != NODE_NULL; np3 = np3->peer) { + if (compare(np3, np1, order) < 0) { + /* + * swap links + */ + if (np0 == np) + np0->child = np3; + else + np0->peer = np3; + np2->peer = np3->peer; + np3->peer = np1; + + /* + * adjust pointers + */ + np1 = np3; + np3 = np2; + } + np2 = np3; + } + np0 = np1; } } @@ -517,20 +623,27 @@ int order; * Draws all children of a node within the given rectangle. * Recurses on children. */ -void drawchildren(nodep, rect) -struct node *nodep; /* node whose children we should draw */ -struct rect rect; /* rectangle to draw all children in */ +void +drawchildren(nodep, rect) + struct node *nodep; /* node whose children we should draw */ + struct rect rect; /* rectangle to draw all children in */ { - long long totalsize; - int totalheight; - struct node *np; - double fractsize; - int height; - int top; - long long size; - - /*printf("Drawing children of \"%s\", %d\n", nodep->name, nodep->size); */ - /*printf("In [%d,%d,%d,%d]\n", rect.left,rect.top,rect.width,rect.height); */ + long long totalsize; + int totalheight; + struct node *np; + double fractsize; + int height; + int top; + long long size; + + /* + * printf("Drawing children of \"%s\", %d\n", nodep->name, + * nodep->size); + */ + /* + * printf("In [%d,%d,%d,%d]\n", + * rect.left,rect.top,rect.width,rect.height); + */ top = rect.top; size = 0; @@ -539,41 +652,55 @@ struct rect rect; /* rectangle to draw all children in */ totalheight = rect.height; totalsize = nodep->size; if (totalsize == 0) { - /* total the sizes of the children */ - totalsize = 0; - for (np = nodep->child; np != NULL; np = np->peer) - totalsize += np->size; - nodep->size = totalsize; + /* + * total the sizes of the children + */ + totalsize = 0; + for (np = nodep->child; np != NULL; np = np->peer) + totalsize += np->size; + nodep->size = totalsize; } - /* for each child */ + /* + * for each child + */ for (np = nodep->child; np != NULL; np = np->peer) { - fractsize = totalsize ? np->size / (double) totalsize : 0; - height = fractsize * totalheight + 0.5; - - { - struct rect subrect; - /* printf("%s, drawrect[%d,%d,%d,%d]\n", np->name, - rect.left,top,rect.width,height); */ - xdrawrect(np->name, np->size, rect.left, top, rect.width, height); - - /* save current screen rectangle for lookups */ - np->rect.left = rect.left; - np->rect.top = top; - np->rect.width = rect.width; - np->rect.height = height; - - - /* draw children in subrectangle */ - subrect.left = rect.left + rect.width; - subrect.top = top; - subrect.width = rect.width; - subrect.height = height; - drawchildren(np, subrect); - - size += np->size; - top = rect.top + (totalsize ? (double) size / totalsize * rect.height + 0.5 : 0); - } + fractsize = totalsize ? np->size / (double) totalsize : 0; + height = fractsize * totalheight + 0.5; + + { + struct rect subrect; + /* + * printf("%s, drawrect[%d,%d,%d,%d]\n", np->name, + * rect.left,top,rect.width,height); + */ + xdrawrect(np->name, np->size, rect.left, top, rect.width, + height); + + /* + * save current screen rectangle for lookups + */ + np->rect.left = rect.left; + np->rect.top = top; + np->rect.width = rect.width; + np->rect.height = height; + + + /* + * draw children in subrectangle + */ + subrect.left = rect.left + rect.width; + subrect.top = top; + subrect.width = rect.width; + subrect.height = height; + drawchildren(np, subrect); + + size += np->size; + top = + rect.top + + (totalsize ? (double) size / totalsize * rect.height + + 0.5 : 0); + } } } @@ -581,23 +708,31 @@ struct rect rect; /* rectangle to draw all children in */ * Draws a node in the given rectangle, and all of its children * to the "right" of the given rectangle. */ -void drawnode(nodep, rect) -struct node *nodep; /* node whose children we should draw */ -struct rect rect; /* rectangle to draw all children in */ +void +drawnode(nodep, rect) + struct node *nodep; /* node whose children we should draw */ + struct rect rect; /* rectangle to draw all children in */ { - struct rect subrect; + struct rect subrect; - /*printf("Drawing \"%s\" %d\n", nodep->name, nodep->size); */ + /* + * printf("Drawing \"%s\" %d\n", nodep->name, nodep->size); + */ - xdrawrect(nodep->name, nodep->size, rect.left, rect.top, rect.width, rect.height); + xdrawrect(nodep->name, nodep->size, rect.left, rect.top, rect.width, + rect.height); - /* save current screen rectangle for lookups */ + /* + * save current screen rectangle for lookups + */ nodep->rect.left = rect.left; nodep->rect.top = rect.top; nodep->rect.width = rect.width; nodep->rect.height = rect.height; - /* draw children in subrectangle */ + /* + * draw children in subrectangle + */ subrect.left = rect.left + rect.width; subrect.top = rect.top; subrect.width = rect.width; @@ -610,60 +745,66 @@ struct rect rect; /* rectangle to draw all children in */ * clear the rectangle information of a given node * and all of its decendents */ -void clearrects(nodep) -struct node *nodep; +void +clearrects(nodep) + struct node *nodep; { - struct node *np; + struct node *np; if (nodep == NODE_NULL) - return; + return; nodep->rect.left = 0; nodep->rect.top = 0; nodep->rect.width = 0; nodep->rect.height = 0; - /* for each child */ + /* + * for each child + */ for (np = nodep->child; np != NULL; np = np->peer) { - clearrects(np); + clearrects(np); } } -void pwd(void) +void +pwd(void) { - struct node *np; - struct node *stack[MAXDEPTH]; - int num = 0; - struct node *rootp; - char path[MAXPATH]; + struct node *np; + struct node *stack[MAXDEPTH]; + int num = 0; + struct node *rootp; + char path[MAXPATH]; rootp = ⊤ if (numchildren(rootp) == 1) - rootp = rootp->child; + rootp = rootp->child; np = topp; while (np != NODE_NULL) { - stack[num++] = np; - if (np == rootp) - break; - np = np->parent; + stack[num++] = np; + if (np == rootp) + break; + np = np->parent; } path[0] = '\0'; while (--num >= 0) { - strcat(path, stack[num]->name); - if (num != 0) - strcat(path, "/"); + strcat(path, stack[num]->name); + if (num != 0) + strcat(path, "/"); } - printf("%s %lld (%.2f%%)\n", path, topp->size, 100.0 * topp->size / rootp->size); + printf("%s %lld (%.2f%%)\n", path, topp->size, + 100.0 * topp->size / rootp->size); } #ifdef NEED_STRDUP -char *strdup(s) -char *s; +char * +strdup(s) + char *s; { - int n; - char *cp; + int n; + char *cp; n = strlen(s); cp = malloc(n + 1); @@ -675,133 +816,163 @@ char *s; /**************** External Entry Points ****************/ -void press(int x, int y) +void +press(x, y) + int x, + y; { - struct node *np; + struct node *np; - /*printf("press(%d,%d)...\n",x,y); */ + /* + * printf("press(%d,%d)...\n",x,y); + */ np = findnode(&top, x, y); - /*printf("Found \"%s\"\n", np?np->name:"(null)"); */ + /* + * printf("Found \"%s\"\n", np?np->name:"(null)"); + */ if (np == topp) { - /* already top, go up if possible */ - if (np->parent != &top || numchildren(&top) != 1) - np = np->parent; - /*printf("Already top, parent = \"%s\"\n", np?np->name:"(null)"); */ + /* + * already top, go up if possible + */ + if (np->parent != &top || numchildren(&top) != 1) + np = np->parent; + /* + * printf("Already top, parent = \"%s\"\n", np?np->name:"(null)"); + */ } if (np != NODE_NULL) { - topp = np; - xrepaint(); + topp = np; + xrepaint(); } } -void printpath(int x, int y) +void +printpath(x, y) + int x, + y; { - struct node *np; - char* path; - char* tmp_path; + struct node *np; + char *path; + char *tmp_path; np = findnode(&top, x, y); if (np == NULL) - return; + return; asprintf(&path, "%s", np->name); - while(np->parent != NULL) { - tmp_path = path; - asprintf(&path, "%s/%s", np->parent->name, path); - np = np->parent; - free(tmp_path); + while (np->parent != NULL) { + tmp_path = path; + asprintf(&path, "%s/%s", np->parent->name, path); + np = np->parent; + free(tmp_path); } tmp_path = path + strlen(root_prefix); printf("%s\n", tmp_path); free(path); } -void reset(void) +void +reset(void) { topp = ⊤ if (numchildren(topp) == 1) - topp = topp->child; + topp = topp->child; xrepaint(); } -void repaint(int width, int height) +void +repaint(width, height) + int width, + height; { - struct rect rect; + struct rect rect; - /* define a rectangle to draw into */ + /* + * define a rectangle to draw into + */ rect.top = 0; rect.left = 0; rect.width = width / ncols; rect.height = height; - clearrects(&top); /* clear current rectangle info */ - drawnode(topp, rect); /* draw tree into given rectangle */ + clearrects(&top); /* clear current rectangle info */ + drawnode(topp, rect); /* draw tree into given rectangle */ #if 0 - pwd(); /* display current path */ + pwd(); /* display current path */ #endif } -void setorder(char *op) +void +setorder(op) + char *op; { if (strcmp(op, "size") == 0) { - order = ORD_SIZE; + order = ORD_SIZE; } else if (strcmp(op, "rsize") == 0) { - order = ORD_RSIZE; + order = ORD_RSIZE; } else if (strcmp(op, "alpha") == 0) { - order = ORD_ALPHA; + order = ORD_ALPHA; } else if (strcmp(op, "ralpha") == 0) { - order = ORD_RALPHA; + order = ORD_RALPHA; } else if (strcmp(op, "first") == 0) { - order = ORD_FIRST; + order = ORD_FIRST; } else if (strcmp(op, "last") == 0) { - order = ORD_LAST; + order = ORD_LAST; } else if (strcmp(op, "reverse") == 0) { - switch (order) { - case ORD_ALPHA: - order = ORD_RALPHA; - break; - case ORD_RALPHA: - order = ORD_ALPHA; - break; - case ORD_SIZE: - order = ORD_RSIZE; - break; - case ORD_RSIZE: - order = ORD_SIZE; - break; - case ORD_FIRST: - order = ORD_LAST; - break; - case ORD_LAST: - order = ORD_FIRST; - break; - } + switch (order) { + case ORD_ALPHA: + order = ORD_RALPHA; + break; + case ORD_RALPHA: + order = ORD_ALPHA; + break; + case ORD_SIZE: + order = ORD_RSIZE; + break; + case ORD_RSIZE: + order = ORD_SIZE; + break; + case ORD_FIRST: + order = ORD_LAST; + break; + case ORD_LAST: + order = ORD_FIRST; + break; + } } else { - fprintf(stderr, "xdu: bad order \"%s\"\n", op); + fprintf(stderr, "xdu: bad order \"%s\"\n", op); } } -void reorder(char *op) -{ /* order name */ +void +reorder(op) + char *op; +{ /* order name */ setorder(op); sorttree(topp, order); xrepaint(); } -void nodeinfo(void) +void +nodeinfo(void) { - struct node *np; + struct node *np; - /* display current root path */ + /* + * display current root path + */ pwd(); - /* display each child of this node */ + /* + * display each child of this node + */ for (np = topp->child; np != NULL; np = np->peer) { - printf("%-12lld %s\n", np->size, np->name); + printf("%-12lld %s\n", np->size, np->name); } } -void helpinfo(void) +void +helpinfo(void) { fprintf(stdout, "\n\ XDU Version %s - Keyboard Commands\n\ @@ -818,33 +989,79 @@ XDU Version %s - Keyboard Commands\n\ ", XDU_VERSION); } -void fprintpsstart(FILE * fp) +void +fprintpsstart(fp) + FILE *fp; { - fprintf(fp, "%%!\n" "%%%%BoundingBox: 26 693 85 808\n" "%%%%Title: xdu output\n" "%%%%Orientation: Portrait\n" "%%%%Pages: 1\n" "%%%%DocumentFonts: (atend)\n" "%%%%EndComments\n" "%%%%BeginProlog\n\n" "/xdudict 2 dict def\n" "xdudict begin\n\n" "end\n\n" "%%%%EndProlog\n" "%%%%Page: 1 1\n\n" "xdudict begin\n" "/xdusavedpage save def\n\n" "1 setmiterlimit\n" "1 setlinewidth\n" "0 setgray\n" "72 0 mul 72 11.60 mul translate\n" "72 128 div 100.000 mul 100 div dup neg scale\n" "gsave\n" "/xduorigctm matrix currentmatrix def\n\n"); + fprintf(fp, + "%%!\n" "%%%%BoundingBox: 26 693 85 808\n" + "%%%%Title: xdu output\n" "%%%%Orientation: Portrait\n" + "%%%%Pages: 1\n" "%%%%DocumentFonts: (atend)\n" + "%%%%EndComments\n" "%%%%BeginProlog\n\n" + "/xdudict 2 dict def\n" "xdudict begin\n\n" "end\n\n" + "%%%%EndProlog\n" "%%%%Page: 1 1\n\n" "xdudict begin\n" + "/xdusavedpage save def\n\n" "1 setmiterlimit\n" + "1 setlinewidth\n" "0 setgray\n" + "72 0 mul 72 11.60 mul translate\n" + "72 128 div 100.000 mul 100 div dup neg scale\n" "gsave\n" + "/xduorigctm matrix currentmatrix def\n\n"); } -void fprintpsend(FILE * fp) +void +fprintpsend(fp) + FILE *fp; { - fprintf(fp, "grestore\n" "xdusavedpage restore\n" "end\n" "showpage\n" "\n" "%%%%Trailer\n" "%%%%DocumentFonts: fixed\n" "%%%%EOF\n"); + fprintf(fp, + "grestore\n" "xdusavedpage restore\n" "end\n" "showpage\n" "\n" + "%%%%Trailer\n" "%%%%DocumentFonts: fixed\n" "%%%%EOF\n"); } -void fprintpsbox(FILE * fp, int x1, int y1, int x2, int y2) +void +fprintpsbox(fp, x1, y1, x2, y2) + FILE *fp; + int x1, + y1, + x2, + y2; { - fprintf(fp, "%%BOX\n" "0 setgray\n" "gsave\n" " 10 setmiterlimit\n" " gsave\n" " newpath\n" " %i %i moveto %i %i lineto %i %i lineto %i %i lineto\n" " closepath\n" " stroke\n" " grestore\n" "grestore\n" "\n", x1, y1, x2 + x1, y1, x2 + x1, y2 + y1, x1, y2 + y1); + fprintf(fp, + "%%BOX\n" "0 setgray\n" "gsave\n" " 10 setmiterlimit\n" + " gsave\n" " newpath\n" + " %i %i moveto %i %i lineto %i %i lineto %i %i lineto\n" + " closepath\n" " stroke\n" " grestore\n" "grestore\n" + "\n", x1, y1, x2 + x1, y1, x2 + x1, y2 + y1, x1, y2 + y1); } -void fprintpstext(FILE * fp, int x, int y, char *s) +void +fprintpstext(fp, x, y, s) + FILE *fp; + int x, + y; + char *s; { - fprintf(fp, "%%TEXT\n" "0 setgray\n" "/fixed findfont [10 0 0 -10 0 0] makefont setfont\n" " gsave\n" " %i %i moveto (%s) show\n" " grestore\n" "\n", x, y, s); + fprintf(fp, + "%%TEXT\n" "0 setgray\n" + "/fixed findfont [10 0 0 -10 0 0] makefont setfont\n" + " gsave\n" " %i %i moveto (%s) show\n" " grestore\n" "\n", + x, y, s); } -void savepschildren(FILE * fp, struct node *nodep, struct rect rect, int showsize) +void +savepschildren(fp, nodep, rect, showsize) + FILE *fp; + struct node *nodep; + struct rect rect; + int showsize; { - long long totalsize; - int totalheight, height, top, size; - struct node *np; - char *name, label[1024]; - struct rect subrect; + long long totalsize; + int totalheight, + height, + top, + size; + struct node *np; + char *name, + label[1024]; + struct rect subrect; top = rect.top; size = 0; @@ -852,82 +1069,101 @@ void savepschildren(FILE * fp, struct node *nodep, struct rect rect, int showsiz totalsize = nodep->size; if (totalsize == 0) { - for (np = nodep->child; np != NULL; np = np->peer) - totalsize += np->size; - nodep->size = totalsize; + for (np = nodep->child; np != NULL; np = np->peer) + totalsize += np->size; + nodep->size = totalsize; } for (np = nodep->child; np != NULL; np = np->peer) { - height = (totalsize ? (np->size / (double) totalsize) : 0) * totalheight + 0.5; - - switch (showsize) { - case 1: - sprintf(label, "%s \\(%lldk\\)", np->name, np->size); - name = label; - break; - case 2: - sprintf(label, "%s \\(%.2fM\\)", np->name, (double) np->size / (double) 1024); - name = label; - break; - case 3: - sprintf(label, "%s \\(%.2fG\\)", np->name, (double) np->size / (double) (1024 * 1024)); - name = label; - break; - case 4: - sprintf(label, "%s \\(%.2fT\\)", np->name, (double) np->size / (double) (1024 * 1024 * 1024)); - name = label; - break; - default: - printf("arghhhhh!"); - break; - } - - fprintpsbox(fp, rect.left, top, rect.width, height); - - if (height > 10) - fprintpstext(fp, rect.left + 4, top + (height) / 2.0 + 3.0, name); - - subrect.left = rect.left + rect.width; - subrect.top = top; - subrect.width = rect.width; - subrect.height = height; - - savepschildren(fp, np, subrect, showsize); - - size += np->size; - top = rect.top + (totalsize ? (double) size / (double) totalsize * rect.height + 0.5 : 0); + height = + (totalsize ? (np->size / (double) totalsize) : 0) * + totalheight + 0.5; + + switch (showsize) { + case 1: + sprintf(label, "%s \\(%lldk\\)", np->name, np->size); + name = label; + break; + case 2: + sprintf(label, "%s \\(%.2fM\\)", np->name, + (double) np->size / (double) 1024); + name = label; + break; + case 3: + sprintf(label, "%s \\(%.2fG\\)", np->name, + (double) np->size / (double) (1024 * 1024)); + name = label; + break; + case 4: + sprintf(label, "%s \\(%.2fT\\)", np->name, + (double) np->size / (double) (1024 * 1024 * 1024)); + name = label; + break; + default: + printf("arghhhhh!"); + break; + } + + fprintpsbox(fp, rect.left, top, rect.width, height); + + if (height > 10) + fprintpstext(fp, rect.left + 4, top + (height) / 2.0 + 3.0, + name); + + subrect.left = rect.left + rect.width; + subrect.top = top; + subrect.width = rect.width; + subrect.height = height; + + savepschildren(fp, np, subrect, showsize); + + size += np->size; + top = + rect.top + + (totalsize ? (double) size / (double) totalsize * rect.height + + 0.5 : 0); } } -void savepsnode(FILE * fp, struct node *nodep, struct rect rect, int showsize) +void +savepsnode(fp, nodep, rect, showsize) + FILE *fp; + struct node *nodep; + struct rect rect; + int showsize; { - struct rect subrect; - char label[1024], *name; + struct rect subrect; + char label[1024], + *name; switch (showsize) { case 1: - sprintf(label, "%s \\(%lldk\\)", nodep->name, nodep->size); - name = label; - break; + sprintf(label, "%s \\(%lldk\\)", nodep->name, nodep->size); + name = label; + break; case 2: - sprintf(label, "%s \\(%.2fM\\)", nodep->name, (double) nodep->size / (double) 1024); - name = label; - break; + sprintf(label, "%s \\(%.2fM\\)", nodep->name, + (double) nodep->size / (double) 1024); + name = label; + break; case 3: - sprintf(label, "%s \\(%.2fG\\)", nodep->name, (double) nodep->size / (double) (1024 * 1024)); - name = label; - break; + sprintf(label, "%s \\(%.2fG\\)", nodep->name, + (double) nodep->size / (double) (1024 * 1024)); + name = label; + break; case 4: - sprintf(label, "%s \\(%.2fT\\)", nodep->name, (double) nodep->size / (double) (1024 * 1024 * 1024)); - name = label; - break; + sprintf(label, "%s \\(%.2fT\\)", nodep->name, + (double) nodep->size / (double) (1024 * 1024 * 1024)); + name = label; + break; default: - name = NULL; - break; + name = NULL; + break; } fprintpsbox(fp, rect.left, rect.top, rect.width, rect.height); - fprintpstext(fp, rect.left + 4, rect.top + (rect.height - rect.top) / 2, name); + fprintpstext(fp, rect.left + 4, + rect.top + (rect.height - rect.top) / 2, name); subrect.left = rect.left + rect.width; subrect.top = rect.top; @@ -938,128 +1174,165 @@ void savepsnode(FILE * fp, struct node *nodep, struct rect rect, int showsize) } -void savetops(char *fname, int showsize) +void +savetops(fname, showsize) + char *fname; + int showsize; { - FILE *fp; - struct rect rect; + FILE *fp; + struct rect rect; if ((fp = fopen(fname, "w")) != NULL) { - fprintpsstart(fp); + fprintpsstart(fp); - rect.top = 40; - rect.left = 40; - rect.width = 960 / ncols; - rect.height = 1400; + rect.top = 40; + rect.left = 40; + rect.width = 960 / ncols; + rect.height = 1400; - savepsnode(fp, topp, rect, showsize); + savepsnode(fp, topp, rect, showsize); - fprintpsend(fp); - fclose(fp); + fprintpsend(fp); + fclose(fp); } } -void fprintsvgstart(FILE * fp) +void +fprintsvgstart(fp) + FILE *fp; { fprintf(fp, "\n"); } -void fprintsvgend(FILE * fp) +void +fprintsvgend(fp) + FILE *fp; { fprintf(fp, ""); } -void fprintsvgnode(FILE * fp, struct rect rect) +void +fprintsvgnode(fp, rect) + FILE *fp; + struct rect rect; { - fprintf(fp, " \n", rect.left, rect.top, rect.width, rect.height); + fprintf(fp, + " \n", + rect.left, rect.top, rect.width, rect.height); } -void fprintsvgnodetext(FILE * fp, int x, int y, long long size, char * name, int showsize) +void +fprintsvgnodetext(fp, x, y, size, name, showsize) + FILE *fp; + int x, + y; + long long size; + char *name; + int showsize; { - char buffer[1024], *text; + char buffer[1024], + *text; switch (showsize) { case 1: - sprintf(buffer, "%s (%lldk)", name, size); - text = buffer; - break; + sprintf(buffer, "%s (%lldk)", name, size); + text = buffer; + break; case 2: - sprintf(buffer, "%s (%.2fM)", name, (double)size/1024.0); - text = buffer; - break; + sprintf(buffer, "%s (%.2fM)", name, (double) size / 1024.0); + text = buffer; + break; case 3: - sprintf(buffer, "%s (%.2fG)", name, (double)size/(1024.0*1024.0)); - text = buffer; - break; + sprintf(buffer, "%s (%.2fG)", name, + (double) size / (1024.0 * 1024.0)); + text = buffer; + break; case 4: - sprintf(buffer, "%s (%.2fT)", name, (double)size/(1024.0*1024.0*1024.0)); - text = buffer; - break; + sprintf(buffer, "%s (%.2fT)", name, + (double) size / (1024.0 * 1024.0 * 1024.0)); + text = buffer; + break; default: - printf("arghhhhh"); - break; + printf("arghhhhh"); + break; } - fprintf(fp, " %s\n", x, y, text); + fprintf(fp, + " %s\n", + x, y, text); } -void savesvgnode(FILE * fp, struct node * nodep, int showsize, int depth) +void +savesvgnode(fp, nodep, showsize, depth) + FILE *fp; + struct node *nodep; + int showsize, + depth; { - struct node *np; + struct node *np; if (depth >= ncols) - return; + return; else - depth++; + depth++; for (np = nodep; np != NULL; np = np->peer) { - fprintsvgnode(fp, np->rect); - if (np->rect.height > 13) - fprintsvgnodetext(fp, np->rect.left+4, np->rect.top+np->rect.height/2+6, np->size, np->name, showsize); - savesvgnode(fp, np->child, showsize, depth); + fprintsvgnode(fp, np->rect); + if (np->rect.height > 13) + fprintsvgnodetext(fp, np->rect.left + 4, + np->rect.top + np->rect.height / 2 + 6, + np->size, np->name, showsize); + savesvgnode(fp, np->child, showsize, depth); } } -void savetosvg(char *fname, int showsize) +void +savetosvg(fname, showsize) + char *fname; + int showsize; { - FILE *fp; + FILE *fp; if ((fp = fopen(fname, "w")) != NULL) { - fprintsvgstart(fp); - savesvgnode(fp, topp, showsize, 0); - fprintsvgend(fp); - fclose(fp); + fprintsvgstart(fp); + savesvgnode(fp, topp, showsize, 0); + fprintsvgend(fp); + fclose(fp); } } -void uponechild(void) +void +uponechild(void) { - struct node *np, *parent = NULL; + struct node *np, + *parent = NULL; np = topp; if (np->parent != &top || numchildren(&top) != 1) { - parent = np->parent; + parent = np->parent; } if (parent != NODE_NULL) { - np = parent->child; - if (topp != np) { - for (; np->peer; np = np->peer) { - if (np->peer == topp) { - topp = np; - xrepaint(); - return; - } - } - } + np = parent->child; + if (topp != np) { + for (; np->peer; np = np->peer) { + if (np->peer == topp) { + topp = np; + xrepaint(); + return; + } + } + } } } -void downonechild(void) +void +downonechild(void) { if (topp->peer != NODE_NULL) { - topp = topp->peer; - xrepaint(); + topp = topp->peer; + xrepaint(); } } diff --git a/xwin.c b/xwin.c index 05d3e45..c0a263f 100644 --- a/xwin.c +++ b/xwin.c @@ -7,7 +7,7 @@ * * 4 Sep 1991. * - * Copyright (c) Phillip C. Dykstra 1991, 1993, 1994 + * Copyright (c) Phillip C. Dykstra 1991, 1993, 1994 * The X Consortium, and any party obtaining a copy of these files from * the X Consortium, directly or indirectly, is granted, free of charge, a * full and unrestricted irrevocable, world-wide, paid up, royalty-free, @@ -29,40 +29,46 @@ #include #include -#include /* for access() */ +#include /* for access() */ #ifndef X_NOT_STDC_ENV -#include /* for exit() */ +#include /* for exit() */ #endif -/* IMPORTS: routines that this module vectors out to */ -extern int press(); -extern int printpath(); -extern int reset(); -extern int uponechild(); -extern int downonechild(); -extern int repaint(); -extern int reorder(); -extern int setorder(); -extern int nodeinfo(); -extern int helpinfo(); -extern int ncols; -extern void savetops(char *, int); -extern void savetosvg(char*, int); - -/* EXPORTS: routines that this module exports outside */ -extern int xsetup(); -extern int xmainloop(); -extern void xclear(); -extern void xrepaint(); -extern void xrepaint_noclear(); -extern void xdrawrect(); - -/* internal routines */ -static void help_popup(); -static void help_popdown(); - -static String fallback_resources[] = { +/* + * IMPORTS: routines that this module vectors out to + */ +extern int press(); +extern int printpath(); +extern int reset(); +extern int uponechild(); +extern int downonechild(); +extern int repaint(); +extern int reorder(); +extern int setorder(); +extern int nodeinfo(); +extern int helpinfo(); +extern int ncols; +extern void savetops(char *, int); +extern void savetosvg(char *, int); + +/* + * EXPORTS: routines that this module exports outside + */ +extern int xsetup(); +extern int xmainloop(); +extern void xclear(); +extern void xrepaint(); +extern void xrepaint_noclear(); +extern void xdrawrect(); + +/* + * internal routines + */ +static void help_popup(); +static void help_popdown(); + +static String fallback_resources[] = { "*window.width: 600", "*window.height: 480", "*help.width: 500", @@ -73,17 +79,19 @@ static String fallback_resources[] = { NULL }; -/* Application Resources */ +/* + * Application Resources + */ typedef struct { - Pixel foreground; - Pixel background; - XFontStruct *font; - int ncol; - int showsize; - char *order; - char *psfilename; - char *svgfilename; -} res_data, *res_data_ptr; + Pixel foreground; + Pixel background; + XFontStruct *font; + int ncol; + int showsize; + char *order; + char *psfilename; + char *svgfilename; +} res_data , *res_data_ptr; static res_data res; static XtResource application_resources[] = { @@ -110,7 +118,9 @@ static XtResource application_resources[] = { XtOffset(res_data_ptr, svgfilename), XtRString, "xdu_out"} }; -/* Command Line Options */ +/* + * Command Line Options + */ static XrmOptionDescRec options[] = { {"-c", "*ncol", XrmoptionSepArg, NULL}, {"-f", "*psfile", XrmoptionSepArg, NULL}, @@ -122,21 +132,23 @@ static XrmOptionDescRec options[] = { {"-ra", "*order", XrmoptionNoArg, "ralpha"} }; -/* action routines */ -static void a_goto(); -static void a_printpath(); -static void a_reset(); -static void a_quit(); -static void a_reorder(); -static void a_size(); -static void a_saveps(); -static void a_savesvg(); -static void a_up(); -static void a_down(); -static void a_ncol(); -static void a_info(); -static void a_help(); -static void a_removehelp(); +/* + * action routines + */ +static void a_goto(); +static void a_printpath(); +static void a_reset(); +static void a_quit(); +static void a_reorder(); +static void a_size(); +static void a_saveps(); +static void a_savesvg(); +static void a_up(); +static void a_down(); +static void a_ncol(); +static void a_info(); +static void a_help(); +static void a_removehelp(); static XtActionsRec actionsTable[] = { {"reset", a_reset}, @@ -155,7 +167,7 @@ static XtActionsRec actionsTable[] = { {"RemoveHelp", a_removehelp} }; -static char defaultTranslations[] = "\ +static char defaultTranslations[] = "\ Q: quit()\n\ Escape: quit()\n\ :/: reset()\n\ @@ -201,77 +213,90 @@ static char defaultTranslations[] = "\ #define ALL_UNUSED_IMPL(nargs) ALL_UNUSED_IMPL_(nargs) #define UNUSED(...) ALL_UNUSED_IMPL( VA_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__ ) -/* action routines */ +/* + * action routines + */ -static void a_quit(w, event, params, num_params) -Widget w; -XEvent *event; -String *params; -Cardinal *num_params; +static void +a_quit(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; { UNUSED(event, params, num_params); XtDestroyApplicationContext(XtWidgetToApplicationContext(w)); exit(0); } -static void a_goto(w, event, params, num_params) -Widget w; -XEvent *event; -String *params; -Cardinal *num_params; +static void +a_goto(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; { UNUSED(w, params, num_params); press(event->xbutton.x, event->xbutton.y); } -static void a_printpath(w, event, params, num_params) -Widget w; -XEvent *event; -String *params; -Cardinal *num_params; +static void +a_printpath(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; { UNUSED(w, params, num_params); printpath(event->xbutton.x, event->xbutton.y); } -static void a_reset(w, event, params, num_params) -Widget w; -XEvent *event; -String *params; -Cardinal *num_params; +static void +a_reset(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; { UNUSED(w, event, params, num_params); reset(); } -static void a_reorder(w, event, params, num_params) -Widget w; -XEvent *event; -String *params; -Cardinal *num_params; +static void +a_reorder(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; { UNUSED(w, event); if (*num_params != 1) { - fprintf(stderr, "xdu: bad number of params to reorder action\n"); + fprintf(stderr, "xdu: bad number of params to reorder action\n"); } else { - reorder(*params); + reorder(*params); } } -static void a_size(w, event, params, num_params) -Widget w; -XEvent *event; -String *params; -Cardinal *num_params; +static void +a_size(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; { UNUSED(w, event, params, num_params); res.showsize++; if (res.showsize >= 5) - res.showsize = 0; + res.showsize = 0; xrepaint(); } -static void a_saveps(Widget w, XEvent * e, String * params, Cardinal * num_params) +static void +a_saveps(w, e, params, num_params) + Widget w; + XEvent *e; + String *params; + Cardinal *num_params; { UNUSED(w, e, params, num_params); fprintf(stderr, "saving as postscript to file: %s ..", res.psfilename); @@ -279,170 +304,219 @@ static void a_saveps(Widget w, XEvent * e, String * params, Cardinal * num_param fprintf(stderr, "saved !\n"); } -static void a_savesvg(Widget w, XEvent * e, String * params, Cardinal * num_params) +static void +a_savesvg(w, e, params, num_params) + Widget w; + XEvent *e; + String *params; + Cardinal *num_params; { - char *extension = ".svg"; - int len = strlen(res.svgfilename) + 3 + strlen(extension) + 1; - char tmp[len]; - char *fname; - int i; + char *extension = ".svg"; + int len = + strlen(res.svgfilename) + 3 + strlen(extension) + 1; + char tmp[len]; + char *fname; + int i; UNUSED(w, e, params, num_params); for (i = 0; i > -1; ++i) { - snprintf(tmp, len,"%s-%02d%s", res.svgfilename, i, extension); - if (access(tmp, F_OK) == -1) { - fname = tmp; - break; - } + snprintf(tmp, len, "%s-%02d%s", res.svgfilename, i, extension); + if (access(tmp, F_OK) == -1) { + fname = tmp; + break; + } } if (i < 0) { - fprintf(stderr, "ERROR: there are too many xdu_output files!!!\n"); - exit(1); + fprintf(stderr, "ERROR: there are too many xdu_output files!!!\n"); + exit(1); } - fprintf(stderr, "saving as scalable vector graphic to file: %s ..", fname); + fprintf(stderr, "saving as scalable vector graphic to file: %s ..", + fname); savetosvg(fname, res.showsize); fprintf(stderr, "saved !\n"); } -static void a_up(Widget w, XEvent * e, String * params, Cardinal * num_params) +static void +a_up(w, e, params, num_params) + Widget w; + XEvent *e; + String *params; + Cardinal *num_params; { UNUSED(w, e, params, num_params); uponechild(); } -static void a_down(Widget w, XEvent * e, String * params, Cardinal * num_params) +static void +a_down(w, e, params, num_params) + Widget w; + XEvent *e; + String *params; + Cardinal *num_params; { UNUSED(w, e, params, num_params); downonechild(); } -static void a_ncol(w, event, params, num_params) -Widget w; -XEvent *event; -String *params; -Cardinal *num_params; +static void +a_ncol(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; { UNUSED(w, event); - int n; + int n; if (*num_params != 1) { - fprintf(stderr, "xdu: bad number of params to ncol action\n"); - return; + fprintf(stderr, "xdu: bad number of params to ncol action\n"); + return; } n = atoi(*params); if (n < 1 || n > 1000) { - fprintf(stderr, "xdu: bad value to ncol action\n"); - return; + fprintf(stderr, "xdu: bad value to ncol action\n"); + return; } ncols = res.ncol = n; xrepaint(); } -static void a_info(w, event, params, num_params) -Widget w; -XEvent *event; -String *params; -Cardinal *num_params; +static void +a_info(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; { UNUSED(w, event, params, num_params); nodeinfo(); } -static void a_help(w, event, params, num_params) -Widget w; -XEvent *event; -String *params; -Cardinal *num_params; +static void +a_help(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; { UNUSED(w, event, params, num_params); - /*helpinfo(); */ + /* + * helpinfo(); + */ help_popup(); } -static void a_removehelp(w, event, params, num_params) -Widget w; -XEvent *event; -String *params; -Cardinal *num_params; +static void +a_removehelp(w, event, params, num_params) + Widget w; + XEvent *event; + String *params; + Cardinal *num_params; { UNUSED(w, event, params, num_params); help_popdown(); } -/* callback routines */ +/* + * callback routines + */ -static void c_resize(w, data, event, continue_to_dispatch) -Widget w; -XtPointer data; -XEvent *event; -Boolean *continue_to_dispatch; +static void +c_resize(w, data, event, continue_to_dispatch) + Widget w; + XtPointer data; + XEvent *event; + Boolean *continue_to_dispatch; { UNUSED(w, data, event, continue_to_dispatch); - /*printf("Resize\n"); */ + /* + * printf("Resize\n"); + */ xrepaint(); } -static void c_repaint(w, data, event, continue_to_dispatch) -Widget w; -XtPointer data; -XEvent *event; -Boolean *continue_to_dispatch; +static void +c_repaint(w, data, event, continue_to_dispatch) + Widget w; + XtPointer data; + XEvent *event; + Boolean *continue_to_dispatch; { UNUSED(w, data, event, continue_to_dispatch); - /*printf("Expose\n"); */ + /* + * printf("Expose\n"); + */ xrepaint_noclear(); } -/* X Window related variables */ +/* + * X Window related variables + */ static Display *dpy; -static int screen; -static Visual *vis; -static Window win; -static GC gc; +static int screen; +static Visual *vis; +static Window win; +static GC gc; static XtAppContext app_con; -Widget toplevel; +Widget toplevel; -/* External Functions */ +/* + * External Functions + */ -int xsetup(argcp, argv) -int *argcp; -char **argv; +int +xsetup(argcp, argv) + int *argcp; + char **argv; { - XtTranslations trans_table; - Widget w; - XGCValues gcv; - int n; - Arg args[5]; - - /* Create the top level Widget */ + XtTranslations trans_table; + Widget w; + XGCValues gcv; + int n; + Arg args[5]; + + /* + * Create the top level Widget + */ n = 0; XtSetArg(args[n], XtNtitle, "XDU Disk Usage Display ('h' for help)\n"); n++; - toplevel = XtAppInitialize(&app_con, "XDu", options, XtNumber(options), argcp, argv, fallback_resources, args, n); + toplevel = + XtAppInitialize(&app_con, "XDu", options, XtNumber(options), argcp, + argv, fallback_resources, args, n); - XtGetApplicationResources(toplevel, (XtPointer) & res, application_resources, XtNumber(application_resources), NULL, 0); + XtGetApplicationResources(toplevel, (XtPointer) & res, + application_resources, + XtNumber(application_resources), NULL, 0); XtAppAddActions(app_con, actionsTable, XtNumber(actionsTable)); trans_table = XtParseTranslationTable(defaultTranslations); - /* Create a simple Label class widget to draw in */ + /* + * Create a simple Label class widget to draw in + */ n = 0; XtSetArg(args[n], XtNlabel, ""); n++; - w = XtCreateManagedWidget("window", labelWidgetClass, toplevel, args, n); + w = XtCreateManagedWidget("window", labelWidgetClass, toplevel, args, + n); - /* events */ + /* + * events + */ XtAddEventHandler(w, ExposureMask, False, c_repaint, NULL); XtAddEventHandler(w, StructureNotifyMask, False, c_resize, NULL); XtAugmentTranslations(w, trans_table); XtRealizeWidget(toplevel); - /* We need these for the raw Xlib calls */ + /* + * We need these for the raw Xlib calls + */ win = XtWindow(w); dpy = XtDisplay(w); screen = DefaultScreen(dpy); @@ -458,18 +532,21 @@ char **argv; return (1); } -int xmainloop() +int +xmainloop() { XtAppMainLoop(app_con); return (0); } -void xclear() +void +xclear() { XClearWindow(dpy, win); } -void xrepaint() +void +xrepaint() { XWindowAttributes xwa; @@ -478,7 +555,8 @@ void xrepaint() repaint(xwa.width, xwa.height); } -void xrepaint_noclear() +void +xrepaint_noclear() { XWindowAttributes xwa; @@ -486,74 +564,98 @@ void xrepaint_noclear() repaint(xwa.width, xwa.height); } -void xdrawrect(name, size, x, y, width, height) -char *name; -long long size; -int x, y, width, height; +void +xdrawrect(name, size, x, y, width, height) + char *name; + long long size; + int x, + y, + width, + height; { - int textx, texty; - char label[1024]; - XCharStruct overall; - int ascent, descent, direction; - int cheight; - - /*printf("draw(%d,%d,%d,%d)\n", x, y, width, height ); */ + int textx, + texty; + char label[1024]; + XCharStruct overall; + int ascent, + descent, + direction; + int cheight; + + /* + * printf("draw(%d,%d,%d,%d)\n", x, y, width, height ); + */ XDrawRectangle(dpy, win, gc, x, y, width, height); switch (res.showsize) { case 1: - sprintf(label, "%s (%lldk)", name, size); - name = label; - break; + sprintf(label, "%s (%lldk)", name, size); + name = label; + break; case 2: - sprintf(label, "%s (%.2fM)", name, (double) size / (double) 1024); - name = label; - break; + sprintf(label, "%s (%.2fM)", name, (double) size / (double) 1024); + name = label; + break; case 3: - sprintf(label, "%s (%.2fG)", name, (double) size / (double) (1024 * 1024)); - name = label; - break; + sprintf(label, "%s (%.2fG)", name, + (double) size / (double) (1024 * 1024)); + name = label; + break; case 4: - sprintf(label, "%s (%.2fT)", name, (double) size / (double) (1024 * 1024 * 1024)); - name = label; - break; + sprintf(label, "%s (%.2fT)", name, + (double) size / (double) (1024 * 1024 * 1024)); + name = label; + break; default: - break; + break; } - XTextExtents(res.font, name, strlen(name), &direction, &ascent, &descent, &overall); + XTextExtents(res.font, name, strlen(name), &direction, &ascent, + &descent, &overall); cheight = overall.ascent + overall.descent; if (height < (cheight + 2)) - return; + return; - /* print label */ + /* + * print label + */ textx = x + 4; - texty = y + height / 2.0 + (overall.ascent - overall.descent) / 2.0 + 1.5; + texty = + y + height / 2.0 + (overall.ascent - overall.descent) / 2.0 + 1.5; XDrawString(dpy, win, gc, textx, texty, name, strlen(name)); } -static Widget popup; +static Widget popup; -static void help_popup() +static void +help_popup() { - Widget form, text, src; - Arg args[15]; - int n; - Atom wm_delete_window; - XtTranslations trans_table; + Widget form, + text, + src; + Arg args[15]; + int n; + Atom wm_delete_window; + XtTranslations trans_table; if (popup != NULL) { - XtPopup(popup, XtGrabNone); - return; + XtPopup(popup, XtGrabNone); + return; } - /* popup shell */ + /* + * popup shell + */ n = 0; XtSetArg(args[n], XtNtitle, "XDU Help"); n++; - popup = XtCreatePopupShell("helpPopup", transientShellWidgetClass, toplevel, args, n); + popup = + XtCreatePopupShell("helpPopup", transientShellWidgetClass, + toplevel, args, n); - /* form container */ + /* + * form container + */ n = 0; XtSetArg(args[n], XtNborderWidth, 0); n++; @@ -561,20 +663,27 @@ static void help_popup() n++; form = XtCreateManagedWidget("form", formWidgetClass, popup, args, n); - /* text widget in form */ + /* + * text widget in form + */ n = 0; XtSetArg(args[n], XtNborderWidth, 0); n++; XtSetArg(args[n], XtNresize, XawtextResizeBoth); n++; - /* fallback resources weren't working here on the Sun */ + /* + * fallback resources weren't working here on the Sun + */ XtSetArg(args[n], XtNwidth, 500); n++; XtSetArg(args[n], XtNheight, 330); n++; - text = XtCreateManagedWidget("help", asciiTextWidgetClass, form, args, n); + text = + XtCreateManagedWidget("help", asciiTextWidgetClass, form, args, n); - /* create text source */ + /* + * create text source + */ n = 0; XtSetArg(args[n], XtNtype, XawAsciiString); n++; @@ -608,7 +717,9 @@ Mouse Commands\n\ "); n++; src = XtCreateWidget("textSource", asciiSrcObjectClass, text, args, n); - /* set text source */ + /* + * set text source + */ XawTextSetSource(text, src, 0); XtRealizeWidget(popup); @@ -617,13 +728,20 @@ Mouse Commands\n\ trans_table = XtParseTranslationTable("Q: RemoveHelp()"); XtAugmentTranslations(form, trans_table); - /* Set up ICCCM delete window */ - wm_delete_window = XInternAtom(XtDisplay(popup), "WM_DELETE_WINDOW", False); - XtOverrideTranslations(popup, XtParseTranslationTable("WM_PROTOCOLS: RemoveHelp()")); - XSetWMProtocols(XtDisplay(popup), XtWindow(popup), &wm_delete_window, 1); + /* + * Set up ICCCM delete window + */ + wm_delete_window = + XInternAtom(XtDisplay(popup), "WM_DELETE_WINDOW", False); + XtOverrideTranslations(popup, + XtParseTranslationTable + ("WM_PROTOCOLS: RemoveHelp()")); + XSetWMProtocols(XtDisplay(popup), XtWindow(popup), &wm_delete_window, + 1); } -static void help_popdown() +static void +help_popdown() { XtPopdown(popup); }