--- sox.20050917-inst5/src/interactive.h.orig	2005-09-19 21:40:28.000000000 +0200
+++ sox.20050917-inst5/src/interactive.h	2007-02-02 14:29:43.196210000 +0100
@@ -22,6 +22,9 @@
 
 #include <ctype.h>
 
+#define	VERSION_ISOX	"20070202rzm"
+#define	ISOX_URL	"ftp://sunsite.icm.edu.pl/private/rzm/patches/"
+
 #if defined(TAGGING)
 #include "tag.h"
 #endif
--- sox.20050917-inst5/src/interactive.c.orig	2006-05-28 21:24:24.000000000 +0200
+++ sox.20050917-inst5/src/interactive.c	2007-02-02 14:32:08.327908000 +0100
@@ -133,6 +133,25 @@
 	return stime;
 }
 
+char *
+delay(int y, int m, int d, int dd, int ptime) {
+	static char	stime[30];
+	struct tm	playtm, *tm;
+	time_t		playt, curt, difft;
+
+	bzero(&playtm, sizeof(playtm));
+	playtm.tm_year = y; playtm.tm_mon = m; playtm.tm_mday = d + dd;
+	playtm.tm_sec = ptime;
+	playt = mktime(&playtm);
+
+	curt = time(NULL);
+	
+	difft = curt - playt; tm = gmtime(&difft);
+	/* mday-1 cos it is Jan 1st '70 */
+	snprintf(stime, sizeof(stime), "%4d %02d:%02d:%02d", (tm->tm_mday-1), tm->tm_hour, tm->tm_min, tm->tm_sec);
+	return stime;
+}
+
 void
 draw_fixed(WINDOW *win, float ttime, ft_t informat0, ft_t outformat) {
 	int	col;
@@ -140,6 +159,7 @@
 	mvwprintw(win, Y0 + 0, 0, "Time				total: %s", hhmmss(ttime));
 	mvwprintw(win, Y0 + 1, 0, "Speed");
 	mvwprintw(win, Y0 + 2, 0, "%s -> %s", informat0->filename, outformat->filename);
+	mvwprintw(win, 0, 0, "sox %s, interactive sox v. %s, %s", st_version(), VERSION_ISOX, ISOX_URL);
 	for (col = 0; col <= COLS; col++) {
 		mvwprintw(win, Y0 + PTRROW-1, col, "_");
 		mvwprintw(win, Y0 + PTRROW+1, col, "^");
@@ -161,51 +181,59 @@
 	}
 }
 
