📄 driver.c
字号:
return FALSE;
}
if (cpos == 's') {
filenamescreen = argv[1];
argc--; argv++;
break;
} else if (cpos == '0')
operation ^= DASHo0;
operation ^= DASHo;
filenameout = argv[1];
extralines = argv;
do {
argc--; argv++;
extracount++;
} while (argc > 1 && argv[1][0] != '-' && argv[1][0] != '/');
break;
/* Switches which affect what information is used in a chart: */
case 'R':
if (cpos == 'T') {
c = (char *)ignore2;
cpos = argv[0][++pos];
} else
c = (char *)ignore;
if (cpos == '0')
for (i = 0; i <= total; i++)
c[i] = TRUE;
else if (cpos == '1') {
for (i = 0; i <= total; i++)
c[i] = FALSE;
operation |= DASHC | DASHu;
universe = TRUE;
} else if (cpos == 'C')
for (i = C_LO; i <= C_HI; i++)
c[i] = !c[i];
else if (cpos == 'u')
for (i = U_LO; i <= U_HI; i++)
c[i] = !c[i];
else if (cpos == 'U')
for (i = S_LO; i <= S_HI; i++)
c[i] = !c[i];
else if (argc <= 1 || (!atoi(argv[1]))) {
for (i = 11; i <= 15; i++)
c[i] = !c[i];
c[_FOR] = !c[_FOR]; c[_VTX] = !c[_VTX];
}
while (argc > 1 && (i = atoi(argv[1])))
if (!IsItem(i)) {
BadVal("R", i);
return FALSE;
} else {
c[i] = !c[i];
argc--; argv++;
}
break;
case 'C':
operation ^= DASHC;
break;
case 'u':
operation ^= DASHu;
break;
case 'U':
if (cpos == 'n' || cpos == 'b' || cpos == 'z' || cpos == 'l')
universe = cpos;
else
universe = !universe;
break;
case 'A':
if (argc <= 1 || atoi(argv[1]) == 0) {
andisplay ^= DASHA;
break;
}
if (cpos != 'o' && cpos != 'm' && cpos != 'd') {
aspects = atoi(argv[1]);
if (!IsValidAspect(aspects)) {
BadVal("A", aspects);
return FALSE;
}
argc--; argv++;
} else {
if (argc <= 2) {
TooFew("A");
return FALSE;
}
i = atoi(argv[1]);
if (i < 1 || i > (cpos == 'o' ? ASPECTS : BASE)) {
BadVal("A", i);
return FALSE;
}
k = atof(argv[2]);
if (k < -DEGREES || k > DEGREES) {
BadVal2("A", k);
return FALSE;
}
if (cpos == 'm')
planetorb[i] = k;
else if (cpos == 'd')
planetadd[i] = k;
else
aspectorb[i] = k;
argc -= 2; argv += 2;
}
break;
/* Switches which affect how a chart is computed: */
case 'b':
if (cpos == '0')
seconds = !seconds;
placalc = !placalc;
break;
case 'c':
if (argc <= 1) {
TooFew("c");
return FALSE;
}
housesystem = atoi(argv[1]);
if (!IsValidSystem(housesystem)) {
BadVal("c", housesystem);
return FALSE;
}
argc--; argv++;
break;
case 's':
if (cpos != '0')
operation ^= DASHs;
else
operation ^= DASHs0;
break;
case 'h':
if (argc > 1 && (centerplanet = atoi(argv[1]))) {
argc--; argv++;
} else
centerplanet = 1;
if (centerplanet < 0 || centerplanet == _MOO ||
!IsObject(centerplanet) || centerplanet > U_HI) {
BadVal("h", centerplanet);
return FALSE;
}
c = objectname[0];
objectname[0] = objectname[centerplanet];
objectname[centerplanet] = c;
if (centerplanet < _MOO)
centerplanet = 1-centerplanet;
break;
case 'p':
if (cpos == '0') {
operation |= DASHp0;
cpos = (argv[0][++pos]);
}
progress = TRUE;
#ifdef TIME
if (cpos == 'n') {
GetTimeNow(&Mon, &Day, &Yea, &Tim, defzone);
Jdp = (real)MdyToJulian(Mon, Day, Yea) + Tim / 24.0;
break;
}
#endif
if (cpos == 'd') {
if (argc <= 1) {
TooFew("pd");
return FALSE;
}
progday = atof(argv[1]);
if (progday == 0.0) {
BadVal2("pd", progday);
return FALSE;
}
argc--; argv++;
break;
}
if (argc <= 3) {
TooFew("p");
return FALSE;
}
Mon = atoi(argv[1]);
Day = atoi(argv[2]);
Yea = atoi(argv[3]);
if (!IsValidMon(Mon)) {
BadVal2("p", Mon);
return FALSE;
} else if (!IsValidDay(Day, Mon, Yea)) {
BadVal2("p", Day);
return FALSE;
} else if (!IsValidYea(Yea)) {
BadVal2("p", Yea);
return FALSE;
}
Jdp = (real)MdyToJulian(Mon, Day, Yea) + defzone / 24.0;
argc -= 3; argv += 3;
break;
case 'x':
if (argc <= 1) {
TooFew("x");
return FALSE;
}
multiplyfactor = atoi(argv[1]);
if (multiplyfactor < 1 || multiplyfactor > DEGREES) {
BadVal("x", multiplyfactor);
return FALSE;
}
argc--; argv++;
break;
case '1':
if (argc > 1 && (onasc = atoi(argv[1]))) {
argc--; argv++;
} else
onasc = 1;
if (onasc < 1 || onasc > total) {
BadVal("1", onasc);
return FALSE;
}
break;
case '2':
if (argc > 1 && (onasc = atoi(argv[1]))) {
argc--; argv++;
} else
onasc = 1;
if (onasc < 1 || onasc > total) {
BadVal("2", onasc);
return FALSE;
}
onasc = -onasc;
break;
case '3':
operation ^= DASH3;
break;
case 'f':
operation ^= DASHf;
break;
case 'G':
operation ^= DASHG;
break;
case 'F':
if (argc <= 3) {
TooFew("F");
return FALSE;
}
i = atoi(argv[1]);
if (!IsItem(i)) {
BadVal("F", i);
return FALSE;
}
force[i] = (atof(argv[2])-1.0)*30.0+DecToDeg(atof(argv[3]));
if (force[i] < 0.0 || force[i] >= DEGREES) {
BadVal2("F", force[i]);
return FALSE;
} else
force[i] += DEGREES;
argc -= 3; argv += 3;
break;
case '+':
if (argc > 1 && (i = atoi(argv[1])) != 0) {
argc--; argv++;
} else
i = 1;
Delta += i * (cpos == 'y' ? 365 : (cpos == 'm' ? 30 : 1));
break;
case '-': case '\0':
if (argc > 1 && (i = atoi(argv[1])) != 0) {
argc--; argv++;
} else
i = 1;
Delta -= i * (cpos == 'y' ? 365 : (cpos == 'm' ? 30 : 1));
break;
/* Switches for relationship and comparison charts: */
case 'r':
if (argc <= 2) {
TooFew("r");
return FALSE;
}
if (cpos == 'c')
relation = DASHrc;
else if (cpos == 'm')
relation = DASHrm;
else if (cpos == 'd')
relation = DASHrd;
#ifdef BIORHYTHM
else if (cpos == 'b')
relation = DASHrb;
#endif
else if (cpos == '0')
relation = DASHr0;
else if (cpos == 'p')
relation = DASHrp;
else
relation = DASHr;
filename = argv[1]; filename2 = argv[2];
argc -= 2; argv += 2;
break;
#ifdef TIME
case 'y':
if (argc <= 1) {
TooFew("y");
return FALSE;
}
if (cpos == 'd')
relation = DASHrd;
#ifdef BIORHYTHM
else if (cpos == 'b')
relation = DASHrb;
#endif
else if (cpos == 'p')
relation = DASHrp;
else
relation = DASHr0;
filename = argv[1]; filename2 = "now";
argc--; argv++;
break;
#endif
/* Switches to access graphics options: */
case 'k':
ansi = !ansi;
break;
#ifdef MSG
case 'V':
if (argc <= 1) {
TooFew("V");
return FALSE;
}
textrows = atoi(argv[1]);
if (!IsValidTextrows(textrows)) {
BadVal("V", textrows);
return FALSE;
}
argc--; argv++;
break;
#endif
#ifdef GRAPH
case 'X':
i = XProcessSwitches(argc, argv, pos);
if (i < 0)
return FALSE;
operation |= DASHX;
argc -= i; argv += i;
break;
#endif
case '.': /* "-." is usually used to exit the -Q loop. */
Terminate(_FORCE);
case 'B': /* For no useful reason, -B will sound a beep. */
printc(BELL);
break;
default:
sprintf(string, "Unknown switch '%s'.", argv[0]);
PrintError(string);
return FALSE;
}
argc--; argv++;
}
return TRUE;
}
/* The main program, the starting point for Astrolog, follows. This routine */
/* basically consists of a loop, inside which we read a command line, and */
/* go process it, before actually calling a routine to do the neat stuff. */
#ifdef SWITCHES
void main(argc, argv)
int argc;
char **argv;
{
#else
void main()
{
int argc;
char **argv;
#endif
char commandline[256];
char *pointers[MAXSWITCHES];
InputDefaults(); /* Read in info from the astrolog.dat file. */
Begin:
#ifdef MSG
if (textrows > 0) {
_settextrows(textrows);
textrows = -textrows;
}
#endif
if (noswitches) { /* Go prompt for */
argc = InputSwitches(commandline, pointers); /* switches if we */
argv = pointers; /* don't have them. */
}
progname = ProcessProgname(argv[0]);
if (ProcessSwitches(argc, argv)) {
if (!noswitches && (operation & DASHQ0)) {
noswitches = TRUE;
goto Begin;
}
#ifdef MSG
if (textrows > 0) {
_settextrows(textrows);
textrows = -textrows;
}
#endif
Action();
}
if (operation & DASHQ) { /* If -Q in effect, loop back and get switch */
printl2(); /* information for another chart to display. */
InitVariables();
operation |= DASHQ;
noswitches = TRUE;
goto Begin;
}
Terminate(_OK); /* The only standard place to exit Astrolog is here. */
}
/* driver.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -