Boolean	  silent;
bool	  silent;
Job_Touch(gn, silent)    GNode	  *gn;		/* the node of the file to touch */    Boolean	  silent;	/* TRUE if should not print messages */{    int 	  streamID;	/* ID of stream opened to do the touch */    if (gn->type & (OP_JOIN|OP_USE|OP_EXEC|OP_OPTIONAL)) {	/*	 * .JOIN, .USE, .ZEROTIME and .OPTIONAL targets are "virtual" targets	 * and, as such, shouldn't really be created.	 */	return;    }    if (!silent) {	(void)fprintf(stdout, "touch %s\n", gn->name);	(void)fflush(stdout);    }    if (noExecute) {	return;    }    if (gn->type & OP_ARCHV) {	Arch_Touch(gn);    } else if (gn->type & OP_LIB) {	Arch_TouchLib(gn);    } else {	const char *file = gn->path != NULL ? gn->path : gn->name;	if (set_times(file) == -1){	    streamID = open(file, O_RDWR | O_CREAT, 0666);	    if (streamID >= 0) {		char	c;		/*		 * Read and write a byte to the file to change the		 * modification time, then close the file.		 */		if (read(streamID, &c, 1) == 1) {		    (void)lseek(streamID, 0, SEEK_SET);		    (void)write(streamID, &c, 1);		}		(void)close(streamID);	    } else {		(void)fprintf(stdout, "*** couldn't touch %s: %s",			       file, strerror(errno));		(void)fflush(stdout);	    }	}    }}