Date: Sat, 2 Sep 2006 13:12:48 +1000 From: Peter Jeremy <peterjeremy@optushome.com.au> To: Lucas James <Lucas.James@ldjcs.com.au> Cc: freebsd-current@freebsd.org Subject: Re: suggested addition to 'date' Message-ID: <20060902031247.GE749@turion.vk2pj.dyndns.org> In-Reply-To: <200609020956.54008.Lucas.James@ldjcs.com.au> References: <200608281545.k7SFjn6l063922@lurza.secnetix.de> <p06230928c11e2298ca97@[128.113.24.47]> <200609020956.54008.Lucas.James@ldjcs.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
--DO5DiztRLs659m5i
Content-Type: multipart/mixed; boundary="fWddYNRDgTk9wQGZ"
Content-Disposition: inline
--fWddYNRDgTk9wQGZ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Sat, 2006-Sep-02 09:56:53 +1000, Lucas James wrote:
>On Saturday 02 September 2006 03:53, Garance A Drosehn wrote:>
>> mode.  Not ever.  Date is a command to set or display dates.
>> It is not a command to filter files.  'cat' would be a more
> appropriate place to add this option.
I tend to agree.
>or add an option to cat to prepend each line with an arbitrary string ala:
>
>cat -p `date` file
Firstly, we already have this:
	sed "s=3D^=3D$(date)=3D" file
And secondly, this pre-pends a fixed string.  What's wanted is a filter
to prepend a time/date stamp (which varies) to the input stream.
The justification for extending date(1) is that it already has the code
to handle date/time stamps.  In reality, this code is all in strftime(3)
and cat(1) already has hooks to insert a string at the beginning of a
line so I believe that the attached patch is more appropriate.  (Man
page update on request).
--=20
Peter Jeremy
--fWddYNRDgTk9wQGZ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="cat.diff"
Content-Transfer-Encoding: quoted-printable
Index: cat.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /usr/ncvs/src/bin/cat/cat.c,v
retrieving revision 1.32
diff -u -r1.32 cat.c
--- cat.c	10 Jan 2005 08:39:20 -0000	1.32
+++ cat.c	2 Sep 2006 03:08:58 -0000
@@ -67,6 +67,7 @@
 int bflag, eflag, nflag, sflag, tflag, vflag;
 int rval;
 const char *filename;
+const char *datefmt;
=20
 static void usage(void);
 static void scanfiles(char *argv[], int cooked);
@@ -84,7 +85,7 @@
=20
 	setlocale(LC_CTYPE, "");
=20
-	while ((ch =3D getopt(argc, argv, "benstuv")) !=3D -1)
+	while ((ch =3D getopt(argc, argv, "benp:stuv")) !=3D -1)
 		switch (ch) {
 		case 'b':
 			bflag =3D nflag =3D 1;	/* -b implies -n */
@@ -95,6 +96,8 @@
 		case 'n':
 			nflag =3D 1;
 			break;
+		case 'p':
+			datefmt =3D optarg;
 		case 's':
 			sflag =3D 1;
 			break;
@@ -177,6 +180,8 @@
 cook_cat(FILE *fp)
 {
 	int ch, gobble, line, prev;
+	char datebuf[1024];
+	time_t now;
=20
 	/* Reset EOF condition on stdin. */
 	if (fp =3D=3D stdin && feof(stdin))
@@ -198,6 +203,14 @@
 				if (ferror(stdout))
 					break;
 			}
+			if (datefmt !=3D NULL) {
+				time(&now);
+				strftime(datebuf, sizeof(datebuf), datefmt,
+					 localtime(&now));
+				(void)fputs(datebuf, stdout);
+				if (ferror(stdout))
+					break;
+			}
 		}
 		if (ch =3D=3D '\n') {
 			if (eflag && putchar('$') =3D=3D EOF)
--fWddYNRDgTk9wQGZ--
--DO5DiztRLs659m5i
Content-Type: application/pgp-signature
Content-Disposition: inline
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (FreeBSD)
iD8DBQFE+Pav/opHv/APuIcRAgx+AJ9UYNtTRokP1HApqU/yDDC8qvdQwwCgkXmu
g4VSbq595reHFR8FnQssMaM=
=8JLy
-----END PGP SIGNATURE-----
--DO5DiztRLs659m5i--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060902031247.GE749>
