forked from FDOS/freecom
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtime.c
110 lines (92 loc) · 2.04 KB
/
time.c
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
/* $Id$
* TIME.C - time internal command
*
* Comments:
*
* 07/08/1998 (John P. Price)
* started.
*
* 27-Jul-1998 (John P Price <[email protected]>)
* - 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 <dos.h>
#include <io.h>
#include <stdlib.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;
optScanFct(opt_date)
{
(void)arg;
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) {
int len;
if(noPrompt) return 0;
displayString(TEXT_MSG_ENTER_TIME);
len = dos_read(0, s, sizeof(s) - 1);
if (cbreak || len < 0)
return 1;
s[len] = '\0';
param = s;
}
if(my_settime(param))
break;
error_invalid_time();
/* force user interaction the next time around. */
param = 0;
}
return 0;
}