1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
/*
* TIME.C - time internal command
*
* Comments:
*
* 07/08/1998 (John P. Price)
* started.
*
* 27-Jul-1998 (John P Price <linux-guru@gcfl.net>)
* - added config.h include
*
* 1999/03/17 ska
* bugfix: Detection of invalid time strings
* One can specify:
* ^\s*\d+.\d+(.(\d+(.\d*)?)?)?\s*([aApP]([mM]|\.[mM]\.)?\s*$
* If one specifies:
* 1 number --> error
* 2 numbers --> hour:minute, seconds & hundreds default to zero
* 3 numbers --> hour:minute:seconds, hundreds defaults to zero
* 4 numbers --> hour:minute:seconds.hundreds
* The numbers may be delimited by any character from the 7-bit ASCII set,
* which is printable, but not alphanumerical.
*
* 2001/02/08 ska
* add: DATE /D and TIME /T
*/
#include "../config.h"
#include <assert.h>
#include <ctype.h>
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../include/cmdline.h"
#include "../include/command.h"
#include "../err_fcts.h"
#include "../include/misc.h"
#include "../include/nls.h"
#include "../strings.h"
static int noPrompt = 0;
#pragma argsused
optScanFct(opt_date)
{ switch(ch) {
case 'D':
case 'T': return optScanBool(noPrompt);
}
optErr();
return E_Useage;
}
static int my_settime(const char *s)
{ struct dostime_t t;
switch(parsetime(s, &t)) {
case E_None: /* success -> set the date */
_dos_settime(&t);
/* fall through */
case E_Empty: /* empty line */
return 1; /* success */
}
return 0; /* failure */
}
int cmd_time(char *param)
{
char s[40];
int ec;
noPrompt = 0;
if((ec = leadOptions(¶m, opt_date, 0)) != E_None)
return ec;
if(!*param) {
char *time;
if((time = curTime()) == 0)
return 1;
displayString(TEXT_MSG_CURRENT_TIME, time);
free(time);
param = 0;
}
while(1) {
if(!param) {
if(noPrompt) return 0;
displayString(TEXT_MSG_ENTER_TIME);
fgets(s, sizeof(s), stdin);
if (cbreak)
return 1;
param = s;
}
if(my_settime(param))
break;
error_invalid_time();
/* force user interaction the next time around. */
param = 0;
}
return 0;
}
|