📄 driver.c
字号:
argv[0] = APPNAME;
/* Split the entered line up into its individual switch strings. */
while (*c) {
if (*c == ' ') {
if (j)
; /* Skip over the current run of spaces between strings. */
else {
*c = 0; /* First space after a string, end it here. */
j = TRUE;
}
} else {
if (j) {
argv[argc++] = c; /* First char after spaces, begin it here. */
j = FALSE;
} else
; /* Skip over the current string. */
}
c++;
}
argv[argc] = NULL; /* Set last string in switch array to Null. */
printl();
return argc;
}
/*
******************************************************************************
** Main Program.
******************************************************************************
*/
/* Process a command line switch passed to the program. Read each entry in */
/* the argument list and set all the program modes and charts to display. */
bool ProcessSwitches(argc, argv)
int argc;
char **argv;
{
int pos, i;
real k;
char string[STRING], cpos, *c;
argc--; argv++;
while (argc) {
pos = 1 + (argv[0][0] == '-' || argv[0][0] == '/'); /* Leading dash? */
cpos = argv[0][pos];
switch (argv[0][pos-1]) {
case 'H':
if (cpos == 'c')
andisplay ^= DASHHc;
else if (cpos == '0')
andisplay ^= DASHH0;
else
andisplay ^= DASHH;
break;
case 'O':
if (cpos == '0')
andisplay ^= DASHO0;
andisplay ^= DASHO;
break;
case 'Q':
if (cpos == '0')
operation ^= DASHQ0;
operation ^= DASHQ;
break;
/* Switches which determine the type of chart to display: */
case 'v':
if (cpos == '0')
exdisplay ^= DASHv0;
todisplay ^= DASHv;
break;
case 'w':
if (cpos == '0')
exdisplay ^= DASHw0;
if (argc > 1 && (i = atoi(argv[1]))) {
wheelrows = i;
argc--; argv++;
}
if (!IsValidWheel(wheelrows)) {
BadVal("w", wheelrows);
return FALSE;
}
todisplay ^= DASHw;
break;
case 'g':
if (cpos == '0')
exdisplay ^= DASHg0;
else if (cpos == 'a') {
exdisplay ^= DASHga;
if (argv[0][pos+1] == '0')
exdisplay ^= DASHg0;
}
#ifdef X11
else if (cpos == 'e') {
if (argc <= 1) {
TooFew("geometry");
return FALSE;
}
chartx = atoi(argv[1]);
if (argc > 2 && (charty = atoi(argv[2]))) {
argc--; argv++;
} else
charty = chartx;
if (!IsValidGraphx(chartx)) {
BadVal("geometry", chartx);
return FALSE;
}
if (!IsValidGraphy(charty)) {
BadVal("geometry", charty);
return FALSE;
}
argc--; argv++;
break;
}
#endif
todisplay ^= DASHg;
break;
case 'm':
if (cpos == '0') {
exdisplay ^= DASHm0;
if (argv[0][pos+1] == 'a')
exdisplay ^= DASHga;
} else if (cpos == 'a')
exdisplay ^= DASHm0 | DASHga;
todisplay ^= DASHm;
break;
case 'Z':
if (cpos == '0')
exdisplay ^= DASHZ0;
else if (cpos == 'd')
exdisplay ^= DASHZd;
todisplay ^= DASHZ;
break;
case 'S':
todisplay ^= DASHS;
break;
case 'j':
if (cpos == '0')
exdisplay ^= DASHj0;
todisplay ^= DASHj;
break;
case 'L':
if (cpos == '0')
exdisplay ^= DASHL0;
if (argc > 1 && (i = atoi(argv[1]))) {
graphstep = i;
argc--; argv++;
}
if (graphstep < 1 || 160%graphstep > 0) {
BadVal("L", graphstep);
return FALSE;
}
todisplay ^= DASHL;
break;
case 'K':
if (cpos == 'y')
exdisplay ^= DASHKy;
todisplay ^= DASHK;
break;
case 'd':
if (cpos == 'p') {
i = (argv[0][pos+1] == 'y');
if (argc <= 2-i) {
TooFew("dp");
return FALSE;
}
prog = TRUE;
exdisplay |= DASHdm;
if (i) {
Mon2 = 0;
Yea2 = atoi(argv[1]);
} else {
Mon2 = atoi(argv[1]);
Yea2 = atoi(argv[2]);
if (!IsValidMon(Mon2)) {
BadVal2("dp", Mon2);
return FALSE;
}
}
if (!IsValidYea(Yea2)) {
BadVal2("dp", Yea2);
return FALSE;
}
argc -= 2-i; argv += 2-i;
} else if (cpos == 'm')
exdisplay ^= DASHdm;
#ifdef X11
else if (cpos == 'i') { /* -display switch for X */
if (argc <= 1) {
TooFew("display");
return FALSE;
}
dispname = argv[1];
argc--; argv++;
}
#endif
todisplay ^= DASHd;
break;
case 'D':
todisplay ^= DASHD;
break;
case 'E':
if (cpos == 'y')
exdisplay ^= DASHEy;
todisplay ^= DASHE;
break;
case 'e':
todisplay ^= DASHe;
exdisplay ^= DASHg0 | DASHj0 | DASHL0;
break;
case 't':
todisplay ^= DASHt;
Zon2 = defzone; Lon2 = deflong; Lat2 = deflat;
if (cpos == 'p') {
prog = TRUE;
cpos = argv[0][++pos];
}
if (i = (cpos == 'y'))
cpos = argv[0][++pos];
#ifdef TIME
if (cpos == 'n') {
GetTimeNow(&Mon2, &Day2, &Yea2, &Tim2, Zon2);
if (i)
Mon2 = 0;
break;
}
#endif
if (argc <= 2-i) {
TooFew("t");
return FALSE;
}
if (i)
Mon2 = 0;
else {
Mon2 = atoi(argv[1]);
if (!IsValidMon(Mon2)) {
BadVal2("t", Mon2);
return FALSE;
}
}
Yea2 = atoi(argv[2-i]);
argc -= 2-i; argv += 2-i;
break;
case 'T':
todisplay ^= DASHT;
Zon2 = defzone; Lon2 = deflong; Lat2 = deflat;
if (cpos == 'p') {
prog = TRUE;
cpos = argv[0][++pos];
}
#ifdef TIME
if (cpos == 'n') {
GetTimeNow(&Mon2, &Day2, &Yea2, &Tim2, Zon2);
break;
}
#endif
if (argc <= 3) {
TooFew("T");
return FALSE;
}
Mon2 = atoi(argv[1]);
Day2 = atoi(argv[2]);
Yea2 = atoi(argv[3]);
if (!IsValidMon(Mon2)) {
BadVal2("T", Mon2);
return FALSE;
} else if (!IsValidDay(Day2, Mon2, Yea2)) {
BadVal2("T", Day2);
return FALSE;
} else if (!IsValidYea(Yea2)) {
BadVal2("T", Yea2);
return FALSE;
}
argc -= 3; argv += 3;
break;
#ifdef INTERPRET
case 'I':
if (argc > 1 && (screenwidth = atoi(argv[1]))) {
argc--; argv++;
} else
screenwidth = SCREENWIDTH;
if (!IsValidScreen(screenwidth)) {
BadVal("I", screenwidth);
return FALSE;
}
if (cpos == '0') {
andisplay ^= DASHI0;
break;
}
interpret = !interpret;
break;
#endif
/* Switches which affect how the chart parameters are obtained: */
#ifdef TIME
case 'n':
InputData("now");
if (cpos == 'd')
TT = 0.0;
else if (cpos == 'm') {
DD = 1; TT = 0.0;
} else if (cpos == 'y') {
MM = DD = 1; TT = 0.0;
}
break;
#endif
case 'a':
if (argc <= 7) {
TooFew("a");
return FALSE;
}
autom = TRUE;
SetCore(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]),
atof(argv[4]), atof(argv[5]), atof(argv[6]), atof(argv[7]));
if (!IsValidMon(MM)) {
BadVal("a", MM);
return FALSE;
} else if (!IsValidYea(YY)) {
BadVal("a", YY);
return FALSE;
} else if (!IsValidDay(DD, MM, YY)) {
BadVal("a", DD);
return FALSE;
} else if (!IsValidTim(TT)) {
BadVal2("a", TT);
return FALSE;
} else if (!IsValidZon(ZZ)) {
BadVal2("a", ZZ);
return FALSE;
} else if (!IsValidLon(OO)) {
BadVal2("a", OO);
return FALSE;
} else if (!IsValidLat(AA)) {
BadVal2("a", AA);
return FALSE;
}
argc -= 7; argv += 7;
break;
case 'z':
if (argc <= 1 || (atoi(argv[1]) == 0 && argv[1][0] != '0'))
defzone -= 1.0;
else {
defzone = atof(argv[1]);
if (!IsValidZon(defzone)) {
BadVal2("z", defzone);
return FALSE;
}
argc--; argv++;
}
break;
case 'l':
if (argc <= 2) {
TooFew("l");
return FALSE;
}
deflong = atof(argv[1]);
deflat = atof(argv[2]);
if (!IsValidLon(deflong)) {
BadVal2("l", deflong);
return FALSE;
} else if (!IsValidLat(deflat)) {
BadVal2("l", deflat);
return FALSE;
}
argc -= 2; argv += 2;
break;
case 'q':
i = (cpos == 'd') + 2*(cpos == 'm') + 3*(cpos == 'y' || cpos == 'j');
if (argc <= 4-i) {
TooFew("q");
return FALSE;
}
autom = TRUE;
if (cpos == 'j') {
JD = atof(argv[1])+ROUND;
TT = FRACT(JD);
JulianToMdy(JD-TT, &MM, &DD, &YY);
TT *= 24.0; ZZ = 0.0;
TT = DegToDec(TT);
} else {
MM = i > 2 ? 1 : atoi(argv[1]);
DD = i > 1 ? 1 : atoi(argv[2-(i>2)]); YY = atoi(argv[4-i-(i<1)]);
TT = i == 0 ? atof(argv[4]) : (i > 1 ? 0.0 : 12.0); ZZ = defzone;
if (!IsValidMon(MM)) {
BadVal("q", MM);
return FALSE;
} else if (!IsValidDay(DD, MM, YY)) {
BadVal("q", DD);
return FALSE;
} else if (!IsValidYea(YY)) {
BadVal("q", YY);
return FALSE;
} else if (TT < -2.0 || TT > 24.0) {
BadVal2("q", TT);
return FALSE;
}
}
OO = deflong; AA = deflat;
argc -= 4-i; argv += 4-i;
break;
case 'i':
if (argc <= 1) {
TooFew("i");
return FALSE;
}
if (!InputData(argv[1]))
return FALSE;
argc--; argv++;
break;
case 'o':
if (argc <= 1) {
TooFew("o");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -