Add original unix v6
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
int timbuf[2];
|
||||
char *cbp;
|
||||
|
||||
char *tzname[2];
|
||||
int dmsize[];
|
||||
char cbuf[];
|
||||
char *cbp;
|
||||
|
||||
struct {
|
||||
char name[8];
|
||||
char tty;
|
||||
char fill1;
|
||||
int wtime[2];
|
||||
int fill2;
|
||||
} wtmp[2];
|
||||
|
||||
main(argc, argv)
|
||||
int argc, **argv;
|
||||
{
|
||||
register char *tzn;
|
||||
extern int timezone, *localtime();
|
||||
int wf, tfailed;
|
||||
|
||||
tfailed = 0;
|
||||
if(argc > 1) {
|
||||
cbp = argv[1];
|
||||
if(gtime()) {
|
||||
write(1, "bad conversion\n", 15);
|
||||
exit();
|
||||
}
|
||||
if (*cbp != 's') {
|
||||
/* convert to Greenwich time, on assumption of Standard time. */
|
||||
dpadd(timbuf, timezone);
|
||||
/* Now fix up to local daylight time. */
|
||||
if (localtime(timbuf)[8])
|
||||
dpadd(timbuf, -1*60*60);
|
||||
}
|
||||
time(wtmp[0].wtime);
|
||||
wtmp[0].tty = '|';
|
||||
if(stime(timbuf) < 0) {
|
||||
tfailed++;
|
||||
write(1, "no permission\n", 14);
|
||||
} else if ((wf = open("/usr/adm/wtmp", 1)) >= 0) {
|
||||
time(wtmp[1].wtime);
|
||||
wtmp[1].tty = '}';
|
||||
seek(wf, 0, 2);
|
||||
write(wf, wtmp, 32);
|
||||
}
|
||||
}
|
||||
if (tfailed==0)
|
||||
time(timbuf);
|
||||
cbp = cbuf;
|
||||
ctime(timbuf);
|
||||
write(1, cbuf, 20);
|
||||
tzn = tzname[localtime(timbuf)[8]];
|
||||
if (tzn)
|
||||
write(1, tzn, 3);
|
||||
write(1, cbuf+19, 6);
|
||||
}
|
||||
|
||||
gtime()
|
||||
{
|
||||
register int i;
|
||||
register int y, t;
|
||||
int d, h, m;
|
||||
extern int *localtime();
|
||||
int nt[2];
|
||||
|
||||
t = gpair();
|
||||
if(t<1 || t>12)
|
||||
goto bad;
|
||||
d = gpair();
|
||||
if(d<1 || d>31)
|
||||
goto bad;
|
||||
h = gpair();
|
||||
if(h == 24) {
|
||||
h = 0;
|
||||
d++;
|
||||
}
|
||||
m = gpair();
|
||||
if(m<0 || m>59)
|
||||
goto bad;
|
||||
y = gpair();
|
||||
if (y<0) {
|
||||
time(nt);
|
||||
y = localtime(nt)[5];
|
||||
}
|
||||
if (*cbp == 'p')
|
||||
h =+ 12;
|
||||
if (h<0 || h>23)
|
||||
goto bad;
|
||||
timbuf[0] = 0;
|
||||
timbuf[1] = 0;
|
||||
y =+ 1900;
|
||||
for(i=1970; i<y; i++)
|
||||
gdadd(dysize(i));
|
||||
/* Leap year */
|
||||
if (dysize(y)==366 && t >= 3)
|
||||
gdadd(1);
|
||||
while(--t)
|
||||
gdadd(dmsize[t-1]);
|
||||
gdadd(d-1);
|
||||
gmdadd(24, h);
|
||||
gmdadd(60, m);
|
||||
gmdadd(60, 0);
|
||||
return(0);
|
||||
|
||||
bad:
|
||||
return(1);
|
||||
}
|
||||
|
||||
gdadd(n)
|
||||
{
|
||||
register char *t;
|
||||
|
||||
t = timbuf[1]+n;
|
||||
if(t < timbuf[1])
|
||||
timbuf[0]++;
|
||||
timbuf[1] = t;
|
||||
}
|
||||
|
||||
gmdadd(m, n)
|
||||
{
|
||||
register int t1;
|
||||
|
||||
timbuf[0] =* m;
|
||||
t1 = timbuf[1];
|
||||
while(--m)
|
||||
gdadd(t1);
|
||||
gdadd(n);
|
||||
}
|
||||
|
||||
gpair()
|
||||
{
|
||||
register int c, d;
|
||||
register char *cp;
|
||||
|
||||
cp = cbp;
|
||||
if(*cp == 0)
|
||||
return(-1);
|
||||
c = (*cp++ - '0') * 10;
|
||||
if (c<0 || c>100)
|
||||
return(-1);
|
||||
if(*cp == 0)
|
||||
return(-1);
|
||||
if ((d = *cp++ - '0') < 0 || d > 9)
|
||||
return(-1);
|
||||
cbp = cp;
|
||||
return (c+d);
|
||||
}
|
||||
Reference in New Issue
Block a user