From 9b707f6b3a3d3e41320a8141ead592b85481789e Mon Sep 17 00:00:00 2001
From: Frederic Culot <calcurse@culot.org>
Date: Tue, 16 Oct 2007 19:09:18 +0000
Subject: next_arg() rewritten, date_arg() improved

---
 src/args.c | 45 ++++++++++++++++++++++++++-------------------
 1 file changed, 26 insertions(+), 19 deletions(-)

(limited to 'src')

diff --git a/src/args.c b/src/args.c
index 7019b49..ca84cb6 100755
--- a/src/args.c
+++ b/src/args.c
@@ -1,4 +1,4 @@
-/*	$calcurse: args.c,v 1.26 2007/10/08 20:44:03 culot Exp $	*/
+/*	$calcurse: args.c,v 1.27 2007/10/16 19:09:18 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -155,29 +155,29 @@ todo_arg(int priority)
 static void 
 next_arg(void)
 {
-	struct notify_app_s *next_app;
-	long current_time;
+	struct notify_app_s next_app;
+	const long current_time = now();
 	int time_left, hours_left, min_left;
 	char mesg[BUFSIZ];
 
-	current_time = now();
-	next_app = (struct notify_app_s *) malloc(sizeof(struct notify_app_s));
-	next_app->time = current_time + DAYINSEC;
-	next_app->got_app = 0;
-	next_app = recur_apoint_check_next(next_app, current_time, get_today());
-	next_app = apoint_check_next(next_app, current_time);
-	time_left = next_app->time - current_time;
-	if (time_left > 0 && time_left < DAYINSEC) {
+	next_app.time = current_time + DAYINSEC;
+	next_app.got_app = 0;
+	next_app.txt = NULL;
+
+	next_app = *recur_apoint_check_next(&next_app, current_time, 
+	    get_today());
+	next_app = *apoint_check_next(&next_app, current_time);
+
+	if (next_app.got_app) {
+		time_left = next_app.time - current_time;
 		hours_left = (time_left / HOURINSEC);
 		min_left = (time_left - hours_left * HOURINSEC) / MININSEC;
 		fputs(_("next appointment:\n"), stdout);
 		snprintf(mesg, BUFSIZ, "   [%02d:%02d] %s\n", 
-			hours_left, min_left, next_app->txt);
+		    hours_left, min_left, next_app.txt);
 		fputs(mesg, stdout);
+		free(next_app.txt);
 	}
-	if (next_app->txt)
-		free(next_app->txt);
-	free(next_app);
 }
 
 /* 
@@ -323,7 +323,8 @@ date_arg(char *ddate, int add_line)
 	int numdays = 0, num_digit = 0;
 	int arg_len = 0, app_found = 0;
 	int date_valid = 0;
-	long ind;
+	static struct tm t;
+	time_t timer;
 
 	/* 
 	 * Check (with the argument length) if a date or a number of days 
@@ -343,11 +344,17 @@ date_arg(char *ddate, int add_line)
  		 * in the chosen interval. app_found and add_line are used
  		 * to format the output correctly. 
 		 */
-		ind = get_today();
+		timer = time(NULL);
+		t = *localtime(&timer);
+
 		for (i = 0; i < numdays; i++) {
-			app_found = app_arg(add_line, 0L, ind);
+			day.dd = t.tm_mday;
+			day.mm = t.tm_mon + 1;
+			day.yyyy = t.tm_year + 1900;
+			app_found = app_arg(add_line, &day, 0);
 			add_line = app_found;
-			ind += DAYINSEC + MININSEC;
+			t.tm_mday++;
+			mktime(&t);
 		}
 	} else {			/* a date was entered */
 		date_valid = check_date(ddate);
-- 
cgit v1.2.3-70-g09d2