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.3 by root, Mon May 10 00:37:29 2021 UTC vs.
Revision 1.6 by root, Sat Jul 17 00:10:15 2021 UTC

34#include <sys/time.h> 34#include <sys/time.h>
35#include <time.h> 35#include <time.h>
36 36
37#include <dirent.h> 37#include <dirent.h>
38 38
39#include <X11/Intrinsic.h> /* Xlib, Xutil, Xresource, Xfuncproto */ 39#include <X11/Xlib.h>
40#include <X11/Xutil.h>
41
42#include "ecb.h"
40 43
41#define APL_CLASS "Clock" 44#define APL_CLASS "Clock"
42#define APL_NAME "rclock" 45#define APL_NAME "rclock"
43#define MSG_CLASS "Appointment" 46#define MSG_CLASS "Appointment"
44#define MSG_NAME "Appointment" 47#define MSG_NAME "Appointment"
134#define MAILUPDATE 60 137#define MAILUPDATE 60
135#define REMINDERS_TIME 10 138#define REMINDERS_TIME 10
136#define DEFER_TIME 3 139#define DEFER_TIME 3
137#define ADJUST_TIME 140#define ADJUST_TIME
138 141
139#define CENTURY 2000 / TODO: verify */ 142#define CENTURY 2000 /* TODO: verify */
140 143
141/*----------------------------------------------------------------------* 144/*----------------------------------------------------------------------*
142 * #define FONT_NAME "7x14" 145 * #define FONT_NAME "7x14"
143 * to define the font to be used for appointment reminders 146 * to define the font to be used for appointment reminders
144 * 147 *
173# define MAIL 176# define MAIL
174# endif 177# endif
175#endif 178#endif
176 179
177/*----------------------------------------------------------------------*/ 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, x2, 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}
206
207/*----------------------------------------------------------------------*/
178 208
179static Display *Xdisplay; /* X display */ 209static Display *Xdisplay; /* X display */
180static int Xfd; /* file descriptor of server connection */ 210static int Xfd; /* file descriptor of server connection */
181static GC Xgc, Xrvgc; /* normal, reverse video GC */ 211static GC Xgc, Xrvgc; /* normal, reverse video GC */
182 212
195 225
196#define fgColor 0 226#define fgColor 0
197#define bgColor 1 227#define bgColor 1
198static const char *rs_color[2] = { FG_COLOR_NAME, BG_COLOR_NAME }; 228static const char *rs_color[2] = { FG_COLOR_NAME, BG_COLOR_NAME };
199 229
200static Pixel PixColors[2]; 230static unsigned long PixColors[2];
201static const char *rs_geometry = NULL; 231static const char *rs_geometry = NULL;
202 232
203#ifdef ICONWIN 233#ifdef ICONWIN
204static const char *rs_iconGeometry = NULL; 234static const char *rs_iconGeometry = NULL;
205static mywindow_t Icon = { None, 65, 65 }; /* icon window */ 235static mywindow_t Icon = { None, 65, 65 }; /* icon window */
278/* subroutine declarations */ 308/* subroutine declarations */
279static void geometry2sizehint (mywindow_t * /* win */ , 309static void geometry2sizehint (mywindow_t * /* win */ ,
280 const char * /* geom */ ); 310 const char * /* geom */ );
281static void Create_Windows (int /* argc */ , 311static void Create_Windows (int /* argc */ ,
282 char * /* argv */ []); 312 char * /* argv */ []);
283static void getXevent (void); 313static void getXevent ();
284static void print_error (const char * /* fmt */ , ...); 314static void print_error (const char * /* fmt */ , ...);
285 315
286static void Draw_Window (mywindow_t * /* this_win */ , 316static void Draw_Window (mywindow_t * /* this_win */ ,
287 int /* full_redraw */ ); 317 int /* full_redraw */ );
288static void Reminder (void); 318static void Reminder ();
289static void Next_Reminder (int /* update_only */ ); 319static void Next_Reminder (int /* update_only */ );
290 320
291/* Arguments for Next_Reminder() */ 321/* Arguments for Next_Reminder() */
292#define REPLACE 0 322#define REPLACE 0
293#define UPDATE 1 323#define UPDATE 1
294 324
295/*----------------------------------------------------------------------*/ 325/*----------------------------------------------------------------------*/
296 326
297static void 327static void
298usage (void) 328usage ()
299{ 329{
300 int i; 330 int i;
301 struct 331 struct
302 { 332 {
303 const char *const opt; 333 const char *const opt;
342 * Check out if we are using a maildir drop (qmail) 372 * Check out if we are using a maildir drop (qmail)
343 * Note: this changes mail_dir to hold the "new" diretory 373 * Note: this changes mail_dir to hold the "new" diretory
344 */ 374 */
345#ifdef MAIL 375#ifdef MAIL
346static void 376static void
347CheckMaildir (void) 377CheckMaildir ()
348{ 378{
349 struct stat st; 379 struct stat st;
350 char *buf, *p; 380 char *buf, *p;
351 381
352 if (!*mail_file || stat (mail_file, &st) || !S_ISDIR (st.st_mode)) 382 if (!*mail_file || stat (mail_file, &st) || !S_ISDIR (st.st_mode))
742static time_t 772static time_t
743mk_time (struct tm *tmval) 773mk_time (struct tm *tmval)
744{ 774{
745 return (tmval->tm_min + 60 * (tmval->tm_hour + 24 * (tmval->tm_mday + 31 * ((tmval->tm_mon + 1) + 12 * tmval->tm_year)))); 775 return (tmval->tm_min + 60 * (tmval->tm_hour + 24 * (tmval->tm_mday + 31 * ((tmval->tm_mon + 1) + 12 * tmval->tm_year))));
746} 776}
747
748 777
749#ifdef MAIL 778#ifdef MAIL
750static int 779static int
751MailAvailable () 780MailAvailable ()
752{ 781{
784 * Provide reminder if needed. 813 * Provide reminder if needed.
785 *----------------------------------------------------------------------*/ 814 *----------------------------------------------------------------------*/
786static void 815static void
787Draw_Window (mywindow_t * W, int full_redraw) 816Draw_Window (mywindow_t * W, int full_redraw)
788{ 817{
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; 818 static int savedDay = -1;
855 819
856 time_t currentTime; 820 time_t currentTime;
857 struct tm *tmval; 821 struct tm *tmval;
858 int ctr_x, ctr_y; 822 int ctr_x, ctr_y;
1013 977
1014 /* 978 /*
1015 * draw clock 979 * draw clock
1016 */ 980 */
1017 981
1018 ctr_x = (W->width / 2); 982 ctr_x = W->width / 2;
1019 ctr_y = (W->height / 2); 983 ctr_y = W->height / 2;
1020 984
1021#define XPOS(i,val) (ctr_x + (W->width * Sin[i%720] * (val) + 100000) / 200000) 985#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) 986#define YPOS(i,val) (ctr_y - (W->height * Sin (i + 180) + 4096) / (819200 / (val)))
1023 /* 987 /*
1024 * how to draw the clock face 988 * how to draw the clock face
1025 */ 989 */
1026 990
1027 /* calculate the positions of the hands */ 991 /* calculate the positions of the hands */
1403 1367
1404/* 1368/*
1405 * Provide reminder by mapping the message window 1369 * Provide reminder by mapping the message window
1406 */ 1370 */
1407static void 1371static void
1408Reminder (void) 1372Reminder ()
1409{ 1373{
1410 char *beg, *next; 1374 char *beg, *next;
1411 int lines; 1375 int lines;
1412 1376
1413 if (Msg_Mapped) 1377 if (Msg_Mapped)
1476 1440
1477/* 1441/*
1478 * Loops forever, looking for stuff to do. Sleeps 1 minute if nothing to do 1442 * Loops forever, looking for stuff to do. Sleeps 1 minute if nothing to do
1479 */ 1443 */
1480static void 1444static void
1481getXevent (void) 1445getXevent ()
1482{ 1446{
1483 XEvent ev; 1447 XEvent ev;
1484 int num_fds; /* number of file descriptors being used */ 1448 int num_fds; /* number of file descriptors being used */
1485 struct timeval tm; 1449 struct timeval tm;
1486 struct tm *tmval; 1450 struct tm *tmval;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines