home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume14 / xchrom / part01 / Xchrom-1.6 / xchrom.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-08-26  |  3.7 KB  |  125 lines

  1. /*
  2.  * xchrom.c - program which uses the Xchrom widget.
  3.  * Copyright (c) Olaf Heimburger 1990, 1991
  4.  * Last edited: Mon Aug 19 08:19:30 1991 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.     {"-circular", ".Xchrom.circularFrame", XrmoptionNoArg, (caddr_t)"1"},
  25.     {"-fo", ".Xchrom.frameOffset", XrmoptionSepArg, (caddr_t)NULL},
  26.     {"-frameOffset", ".Xchrom.frameOffset", XrmoptionSepArg, (caddr_t)NULL},
  27.     {"-fo", ".Xchrom.frameOffset", XrmoptionSepArg, (caddr_t)NULL},
  28.     {"-maskOffset", ".Xchrom.maskOffset", XrmoptionSepArg, (caddr_t)NULL},
  29.     {"-mo", ".Xchrom.maskOffset", XrmoptionSepArg, (caddr_t)NULL},
  30.     {"-timeOffset", ".Xchrom.timeOffset", XrmoptionSepArg, (caddr_t)NULL},
  31.     {"-to", ".Xchrom.timeOffset", XrmoptionSepArg, (caddr_t)NULL},
  32. };
  33.                      
  34. main (argc, argv)
  35.     int argc;
  36.     char *argv[];
  37. {
  38.     Widget topLevel, clockW;
  39.     Arg args[2];
  40.     Pixmap iconPixmap = None, iconMaskPixmap = None;
  41.     char *defTitle = NULL, *defIconName = NULL;
  42.     int i;
  43. #ifdef ICCCM_COMP
  44.     Atom wmDeleteWindow;
  45.     XEvent event;
  46. #endif
  47.     
  48.     topLevel = XtInitialize (argv[0], "XChrom", opTable, XtNumber (opTable),
  49.                  &argc, argv);
  50.     for (i = 1; i < argc; ++i) {
  51.     if (strcmp (argv[i], "-v") == 0) {
  52.         printf ("%s, %s.%d \n", argv[0], version, PATCHLEVEL);
  53.     }
  54.     }
  55.     /*
  56.      * check title and icon name and set default name, if necessary
  57.      */
  58.     XtSetArg (args[0], XtNtitle, &defTitle);
  59.     XtSetArg (args[1], XtNiconName, &defIconName);
  60.     XtGetValues (topLevel, args, XtNumber (args));
  61.     if (strcmp (argv[0], defTitle) == 0) {
  62.     XtSetArg (args[0], XtNtitle, NAME);
  63.     XtSetValues (topLevel, &args[0], 1);
  64.     }
  65.     if (strcmp (argv[0], defIconName) == 0) {
  66.     XtSetArg (args[0], XtNiconName, NAME);
  67.     XtSetValues (topLevel, &args[0], 1);
  68.     }
  69.     /*
  70.      * set minimum width and height
  71.      */
  72.     XtSetArg (args[0], XtNminWidth, MINWIDTH);
  73.     XtSetArg (args[1], XtNminHeight, MINHEIGHT);
  74.     XtSetValues (topLevel, args, XtNumber (args));
  75.     clockW = XtCreateManagedWidget (argv[0], xchromWidgetClass, topLevel,
  76.                     NULL, 0);
  77.     /*
  78.      * set the icon and icon mask bits
  79.      */
  80.     XtSetArg (args[0], XtNiconPixmap, &iconPixmap);
  81.     XtSetArg (args[1], XtNiconMask, &iconMaskPixmap);
  82.     XtGetValues (topLevel, args, XtNumber (args));
  83.     if (iconPixmap == None) {
  84.     args[0].value =
  85.         (XtArgVal) XCreateBitmapFromData (XtDisplay (topLevel),
  86.                           (XtScreen (topLevel))->root,
  87.                           xchrom_bits, xchrom_width,
  88.                           xchrom_height);
  89.     XtSetValues (topLevel, &args[0], 1);
  90.     }
  91.     if (iconMaskPixmap == None) {
  92.     args[1].value =
  93.         (XtArgVal) XCreateBitmapFromData (XtDisplay (topLevel),
  94.                           (XtScreen (topLevel))->root,
  95.                           xchrom_mask_bits,
  96.                           xchrom_mask_width, 
  97.                           xchrom_mask_height);
  98.     XtSetValues (topLevel, &args[1], 1);
  99.     }
  100.     XtRealizeWidget (topLevel);
  101. #ifdef ICCCM_COMP
  102.     /*
  103.      * for ICCCM compatibilty
  104.      */
  105.     wmDeleteWindow =
  106.     XmuInternAtom (XtDisplay (topLevel), XmuMakeAtom ("WM_DELETE_WINDOW"));
  107.     (void) XSetWMProtocols (XtDisplay (topLevel), XtWindow (topLevel),
  108.                 &wmDeleteWindow, 1);
  109.     (void) XSetWMProtocols (XtDisplay (clockW), XtWindow (clockW),
  110.                 &wmDeleteWindow, 1);
  111.     for ever {
  112.     XtNextEvent (&event);
  113.     if (event.type == ClientMessage
  114.         && event.xclient.data.l[0] == wmDeleteWindow) {
  115.         XtDestroyWidget (topLevel);
  116.         exit(1);
  117.     } else {
  118.         XtDispatchEvent (&event);
  119.     }
  120.     }
  121. #else
  122.     XtMainLoop ();
  123. #endif
  124. }
  125.