home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume1 / mailwatch / patch1 / Diffs next >
Encoding:
Text File  |  1988-08-25  |  21.9 KB  |  686 lines

  1. *** OLD/Mailwatch.c    Wed Aug 24 22:30:56 1988
  2. --- Mailwatch.c    Mon Aug 22 23:23:00 1988
  3. ***************
  4. *** 15,21 ****
  5.    *
  6.    * When new mail comes in, all new messages are scanned for author and subject
  7.    * and are stored in the "mail" field of the mailwatch data structure.  This
  8. !  * is intended for XtGetValues to obtain if the user desires this info.
  9.    *
  10.    * The mailbox flag goes up when there is new mail _and_ the user hasn't
  11.    * read it yet.  As soon as the user updates the access time on the mailbox,
  12. --- 15,21 ----
  13.    *
  14.    * When new mail comes in, all new messages are scanned for author and subject
  15.    * and are stored in the "mail" field of the mailwatch data structure.  This
  16. !  * data is passed as the call_data to a user supplied callback function.
  17.    *
  18.    * The mailbox flag goes up when there is new mail _and_ the user hasn't
  19.    * read it yet.  As soon as the user updates the access time on the mailbox,
  20. ***************
  21. *** 29,37 ****
  22.    * Destroy() will now destroy the flagup and flagdown pixmaps.
  23.    *
  24.    * BUGS:
  25. !  *    For verbose to work, it requires new mail be separated by the
  26. !  * proverbial "From " string as the first 5 chars on a line.  This is
  27. !  * how most mailers deposit mail in /usr/spool/mail.  Sorry MMDF users.
  28.    *
  29.    * It is assumed that when the user starts up this widget, he knows what
  30.    * his mail status is (how much he's got, etc).  Only new mail arrived
  31. --- 29,38 ----
  32.    * Destroy() will now destroy the flagup and flagdown pixmaps.
  33.    *
  34.    * BUGS:
  35. !  *    For Mailwatch to return any information to the callback routine(s),
  36. !  * it requires new mail be separated by the common usage of the "From "
  37. !  * string as the first 5 chars of a mail message.  This is how most mailers
  38. !  * deposit mail in /usr/spool/mail.  Sorry MMDF users.
  39.    *
  40.    * It is assumed that when the user starts up this widget, he knows what
  41.    * his mail status is (how much he's got, etc).  Only new mail arrived
  42. ***************
  43. *** 53,59 ****
  44.   static struct stat stbuf;
  45.   static Pixmap ReadBitmapFile();
  46.   static void GetMailFile(), CloseDown();
  47. ! static void check_mailbox(), redraw_mailbox(), beep();
  48.   static void Initialize(), Realize(), Destroy(), Redisplay();
  49.   static Boolean SetValues();
  50.   
  51. --- 54,60 ----
  52.   static struct stat stbuf;
  53.   static Pixmap ReadBitmapFile();
  54.   static void GetMailFile(), CloseDown();
  55. ! static void check_mailbox(), redraw_mailbox();
  56.   static void Initialize(), Realize(), Destroy(), Redisplay();
  57.   static Boolean SetValues();
  58.   
  59. ***************
  60. *** 81,86 ****
  61. --- 82,89 ----
  62.       offset(flagup), XtRString, NULL},
  63.       {XtNmail, XtCString, XtRString, sizeof(String),
  64.       offset(mail), XtRString, NULL},
  65. +     {XtNcallback, XtCCallback, XtRCallback, sizeof(caddr_t),
  66. +     offset(callback), XtRCallback, NULL},
  67.   };
  68.   
  69.   #undef offset
  70. ***************
  71. *** 160,166 ****
  72.           flagup_bits,
  73.           pix_up_w = flagup_width,
  74.           pix_up_h = flagup_height,
  75. !         w->core.background_pixel, w->mailbox.foreground_pixel,
  76.           depth);
  77.   
  78.       if (w->mailbox.flagdown)
  79. --- 163,169 ----
  80.           flagup_bits,
  81.           pix_up_w = flagup_width,
  82.           pix_up_h = flagup_height,
  83. !         w->mailbox.foreground_pixel, w->core.background_pixel,
  84.           depth);
  85.   
  86.       if (w->mailbox.flagdown)
  87. ***************
  88. *** 215,221 ****
  89.   }
  90.   
  91.   static GC
  92. ! get_mailbox_gc(w)
  93.   MailwatchWidget w;
  94.   {
  95.       XtGCMask valuemask;
  96. --- 218,224 ----
  97.   }
  98.   
  99.   static GC
  100. ! GetNormalGC(w)
  101.   MailwatchWidget w;
  102.   {
  103.       XtGCMask valuemask;
  104. ***************
  105. *** 226,234 ****
  106.       xgcv.background = w->core.background_pixel;
  107.       xgcv.function = GXcopy;
  108.       xgcv.graphics_exposures = False;    /* this is Bool, not Boolean */
  109. !     return (XtGetGC((Widget) w, valuemask, &xgcv));
  110.   }
  111.   
  112.   static Pixmap
  113.   ReadBitmapFile(dpy, root, file, width, height)
  114.   Display *dpy;
  115. --- 229,252 ----
  116.       xgcv.background = w->core.background_pixel;
  117.       xgcv.function = GXcopy;
  118.       xgcv.graphics_exposures = False;    /* this is Bool, not Boolean */
  119. !     w->mailbox.normal_GC = XtGetGC((Widget) w, valuemask, &xgcv);
  120.   }
  121.   
  122. + static GC
  123. + GetInvertGC(w)
  124. + MailwatchWidget w;
  125. + {
  126. +     XtGCMask valuemask;
  127. +     XGCValues xgcv;
  128. +     valuemask = GCForeground | GCBackground | GCFunction | GCGraphicsExposures;
  129. +     xgcv.foreground = w->mailbox.foreground_pixel;
  130. +     xgcv.background = w->core.background_pixel;
  131. +     xgcv.function = GXcopyInverted;
  132. +     xgcv.graphics_exposures = False;    /* this is Bool, not Boolean */
  133. +     w->mailbox.invert_GC = XtGetGC((Widget) w, valuemask, &xgcv);
  134. + }
  135.   static Pixmap
  136.   ReadBitmapFile(dpy, root, file, width, height)
  137.   Display *dpy;
  138. ***************
  139. *** 266,272 ****
  140.       XtCreateWindow(gw, InputOutput, (Visual *) CopyFromParent,
  141.       *valuemaskp, attr);
  142.   
  143. !     w->mailbox.gc = get_mailbox_gc(w);
  144.   
  145.       XtAddEventHandler(gw, ButtonPressMask, FALSE, HandleButtonPress, NULL);
  146.   }
  147. --- 284,291 ----
  148.       XtCreateWindow(gw, InputOutput, (Visual *) CopyFromParent,
  149.       *valuemaskp, attr);
  150.   
  151. !     GetNormalGC(w);
  152. !     GetInvertGC(w);
  153.   
  154.       XtAddEventHandler(gw, ButtonPressMask, FALSE, HandleButtonPress, NULL);
  155.   }
  156. ***************
  157. *** 280,286 ****
  158.       XtFree(w->mailbox.mail);
  159.       XtFree(w->mailbox.filename);
  160.       XtRemoveTimeOut(w->mailbox.interval_id);
  161. !     XtDestroyGC(w->mailbox.gc);
  162.       XFreePixmap(XtDisplay(w), w->mailbox.flagup_pixmap);
  163.       XFreePixmap(XtDisplay(w), w->mailbox.flagdown_pixmap);
  164.   }
  165. --- 299,306 ----
  166.       XtFree(w->mailbox.mail);
  167.       XtFree(w->mailbox.filename);
  168.       XtRemoveTimeOut(w->mailbox.interval_id);
  169. !     XtDestroyGC(w->mailbox.normal_GC);
  170. !     XtDestroyGC(w->mailbox.invert_GC);
  171.       XFreePixmap(XtDisplay(w), w->mailbox.flagup_pixmap);
  172.       XFreePixmap(XtDisplay(w), w->mailbox.flagdown_pixmap);
  173.   }
  174. ***************
  175. *** 317,327 ****
  176.       return 1;
  177.       *p = 0;
  178.       if (!(fp = fopen(w->mailbox.filename, "r")) ||
  179. !       fseek(fp, w->mailbox.last_size, 0)) {
  180. !     (void) sprintf(p, "can't go %ld bytes into %s",
  181. !         w->mailbox.last_size, w->mailbox.filename);
  182.       goto the_end;
  183. -     }
  184.       while (fgets(buf, sizeof(buf), fp)) {
  185.       if (strncmp(buf, "From ", 5))
  186.           continue;
  187. --- 337,344 ----
  188.       return 1;
  189.       *p = 0;
  190.       if (!(fp = fopen(w->mailbox.filename, "r")) ||
  191. !       fseek(fp, w->mailbox.last_size, 0L))
  192.       goto the_end;
  193.       while (fgets(buf, sizeof(buf), fp)) {
  194.       if (strncmp(buf, "From ", 5))
  195.           continue;
  196. ***************
  197. *** 375,398 ****
  198.       int redraw = 0;
  199.   
  200.       if (stat(w->mailbox.filename, &stbuf) == -1) {
  201. !     extern int errno;
  202. !     if (errno != ENOENT)
  203. !         sprintf(w->mailbox.mail, "can't stat %s", w->mailbox.filename);
  204.       } else {
  205.       if (stbuf.st_size > w->mailbox.last_size && from(w)) {
  206.           redraw = TRUE;
  207.           w->mailbox.flag_up = TRUE;
  208. !         beep(w);
  209. !     } else if (stbuf.st_atime > w->mailbox.last_access) {
  210.           w->mailbox.last_access = stbuf.st_atime;
  211.           if (w->mailbox.flag_up == TRUE)
  212.           redraw = TRUE;
  213.           w->mailbox.flag_up = FALSE;
  214.       }
  215.       /* else, no change -- leave it alone */
  216.       }
  217. !     w->mailbox.last_size = stbuf.st_size;
  218.       if (redraw || force_redraw)
  219.       redraw_mailbox(w);
  220.   
  221. --- 392,417 ----
  222.       int redraw = 0;
  223.   
  224.       if (stat(w->mailbox.filename, &stbuf) == -1) {
  225. !         if (w->mailbox.flag_up == TRUE)
  226. !             redraw = TRUE;
  227. !         w->mailbox.flag_up = FALSE;
  228. !         w->mailbox.last_size = 0;
  229.       } else {
  230.       if (stbuf.st_size > w->mailbox.last_size && from(w)) {
  231.           redraw = TRUE;
  232.           w->mailbox.flag_up = TRUE;
  233. !         XBell(XtDisplay(w), MAILBOX_VOLUME);
  234. !         XtCallCallbacks(w, XtNcallback, w->mailbox.mail);
  235.           w->mailbox.last_access = stbuf.st_atime;
  236. +     } else if (stbuf.st_atime > w->mailbox.last_access) {
  237.           if (w->mailbox.flag_up == TRUE)
  238.           redraw = TRUE;
  239.           w->mailbox.flag_up = FALSE;
  240.       }
  241. +     w->mailbox.last_size = stbuf.st_size;
  242.       /* else, no change -- leave it alone */
  243.       }
  244. !     
  245.       if (redraw || force_redraw)
  246.       redraw_mailbox(w);
  247.   
  248. ***************
  249. *** 428,436 ****
  250.       fprintf(stderr, "can't allocate enough memory for widget.\n");
  251.       exit(1);
  252.       }
  253. !     strcpy(w->mailbox.filename, MAILBOX_DIRECTORY);
  254. !     strcat(w->mailbox.filename, "/");
  255. !     strcat(w->mailbox.filename, username);
  256.   }
  257.   
  258.   static void
  259. --- 447,453 ----
  260.       fprintf(stderr, "can't allocate enough memory for widget.\n");
  261.       exit(1);
  262.       }
  263. !     sprintf(w->mailbox.filename, "%s/%s", MAILBOX_DIRECTORY, username);
  264.   }
  265.   
  266.   static void
  267. ***************
  268. *** 461,468 ****
  269.       }
  270.       if (current->mailbox.foreground_pixel != new->mailbox.foreground_pixel ||
  271.       current->core.background_pixel != new->core.background_pixel) {
  272. !     XtDestroyGC(current->mailbox.gc);
  273. !     new->mailbox.gc = get_mailbox_gc(new);
  274.       redisplay = TRUE;
  275.       }
  276.       return (redisplay);
  277. --- 478,487 ----
  278.       }
  279.       if (current->mailbox.foreground_pixel != new->mailbox.foreground_pixel ||
  280.       current->core.background_pixel != new->core.background_pixel) {
  281. !     XtDestroyGC(current->mailbox.normal_GC);
  282. !     XtDestroyGC(current->mailbox.invert_GC);
  283. !     GetNormalGC(new);
  284. !     GetInvertGC(new);
  285.       redisplay = TRUE;
  286.       }
  287.       return (redisplay);
  288. ***************
  289. *** 479,496 ****
  290.       register Display *dpy = XtDisplay(mw);
  291.       register Window win = XtWindow(mw);
  292.       register int x, y, w, h;
  293. !     GC  gc = mw->mailbox.gc;
  294.       Pixmap picture;
  295.       Pixel back;
  296.   
  297.       if (mw->mailbox.flag_up) {    /* paint the "up" position */
  298.       back = mw->mailbox.foreground_pixel;
  299.       picture = mw->mailbox.flagup_pixmap;
  300.       w = pix_up_w, h = pix_up_h;
  301.       } else {        /* paint the "down" position */
  302.       back = mw->core.background_pixel;
  303.       picture = mw->mailbox.flagdown_pixmap;
  304.       w = pix_dn_w, h = pix_dn_h;
  305.       }
  306.   
  307.       /* center the picture in the window */
  308. --- 498,520 ----
  309.       register Display *dpy = XtDisplay(mw);
  310.       register Window win = XtWindow(mw);
  311.       register int x, y, w, h;
  312. !     GC gc;
  313.       Pixmap picture;
  314.       Pixel back;
  315.   
  316.       if (mw->mailbox.flag_up) {    /* paint the "up" position */
  317. +     XFillRectangle(dpy, win, mw->mailbox.normal_GC,
  318. +         0, 0, mw->core.width, mw->core.height);
  319.       back = mw->mailbox.foreground_pixel;
  320.       picture = mw->mailbox.flagup_pixmap;
  321.       w = pix_up_w, h = pix_up_h;
  322. +     gc = mw->mailbox.invert_GC;
  323.       } else {        /* paint the "down" position */
  324. +     XClearWindow(dpy, win);
  325.       back = mw->core.background_pixel;
  326.       picture = mw->mailbox.flagdown_pixmap;
  327.       w = pix_dn_w, h = pix_dn_h;
  328. +     gc = mw->mailbox.normal_GC;
  329.       }
  330.   
  331.       /* center the picture in the window */
  332. ***************
  333. *** 497,513 ****
  334.       x = (mw->core.width - w) / 2;
  335.       y = (mw->core.height - h) / 2;
  336.   
  337. -     XSetWindowBackground(dpy, win, back);
  338. -     XClearWindow(dpy, win);
  339.       XCopyArea(dpy, picture, win, gc, 0, 0, w, h, x, y);
  340. - }
  341. - static void
  342. - beep(w)
  343. - MailwatchWidget w;
  344. - {
  345. -     register Display *dpy = XtDisplay(w);
  346. -     register Window win = XtWindow(w);
  347. -     XBell(dpy, MAILBOX_VOLUME);
  348.   }
  349. --- 521,525 ----
  350. No differences encountered
  351. *** OLD/MailwatchP.h    Wed Aug 24 22:30:58 1988
  352. --- MailwatchP.h    Mon Aug 22 23:21:17 1988
  353. ***************
  354. *** 7,30 ****
  355.   #include "Mailwatch.h"
  356.   #include <X11/CoreP.h>
  357.   
  358.   #define MAILBOX_DIRECTORY "/usr/spool/mail"
  359.   #define MAILBOX_VOLUME 33        /* percentage */
  360.   
  361.   typedef struct {            /* new fields for mailwatch widget */
  362. !     Pixel foreground_pixel;        /* color index of normal state fg */
  363. !     GC gc;                /* normal GC to use */
  364. !     int update;                /* seconds between updates */
  365. !     String filename;            /* filename to watch */
  366. !     long last_size;            /* size in bytes of mailboxname */
  367. !     time_t last_access;            /* last time user accessed mailbox */
  368. !     Boolean reverseVideo;        /* do reverse video? */
  369.       XtIntervalId interval_id;        /* time between checks */
  370. -     Boolean flag_up;            /* is the flag up? */
  371. -     String mail;            /* author/subject/date info to "get" */
  372. -     String flagup;            /* path to alternate icon to use */
  373. -     String flagdown;            /* path to alternate icon to use */
  374. -     Pixmap flagup_pixmap;        /* for when there is mail */
  375. -     Pixmap flagdown_pixmap;        /* for when there isn't mail */
  376.   } MailwatchPart;
  377.   
  378.   typedef struct _MailwatchRec {        /* full instance record */
  379. --- 7,34 ----
  380.   #include "Mailwatch.h"
  381.   #include <X11/CoreP.h>
  382.   
  383. + #ifndef MAILBOX_DIRECTORY
  384.   #define MAILBOX_DIRECTORY "/usr/spool/mail"
  385. + #endif /* MAILBOX_DIRECTORY */
  386.   #define MAILBOX_VOLUME 33        /* percentage */
  387.   
  388.   typedef struct {            /* new fields for mailwatch widget */
  389. !     Pixel    foreground_pixel;    /* color index of normal state fg */
  390. !     GC        normal_GC;        /* normal GC to use */
  391. !     GC        invert_GC;        /* invert GC to use */
  392. !     int        update;            /* seconds between updates */
  393. !     String    filename;        /* filename to watch */
  394. !     long    last_size;        /* size in bytes of mailboxname */
  395. !     time_t    last_access;        /* last time user accessed mailbox */
  396. !     Boolean    reverseVideo;        /* do reverse video? */
  397. !     Boolean    flag_up;        /* is the flag up? */
  398. !     String    mail;            /* author/subject/date info to "get" */
  399. !     String    flagup;            /* path to alternate icon to use */
  400. !     String    flagdown;        /* path to alternate icon to use */
  401. !     Pixmap    flagup_pixmap;        /* for when there is mail */
  402. !     Pixmap    flagdown_pixmap;    /* for when there isn't mail */
  403. !     XtCallbackList callback;        /* Call func(s) when mail arrives */
  404.       XtIntervalId interval_id;        /* time between checks */
  405.   } MailwatchPart;
  406.   
  407.   typedef struct _MailwatchRec {        /* full instance record */
  408. No differences encountered
  409. *** OLD/Patchlevel.h    Wed Aug 24 22:31:00 1988
  410. --- Patchlevel.h    Wed Aug 24 22:32:03 1988
  411. ***************
  412. *** 1 ****
  413. ! #define PATHLEVEL 0
  414. --- 1 ----
  415. ! #define PATCHLEVEL 1
  416. *** OLD/README    Wed Aug 24 22:31:01 1988
  417. --- README    Mon Aug 22 23:21:19 1988
  418. ***************
  419. *** 19,43 ****
  420.   be the flagup/flagdown icons that come with the Mailbox widget.
  421.   
  422.   When new mail comes in, all new messages are scanned for author and subject
  423. ! and are stored in the "mail" field of the mailwatch data structure.  This
  424. ! is intended for XtGetValues to obtain if the user desires this info.  This
  425. ! info is _always_ overwritten on each call (if there is new mail).  It is
  426. ! reset to the NULL string once the user xtGetValues() the XtNmail values so
  427. ! subsequent calls don't return already reported new mail.
  428.   
  429.   Left button causes the widget to check for new mail.  Middle button
  430.   clears the flag and lets it think there is no new mail (reset).
  431.   
  432.   The program "xwatch" gives an example of the intended use of this widget:
  433. ! you XtGetValues() the update timout value, set the main program to timeout
  434. ! that often.  Once your program receives a SIGALRM, your routine which
  435. ! caught the signal XtGetValues() the XtNmail field of the widget to see
  436. ! if there has been new mail.  If so, you can print it to stdout or whatever
  437. ! else you want to do with it.  You can choose to ignore this and not ever
  438. ! read this value and xwatch will be effectively just like xbiff except for
  439. ! the following "feature" described below.
  440.   
  441. ! New "Feature"?
  442.   The mailbox flag goes up when there is new mail _and_ the user hasn't
  443.   read it yet.  As soon as the user updates the access time on the mailbox,
  444.   the flag goes down.  I had a pet peeve that xbiff had where you read some
  445. --- 19,39 ----
  446.   be the flagup/flagdown icons that come with the Mailbox widget.
  447.   
  448.   When new mail comes in, all new messages are scanned for author and subject
  449. ! and are stored in the "mail" field of the mailwatch data structure.  The user
  450. ! is supposed to supply a callback function which, upon the arrival of new mail,
  451. ! will be called.  The "call data" parameter to the callback function will
  452. ! contain the info about the new mail.
  453.   
  454.   Left button causes the widget to check for new mail.  Middle button
  455.   clears the flag and lets it think there is no new mail (reset).
  456.   
  457.   The program "xwatch" gives an example of the intended use of this widget:
  458. ! The callback function installed does nothing more than print the callback
  459. ! data (new mail info) to stdout.  You can choose to ignore this and not install
  460. ! a callback function and and xwatch will be effectively just like xbiff except
  461. ! for the following "feature" described below.
  462.   
  463. ! New "Feature"(?)
  464.   The mailbox flag goes up when there is new mail _and_ the user hasn't
  465.   read it yet.  As soon as the user updates the access time on the mailbox,
  466.   the flag goes down.  I had a pet peeve that xbiff had where you read some
  467. ***************
  468. *** 45,54 ****
  469.   I'd always have to click on it to set it down.
  470.   
  471.   BUGS:
  472. ! Mail _must_ use the "From "-format string as the first 5 chars on a line.
  473.   This is how most mailers deposit mail in /usr/spool/mail.  Sorry MMDF users.
  474. - If your system doesn't use From to separate messages, then don't attempt to
  475. - XtGetValues XtNmail and it'll still work just like the current xbiff.
  476.   
  477.   It is assumed that when the user starts up this widget, he knows what
  478.   his mail status is (how much he's got, etc).  Only new mail arrived
  479. --- 41,49 ----
  480.   I'd always have to click on it to set it down.
  481.   
  482.   BUGS:
  483. ! Mail _must_ use the "From "-format string as the first 5 chars on a line
  484. ! to separate the message from other messages (a "message separator").
  485.   This is how most mailers deposit mail in /usr/spool/mail.  Sorry MMDF users.
  486.   
  487.   It is assumed that when the user starts up this widget, he knows what
  488.   his mail status is (how much he's got, etc).  Only new mail arrived
  489. ***************
  490. *** 58,63 ****
  491.   to check for new mail and behave similarly to what it described above
  492.   only printing information on the status line of your terminal on the
  493.   title bar of your window (X or suntools).  Requests for this program
  494. ! and other bug reports about Mailwatch.c etc can be made to me at:
  495.   
  496.       Dan Heller <island!argv@sun.com>
  497. --- 53,58 ----
  498.   to check for new mail and behave similarly to what it described above
  499.   only printing information on the status line of your terminal on the
  500.   title bar of your window (X or suntools).  Requests for this program
  501. ! and other bug reports about the enclosed software can be sent to me at:
  502.   
  503.       Dan Heller <island!argv@sun.com>
  504. No differences encountered
  505. *** OLD/xwatch.c    Wed Aug 24 22:31:06 1988
  506. --- xwatch.c    Mon Aug 22 23:21:21 1988
  507. ***************
  508. *** 4,23 ****
  509.    * comments, flames and other humorous material to me (C.O.D.'s ok)
  510.    */
  511.   #include <stdio.h>
  512.   #include <X11/Xatom.h>
  513.   #include <X11/Xlib.h>
  514.   #include <X11/Intrinsic.h>
  515. ! #include <X11/Atoms.h>
  516. ! #include <X11/Cardinals.h>
  517.   #include "Mailwatch.h"
  518. - #include <signal.h>
  519. - #include <sys/time.h>
  520. - #define SIGRET int /* define to of type void for sys-v and sun4's */
  521.   
  522. - extern void exit();
  523. - char *ProgramName;
  524.   static XrmOptionDescRec options[] = {
  525.       {"-update",    "*Mailwatch.update",    XrmoptionSepArg, NULL},
  526.       {"-file",      "*Mailwatch.file",      XrmoptionSepArg, NULL},
  527. --- 4,16 ----
  528.    * comments, flames and other humorous material to me (C.O.D.'s ok)
  529.    */
  530.   #include <stdio.h>
  531. + #include <X11/Xos.h>
  532.   #include <X11/Xatom.h>
  533.   #include <X11/Xlib.h>
  534.   #include <X11/Intrinsic.h>
  535. ! #include <X11/StringDefs.h>
  536.   #include "Mailwatch.h"
  537.   
  538.   static XrmOptionDescRec options[] = {
  539.       {"-update",    "*Mailwatch.update",    XrmoptionSepArg, NULL},
  540.       {"-file",      "*Mailwatch.file",      XrmoptionSepArg, NULL},
  541. ***************
  542. *** 26,32 ****
  543.   };
  544.   
  545.   static void
  546. ! Usage()
  547.   {
  548.       static char *help_message[] = {
  549.       "where options include:",
  550. --- 19,26 ----
  551.   };
  552.   
  553.   static void
  554. ! Usage(ProgramName)
  555. ! String ProgramName;
  556.   {
  557.       static char *help_message[] = {
  558.       "where options include:",
  559. ***************
  560. *** 52,89 ****
  561.   Widget w;
  562.   
  563.   /*
  564. !  * When the timer goes off, query the mail and print it.  Always reset
  565. !  * the buffer to NULL so the next query won't get the same information
  566. !  * that you got the previous time.
  567.    */
  568. ! SIGRET
  569. ! print_mail()
  570.   {
  571. !     char *buf, *file;
  572. !     Arg arg[3];
  573. !     XtSetArg(arg[0], XtNmail, &buf);
  574. !     XtSetArg(arg[1], XtNfile, &file);
  575. !     XtGetValues(w, arg, TWO);
  576. !     if (buf[0])
  577. !     fputs(buf, stdout);
  578. !     /*
  579. !     printf("New mail in %s:\r\n%s", file, buf);
  580. !     else
  581. !     printf("No new mail in %s\r\n", file);
  582. !     */
  583. !     buf[0] = 0;
  584.   }
  585.   
  586.   void
  587.   main(argc, argv)
  588.   int argc;
  589. ! char **argv;
  590.   {
  591.       Widget toplevel;
  592. !     struct itimerval timer;
  593. !     long timeout;
  594. !     Arg arg;
  595.   
  596.       ProgramName = argv[0];
  597.   
  598. --- 46,69 ----
  599.   Widget w;
  600.   
  601.   /*
  602. !  * Callback routine to print new mail when it arrives.
  603.    */
  604. ! void
  605. ! print_mail(w, client_data, mail_info)
  606. ! MailwatchWidget w;
  607. ! caddr_t client_data; /* unused */
  608. ! String mail_info;    /* returned by the widget */
  609.   {
  610. !     (void) fputs(mail_info, stdout);
  611.   }
  612.   
  613.   void
  614.   main(argc, argv)
  615.   int argc;
  616. ! char *argv[];
  617.   {
  618.       Widget toplevel;
  619. !     String ProgramName;
  620.   
  621.       ProgramName = argv[0];
  622.   
  623. ***************
  624. *** 90,107 ****
  625.       toplevel = XtInitialize("xwatch", "XWatch", options, XtNumber(options),
  626.       &argc, argv);
  627.       if (argc != 1)
  628. !     Usage();
  629.   
  630.       w = XtCreateManagedWidget("xwatch", mailwatchWidgetClass, toplevel,NULL,0);
  631. !     XtRealizeWidget(toplevel);
  632.   
  633. !     XtSetArg(arg, XtNupdate, &timeout);
  634. !     XtGetValues(w, &arg, ONE);
  635. !     (void) signal(SIGALRM, print_mail);
  636. !     timerclear(&(timer.it_interval));
  637. !     timerclear(&(timer.it_value));
  638. !     timer.it_value.tv_sec = timer.it_interval.tv_sec = timeout;
  639. !     setitimer(ITIMER_REAL, &timer, NULL);
  640.       XtMainLoop();
  641.   }
  642. --- 70,80 ----
  643.       toplevel = XtInitialize("xwatch", "XWatch", options, XtNumber(options),
  644.       &argc, argv);
  645.       if (argc != 1)
  646. !     Usage(ProgramName);
  647.   
  648.       w = XtCreateManagedWidget("xwatch", mailwatchWidgetClass, toplevel,NULL,0);
  649. !     XtAddCallback(w, XtNcallback, print_mail, NULL);
  650.   
  651. !     XtRealizeWidget(toplevel);
  652.       XtMainLoop();
  653.   }
  654. *** OLD/xwatch.man    Wed Aug 24 22:31:08 1988
  655. --- xwatch.man    Wed Aug 24 22:29:44 1988
  656. ***************
  657. *** 125,133 ****
  658.   .B reverseVideo (\fPclass\fB ReverseVideo)
  659.   Specifies that the foreground and background should be reversed.
  660.   .TP 8
  661. ! .B up_flag (\fclass\fB File)
  662.   .TP 8
  663. ! .B down_flag (\fclass\fB File)
  664.   Specifies the filename to read for the up flag and the down flag icons
  665.   respectively.
  666.   .SH ENVIRONMENT
  667. --- 125,133 ----
  668.   .B reverseVideo (\fPclass\fB ReverseVideo)
  669.   Specifies that the foreground and background should be reversed.
  670.   .TP 8
  671. ! .B up_flag (\fPclass\fB File)
  672.   .TP 8
  673. ! .B down_flag (\fPclass\fB File)
  674.   Specifies the filename to read for the up flag and the down flag icons
  675.   respectively.
  676.   .SH ENVIRONMENT
  677.