*** history.c.orig	Fri May 11 14:45:10 2001
--- history.c	Fri May 11 14:53:42 2001
***************
*** 224,227 ****
--- 224,228 ----
  static short last_entry;
  static short all_users;
+ static short machine_readable;
  
  static short user_sort;
***************
*** 298,301 ****
--- 299,303 ----
      "   Options:\n",
      "        -D <date>       Since date (Many formats)\n",
+     "        -M              Generate machine-readable output\n",
      "        -b <str>        Back to record with str in module/file/repos field\n",
      "        -f <file>       Specified file (same as command line) (repeatable)\n",
***************
*** 382,386 ****
      rec_types = xstrdup ("");
      optind = 0;
!     while ((c = getopt (argc, argv, "+Tacelow?D:b:f:m:n:p:r:t:u:x:X:z:")) != -1)
      {
  	switch (c)
--- 384,388 ----
      rec_types = xstrdup ("");
      optind = 0;
!     while ((c = getopt (argc, argv, "+MTacelow?D:b:f:m:n:p:r:t:u:x:X:z:")) != -1)
      {
  	switch (c)
***************
*** 393,396 ****
--- 395,401 ----
  		all_users++;
  		break;
+ 	    case 'M':			/* Machine-readable output */
+ 		machine_readable++;
+ 		break;
  	    case 'c':
  		report_count++;
***************
*** 553,556 ****
--- 558,563 ----
  	if (all_users)
  	    send_arg("-a");
+ 	if (machine_readable)
+ 	    send_arg("-M");
  	if (modified)
  	    send_arg("-c");
***************
*** 1473,1476 ****
--- 1480,1486 ----
  	    tm = localtime (&(lr->date));
  
+ 	if (machine_readable)
+ 	(void) printf ("IDX=%08X\tTYPE=%c\tTIME=%08X\tUSER=%s", lr->idx, ty, (long)(lr->date), lr->user);
+ 	else
  	(void) printf ("%c %04d-%02d-%02d %02d:%02d %s %-*s", ty,
  		  tm->tm_year+1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour,
***************
*** 1500,1506 ****
--- 1510,1522 ----
  	    case 'T':
  		/* 'T'ag records: repository is a "tag type", rev is the tag */
+ 		if (machine_readable)
+ 		(void) printf ("\tMODULE=%s\tTAG=%s\tTAGTYPE=%s", lr->mod, lr->rev, repos);
+ 		else
  		(void) printf (" %-*s [%s:%s]", mod_len, lr->mod, lr->rev,
  			       repos);
  		if (working)
+ 		if (machine_readable)
+ 		    (void) printf ("\tWORKDIR=%s", workdir);
+ 		else
  		    (void) printf (" {%s}", workdir);
  		break;
***************
*** 1509,1513 ****
--- 1525,1535 ----
  	    case 'O':
  		if (lr->rev && *(lr->rev))
+ 		    if (machine_readable)
+ 		    (void) printf ("\tREV=%s", lr->rev);
+ 		    else
  		    (void) printf (" [%s]", lr->rev);
+ 		if (machine_readable)
+ 		(void) printf ("\tREPOSITORY=%s\tMODULE=%s\tWORKDIR=%s", repos, lr->mod, workdir);
+ 		else
  		(void) printf (" %-*s =%s%-*s %s", repos_len, repos, lr->mod,
  			       mod_len + 1 - (int) strlen (lr->mod),
***************
*** 1521,1524 ****
--- 1543,1552 ----
  	    case 'A':
  	    case 'R':
+ 		if (machine_readable)
+ 		(void) printf ("\tREV=%s\tFILE=%s\tREPOSITORY=%s%s%s\tWORKDIR=%s",
+ 			lr->rev, lr->file, repos,
+ 			lr->mod ? "\tMODULE=" : "",
+ 			lr->mod ? lr->mod : "", workdir);
+ 		else
  		(void) printf (" %-*s %-*s %-*s =%s= %s", rev_len, lr->rev,
  			       file_len, lr->file, repos_len, repos,