-/* rm20031122211133s.wav */
-/* 0123456789012345	 */
-/*   0123456789012345	 */
-
-/* 2004.10.27.rn18....	*/
-/* 0123 56 89   34	*/
+/* This procedure is specific for recordings with names in the following formats:
+rm20031122211133s.wav	2004.10.27.rn18....
+  0123456789012345	0123 56 89   34						*/
 
 void
 rzm_off_time(WINDOW *win, float time, ft_t informat0) {
 	char	*name = informat0->filename, *nname;
-	int	ind, rmmp3ind[] = { 0, 1, 2, 3, 5, 6, 8, 9, 13, 14 }, mp3 = 1;
+	int	ind, rmmp3ind[] = { 0, 1, 2, 3, 5, 6, 8, 9, 13, 14 }, mp3 = 1, y = 0, m = 0, d = 0, dd = 0;
 
-	for (ind = 0; ind < sizeof(rmmp3ind)/sizeof(rmmp3ind[0]); ind++)
+	for (ind = 0; ind < sizeof(rmmp3ind)/sizeof(rmmp3ind[0]); ind++)	/* recognizing mp3 */
 		if ( !isdigit(name[rmmp3ind[ind]]) ) mp3 = 0;
 
 	if (mp3) {
 		int	hour, min = 00;	/* minutes after full hour */
 		hour = (name[14]-48) + (name[13]-48) * 10;
-		switch (hour) {
-			case 13:
-			case 18:	min = 10; break;
-			case 21:	min = 45; break;
+		switch (hour) {		/* we do not know the exact time but usually the program starts at: */
+			case 13: case 18:	min = 10; break;
+			case 21:		min = 45; break;
 		}
 		time += min * 60 + hour * 3600;
-		/* modulo 1 day, e.g. do rn24... */
-		time -= 86400.0 * (int)(time / 86400);
-		mvwprintw(win, Y0 + 0, COLS-20, "file time: %s", hhmmss(time));
-		return;
-	}
 
-	/* not an mp3; get to the last slash */
-	while ( (nname = index(name, '/')) ) name = nname + 1;
+		y = name[3]-48 + 10 * (name[2]-48 + 10 * (name[1]-48 + 10 * (name[0]-48) ));
+		m = name[6]-48 + 10 * (name[5]-48);
+		d = name[9]-48 + 10 * (name[8]-48);
+
+		/* modulo 1 day, e.g. for rn24... */
+		if (time >= 86400) {
+			dd = (int)(time / 86400);
+			time -= 86400.0 * dd;
+		}
+	} else {
+
+		/* not an mp3; get to the last slash */
+		while ( (nname = index(name, '/')) ) name = nname + 1;
 	
-	while ( !isdigit(name[0]) ) {
-		name++;
-		if (name[0] == '\0') return;
-	}
+		while ( !isdigit(name[0]) ) {
+			name++;
+			if (name[0] == '\0') return;
+		}
 
-	for (ind = 0; ind <= 13; ind++) if ( !isdigit(name[ind]) ) return;
+		for (ind = 0; ind <= 13; ind++) if ( !isdigit(name[ind]) ) return; /* digits where they should be? */
 
-	time += (name[13]-48) + (name[12]-48) * 10 +
+		time += (name[13]-48) + (name[12]-48) * 10 +
 		(name[11]-48) * 60 + (name[10]-48) * 600 +
 		(name[9]-48) * 3600 + (name[8]-48) * 36000 ;
 
+		y = name[3]-48 + 10 * (name[2]-48 + 10 * (name[1]-48 + 10 * (name[0]-48) ));
+		m = name[5]-48 + 10 * (name[4]-48);
+		d = name[7]-48 + 10 * (name[6]-48);
+	}
+
 	mvwprintw(win, Y0 + 0, COLS-20, "file time: %s", hhmmss(time));
+	mvwprintw(win, Y0 + 1, COLS-20, "delay: %s", delay(y, m, d, dd, time));
 }
 
 void
--- sox.20050917-inst6/src/interactive.c.orig	2007-02-03 17:43:37.000000000 +0100
+++ sox.20050917-inst6/src/interactive.c	2007-02-03 19:19:31.000000000 +0100
@@ -140,7 +140,7 @@
 	time_t		playt, curt, difft;
 
 	bzero(&playtm, sizeof(playtm));
-	playtm.tm_year = y; playtm.tm_mon = m; playtm.tm_mday = d + dd;
+	playtm.tm_year = y - 1900; playtm.tm_mon = m - 1; playtm.tm_mday = d + dd;
 	playtm.tm_sec = ptime;
 	playt = mktime(&playtm);
 
--- sox.20050917-inst5/src/interactive.c.orig	2007-02-05 12:18:15.259816000 +0100
+++ sox.20050917-inst5/src/interactive.c	2007-02-08 12:27:51.618015000 +0100
@@ -137,7 +137,7 @@
 delay(int y, int m, int d, int dd, int ptime) {
 	static char	stime[30];
 	struct tm	playtm, *tm;
-	time_t		playt, curt, difft;
+	time_t		playt, curt, difft, difftd;
 
 	bzero(&playtm, sizeof(playtm));
 	playtm.tm_year = y - 1900; playtm.tm_mon = m - 1; playtm.tm_mday = d + dd;
@@ -146,9 +146,10 @@
 
 	curt = time(NULL);
 	
-	difft = curt - playt; tm = gmtime(&difft);
+	difft = curt - playt; difftd = difft/86400; difft -= 86400 * difftd;
+	tm = gmtime(&difft);
 	/* mday-1 cos it is Jan 1st '70 */
-	snprintf(stime, sizeof(stime), "%4d %02d:%02d:%02d", (tm->tm_mday-1), tm->tm_hour, tm->tm_min, tm->tm_sec);
+	snprintf(stime, sizeof(stime), "%4d %02d:%02d:%02d", difftd, tm->tm_hour, tm->tm_min, tm->tm_sec);
 	return stime;
 }
 
