Use a dynamic method to print appointments to stdout

Add a flexible helper function print_apoint() and use it whenever we
print appointments to stdout. This reduces the number of copy-pasted
code and eventually allows for specifying custom format strings.

Following format specifiers are supported:

* s: Print the start time of the appointment as UNIX time stamp
* S: Print the start time of the appointment using the "hh:mm" format
* d: Print the duration of the appointment in seconds
* e: Print the end time of the appointment as UNIX time stamp
* E: Print the end time of the appointment using the "hh:mm" format
* m: Print the description of the item
* n: Print the name of the note file belonging to the item

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
Lukas Fleischer
2011-11-09 18:29:22 +01:00
parent edad2f39db
commit 330ca4d3cb
3 changed files with 52 additions and 18 deletions

View File

@@ -953,3 +953,52 @@ press_any_key (void)
fflush (stdin);
fputs ("\r\n", stdout);
}
/* Print a formatted appointment to stdout. */
void
print_apoint (const char *format, long day, struct apoint *apt)
{
const char *p;
char str_start[HRMIN_SIZE], str_end[HRMIN_SIZE];
apoint_sec2str (apt, day, str_start, str_end);
for (p = format; *p; p++)
{
if (*p == '%') {
p++;
switch (*p)
{
case 's':
printf ("%ld", apt->start);
break;
case 'S':
printf ("%s", str_start);
break;
case 'd':
printf ("%ld", apt->dur);
break;
case 'e':
printf ("%ld", apt->start + apt->dur);
break;
case 'E':
printf ("%s", str_end);
break;
case 'm':
printf ("%s", apt->mesg);
break;
case 'n':
printf ("%s", apt->note);
break;
case '\0':
return;
break;
default:
putchar ('?');
break;
}
}
else
putchar (*p);
}
}