windows-nt/Source/XPSP1/NT/sdktools/echotime/echotime.c
2020-09-26 16:20:57 +08:00

184 lines
5.2 KiB
C

/* echotime - prints current time and input args to stdout
*
* HISTORY:
* 23-Jan-87 danl added /n switch and ';' processing
* 23-Nov-87 brianwi Exit code 0
*/
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <process.h>
#include <windows.h>
#include <tools.h>
// Function Forward Parameters...
void Usage( void );
int __cdecl main( int, char ** );
const char rgstrUsage[] = {
"Usage: ECHOTIME [/t] [/WODHMSCYb] [/v] [/n] [/N] [;] text\n"
" /t current day, time and year\n"
" /WODHMSCYb\n"
" Weekday, mOnth, Day, Hour, Min, Sec, Century, Yr, blank\n"
" other char are themselves\n"
" e.g. echotime /O-D-Y this becomes Jan-02-86\n"
" e.g. echotime /ObDbY this becomes Jan 02 86\n"
" /v volume id of C:\n"
" /n no newline after outputting text\n"
" /N no trailing blank at end of lines\n"
" a semicolon surrounded by white space is replaced by a newline\n"};
int fNewline = TRUE;
int fTrailingBlank = TRUE;
void Usage( void )
{
puts(rgstrUsage);
exit (1);
}
int
__cdecl
main (
int c,
char *v[]
)
{
// struct findType findBuf;
time_t now;
char *p, *strTime, *p2, *p3, *printstring;
char ch;
int i, len;
int fFirstWord = TRUE;
char timestring[1000]; //plenty of room for formatted time string
ConvertAppToOem( c, v );
SHIFT( c, v );
while ( c ) {
printstring=""; //default no text for this arg
if ( !strcmp( *v, "/?" ))
Usage ();
if ( !strcmp( *v, "/n" ))
fNewline = FALSE;
else if ( !strcmp( *v, "/N" ))
fTrailingBlank = FALSE;
else if ( !strcmp( *v, "/v" )) {
//
// It would make more sense to replace by the volume id of the
// current drive, but the original code used drive C: and
// it is described as so in the help file, so I'll do the same.
//
char VolumeName[MAX_PATH];
BOOL StatusOk;
StatusOk = GetVolumeInformation( "C:\\",
VolumeName,
MAX_PATH,
NULL,
NULL,
NULL,
NULL,
0 );
if (!StatusOk) {
printstring = "NO_VOL_ID";
} else {
printstring = VolumeName;
}
}
else if (**v == '/') {
*timestring='\0';
p2 = *v;
time( &now );
strTime = _strdup( ctime( &now ) );
if (!strTime) {
puts("Out of memory");
exit(1);
}
p = strend( strTime );
*--p = '\0';
while ((ch = *++p2)) {
len = 2;
switch (ch) {
case 'W': /* Week */
len = 3;
i = 0;
break;
case 'O': /* mOnth */
len = 3;
i = 4;
break;
case 'D': /* Day */
i = 8;
break;
case 'H': /* Hour */
i = 11;
break;
case 'M': /* Min */
i = 14;
break;
case 'S': /* Sec */
i = 17;
break;
case 'C': /* Century */
i = 20;
break;
case 'Y': /* Year */
i = 22;
break;
case 'b': /* Blank */
len = 1;
i = 3;
break;
case 't':
len = 25;
i = 0;
break;
default:
strTime[3] = ch;
len = 1;
i = 3;
break;
}
p = strTime + i;
p3 = p + len;
ch = *p3;
*p3 = '\0';
strcat(timestring, p); /* N.B. no trailing blanks */
*p3 = ch;
strTime[3] = ' ';
}
printstring = timestring;
}
else if (!strcmp( *v, ";" )) {
if (fTrailingBlank)
printf(" ");
printf ("\n" );
fFirstWord = TRUE;
// printstring remains pointing to empty string
}
else
printstring= *v;
if (*printstring) {
if (!fFirstWord)
printf( " ");
else
fFirstWord=FALSE;
printf("%s", printstring);
}
SHIFT( c, v );
}
if (fTrailingBlank)
printf( " ");
if ( fNewline )
printf("\n" );
return 0;
}