home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume10 / xchrom / part01 / xchrom.c < prev    next >
C/C++ Source or Header  |  1990-12-07  |  3KB  |  118 lines

  1. /*
  2.  * xchrom.c - program which uses the Xchrom widget.
  3.  * Copyright (c) Olaf Heimburger 1990
  4.  * Last edited: Tue Nov  6 10:58:40 1990 by olafh (Olaf Heimburger) on GECKO
  5.  */
  6. #include <stdio.h>
  7. #include <X11/Intrinsic.h>
  8. #include <X11/Shell.h>
  9. #include "Xchrom.h"
  10. #include "xchrom.xbm"
  11. #include "xchrom_mask.xbm"
  12. #include "patchlevel.h"
  13.  
  14. #ifdef ICCCM_COMP
  15. #include <X11/Xmu/Atoms.h>
  16. #endif
  17.  
  18. #define ever (;;)
  19. #define NAME "CHROMACHRON"
  20.  
  21. static char *version = "version 1";
  22.  
  23. static XrmOptionDescRec opTable[] = {
  24.     {"-startoffset", ".Xchrom.startOffset", XrmoptionSepArg, (caddr_t)NULL},
  25.     {"-maskoffset", ".Xchrom.maskOffset", XrmoptionSepArg, (caddr_t)NULL},
  26.     {"-timeoffset", ".Xchrom.timeOffset", XrmoptionSepArg, (caddr_t)NULL},
  27. };
  28.                      
  29. main (argc, argv)
  30.     int argc;
  31.     char *argv[];
  32. {
  33.     Widget topLevel, clockW;
  34.     Arg args[2];
  35.     Pixmap iconPixmap = None, iconMaskPixmap = None;
  36.     char *defTitle = NULL, *defIconName = NULL;
  37.     int i;
  38. #ifdef ICCCM_COMP
  39.     Atom wmDeleteWindow;
  40.     XEvent event;
  41. #endif
  42.     
  43.     topLevel = XtInitialize (argv[0], "XChrom", opTable, XtNumber (opTable),
  44.                  &argc, argv);
  45.     for (i = 1; i < argc; ++i) {
  46.     if (strcmp (argv[i], "-v") == 0) {
  47.         printf ("%s, %s.%d \n", argv[0], version, PATCHLEVEL);
  48.     }
  49.     }
  50.     /*
  51.      * check title and icon name and set default name, if necessary
  52.      */
  53.     XtSetArg (args[0], XtNtitle, &defTitle);
  54.     XtSetArg (args[1], XtNiconName, &defIconName);
  55.     XtGetValues (topLevel, args, XtNumber (args));
  56.     if (strcmp (argv[0], defTitle) == 0) {
  57.     XtSetArg (args[0], XtNtitle, NAME);
  58.     XtSetValues (topLevel, &args[0], 1);
  59.     }
  60.     if (strcmp (argv[0], defIconName) == 0) {
  61.     XtSetArg (args[0], XtNiconName, NAME);
  62.     XtSetValues (topLevel, &args[0], 1);
  63.     }
  64.     /*
  65.      * set minimum width and height
  66.      */
  67.     XtSetArg (args[0], XtNminWidth, MINWIDTH);
  68.     XtSetArg (args[1], XtNminHeight, MINHEIGHT);
  69.     XtSetValues (topLevel, args, XtNumber (args));
  70.     clockW = XtCreateManagedWidget (argv[0], xchromWidgetClass, topLevel,
  71.                     NULL, 0);
  72.     /*
  73.      * set the icon and icon mask bits
  74.      */
  75.     XtSetArg (args[0], XtNiconPixmap, &iconPixmap);
  76.     XtSetArg (args[1], XtNiconMask, &iconMaskPixmap);
  77.     XtGetValues (topLevel, args, XtNumber (args));
  78.     if (iconPixmap == None) {
  79.     args[0].value =
  80.         (XtArgVal) XCreateBitmapFromData (XtDisplay (topLevel),
  81.                           (XtScreen (topLevel))->root,
  82.                           xchrom_bits, xchrom_width,
  83.                           xchrom_height);
  84.     XtSetValues (topLevel, &args[0], 1);
  85.     }
  86.     if (iconMaskPixmap == None) {
  87.     args[1].value =
  88.         (XtArgVal) XCreateBitmapFromData (XtDisplay (topLevel),
  89.                           (XtScreen (topLevel))->root,
  90.                           xchrom_mask_bits,
  91.                           xchrom_mask_width, 
  92.                           xchrom_mask_height);
  93.     XtSetValues (topLevel, &args[1], 1);
  94.     }
  95.     XtRealizeWidget (topLevel);
  96. #ifdef ICCCM_COMP
  97.     /*
  98.      * for ICCCM compatibilty
  99.      */
  100.     wmDeleteWindow =
  101.     XmuInternAtom (XtDisplay (topLevel), XmuMakeAtom ("WM_DELETE_WINDOW"));
  102.     (void) XSetWMProtocols (XtDisplay (topLevel), XtWindow (topLevel),
  103.                 &wmDeleteWindow, 1);
  104.     for ever {
  105.     XtNextEvent (&event);
  106.     if (event.type == ClientMessage
  107.         && event.xclient.data.l[0] == wmDeleteWindow) {
  108.         XtDestroyWidget (topLevel);
  109.         exit(1);
  110.     } else {
  111.         XtDispatchEvent (&event);
  112.     }
  113.     }
  114. #else
  115.     XtMainLoop ();
  116. #endif
  117. }
  118.