diff --git a/xdu.c b/xdu.c index e031d0a..1e1013f 100644 --- a/xdu.c +++ b/xdu.c @@ -48,30 +48,30 @@ */ #define _GNU_SOURCE +#include "version.h" #include #include #include #include -#include "version.h" /* * 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(); +extern int xsetup(), + xmainloop(), + xdrawrect(), + xrepaint(); /* * What we EXPORT to xwin.c @@ -82,30 +82,30 @@ extern int xsetup(), /* * extern nodeinfo(), helpinfo(); */ -int ncols = NCOLS; +int ncols = NCOLS; /* * internal routines */ // char *strdup(); -void addtree(); -void parse_file(); -void parse_entry(); -void dumptree(); -void clearrects(); -void sorttree(); +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 -#define ORD_SIZE 4 -#define ORD_RALPHA 5 -#define ORD_RSIZE 6 -#define ORD_DEFAULT ORD_FIRST -int order = ORD_DEFAULT; +#define ORD_FIRST 1 +#define ORD_LAST 2 +#define ORD_ALPHA 3 +#define ORD_SIZE 4 +#define ORD_RALPHA 5 +#define ORD_RSIZE 6 +#define ORD_DEFAULT ORD_FIRST +int order = ORD_DEFAULT; /* * Rectangle Structure @@ -113,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; }; /* @@ -124,29 +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 = ⊤ -#define NODE_NULL ((struct node *)0) -long nnodes = 0; +struct node* topp = ⊤ +#define NODE_NULL ((struct node*)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(char* name, long long size) { - struct node *np; + struct node* np; - np = (struct node *) calloc(1, sizeof(struct node)); + np = (struct node*)calloc(1, sizeof(struct node)); np->name = strdup(name); np->size = size; np->num = nnodes; @@ -159,33 +157,30 @@ makenode(name, 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(struct node* treep, int x, int y) { - struct node *np; - struct node *np2; + struct node* np; + struct node* np2; if (treep == NODE_NULL) - return 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) { - /* + && y >= treep->rect.top + && y < treep->rect.top + treep->rect.height) { + /* * printf("found %s\n", treep->name); */ - return treep; /* found */ + return treep; /* found */ } /* * 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; } @@ -193,18 +188,16 @@ findnode(treep, x, y) /* * return a count of the number of children of a given node */ -int -numchildren(nodep) - struct node *nodep; +int numchildren(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; } @@ -214,25 +207,23 @@ numchildren(nodep) * had their sizes initialized. [DPT911113] * * * * This function is recursive * * * */ -long -fix_tree(top) - struct node *top; +long fix_tree(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\ @@ -249,27 +240,24 @@ 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(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); @@ -277,53 +265,51 @@ main(argc, argv) * dumptree(&top,0); */ if (order != ORD_DEFAULT) - sorttree(&top, order); + sorttree(&top, order); topp = ⊤ /* * 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(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'; - /* + 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); + parse_entry(name, size); } fclose(fp); } @@ -331,46 +317,43 @@ parse_file(filename) /* * bust up a path string and link it into the tree */ -void -parse_entry(name, size) - char *name; - long long size; +void parse_entry(char* name, long long size) { - char *path[MAXDEPTH]; /* break up path into this list */ - char buf[MAXNAME]; /* temp space for path element + 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 */ + 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; + name[length - 1] = 0; } arg = 0; indx = 0; - bzero((char *) path, sizeof(path)); + 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); @@ -386,53 +369,49 @@ parse_entry(name, size) * 0 if it is a toss up. * 1 if it should go after. */ -int -compare(n1, n2, order) - struct node *n1, - *n2; - int order; +int compare(struct node* n1, struct node* 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); - } - /* + 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); - } - /* + 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 (n1->num - n2->num); + break; case ORD_LAST: - /* + /* * return 1; */ - return (n2->num - n1->num); - break; + return (n2->num - n1->num); + break; } /* @@ -442,52 +421,48 @@ compare(n1, n2, order) 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(struct node* nodep, struct node* childp, int order) { - 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; + nodep->child = childp; + return; } /* * 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; + 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) { - /* + if (compare(childp, np, order) < 0) { + /* * insert between np1 and np */ - childp->peer = np; - np1->peer = childp; - return; - } - np1 = np; + childp->peer = np; + np1->peer = childp; + return; + } + np1 = np; } /* * at end, link new child on @@ -498,13 +473,9 @@ insertchild(nodep, childp, order) /* * add path as a child of top - recursively */ -void -addtree(top, path, size) - struct node *top; - char *path[]; - long long size; +void addtree(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); @@ -514,23 +485,23 @@ addtree(top, path, size) * check all children for a match */ for (np = top->child; np != NULL; np = np->peer) { - if (strcmp(path[0], np->name) == 0) { - /* + if (strcmp(path[0], np->name) == 0) { + /* * name matches */ - if (path[1] == NULL) { - /* + if (path[1] == NULL) { + /* * end of the chain, save size */ - np->size = size; - return; - } - /* + np->size = size; + return; + } + /* * recurse */ - addtree(np, &path[1], size); - return; - } + addtree(np, &path[1], size); + return; + } } /* * no child matched, add a new child @@ -539,11 +510,11 @@ addtree(top, path, size) insertchild(top, np, order); if (path[1] == NULL) { - /* + /* * end of the chain, save size */ - np->size = size; - return; + np->size = size; + return; } /* * recurse @@ -555,67 +526,61 @@ addtree(top, path, size) /* * debug tree print */ -void -dumptree(np, level) - struct node *np; - int level; +void dumptree(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(struct node* np, int order) { - struct node *subnp; - struct node *np0, - *np1, - *np2, - *np3; + 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 */ + 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) { - /* + 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; - - /* + 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; + np1 = np3; + np3 = np2; + } + np2 = np3; + } + np0 = np1; } } @@ -623,18 +588,15 @@ sorttree(np, 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(struct node* nodep, struct rect rect) { - long long totalsize; - int totalheight; - struct node *np; - double fractsize; - int height; - int top; - long long size; + 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, @@ -648,59 +610,54 @@ drawchildren(nodep, rect) top = rect.top; size = 0; - 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; + totalsize = 0; + for (np = nodep->child; np != NULL; np = np->peer) + totalsize += np->size; + nodep->size = totalsize; } /* * for each child */ for (np = nodep->child; np != NULL; np = np->peer) { - fractsize = totalsize ? np->size / (double) totalsize : 0; - height = fractsize * totalheight + 0.5; + fractsize = totalsize ? np->size / (double)totalsize : 0; + height = fractsize * totalheight + 0.5; - { - struct rect subrect; - /* + { + 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); + 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; - + 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); - } + 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); + } } } @@ -708,19 +665,16 @@ drawchildren(nodep, rect) * 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(struct node* nodep, struct rect rect) { - struct rect subrect; + struct rect subrect; /* * printf("Drawing \"%s\" %d\n", nodep->name, nodep->size); */ xdrawrect(nodep->name, nodep->size, rect.left, rect.top, rect.width, - rect.height); + rect.height); /* * save current screen rectangle for lookups @@ -740,19 +694,16 @@ drawnode(nodep, rect) drawchildren(nodep, subrect); } - /* * clear the rectangle information of a given node * and all of its decendents */ -void -clearrects(nodep) - struct node *nodep; +void clearrects(struct node* nodep) { - struct node *np; + struct node* np; if (nodep == NODE_NULL) - return; + return; nodep->rect.left = 0; nodep->rect.top = 0; @@ -763,48 +714,45 @@ clearrects(nodep) * 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); + 100.0 * topp->size / rootp->size); } #ifdef NEED_STRDUP -char * -strdup(s) - char *s; +char* strdup(char* s) { - int n; - char *cp; + int n; + char* cp; n = strlen(s); cp = malloc(n + 1); @@ -816,12 +764,9 @@ strdup(s) /**************** External Entry Points ****************/ -void -press(x, y) - int x, - y; +void press(int x, int y) { - struct node *np; + struct node* np; /* * printf("press(%d,%d)...\n",x,y); @@ -831,60 +776,53 @@ press(x, y) * 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; - /* + 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(x, y) - int x, - y; +void printpath(int x, int 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); + 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(width, height) - int width, - height; +void repaint(int width, int height) { - struct rect rect; + struct rect rect; /* * define a rectangle to draw into @@ -894,69 +832,63 @@ repaint(width, height) 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 */ #endif } - -void -setorder(op) - char *op; +void setorder(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(op) - char *op; -{ /* order name */ +void reorder(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 @@ -967,12 +899,11 @@ nodeinfo(void) * 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\ @@ -986,67 +917,92 @@ XDU Version %s - Keyboard Commands\n\ p print to file (as postscript)\n\ i info to standard out\n\ 0-9 set number of columns (0=10)\n\ -", XDU_VERSION); +", + XDU_VERSION); } -void -fprintpsstart(FILE *fp) +void fprintpsstart(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"); + "%%!\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(FILE* fp) { fprintf(fp, - "grestore\n" "xdusavedpage restore\n" "end\n" "showpage\n" "\n" - "%%%%Trailer\n" "%%%%DocumentFonts: fixed\n" "%%%%EOF\n"); + "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(FILE* fp, int x1, int y1, int x2, int 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); + "%%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(FILE* fp, int x, int 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); + "%%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(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; @@ -1054,264 +1010,237 @@ savepschildren(FILE *fp, struct node *nodep, struct rect rect, int showsize) 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 0: + name = np->name; + break; + 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(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 0: + name = nodep->name; + break; 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); + rect.top + (rect.height - rect.top) / 2, name); subrect.left = rect.left + rect.width; subrect.top = rect.top; subrect.width = rect.width; subrect.height = rect.height; savepschildren(fp, nodep, subrect, showsize); - } - -void -savetops(char *fname, int showsize) +void savetops(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(fp) - FILE *fp; +void fprintsvgstart(FILE* fp) { fprintf(fp, "\n"); } -void -fprintsvgend(fp) - FILE *fp; +void fprintsvgend(FILE* fp) { fprintf(fp, ""); } -void -fprintsvgnode(fp, rect) - FILE *fp; - struct rect rect; +void fprintsvgnode(FILE* fp, struct rect rect) { fprintf(fp, - " \n", - rect.left, rect.top, rect.width, rect.height); + " \n", + rect.left, rect.top, rect.width, rect.height); } -void -fprintsvgnodetext(fp, x, y, size, name, showsize) - FILE *fp; - int x, - y; - long long size; - char *name; - int showsize; +void fprintsvgnodetext(FILE* fp, int x, int y, long long size, char* name, int showsize) { - char buffer[1024], - *text; + char buffer[1024], + *text; switch (showsize) { + case 0: + text = name; + break; 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); + " %s\n", + x, y, text); } -void -savesvgnode(fp, nodep, showsize, depth) - FILE *fp; - struct node *nodep; - int showsize, - depth; +void savesvgnode(FILE* fp, struct node* nodep, int showsize, int 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(fname, showsize) - char *fname; - int showsize; +void savetosvg(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 c0a263f..48d1553 100644 --- a/xwin.c +++ b/xwin.c @@ -20,55 +20,55 @@ * the party supplying this software to the X Consortium. */ #include -#include #include +#include -#include #include +#include #include #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); +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(); +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 void help_popup(); +static void help_popdown(); -static String fallback_resources[] = { +static String fallback_resources[] = { "*window.width: 600", "*window.height: 480", "*help.width: 500", @@ -83,91 +83,86 @@ static String fallback_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[] = { - {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), - XtOffset(res_data_ptr, foreground), XtRString, XtDefaultForeground} - , - {XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel), - XtOffset(res_data_ptr, background), XtRString, XtDefaultBackground} - , - {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), - XtOffset(res_data_ptr, font), XtRString, XtDefaultFont} - , - {"ncol", "Ncol", XtRInt, sizeof(int), - XtOffset(res_data_ptr, ncol), XtRString, "5"}, - {"showsize", "ShowSize", XtRInt, sizeof(int), - XtOffset(res_data_ptr, showsize), XtRString, "1"}, - {"order", "Order", XtRString, sizeof(String), - XtOffset(res_data_ptr, order), XtRString, "first"} - , - {"psfile", "PSFile", XtRString, sizeof(String), - XtOffset(res_data_ptr, psfilename), XtRString, "xdu_out.ps"} - , - {"svgfile", "SVGFile", XtRString, sizeof(String), - XtOffset(res_data_ptr, svgfilename), XtRString, "xdu_out"} + { XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), + XtOffset(res_data_ptr, foreground), XtRString, XtDefaultForeground }, + { XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel), + XtOffset(res_data_ptr, background), XtRString, XtDefaultBackground }, + { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct*), + XtOffset(res_data_ptr, font), XtRString, XtDefaultFont }, + { "ncol", "Ncol", XtRInt, sizeof(int), + XtOffset(res_data_ptr, ncol), XtRString, "5" }, + { "showsize", "ShowSize", XtRInt, sizeof(int), + XtOffset(res_data_ptr, showsize), XtRString, "1" }, + { "order", "Order", XtRString, sizeof(String), + XtOffset(res_data_ptr, order), XtRString, "first" }, + { "psfile", "PSFile", XtRString, sizeof(String), + XtOffset(res_data_ptr, psfilename), XtRString, "xdu_out.ps" }, + { "svgfile", "SVGFile", XtRString, sizeof(String), + XtOffset(res_data_ptr, svgfilename), XtRString, "xdu_out" } }; /* * Command Line Options */ static XrmOptionDescRec options[] = { - {"-c", "*ncol", XrmoptionSepArg, NULL}, - {"-f", "*psfile", XrmoptionSepArg, NULL}, - {"+s", "*showsize", XrmoptionNoArg, "1"}, - {"-s", "*showsize", XrmoptionNoArg, "0"}, - {"-n", "*order", XrmoptionNoArg, "size"}, - {"-rn", "*order", XrmoptionNoArg, "rsize"}, - {"-a", "*order", XrmoptionNoArg, "alpha"}, - {"-ra", "*order", XrmoptionNoArg, "ralpha"} + { "-c", "*ncol", XrmoptionSepArg, NULL }, + { "-f", "*psfile", XrmoptionSepArg, NULL }, + { "+s", "*showsize", XrmoptionNoArg, "1" }, + { "-s", "*showsize", XrmoptionNoArg, "0" }, + { "-n", "*order", XrmoptionNoArg, "size" }, + { "-rn", "*order", XrmoptionNoArg, "rsize" }, + { "-a", "*order", XrmoptionNoArg, "alpha" }, + { "-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(); +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}, - {"printpath", a_printpath}, - {"goto", a_goto}, - {"quit", a_quit}, - {"reorder", a_reorder}, - {"size", a_size}, - {"ncol", a_ncol}, - {"saveps", a_saveps}, - {"savesvg", a_savesvg}, - {"uponechild", a_up}, - {"downonechild", a_down}, - {"info", a_info}, - {"help", a_help}, - {"RemoveHelp", a_removehelp} + { "reset", a_reset }, + { "printpath", a_printpath }, + { "goto", a_goto }, + { "quit", a_quit }, + { "reorder", a_reorder }, + { "size", a_size }, + { "ncol", a_ncol }, + { "saveps", a_saveps }, + { "savesvg", a_savesvg }, + { "uponechild", a_up }, + { "downonechild", a_down }, + { "info", a_info }, + { "help", a_help }, + { "RemoveHelp", a_removehelp } }; -static char defaultTranslations[] = "\ +static char defaultTranslations[] = "\ Q: quit()\n\ Escape: quit()\n\ :/: reset()\n\ @@ -201,28 +196,25 @@ static char defaultTranslations[] = "\ "; #define UNUSED1(x) (void)(x) -#define UNUSED2(x,y) (void)(x),(void)(y) -#define UNUSED3(x,y,z) (void)(x),(void)(y),(void)(z) -#define UNUSED4(a,x,y,z) (void)(a),(void)(x),(void)(y),(void)(z) -#define UNUSED5(a,b,x,y,z) (void)(a),(void)(b),(void)(x),(void)(y),(void)(z) +#define UNUSED2(x, y) (void)(x), (void)(y) +#define UNUSED3(x, y, z) (void)(x), (void)(y), (void)(z) +#define UNUSED4(a, x, y, z) (void)(a), (void)(x), (void)(y), (void)(z) +#define UNUSED5(a, b, x, y, z) (void)(a), (void)(b), (void)(x), (void)(y), (void)(z) -#define VA_NUM_ARGS_IMPL(_1,_2,_3,_4,_5, N,...) N +#define VA_NUM_ARGS_IMPL(_1, _2, _3, _4, _5, N, ...) N #define VA_NUM_ARGS(...) VA_NUM_ARGS_IMPL(__VA_ARGS__, 5, 4, 3, 2, 1) -#define ALL_UNUSED_IMPL_(nargs) UNUSED ## nargs +#define ALL_UNUSED_IMPL_(nargs) UNUSED##nargs #define ALL_UNUSED_IMPL(nargs) ALL_UNUSED_IMPL_(nargs) -#define UNUSED(...) ALL_UNUSED_IMPL( VA_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__ ) +#define UNUSED(...) ALL_UNUSED_IMPL(VA_NUM_ARGS(__VA_ARGS__)) \ +(__VA_ARGS__) /* * action routines */ static void -a_quit(w, event, params, num_params) - Widget w; - XEvent *event; - String *params; - Cardinal *num_params; +a_quit(Widget w, XEvent* event, String* params, Cardinal* num_params) { UNUSED(event, params, num_params); XtDestroyApplicationContext(XtWidgetToApplicationContext(w)); @@ -230,73 +222,49 @@ a_quit(w, event, params, num_params) } static void -a_goto(w, event, params, num_params) - Widget w; - XEvent *event; - String *params; - Cardinal *num_params; +a_goto(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; +a_printpath(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; +a_reset(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; +a_reorder(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; +a_size(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(w, e, params, num_params) - Widget w; - XEvent *e; - String *params; - Cardinal *num_params; +a_saveps(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); @@ -305,102 +273,77 @@ a_saveps(w, e, params, num_params) } static void -a_savesvg(w, e, params, num_params) - Widget w; - XEvent *e; - String *params; - Cardinal *num_params; +a_savesvg(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); + fname); savetosvg(fname, res.showsize); fprintf(stderr, "saved !\n"); } static void -a_up(w, e, params, num_params) - Widget w; - XEvent *e; - String *params; - Cardinal *num_params; +a_up(Widget w, XEvent* e, String* params, Cardinal* num_params) { UNUSED(w, e, params, num_params); uponechild(); } static void -a_down(w, e, params, num_params) - Widget w; - XEvent *e; - String *params; - Cardinal *num_params; +a_down(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; +a_ncol(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; +a_info(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; +a_help(Widget w, XEvent* event, String* params, Cardinal* num_params) { UNUSED(w, event, params, num_params); /* @@ -410,11 +353,7 @@ a_help(w, event, params, num_params) } static void -a_removehelp(w, event, params, num_params) - Widget w; - XEvent *event; - String *params; - Cardinal *num_params; +a_removehelp(Widget w, XEvent* event, String* params, Cardinal* num_params) { UNUSED(w, event, params, num_params); help_popdown(); @@ -425,11 +364,7 @@ a_removehelp(w, event, params, num_params) */ static void -c_resize(w, data, event, continue_to_dispatch) - Widget w; - XtPointer data; - XEvent *event; - Boolean *continue_to_dispatch; +c_resize(Widget w, XtPointer data, XEvent* event, Boolean* continue_to_dispatch) { UNUSED(w, data, event, continue_to_dispatch); /* @@ -439,11 +374,7 @@ c_resize(w, data, event, continue_to_dispatch) } static void -c_repaint(w, data, event, continue_to_dispatch) - Widget w; - XtPointer data; - XEvent *event; - Boolean *continue_to_dispatch; +c_repaint(Widget w, XtPointer data, XEvent* event, Boolean* continue_to_dispatch) { UNUSED(w, data, event, continue_to_dispatch); /* @@ -455,29 +386,26 @@ c_repaint(w, data, event, continue_to_dispatch) /* * X Window related variables */ -static Display *dpy; -static int screen; -static Visual *vis; -static Window win; -static GC gc; +static Display* dpy; +static int screen; +static Visual* vis; +static Window win; +static GC gc; static XtAppContext app_con; -Widget toplevel; +Widget toplevel; /* * External Functions */ -int -xsetup(argcp, argv) - int *argcp; - char **argv; +int xsetup(int* argcp, char** argv) { - XtTranslations trans_table; - Widget w; - XGCValues gcv; - int n; - Arg args[5]; + XtTranslations trans_table; + Widget w; + XGCValues gcv; + int n; + Arg args[5]; /* * Create the top level Widget @@ -485,13 +413,12 @@ xsetup(argcp, argv) 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); @@ -503,7 +430,7 @@ xsetup(argcp, argv) XtSetArg(args[n], XtNlabel, ""); n++; w = XtCreateManagedWidget("window", labelWidgetClass, toplevel, args, - n); + n); /* * events @@ -532,21 +459,18 @@ xsetup(argcp, 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; @@ -555,8 +479,7 @@ xrepaint() repaint(xwa.width, xwa.height); } -void -xrepaint_noclear() +void xrepaint_noclear() { XWindowAttributes xwa; @@ -564,23 +487,16 @@ 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(char* name, long long size, int x, int y, int width, int height) { - int textx, - texty; - char label[1024]; - XCharStruct overall; - int ascent, - descent, - direction; - int cheight; + 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 ); @@ -589,58 +505,57 @@ xdrawrect(name, size, 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); + &descent, &overall); cheight = overall.ascent + overall.descent; if (height < (cheight + 2)) - return; + return; /* * 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() { - 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; } /* @@ -649,9 +564,8 @@ help_popup() 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 @@ -676,10 +590,9 @@ help_popup() */ XtSetArg(args[n], XtNwidth, 500); n++; - XtSetArg(args[n], XtNheight, 330); + XtSetArg(args[n], XtNheight, 340); n++; - text = - XtCreateManagedWidget("help", asciiTextWidgetClass, form, args, n); + text = XtCreateManagedWidget("help", asciiTextWidgetClass, form, args, n); /* * create text source @@ -712,8 +625,8 @@ Keyboard Commands\n\ \n\ Mouse Commands\n\ Left Goto node (goto parent if leftmost box)\n\ - Middle Back to root\n\ - Right Quit\n\ + Middle Print path of clicked node\n\ + Right Back to root\n\ "); n++; src = XtCreateWidget("textSource", asciiSrcObjectClass, text, args, n); @@ -731,13 +644,11 @@ Mouse Commands\n\ /* * Set up ICCCM delete window */ - wm_delete_window = - XInternAtom(XtDisplay(popup), "WM_DELETE_WINDOW", False); + wm_delete_window = XInternAtom(XtDisplay(popup), "WM_DELETE_WINDOW", False); XtOverrideTranslations(popup, - XtParseTranslationTable - ("WM_PROTOCOLS: RemoveHelp()")); + XtParseTranslationTable("WM_PROTOCOLS: RemoveHelp()")); XSetWMProtocols(XtDisplay(popup), XtWindow(popup), &wm_delete_window, - 1); + 1); } static void