ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rclock.C
(Generate patch)

Comparing rxvt-unicode/src/rclock.C (file contents):
Revision 1.5 by sf-exg, Wed Jul 14 18:50:37 2021 UTC vs.
Revision 1.11 by root, Sun Nov 14 18:39:16 2021 UTC

37#include <dirent.h> 37#include <dirent.h>
38 38
39#include <X11/Xlib.h> 39#include <X11/Xlib.h>
40#include <X11/Xutil.h> 40#include <X11/Xutil.h>
41 41
42#include "ecb.h"
43
44#include "version.h"
45
42#define APL_CLASS "Clock" 46#define APL_CLASS "Clock"
43#define APL_NAME "rclock" 47#define APL_NAME "rclock"
44#define MSG_CLASS "Appointment" 48#define MSG_CLASS "Appointment"
45#define MSG_NAME "Appointment" 49#define MSG_NAME "Appointment"
46#define CONFIG_FILE ".rclock" 50#define CONFIG_FILE ".rclock"
47 51
48#ifndef EXIT_SUCCESS /* missed from <stdlib.h> ? */ 52#ifndef EXIT_SUCCESS /* missed from <stdlib.h> ? */
49# define EXIT_SUCCESS 0 53# define EXIT_SUCCESS 0
50# define EXIT_FAILURE 1 54# define EXIT_FAILURE 1
51#endif 55#endif
52
53#define VERSION "TODO: fetch from urxvt somehow"
54 56
55/*--------------------------------*-C-*---------------------------------* 57/*--------------------------------*-C-*---------------------------------*
56 * Compile-time configuration. 58 * Compile-time configuration.
57 *----------------------------------------------------------------------* 59 *----------------------------------------------------------------------*
58 * Copyright (C) 1997 1998 mj olesen <olesen@me.QueensU.CA> 60 * Copyright (C) 1997 1998 mj olesen <olesen@me.QueensU.CA>
172#if defined (MAIL_BELL) || defined (MAIL_SPAWN) || defined (MAIL_SPOOL) 174#if defined (MAIL_BELL) || defined (MAIL_SPAWN) || defined (MAIL_SPOOL)
173# ifndef MAIL 175# ifndef MAIL
174# define MAIL 176# define MAIL
175# endif 177# endif
176#endif 178#endif
179
180/*----------------------------------------------------------------------*/
181// fourth-order fixed point sine approximation,
182// adapted from https://www.coranac.com/2009/07/sines/
183
184static int32_t
185Sin (int32_t arg)
186{
187 int32_t x = (arg - 360) * 16384 / 360;
188
189 int c, y;
190 static const int qN = 13, qA = 12, B = 19900, C = 3516;
191
192 c = x << (30 - qN); // Semi-circle info into carry.
193 x -= 1 << qN; // sine -> cosine calc
194
195 x = x << (31 - qN); // Mask with PI
196 x = x >> (31 - qN); // Note: SIGNED shift! (to qN)
197 x = x * x >> (2 * qN - 14); // x=x^2 To Q14
198
199 y = B - (x * C >> 14); // B - x^2*C
200 y = (1 << qA) - (x * y >> 16); // A - x^2*(B-x^2*C)
201
202 x = c < 0 ? y : -y;
203
204 return x;
205}
177 206
178/*----------------------------------------------------------------------*/ 207/*----------------------------------------------------------------------*/
179 208
180static Display *Xdisplay; /* X display */ 209static Display *Xdisplay; /* X display */
181static int Xfd; /* file descriptor of server connection */ 210static int Xfd; /* file descriptor of server connection */
275 0, 0, /* base size */ 304 0, 0, /* base size */
276 NorthWestGravity /* gravity */ 305 NorthWestGravity /* gravity */
277}; 306};
278 307
279/* subroutine declarations */ 308/* subroutine declarations */
280static void geometry2sizehint (mywindow_t * /* win */ , 309static void geometry2sizehint (mywindow_t *win, const char *geom);
281 const char * /* geom */ );
282static void Create_Windows (int /* argc */ , 310static void Create_Windows (int argc, char *argv[]);
283 char * /* argv */ []);
284static void getXevent (); 311static void getXevent ();
285static void print_error (const char * /* fmt */ , ...); 312static void print_error (const char *fmt, ...);
286 313
287static void Draw_Window (mywindow_t * /* this_win */ , 314static void Draw_Window (mywindow_t *this_win, int full_redraw);
288 int /* full_redraw */ );
289static void Reminder (); 315static void Reminder ();
290static void Next_Reminder (int /* update_only */ ); 316static void Next_Reminder (int update_only);
291 317
292/* Arguments for Next_Reminder() */ 318/* Arguments for Next_Reminder() */
293#define REPLACE 0 319#define REPLACE 0
294#define UPDATE 1 320#define UPDATE 1
295 321
330# endif 356# endif
331#endif 357#endif
332 {"#geom", "icon window geometry"} 358 {"#geom", "icon window geometry"}
333 }; 359 };
334 360
335 fprintf (stderr, "\nUsage v" VERSION ":\n " APL_NAME " [options]\n\n" "where options include:\n"); 361 fprintf (stderr, "\nUsage for urclock version " VERSION "\n\n urclock [options]\n\n" "where options include:\n");
336 362
337 for (i = 0; i < (int)optList_size (); i++) 363 for (i = 0; i < (int)optList_size (); i++)
338 fprintf (stderr, " %-29s%s\n", optList[i].opt, optList[i].desc); 364 fprintf (stderr, " %-29s%s\n", optList[i].opt, optList[i].desc);
339} 365}
340 366
607 633
608/* 634/*
609 * translate geometry string to appropriate sizehint 635 * translate geometry string to appropriate sizehint
610 */ 636 */
611static void 637static void
612geometry2sizehint (mywindow_t * win, const char *geom) 638geometry2sizehint (mywindow_t *win, const char *geom)
613{ 639{
614 int x, y, flags; 640 int x, y, flags;
615 unsigned int width, height; 641 unsigned int width, height;
616 642
617 /* copy in values */ 643 /* copy in values */
741} 767}
742 768
743static time_t 769static time_t
744mk_time (struct tm *tmval) 770mk_time (struct tm *tmval)
745{ 771{
746 return (tmval->tm_min + 60 * (tmval->tm_hour + 24 * (tmval->tm_mday + 31 * ((tmval->tm_mon + 1) + 12 * tmval->tm_year)))); 772 return (tmval->tm_min
773 + 60 * (tmval->tm_hour
774 + 24 * (tmval->tm_mday
775 + 31 * ((tmval->tm_mon + 1)
776 + 12 * tmval->tm_year))));
747} 777}
748 778
749#ifdef MAIL 779#ifdef MAIL
750static int 780static int
751MailAvailable () 781MailAvailable ()
782 * Redraw the whole window after an exposure or size change. 812 * Redraw the whole window after an exposure or size change.
783 * After a timeout, only redraw the hands. 813 * After a timeout, only redraw the hands.
784 * Provide reminder if needed. 814 * Provide reminder if needed.
785 *----------------------------------------------------------------------*/ 815 *----------------------------------------------------------------------*/
786static void 816static void
787Draw_Window (mywindow_t * W, int full_redraw) 817Draw_Window (mywindow_t *W, int full_redraw)
788{ 818{
789 /* pre-computed values for sin() x1000, to avoid using floats */
790 static const short Sin[720] = {
791 0,
792 9, 17, 26, 35, 44, 52, 61, 70, 78, 87, 96, 105,
793 113, 122, 131, 139, 148, 156, 165, 174, 182, 191, 199, 208,
794 216, 225, 233, 242, 250, 259, 267, 276, 284, 292, 301, 309,
795 317, 326, 334, 342, 350, 358, 367, 375, 383, 391, 399, 407,
796 415, 423, 431, 438, 446, 454, 462, 469, 477, 485, 492, 500,
797 508, 515, 522, 530, 537, 545, 552, 559, 566, 574, 581, 588,
798 595, 602, 609, 616, 623, 629, 636, 643, 649, 656, 663, 669,
799 676, 682, 688, 695, 701, 707, 713, 719, 725, 731, 737, 743,
800 749, 755, 760, 766, 772, 777, 783, 788, 793, 799, 804, 809,
801 814, 819, 824, 829, 834, 839, 843, 848, 853, 857, 862, 866,
802 870, 875, 879, 883, 887, 891, 895, 899, 903, 906, 910, 914,
803 917, 921, 924, 927, 930, 934, 937, 940, 943, 946, 948, 951,
804 954, 956, 959, 961, 964, 966, 968, 970, 972, 974, 976, 978,
805 980, 982, 983, 985, 986, 988, 989, 990, 991, 993, 994, 995,
806 995, 996, 997, 998, 998, 999, 999, 999, 1000, 1000, 1000, 1000,
807 1000, 1000, 1000, 999, 999, 999, 998, 998, 997, 996, 995, 995,
808 994, 993, 991, 990, 989, 988, 986, 985, 983, 982, 980, 978,
809 976, 974, 972, 970, 968, 966, 964, 961, 959, 956, 954, 951,
810 948, 946, 943, 940, 937, 934, 930, 927, 924, 921, 917, 914,
811 910, 906, 903, 899, 895, 891, 887, 883, 879, 875, 870, 866,
812 862, 857, 853, 848, 843, 839, 834, 829, 824, 819, 814, 809,
813 804, 799, 793, 788, 783, 777, 772, 766, 760, 755, 749, 743,
814 737, 731, 725, 719, 713, 707, 701, 695, 688, 682, 676, 669,
815 663, 656, 649, 643, 636, 629, 623, 616, 609, 602, 595, 588,
816 581, 574, 566, 559, 552, 545, 537, 530, 523, 515, 508, 500,
817 492, 485, 477, 469, 462, 454, 446, 438, 431, 423, 415, 407,
818 399, 391, 383, 375, 367, 358, 350, 342, 334, 326, 317, 309,
819 301, 292, 284, 276, 267, 259, 250, 242, 233, 225, 216, 208,
820 199, 191, 182, 174, 165, 156, 148, 139, 131, 122, 113, 105,
821 96, 87, 78, 70, 61, 52, 44, 35, 26, 17, 9, 0,
822 -9, -17, -26, -35, -44, -52, -61, -70, -78, -87, -96, -105,
823 -113, -122, -131, -139, -148, -156, -165, -174, -182, -191, -199, -208,
824 -216, -225, -233, -242, -250, -259, -267, -276, -284, -292, -301, -309,
825 -317, -326, -334, -342, -350, -358, -366, -375, -383, -391, -399, -407,
826 -415, -423, -431, -438, -446, -454, -462, -469, -477, -485, -492, -500,
827 -508, -515, -522, -530, -537, -545, -552, -559, -566, -574, -581, -588,
828 -595, -602, -609, -616, -623, -629, -636, -643, -649, -656, -663, -669,
829 -676, -682, -688, -695, -701, -707, -713, -719, -725, -731, -737, -743,
830 -749, -755, -760, -766, -772, -777, -783, -788, -793, -799, -804, -809,
831 -814, -819, -824, -829, -834, -839, -843, -848, -853, -857, -862, -866,
832 -870, -875, -879, -883, -887, -891, -895, -899, -903, -906, -910, -914,
833 -917, -921, -924, -927, -930, -934, -937, -940, -943, -946, -948, -951,
834 -954, -956, -959, -961, -964, -966, -968, -970, -972, -974, -976, -978,
835 -980, -982, -983, -985, -986, -988, -989, -990, -991, -993, -994, -995,
836 -995, -996, -997, -998, -998, -999, -999, -999, -1000, -1000, -1000, -1000,
837 -1000, -1000, -1000, -999, -999, -999, -998, -998, -997, -996, -995, -995,
838 -994, -993, -991, -990, -989, -988, -986, -985, -983, -982, -980, -978,
839 -976, -974, -972, -970, -968, -966, -964, -961, -959, -956, -954, -951,
840 -948, -946, -943, -940, -937, -934, -930, -927, -924, -921, -917, -914,
841 -910, -906, -903, -899, -895, -891, -887, -883, -879, -875, -870, -866,
842 -862, -857, -853, -848, -843, -839, -834, -829, -824, -819, -814, -809,
843 -804, -799, -793, -788, -783, -777, -772, -766, -760, -755, -749, -743,
844 -737, -731, -725, -719, -713, -707, -701, -695, -688, -682, -676, -669,
845 -663, -656, -649, -643, -636, -629, -623, -616, -609, -602, -595, -588,
846 -581, -574, -566, -559, -552, -545, -537, -530, -523, -515, -508, -500,
847 -492, -485, -477, -469, -462, -454, -446, -438, -431, -423, -415, -407,
848 -399, -391, -383, -375, -367, -358, -350, -342, -334, -326, -317, -309,
849 -301, -292, -284, -276, -267, -259, -250, -242, -233, -225, -216, -208,
850 -199, -191, -182, -174, -165, -156, -148, -139, -131, -122, -113, -105,
851 -96, -87, -78, -70, -61, -52, -44, -35, -26, -17, -9,
852 };
853
854 static int savedDay = -1; 819 static int savedDay = -1;
855 820
856 time_t currentTime; 821 time_t currentTime;
857 struct tm *tmval; 822 struct tm *tmval;
858 int ctr_x, ctr_y; 823 int ctr_x, ctr_y;
975 Xgc, 940 Xgc,
976 (Msg.width - 941 (Msg.width -
977 XTextWidth (Xfont, beg, (end - beg))) / 2, 10 + Xfont->ascent + FontHeight () * lines, beg, (end - beg)); 942 XTextWidth (Xfont, beg, (end - beg))) / 2, 10 + Xfont->ascent + FontHeight () * lines, beg, (end - beg));
978 } 943 }
979 944
980 XDrawString (Xdisplay, msgButton.Dismiss, Xrvgc, (msgButton.width - XTextWidth (Xfont, "Done", 4)) / 2, Xfont->ascent + 2, "Done", 4); 945 XDrawString (Xdisplay, msgButton.Dismiss, Xrvgc, (msgButton.width - XTextWidth (Xfont, "Done" , 4)) / 2, Xfont->ascent + 2, "Done" , 4);
981 946
982 XDrawString (Xdisplay, msgButton.Defer, Xrvgc, (msgButton.width - XTextWidth (Xfont, "Defer", 5)) / 2, Xfont->ascent + 2, "Defer", 5); 947 XDrawString (Xdisplay, msgButton.Defer , Xrvgc, (msgButton.width - XTextWidth (Xfont, "Defer", 5)) / 2, Xfont->ascent + 2, "Defer", 5);
983 948
984# ifndef NO_REMINDER_EXEC 949# ifndef NO_REMINDER_EXEC
985 XDrawString (Xdisplay, msgButton.Start, Xrvgc, (msgButton.width - XTextWidth (Xfont, "Start", 5)) / 2, Xfont->ascent + 2, "Start", 5); 950 XDrawString (Xdisplay, msgButton.Start , Xrvgc, (msgButton.width - XTextWidth (Xfont, "Start", 5)) / 2, Xfont->ascent + 2, "Start", 5);
986 951
987 if (strlen (execPrgm) > 1) 952 if (strlen (execPrgm) > 1)
988 XMapWindow (Xdisplay, msgButton.Start); 953 XMapWindow (Xdisplay, msgButton.Start);
989 else 954 else
990 XUnmapWindow (Xdisplay, msgButton.Start); 955 XUnmapWindow (Xdisplay, msgButton.Start);
1013 978
1014 /* 979 /*
1015 * draw clock 980 * draw clock
1016 */ 981 */
1017 982
1018 ctr_x = (W->width / 2); 983 ctr_x = W->width / 2;
1019 ctr_y = (W->height / 2); 984 ctr_y = W->height / 2;
1020 985
1021#define XPOS(i,val) (ctr_x + (W->width * Sin[i%720] * (val) + 100000) / 200000) 986#define XPOS(i,val) (ctr_x + (W->width * Sin (i ) + 4096) / (819200 / (val)))
1022#define YPOS(i,val) (ctr_y - (W->height * Sin[(i+180)%720] * (val) + 100000) / 200000) 987#define YPOS(i,val) (ctr_y - (W->height * Sin (i + 180) + 4096) / (819200 / (val)))
1023 /* 988 /*
1024 * how to draw the clock face 989 * how to draw the clock face
1025 */ 990 */
1026 991
1027 /* calculate the positions of the hands */ 992 /* calculate the positions of the hands */
1074#if defined(REMINDERS) && defined(DATE_ON_CLOCK_FACE) 1039#if defined(REMINDERS) && defined(DATE_ON_CLOCK_FACE)
1075 if (show_date) 1040 if (show_date)
1076 { 1041 {
1077 char date[10]; 1042 char date[10];
1078 1043
1079 currentTime = time (NULL) + adjustTime; /* get the current time */
1080 tmval = localtime (&currentTime);
1081 strftime (date, sizeof (date), "%d", tmval); 1044 strftime (date, sizeof (date), "%d", tmval);
1082 XDrawString (Xdisplay, W->win, X_gc, 1045 XDrawString (Xdisplay, W->win, X_gc,
1083 ctr_x - XTextWidth (Xfont, date, strlen (date)) / 2, 1046 ctr_x - XTextWidth (Xfont, date, strlen (date)) / 2,
1084 ctr_y + FontHeight () + (ctr_y - FontHeight ()) / 2, date, strlen (date)); 1047 ctr_y + FontHeight () + (ctr_y - FontHeight ()) / 2, date, strlen (date));
1085 } 1048 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines