[comp.sys.ibm.pc] Touch for MS-DOS

richardh@killer.UUCP (09/27/87)

-----------------------------------
To the parties interested in touch:

Here is the source code and executable for a version of touch that is designed
specifically for the MS-DOS environment. It was written for Turbo C and uses a
number of DOS support routines found in the Turbo C libraries. It also uses the
getopt() included with the Turbo C package. All other required source code will
be found in this file. For a full description, see the included man page.

For those who don't care to compile their own version, there is a uuencoded
version of touch.com. It was uuencoded under DOS rather than Unix, if that is
significant.

enjoy,
richard hargrove
..!ihnp4!killer!richardh
------------------------

X---- cut here ----X---- cut here ----X---- cut here ----X---- cut here ----X--

/*	touch.c		modify the date/time of last write on the specified
 *			files
 *
 *	options 	-d date 	use the specified date instead of the
 *					current system date
 *			-t time 	use the specified time instead of the
 *					current system time
 *			-v		list the touched files on stdout
 *
 *	compiler	turbo c
 *			
 *	version hx	v1.0 - initial release: 9/26/87
 *	
 *	author		Richard Hargrove
 *			Texas Instruments, Inc.
 *			P.O. Box 869305, m/s 8473
 *			Plano, TX 75076
 *			214/575-4128
 *			
 */

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>	    
#include <ctype.h>
#include <dos.h>
#include <io.h>
#include <getopt.h>
#include <exparg.h>

#ifdef DEBUG
#define STATIC
#else
#define STATIC static
#endif

#define FALSE	0
#define TRUE	1
#define EOS	'\0'
#define ERR	(-1)

STATIC char *usage = "usage; touch [-d date] [-t time] [-v] filespec...\n";
STATIC char *credit = "touch 1.0 -- by richard hargrove, sept. 26 1987\n";

STATIC char *optlist = "D:d:T:t:Vv";

STATIC struct date date_struct;
STATIC struct time time_struct;
STATIC struct ftime fdate_time;
STATIC int verbose = FALSE;

/*****************************************************************************/

STATIC void fatal (char *msg1)
{
	/*	Report a fatal error and terminate the process.
	 */
	 
	fprintf (stderr, "touch error : %s%s", msg1, usage);
	exit (1);
}

/*****************************************************************************/

STATIC void warn (char *fname, char *msg)
{
	/*	Report an non-fatal error and return.
	 */
	 
	fprintf (stderr, "%s - %s", fname, msg);
}

/*****************************************************************************/

STATIC int stoi (char **str)
{
	/*	Decode the string pointed to by *str to an integer. Stop
	 *	decoding upon encountering a non-numeric char. Update *str
	 *	to point to that char.
	 */

	register unsigned char *tstr = (unsigned char *) *str;
	register int retval = 0;

	while (isdigit (*tstr)) {
	  retval *= 10;
	  retval += (*tstr++ & 0x0f);
	}

	*str = (char *) tstr;
	return (retval);
}
/*****************************************************************************/

STATIC void get_user_date (char *str, struct date *date_struct)
{
	/*	Parse the user supplied date and initialize the date struct
	 *	pointed to by date_struct.
	 */

	int mon, day, year;
	static int days [] =
	  { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	/* parse month */
	mon = stoi (&str);

	/* parse date */
	str++;
	day = stoi (&str);

	/* parse year */
	str++;
	year = stoi (&str);
	if ((year > 79) && (year < 100)) year += 1900;

	/* adjust days for non-leap-year (2000 is a leap year) */
	if (year % 4) days [2] = 28;

	if (mon < 1 || mon > 12 ||
	    day < 1 || day > days [mon] ||
	    year < 1980 || year > 2100) {
	  warn (" - invalid date : using system date", "\n");
	  return;
	}

	date_struct->da_year = year;
	date_struct->da_mon = (char) mon;
	date_struct->da_day = (char) day;
}

/*****************************************************************************/

STATIC void get_user_time (char *str, struct time *time_struct)
{
	/*	Parse the user supplied time and initialize the time struct
	 *	pointed to by time_struct.
	 */

	int hour, min, sec = 0;
	
	/* parse hour */
	hour = stoi (&str);
	
	/* parse minute */
	str++;
	min = stoi (&str);

	/* parse optional seconds */
	if (*str != EOS) {
	  str++;
	  sec = stoi (&str);
	}

	if (hour < 0 || hour > 23 ||
	    min < 0 || min > 59 ||
	    sec < 0 || sec > 59) {
	  warn (" - invalid time : using system time", "\n");
	  return;
	}	
	
	time_struct->ti_hour = hour;
	time_struct->ti_min = min;
	time_struct->ti_sec = sec;
	time_struct->ti_hund = 0;
}

/*****************************************************************************/

main (int argc, char *argv [])
{
	int c;
	int handle;
	
	argv = exparg (&argc, argv);	/* expand command line wild-cards */
	getdate (&date_struct);		/* get system date and time */
	gettime (&time_struct);
	
	/* handle command line options */
	while ((c = getopt (argc, argv, optlist)) != EOF) {
	  c = tolower (c);
	  if (c == 'd') {
	    get_user_date (optarg, &date_struct);
	  }
	  else if (c == 't') {
	    get_user_time (optarg, &time_struct);
	  }
	  else if (c == 'v') {
	    verbose = TRUE;
	  }
	  else {
	    fatal ("invalid option specifier\n");
	  }
	}
	
	/* reconfigure command line parameter support */
	argc -= optind;
	if (argc <= 0) {
	  fatal ("no files to touch\n");
	}
	argv = &argv [optind];

	/* encode the date and time */
	fdate_time.ft_tsec = time_struct.ti_sec >> 1;
	fdate_time.ft_min = time_struct.ti_min;
	fdate_time.ft_hour = time_struct.ti_hour;
	fdate_time.ft_day = date_struct.da_day;
	fdate_time.ft_month = date_struct.da_mon;
	fdate_time.ft_year =  date_struct.da_year - 1980;
	
	/* touch the files */
	while (argc--) {
	  if ((handle = open (argv [argc], O_WRONLY | O_CREAT, S_IWRITE)) !=
	      ERR) {
	    /* these can't fail */  	
	    (void) setftime (handle, &fdate_time);
	    close (handle);
	    if (verbose) {
	      puts (argv [argc]);
	    }
	  }
	  else {
	    switch (errno) {
	      case ENOENT:	warn (argv [argc], "file not found\n");
	      			break;
	      case EMFILE:	warn (argv [argc], "too many open files\n");
	      			break;
	      case EACCES:	warn (argv [argc], "access denied\n");
	      			break;
	      case EINVACC:	warn (argv [argc], "who changed my code?\n");
	      			break;
	      default:		warn (argv [argc], "eh ? unknown error\n");
	      			fprintf (stderr, "error code : %d\n", errno);
	    }
	    errno = 0;
	  }
	}
	
	exit (0);
}
X---- cut here ----X---- cut here ----X---- cut here ----X---- cut here ----X--

/*	exparg.h	header file for exparg(), the routine that performs
 *			wild-card expansion on filespecs in the command line
 *			parameters
 */
 
#ifndef EXP_ARG
#define EXP_ARG

#ifdef __STDC__
#define _Cdecl
#else
#define _Cdecl	cdecl
#endif

char **_Cdecl exparg (int *pargc, char *argv []);

#endif
X---- cut here ----X---- cut here ----X---- cut here ----X---- cut here ----X--

/*	getopt.h	header file to supporting getopt()
 */

#ifdef __STDC__
#define _Cdecl
#else
#define _Cdecl	cdecl
#endif
 
extern int   _Cdecl optind;
extern char *_Cdecl optarg;
extern int   _Cdecl opterr;

int   _Cdecl getopt (int argc, char *argv [], char *optlist);
X---- cut here ----X---- cut here ----X---- cut here ----X---- cut here ----X--

/*	exparg.c	source code for exparg()
 */

/******************************************************************************

	NAME		exparg - expand filespec command line parameters
				 containing wild-card characters

	USAGE		#include "exparg.h"
			char **exparg (int *pargc, char *argv []);

	PROTOTYPE IN	exparg.h

	DESCRIPTION	Exparg is used to explicitly process the filespec
			command line parameters containing wild-card
			characters. It takes a pointer to an integer 
			containing the count of the parameters and a pointer
			to an array of pointers to the strings copied from 
			the comamnd line. It is anticipated that most of the 
			time exparg() will be called immediately upon entry
			to main(), with the call looking like

				argv = exparg (&argc, argv);

			See the test program included in this file for an
			example usage.

			When exparg() finds a filespec parameter string 
			containing wild-card characters, it replaces the 
			string with the name of the first file that matches 
			it and adds the names of subsequent matches to the
			list of parameter string pointers. If no matching file
			names are found, the original string is left in place.

			Upon return from exparg() argc will be updated to 
			indicate the new number of command line parameters
			and argv will point to a different array of string 
			pointers. Command line parameter processing can then
			proceed as it would have been done before.

	RETURN VALUE	A pointer to an array of string pointers that point 
			to the expanded filespec command line parameters. The
			int containing the parameter count is modified as a
			side-affect.

	PORTABILITY	MS-DOS specific, Turbo-C specific
	
	AUTHOR		Richard Hargrove
			Texas Instruments, Inc.
			P.O. Box 869305, m/s 8473
			Plano, Texas 75086
			214/575-4128

 ******************************************************************************/

#include <stdio.h>
#include <string.h>
#include <dir.h>
#include <dos.h>
#include <alloc.h>

#define	MAXARGS		100	/* maximum number of entries the new argv */
				/* array can contain			  */

#define TRUE		1
#define FALSE		0
#define NIL(type)	((type *) NULL)

typedef int BOOLEAN;

/******************************************************************************/

char **exparg (int *pargc, char *argv [])
{
	static char *newargv [MAXARGS];	
	char path [MAXPATH];		/* if the stack doesn't overflow, */
	char drive [MAXDRIVE];		/* we have less lasting impact    */
	char dir [MAXDIR];		/* on the static data segment     */

	char far *olddta = getdta ();
	struct ffblk fblk;
	register int args = 0;
	register int newargc = 0;
	BOOLEAN err = FALSE;
	
	while (!err && args < *pargc) {
	  if ((fnsplit(argv[args],drive,dir,NIL(char),NIL(char))& WILDCARDS) &&
	     (!findfirst (argv [args], &fblk, 0))) {
	    do {
	      char *localcptr = (char *)malloc (
		(unsigned)(stpcpy (stpcpy (stpcpy (path, drive), 
					   dir), 
				   fblk.ff_name) - path) + 1);
	      if (localcptr != NIL(char)) {
		newargv [newargc++] = strcpy (localcptr, path);
	      }
	      else {
	 	fputs ("\n_exparg error : no memory for filenames\n", stderr);
		exit (1);
	      }
	    } while ((newargc < MAXARGS) && !findnext (&fblk));
	  }
	  else {
	    newargv [newargc++] = argv [args];
	  }
	  err = (newargc == MAXARGS);
	  args++;
	}

	if (err) fputs ("\n_exparg error : too many filenames\n", stderr);
	setdta (olddta);
	*pargc = newargc;
	return (&newargv [0]);
}

#ifdef TEST

/******************************************************************************/

main (int argc, char *argv [])
{
	/*	test exparg()
	 */
	 
	int i = 0;
	
	printf ("original command line parameters : argc: %d\n", argc);
	for (; i < argc; i++) {
	  printf ("%s\n", argv [i]);
	}

	argv = exparg (&argc, argv);

	printf ("new command line parameters : argc: %d\n", argc);
	for (i = 0; i < argc; i++) {
	  printf ("%s\n", argv [i]);
	}
}
#endif
X---- cut here ----X---- cut here ----X---- cut here ----X---- cut here ----X--


TOUCH(1)		   An MS-DOS Utility			TOUCH(1)


NAME
	touch - modify the date and time stamp for the named file(s)

SYNOPSIS
	touch [-d date] [-t time] [-v] filespec...

DESCRIPTION
	Touch allows you to modify the date and time of last write stamp
	for the named file(s). You may specify the date and/or time
	touch is to use, or you may let touch default to the system date
	and/or time.

	Touch supports the following options:

	-v		Verbose: list the touched files to stdout.

	-d date 	Date: use the specified date instead of the
			system date. The date string must be in the form

				<month><delim><day><delim><year>

			Month must be an integer in the range [1..12];
			day must be an integer in the range
			[1..max_date_for_month]; year must be an integer
			in the range [1980..2100], though [80..99] may
			be used as a shorthand form for 1980..1999. The
			delimiter may be any non-numeric character.

	-t time 	Time: use the specified time instead of the
			system time. The time string must be in the form

				<hour><delim><min>[<delim><sec>]

			Hour must be an integer in the range [0..23];
			min must be an integer in the range [0..59]; the
			optional sec must be an integer in the range
			[0..59] The delimiter may be any non-numeric
			character.

	The filespec parameter(s) may be any legitimate MS-DOS filespec
	and may include any valid MS-DOS wildcard characters.

	If an error occurs during the attempted modification (such as
	trying to modify a sub-directory), a message saying so appears
	in the output next to the appropriate filespec. Touch then
	continues with the next filespec.

AUTHOR
	Richard Hargrove
	Texas Instruments, Inc.
	P.O. Box 869305, m/s 8473
	Plano, TX  75086
	214/575-4128





				 [ 1 ]

X---- cut here ----X---- cut here ----X---- cut here ----X---- cut here ----X--
begin 400 touch.com
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
M_X@$1HV&?O^+UBO0@?J  'S/C89^_XO6*]")EGK_4HV&?O]0_W8(Z&@ @\0&
MB89\_SN&>O]TI@O <CR+1@PKQP.&?/\KAGK_ZT*-AG[_B]8KT(F6>O\+TG8O
M4HV&?O]0_W8(Z"P @\0&B89\_SN&>O]T%@O <P6X___K$(M&# .&?/\KAGK_
MZP.+1@R+Y5U?7L-5B^R+7@31X_>'K"$ "'0/L )0,\!04/]V!.BZ\8OEM$"+
M7@2+3@B+5@;-(7(/4(M>!-'C@8^L(0 06.L$4.A!\5W#5E>_ @"^E"#K$/=$
M @, = 56Z.7L64^#Q@X+_W7L7U[#              !4=7)B;RU#("T@0V]P
M>7)I9VAT("AC*2 Q.3@W($)O<FQA;F0@26YT;"X 1&EV:61E(&5R<F]R"D%B
M;F]R;6%L('!R;V=R86T@=&5R;6EN871I;VX*                        
M        ^"4                 5!V'';@=     !\ '0 ? !X 'P > !\ 
M'P > !\ '@ ? '5S86=E.R!T;W5C:"!;+60@9&%T95T@6RUT('1I;65=(%LM
M=ET@9FEL97-P96,N+BX* '1O=6-H(#$N," M+2!B>2!R:6-H87)D(&AA<F=R
M;W9E+"!S97!T+B R-B Q.3@W"@!$.F0Z5#IT.E9V '1O=6-H(&5R<F]R(#H@
M)7,E<P E<R M("5S " M(&EN=F%L:60@9&%T92 Z('5S:6YG('-Y<W1E;2!D
M871E " M(&EN=F%L:60@=&EM92 Z('5S:6YG('-Y<W1E;2!T:6UE &EN=F%L
M:60@;W!T:6]N('-P96-I9FEE<@H ;F\@9FEL97,@=&\@=&]U8V@* &9I;&4@
M;F]T(&9O=6YD"@!T;V\@;6%N>2!O<&5N(&9I;&5S"@!A8V-E<W,@9&5N:65D
M"@!W:&\@8VAA;F=E9"!M>2!C;V1E/PH 96@@/R!U;FMN;W=N(&5R<F]R"@!E
M<G)O<B!C;V1E(#H@)60*  I?97AP87)G(&5R<F]R(#H@;F\@;65M;W)Y(&9O
M<B!F:6QE;F%M97,*  I?97AP87)G(&5R<F]R(#H@=&]O(&UA;GD@9FEL96YA
M;65S"@   0      +6=E="!C;VUM86YD(&QI;F4@;W!T:6]N       @(" @
M(" @(" A(2$A(2 @(" @(" @(" @(" @(" @( % 0$! 0$! 0$! 0$! 0$ "
M @(" @(" @("0$! 0$! 0!04%!04% 0$! 0$! 0$! 0$! 0$! 0$! 0$0$! 
M0$! &!@8&!@8" @(" @(" @(" @(" @(" @(" A 0$! (               
M                                                            
M                                                            
M                                     '!R:6YT9B Z(&9L;V%T:6YG
M('!O:6YT(&9O<FUA=',@;F]T(&QI;FME9 IS8V%N9B Z(&9L;V%T:6YG('!O
M:6YT(&9O<FUA=',@;F]T(&QI;FME9 H 4@E2"5()   ) @          E"  
M  H" 0        "B(    @("         + @     /\         OB      
M_P        #,(     #_         -H@     /\         Z"      _P  
M      #V(     #_          0A     /\         $B$     _P      
M   @(0    #_         "XA     /\         /"$     _P        !*
M(0    #_         %@A     /\         9B$     _P        !T(0  
M  #_         ((A     /\         D"$     _P        ">(0$@ B "
M( 0@ B#_______________________________________\  /__    $P("
M! 4&" @(%!4%$_\6!18"_________________P4%____________________
M_P___P+_#_____\3__\" @4/ O___Q/___________________\3_P   #0B
M-"*"(HHBHB*\(LLBWR+Q(@$C%B,F(T,C5R-F(WHC  "'(Y8CO"/,(]HCZR/\
M(PXD                           @)"XD(P!%<G)O<B P $EN=F%L:60@
M9G5N8W1I;VX@;G5M8F5R $YO('-U8V@@9FEL92!O<B!D:7)E8W1O<GD 4&%T
M:"!N;W0@9F]U;F0 5&]O(&UA;GD@;W!E;B!F:6QE<P!097)M:7-S:6]N(&1E
M;FEE9 !"860@9FEL92!N=6UB97( 365M;W)Y(&%R96YA('1R87-H960 3F]T
M(&5N;W5G:"!C;W)E $EN=F%L:60@;65M;W)Y(&)L;V-K(&%D9')E<W, 26YV
M86QI9"!E;G9I<F]N;65N= !);G9A;&ED(&9O<FUA= !);G9A;&ED(&%C8V5S
M<R!C;V1E $EN=F%L:60@9&%T80!.;R!S=6-H(&1E=FEC90!!='1E;7!T960@
M=&\@<F5M;W9E(&-U<G)E;G0@9&ER96-T;W)Y $YO="!S86UE(&1E=FEC90!.
M;R!M;W)E(&9I;&5S $EN=F%L:60@87)G=6UE;G0 07)G(&QI<W0@=&]O(&)I
M9P!%>&5C(&9O<FUA="!E<G)O<@!#<F]S<RUD979I8V4@;&EN:P!-871H(&%R
M9W5M96YT %)E<W5L="!T;V\@;&%R9V4 56YK;F]W;B!E<G)O<@ E<SH@)7,*
M           0*&YU;&PI # Q,C,T-38W.#E!0D-$148 $Q,!$Q03$Q,3 @ 3
M P03" 4%!04%!04%!1,3$Q,3$Q,3$Q,)#A8.!PD3$Q,3%1,3$Q,3$Q,3$PP3
M$Q,3$Q,3$Q,3#PD.#@X'"1,3!A,1"A,3$!,+$Q,,$Q,3$Q,3$P!+"4L)+PDX
%"3@). D3
 
end
X---- cut here ----X---- cut here ----X---- cut here ----X---- cut here ----X--

richard hargrove
...!ihnp4!killer!richardh
-------------------------

richardh@killer.UUCP (09/27/87)

------------------------------------
Again, to those interested in Touch,

The message I posted yesterday (9-26-87) has some minor problems in the code and
documentation and a major problem in the uuencoded TOUCH.COM (it won't uudecode
properly). The minor problems in the docs and code are:

	* The docs don't explain that touch will create a file to be touched
	  if it doesn't exist.

	* In the case of a fatal error, touch attempts to return 256. MS-DOS
	  doesn't support this. This version returns an exit code of 255.

	* There was little error checking when parsing time or date strings.
	  While this version's parsing is not fool-proof, it is more thorough.

As well as these, this version adds the -c option (turn off auto-create).

This version is distributed as a uuencoded .ARC file (yes I verified that it
uudecodes properly).

X---- cut here ----X---- cut here ----X---- cut here ----X---- cut here ----X---
begin 400 touch.arc
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
29I9"TI M: P$70@( P*B 1H 
 
end
X---- cut here ----X---- cut here ----X---- cut here ----X---- cut here ----X---

sorry about that...
richard hargrove
...!inhp4!killer!richardh
-------------------------

"Goin' back to Dallas, take my razor and my gun;"
"Some redneck lookin' for trouble, sho' gon' t'get him some."

Johnny Winter, "Dallas"
-----------------------