bday

diff bdengine.c @ 4:5326c222cd4e

removed MESSAGE; code beautifing workaround for MESSAGE: use an event with warn 0 (message=yyyy-mm-dd w 0)
author meillo@marmaro.de
date Mon, 17 Dec 2007 12:14:41 +0100
parents dc2f94280b01
children 5af6bf2cb271
line diff
     1.1 --- a/bdengine.c	Mon Dec 17 11:28:40 2007 +0100
     1.2 +++ b/bdengine.c	Mon Dec 17 12:14:41 2007 +0100
     1.3 @@ -33,14 +33,13 @@
     1.4  		 date is dd/mm, dd/mm/yy (assumes 20th century!) or dd/mm/yyyy
     1.5  		 flags is ONE or ZERO of
     1.6  			 o  bd  for a birthday (default)
     1.7 -			 o  bir for a birthday (exactly equivalent to `bd')
     1.8  			 o  ann for an anniversary
     1.9  			 o  ev  for an event
    1.10  		 and zero or more of
    1.11 -			 o  w<n> to set the warn-in-advance time to n days (don't include the
    1.12 +			 o  w <n> to set the warn-in-advance time to n days (don't include the
    1.13  	 brackets! :)
    1.14 -			 o  to<date>
    1.15 -			 o  for<days>
    1.16 +			 o  to <date>
    1.17 +			 o  for <days>
    1.18  							 to specify the length of time taken by an event, for example a
    1.19  				 holiday.
    1.20  
    1.21 @@ -125,7 +124,6 @@
    1.22  	{"bd", F_TBIRTHDAY},
    1.23  	{"ann",F_TANNIVERSARY},
    1.24  	{"ev", F_TEVENT},
    1.25 -	{"mes", F_TMESSAGE},
    1.26  	{"w",  F_WTIME_P},
    1.27  	{"to", F_TODATE},
    1.28  	{"for", F_FORDAYS},
    1.29 @@ -498,17 +496,17 @@
    1.30  
    1.31  	if (fname[0] == '-' && fname[1] == 0) {
    1.32  		/* read from stdin */
    1.33 -		file=stdin;
    1.34 +		file = stdin;
    1.35  	} else {
    1.36  		/* now read it */
    1.37 -		if((file=fopen(fname, "rt"))==NULL) {
    1.38 +		if ((file = fopen(fname, "rt")) == NULL) {
    1.39  			fprintf(stderr, "Unable to open file \"%s\"\n", fname);
    1.40  			exit(1);
    1.41  		}
    1.42  	}
    1.43  
    1.44  
    1.45 -	for (i = 0, evl=NULL; fgets(buf, sizeof(buf), file) != NULL; i++) {
    1.46 +	for (i = 0, evl = NULL; fgets(buf, sizeof(buf), file) != NULL; i++) {
    1.47  		evl = (struct event *) xrealloc(evl, sizeof(struct event) * (i + 1));
    1.48  
    1.49  		/* ignore comments and empty lines */
    1.50 @@ -521,6 +519,7 @@
    1.51  		ptr = strrchr(buf, '='); /* allow '=' in text */
    1.52  
    1.53  		/* not a valid line, so ignore it! Cool, huh? */
    1.54 +		/* Attention: only recognizes lines without '=' */
    1.55  		if (ptr == NULL) {
    1.56  			fprintf(stderr, "WARNING: Invalid line in input file:\n%s", buf);
    1.57  			i--;
    1.58 @@ -530,52 +529,55 @@
    1.59  		*(ptr++) = 0;
    1.60  
    1.61  		j = sscanf(ptr, "%u-%u-%u", &(evl[i].date.year), &(evl[i].date.month), &(evl[i].date.day));
    1.62 -		/* if our year is only two digits, add 1900 to it ... */
    1.63 -		if(evl[i].date.year < 100) evl[i].date.year+=1900;
    1.64  		/* ... unless it wasn't read, in which case set it to zero */
    1.65 -		if(j==2) evl[i].date.year=0;
    1.66 +		if (j==2) {
    1.67 +			evl[i].date.year = 0;
    1.68 +		}
    1.69 +
    1.70  
    1.71  		/* parse flags */
    1.72  
    1.73 -		evl[i].warn=iDWarn;
    1.74 -		evl[i].enddate.day=evl[i].enddate.month=evl[i].enddate.year=0;
    1.75 +		evl[i].warn = iDWarn;
    1.76 +		evl[i].enddate.day = 0;
    1.77 +		evl[i].enddate.month = 0;
    1.78 +		evl[i].enddate.year = 0;
    1.79  
    1.80 -		flags=j=0;
    1.81 -		while(j = skptok(j, ptr),ptr[j]!=0) {
    1.82 -			for (k = 0; FTABLE[k].txt != NULL && strncmp(FTABLE[k].txt, ptr + j, strlen(FTABLE[k].txt)); k++);
    1.83 +		flags = 0;
    1.84 +		j = 0;
    1.85 +
    1.86 +		while(j = skptok(j, ptr), ptr[j] != 0) {
    1.87 +			for (k = 0; FTABLE[k].txt != NULL && strncmp(FTABLE[k].txt, ptr + j, strlen(FTABLE[k].txt)); k++) {
    1.88 +			}
    1.89 +
    1.90  			switch (FTABLE[k].flag) {
    1.91 -				case F_WTIME_P: /* w<n> -- sets warning time */
    1.92 +				case F_WTIME_P: /* w <n> -- sets warning time */
    1.93  					sscanf(ptr + j, "w %u", &(evl[i].warn));
    1.94  					break;
    1.95 -				case F_FORDAYS: /* for<days> -- sets the duration of the event */
    1.96 -					sscanf(ptr + j, "for %d", &d);
    1.97 +				case F_FORDAYS: /* for <days> -- sets the duration of the event */
    1.98 +					sscanf(ptr + j, "for %u", &d);
    1.99  					evl[i].enddate=evl[i].date;
   1.100 -					for (l=1; l < d; l++) {
   1.101 +					for (l = 1; l < d; l++) {
   1.102  						evl[i].enddate.day++;
   1.103 -						if (evl[i].enddate.day > mlen(evl[i].enddate.month,
   1.104 -									evl[i].enddate.year)) {
   1.105 +						if (evl[i].enddate.day > mlen(evl[i].enddate.month, evl[i].enddate.year)) {
   1.106  							evl[i].enddate.month++;
   1.107 -							evl[i].enddate.day=1;
   1.108 +							evl[i].enddate.day = 1;
   1.109  						}
   1.110  						if (evl[i].enddate.month > 12) {
   1.111  							evl[i].enddate.year++;
   1.112 -							evl[i].enddate.month=1;
   1.113 +							evl[i].enddate.month = 1;
   1.114  						}
   1.115  					}
   1.116  					break;
   1.117 -				case F_TODATE:
   1.118 +				case F_TODATE: /* to <date> -- sets the end date of the event */
   1.119  					l = sscanf(ptr + j, "to %u-%u-%u", &(evl[i].enddate.year), &(evl[i].enddate.month), &(evl[i].enddate.day));
   1.120 -					if (evl[i].enddate.year < 100) {
   1.121 -						evl[i].enddate.year+=1900;
   1.122 -					}
   1.123  					if (l == 2) {
   1.124 -						evl[i].enddate.year=0;
   1.125 +						evl[i].enddate.year = 0;
   1.126  					}
   1.127  					break;
   1.128  				case 0:
   1.129  					break;
   1.130  				default:
   1.131 -					flags|=FTABLE[k].flag;
   1.132 +					flags |= FTABLE[k].flag;
   1.133  					break;
   1.134  			}
   1.135  		}
   1.136 @@ -587,8 +589,8 @@
   1.137  			case F_TBIRTHDAY:
   1.138  			default: /* assume it's a birthday */
   1.139  				if (evl[i].date.year != 0) {
   1.140 -					int tmp_age=ydelta(evl[i].date, today);
   1.141 -					if (tmp_age!=1) {
   1.142 +					int tmp_age = ydelta(evl[i].date, today);
   1.143 +					if (tmp_age != 1) {
   1.144  						sprintf(buf2, "%s is %d years old", buf, tmp_age);
   1.145  					} else {
   1.146  						sprintf(buf2, "%s is %d year old", buf, tmp_age);
   1.147 @@ -606,29 +608,20 @@
   1.148  				break;
   1.149  			case F_TEVENT:
   1.150  				/* if a year was specified, and this warning isn't for it, ignore! */
   1.151 -				if ((evl[i].date.year != 0 && ydelta(evl[i].date, today) != 0) &&
   1.152 -						(evl[i].enddate.year == 0 || ydelta(evl[i].enddate, today) != 0)) {
   1.153 +				if ((evl[i].date.year != 0 && ydelta(evl[i].date, today) != 0) && (evl[i].enddate.year == 0 || ydelta(evl[i].enddate, today) != 0)) {
   1.154  					i--;
   1.155  					continue;
   1.156  				}
   1.157  				strcpy(buf2, buf);
   1.158  				break;
   1.159 -			case F_TMESSAGE:
   1.160 -				/* Like an event, except that it only comes up on the given date, and no text at all is appended */
   1.161 -				if ((evl[i].date.year != 0 && ydelta(evl[i].date, today) != 0) &&
   1.162 -						(evl[i].enddate.year == 0 || ydelta(evl[i].enddate, today) != 0)) {
   1.163 -					i--;
   1.164 -					continue;
   1.165 -				}
   1.166 -				strcpy(buf2, buf);
   1.167 -				evl[i].warn=-1; /* special code! */
   1.168 -				break;
   1.169  		}
   1.170  		evl[i].text = strdup(buf2);
   1.171  	}
   1.172  
   1.173  	evl = (struct event *) xrealloc(evl, sizeof(struct event) * (i + 1));
   1.174 -	evl[i].date.day=evl[i].date.month=evl[i].date.year=0;
   1.175 +	evl[i].date.day = 0;
   1.176 +	evl[i].date.month = 0;
   1.177 +	evl[i].date.year = 0;
   1.178  	evl[i].text = (char *) NULL;
   1.179  
   1.180  	fclose(file);