⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 date.c

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 C
字号:
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);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -