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);