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

📄 main.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "astro.h"char*	herefile = "/lib/sky/here";voidmain(int argc, char *argv[]){	int i, j;	double d;	pi = atan(1.0)*4;	pipi = pi*2;	radian = pi/180;	radsec = radian/3600;	converge = 1.0e-14;	fmtinstall('R', Rconv);	fmtinstall('D', Dconv);	per = PER;	deld = PER/NPTS;	init();	args(argc, argv);	init();loop:	d = day;	pdate(d);	if(flags['p'] || flags['e']) {		print(" ");		ptime(d);		pstime(d);	}	print("\n");	for(i=0; i<=NPTS+1; i++) {		setime(d);		for(j=0; objlst[j]; j++) {			(*objlst[j]->obj)();			setobj(&objlst[j]->point[i]);			if(flags['p']) {				if(flags['m'])					if(strcmp(objlst[j]->name, "Comet"))						continue;				output(objlst[j]->name, &objlst[j]->point[i]);			}		}		if(flags['e']) {			d = dist(&eobj1->point[i], &eobj2->point[i]);			print("dist %s to %s = %.4f\n", eobj1->name, eobj2->name, d);		}//		if(flags['p']) {//			pdate(d);//			print(" ");//			ptime(d);//			print("\n");//		}		if(flags['p'] || flags['e'])			break;		d += deld;	}	if(!(flags['p'] || flags['e']))		search();	day += per;	nperiods -= 1;	if(nperiods > 0)		goto loop;	exits(0);}voidargs(int argc, char *argv[]){	char *p;	long t;	int f, i;	Obj2 *q;	memset(flags, 0, sizeof(flags));	ARGBEGIN {	default:		fprint(2, "astro [-adeklmopst] [-c nperiod] [-C tperiod]\n");		exits(0);	case 'c':		nperiods = 1;		p = ARGF();		if(p)			nperiods = atol(p);		flags['c']++;		break;	case 'C':		p = ARGF();		if(p)			per = atof(p);		break;	case 'e':		eobj1 = nil;		eobj2 = nil;		p = ARGF();		if(p) {			for(i=0; q=objlst[i]; i++) {				if(strcmp(q->name, p) == 0)					eobj1 = q;				if(strcmp(q->name1, p) == 0)					eobj1 = q;			}			p = ARGF();			if(p) {				for(i=0; q=objlst[i]; i++) {					if(strcmp(q->name, p) == 0)						eobj2 = q;					if(strcmp(q->name1, p) == 0)						eobj2 = q;				}			}		}		if(eobj1 && eobj2) {			flags['e']++;			break;		}		fprint(2, "cant recognize eclipse objects\n");		exits("eflag");	case 'a':	case 'd':	case 'j':	case 'k':	case 'l':	case 'm':	case 'o':	case 'p':	case 's':	case 't':		flags[ARGC()]++;		break;	} ARGEND	if(*argv){		fprint(2, "usage: astro [-dlpsatokm] [-c nday] [-e obj1 obj2]\n");		exits("usage");	}	t = time(0);	day = t/86400. + 25567.5;	if(flags['d'])		day = readate();	if(flags['j'])		print("jday = %.4f\n", day);	deltat = day * .001704;	if(deltat > 32.184)		// assume date is utc1		deltat = 32.184;	// correct by leap sec	if(flags['t'])		deltat = readdt();	if(flags['l']) {		fprint(2, "nlat wlong elev\n");		readlat(0);	} else {		f = open(herefile, OREAD);		if(f < 0) {			fprint(2, "%s?\n", herefile);			/* btl mh */			nlat = (40 + 41.06/60)*radian;			awlong = (74 + 23.98/60)*radian;			elev = 150 * 3.28084;		} else {			readlat(f);			close(f);		}	}}doublereadate(void){	int i;	Tim t;	fprint(2, "year mo da hr min\n");	rline(0);	for(i=0; i<5; i++)		t.ifa[i] = atof(skip(i));	return convdate(&t);}doublereaddt(void){	fprint(2, "ΔT (sec) (%.3f)\n", deltat);	rline(0);	return atof(skip(0));}doubleetdate(long year, int mo, double day){	Tim t;	t.ifa[0] = year;	t.ifa[1] = mo;	t.ifa[2] = day;	t.ifa[3] = 0;	t.ifa[4] = 0;	return convdate(&t) + 2415020;}voidreadlat(int f){	rline(f);	nlat = atof(skip(0)) * radian;	awlong = atof(skip(1)) * radian;	elev = atof(skip(2)) * 3.28084;}doublefmod(double a, double b){	return a - floor(a/b)*b;}

⌨️ 快捷键说明

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