home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume26 / xwhosup / part01 / xwhosup.c < prev   
Encoding:
C/C++ Source or Header  |  1992-12-30  |  5.8 KB  |  216 lines

  1. /*
  2. *  Displays CPU state distribution
  3. */
  4. #ifndef lint
  5. static char rcsid[] = "$Header: /ai/lambda/X.V11R4/contrib/clients/xcpustate/RCS/xcpustate.c,v 1.2 90/02/20 00:33:36 xwindows Exp $";
  6. #endif /*lint*/
  7.  
  8. #include <stdio.h>
  9.  
  10. #include <X11/Xos.h>
  11. #include <X11/StringDefs.h>
  12. #include <X11/Intrinsic.h>
  13. #include <X11/Xaw/Form.h>
  14. #include <X11/Xaw/Label.h>
  15. #include <X11/Xmu/Xmu.h>
  16. #include "Bar.h"
  17. #include "s.h"
  18.  
  19. #define MAXSTR 512
  20. #define DEF_INTERVAL    1
  21. #define DEF_COUNT        -1
  22.  
  23. char *progname;
  24. static int defaultInterval = DEF_INTERVAL;
  25. static int defaultCount = DEF_COUNT;
  26. static Bool defaultNoisy = False;
  27. int count, interval;
  28. Bool noisy;
  29.  
  30. /* Application Resources - no particular widget */
  31. static XtResource application_resources[] = {
  32.     {"interval", "Interval", XtRInt, sizeof(int),
  33.         (Cardinal)&interval, XtRInt, (caddr_t) &defaultInterval},
  34.     {"count", "Count", XtRInt, sizeof(int),
  35.         (Cardinal)&count, XtRInt, (caddr_t) &defaultCount},
  36.     {"noisy", "Noisy", XtRBoolean, sizeof(Bool),
  37.         (Cardinal)&noisy, XtRBoolean, (caddr_t) &defaultNoisy},
  38. };
  39.  
  40. /*
  41. *  Command line options table. The command line is parsed for these,
  42. *  and it sets/overrides the appropriate values in the resource
  43. *  database
  44. */
  45. static XrmOptionDescRec optionDescList[] = {
  46.     {"-interval",   ".interval",    XrmoptionSepArg,    (caddr_t) NULL},
  47.     {"-count",        ".count",        XrmoptionSepArg,    (caddr_t) NULL},
  48.     {"-noisy",        ".noisy",        XrmoptionNoArg,     (caddr_t) "True"},
  49. };
  50.  
  51. /*
  52. *  DON'T CHANGE THE ORDER OF THE ARGS IN THE VARIOUS ARG STRUCTS. IF
  53. *  YOU WANT TO ADD STUFF, ADD IT AT THE END OF THE STRUCT, BECAUSE WE
  54. *  REFER TO SOME OF THE ELEMENTS BY POSITION IN THE CODE.
  55. */
  56. /* No spacing between the widgets on the Form */
  57. static Arg form_args[] = {
  58.     {XtNdefaultDistance, (XtArgVal) 0},
  59. };
  60.  
  61. static Arg subform_args[] = {
  62.     {XtNfromVert, (XtArgVal) 0},
  63.     {XtNdefaultDistance, (XtArgVal) 2},
  64.     {XtNborderWidth, (XtArgVal) 0},
  65.     {XtNtop, (XtArgVal) XtChainTop},
  66.     {XtNbottom, (XtArgVal) XtChainTop}, /* ChainBottom causes strange resize */
  67.     {XtNright, (XtArgVal) XtChainRight},
  68.     {XtNleft, (XtArgVal) XtChainLeft},
  69. };
  70.  
  71. static Arg bar_args[] = {
  72. /*    {XtNfromHoriz, (XtArgVal) 0}, */
  73.     {XtNorientation, (XtArgVal) XtorientHorizontal},
  74.     {XtNborderWidth, (XtArgVal) 1},
  75.     {XtNlength, (XtArgVal) ((Dimension) 200)},
  76.     {XtNthickness, (XtArgVal) ((Dimension) 20)},
  77.     {XtNtop, (XtArgVal) XtChainTop},
  78.     {XtNbottom, (XtArgVal) XtChainTop},
  79.     {XtNright, (XtArgVal) XtChainRight},
  80.     {XtNleft, (XtArgVal) XtChainRight},
  81.     {XtNvertDistance, (XtArgVal) 0},
  82. /*    {XtNhorizDistance, (XtArgVal) 0}, */
  83.     {XtNresizable, (XtArgVal) FALSE},
  84. };
  85.  
  86. static Arg label_args[] = {
  87.     {XtNlabel, (XtArgVal) 0},
  88.     {XtNjustify, (XtArgVal) XtJustifyLeft},
  89.     {XtNborderWidth, (XtArgVal) 0},
  90.     {XtNtop, (XtArgVal) XtChainTop},
  91.     {XtNbottom, (XtArgVal) XtChainTop},
  92.     {XtNright, (XtArgVal) XtChainLeft},
  93.     {XtNleft, (XtArgVal) XtChainLeft},
  94.     {XtNvertDistance, (XtArgVal) 0},
  95.     {XtNhorizDistance, (XtArgVal) 0},
  96.     {XtNresizable, (XtArgVal) FALSE},
  97. };
  98.  
  99. static Arg gwid_args[] = {
  100.     {XtNwidth, (XtArgVal)0},
  101. };
  102.  
  103. static Arg sx_args[] = {
  104.     {XtNhorizDistance, (XtArgVal)0},
  105. };
  106.  
  107. void
  108. usage()
  109. {
  110.     (void) fprintf(stderr,
  111. "usage: %s [Xt options] [-count iterations] [-interval delay_seconds] [-noisy] host ...\n",
  112.      progname);
  113.     exit(-1);
  114. }
  115.  
  116. char *
  117. xmalloc(n)
  118. int n;
  119. {
  120.     extern char *malloc();
  121.     char *cp = malloc((unsigned) n);
  122.     if (cp == NULL) {
  123.         (void) fprintf(stderr, "%s: Ran out of memory.\n", progname);
  124.         exit(-1);
  125.     }
  126.     return cp;
  127. }
  128.  
  129. extern XtInputCallbackProc    get_socket_msg();
  130.  
  131. static int nbars;
  132. Widget *bar;
  133. static char **barnames;
  134.     
  135. main(argc, argv)
  136. int argc;
  137. char **argv;
  138. {
  139.     int i;
  140.     Widget topLevel;
  141.     Widget form, label;
  142.     Widget subform = NULL;
  143.     extern char *strchr(/* const char *, char */);
  144.     int maxwid;
  145.     extern int Clnt_multi_sock;
  146.  
  147.     if ((progname = strchr(argv[0], '/')) == NULL)
  148.     progname = argv[0];
  149.     else
  150.     progname++;
  151.  
  152.  
  153.     topLevel = XtInitialize(progname, "RWHOHostMonitor",
  154.                 optionDescList, XtNumber(optionDescList),
  155.                 &argc, argv);
  156.  
  157.     nbars = num_bars(argc, argv);
  158.     if (nbars == 0) {
  159.     (void) fprintf(stderr, "num_bars returned 0 - something is wrong\n");
  160.     exit(-1);
  161.     }
  162.     bar = (Widget *) xmalloc(nbars * sizeof(Widget));
  163.     barnames = label_bars(nbars, argc, argv);
  164.     
  165.     XtGetApplicationResources(topLevel, 0, application_resources,
  166.                   XtNumber(application_resources), NULL, 0 );
  167.  
  168.     form = XtCreateManagedWidget("form", formWidgetClass, topLevel,
  169.                  form_args, XtNumber(form_args));
  170.     
  171.     maxwid = 0;
  172.     for(i = 0; i < nbars; i++) {
  173. #define FORMNAMEFMT    "form%d"
  174.     char formname[sizeof(FORMNAMEFMT) + 32];
  175. #define BARNAMEFMT    "bar%d"
  176.     char barname[sizeof(BARNAMEFMT) + 32];
  177.  
  178.     if (i > 0)
  179.         subform_args[0].value = (XtArgVal) subform;
  180.     (void) sprintf(formname, FORMNAMEFMT, i);
  181.     subform = XtCreateManagedWidget(formname, formWidgetClass, form,
  182.                  subform_args, XtNumber(subform_args));
  183.     label_args[0].value = (XtArgVal) barnames[i];
  184.     label = XtCreateManagedWidget(barnames[i], labelWidgetClass, subform,
  185.                       label_args, XtNumber(label_args));
  186.     XtSetArg(gwid_args[0], XtNwidth, 0);
  187.     XtGetValues(label, gwid_args, 1);
  188.     if (gwid_args[0].value > maxwid)
  189.         maxwid = gwid_args[0].value;
  190.     (void) sprintf(barname, BARNAMEFMT, i);
  191. /*    bar_args[0].value = (XtArgVal) label; */
  192.     bar[i] = XtCreateManagedWidget(barname, barWidgetClass, subform,
  193.                     bar_args, XtNumber(bar_args));
  194.     }
  195.     sx_args[0].value = (XtArgVal)(maxwid + 2);
  196.     for(i = 0; i < nbars; i++)
  197.     XtSetValues(bar[i], sx_args, 1);
  198.  
  199.     XtRealizeWidget(topLevel);
  200.  
  201.     init_bars(nbars);
  202.  
  203.     XtAddInput(Clnt_multi_sock, XtInputReadMask, get_socket_msg, (caddr_t)0);
  204.  
  205.     XtMainLoop();
  206. }
  207.  
  208. void
  209. draw_bar(i, states, nstates)
  210. int i;
  211. int states[];
  212. int nstates;
  213. {
  214.     SetBarValues((Widget) bar[i], states, nstates);
  215. }
  216.