From f6b02e9a79f49df394a0fa5c836dd961855f1419 Mon Sep 17 00:00:00 2001 From: "Walter D. Pullen" <31943358+CruiserOne@users.noreply.github.com> Date: Mon, 5 Oct 2020 13:02:11 -0700 Subject: [PATCH] Upload all version 7.10 files --- Makefile | 2 +- astrolog.as | 8 +- astrolog.cpp | 989 ++++++++----------- astrolog.def | 6 +- astrolog.doc | Bin 762880 -> 793088 bytes astrolog.h | 1072 +++++++++++---------- astrolog.htm | 2581 ++++++++++++++++++++++++++++++-------------------- astrolog.rc | 234 +++-- atlas.as | 2 +- atlas.cpp | 65 +- calc.cpp | 662 +++++++------ changes.doc | Bin 146432 -> 83968 bytes changes.htm | 1947 ++++++++++--------------------------- charts0.cpp | 170 ++-- charts1.cpp | 604 +++++++----- charts2.cpp | 226 +++-- charts3.cpp | 389 ++++---- data.cpp | 58 +- express.cpp | 444 +++++++-- extern.h | 72 +- general.cpp | 231 +++-- intrpret.cpp | 87 +- io.cpp | 532 +++++++++-- makefile.com | 2 +- matrix.cpp | 137 +-- placalc.cpp | 4 +- placalc.h | 4 +- placalc2.cpp | 4 +- resource.h | 926 +++++++++--------- sefstars.txt | 20 +- swecl.cpp | 159 +++- swedate.cpp | 1 - swehouse.cpp | 525 ++++++++-- swehouse.h | 13 +- swejpl.cpp | 1 - swejpl.h | 1 - swemmoon.cpp | 1 - swemplan.cpp | 1 - swemptab.h | 1 - swenut2a.h | 1 - sweodef.h | 1 - sweph.cpp | 795 ++++++++++++---- sweph.h | 336 +++++-- swephexp.h | 38 +- swephlib.cpp | 216 ++++- swephlib.h | 5 +- timezone.as | 518 +++++++--- wdialog.cpp | 394 +------- wdriver.cpp | 515 +++++----- xcharts0.cpp | 760 +++++++-------- xcharts1.cpp | 1270 ++++++++++++++++++------- xcharts2.cpp | 362 ++++--- xdata.cpp | 608 ++++++------ xdevice.cpp | 449 +++------ xgeneral.cpp | 573 ++++++++--- xscreen.cpp | 568 +++++------ 56 files changed, 11165 insertions(+), 8425 deletions(-) diff --git a/Makefile b/Makefile index 8a7a76f..109950e 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# Astrolog (Version 7.00) File: Makefile (Unix version) +# Astrolog (Version 7.10) File: Makefile (Unix version) # # IMPORTANT NOTICE: Astrolog and all chart display routines and anything # not enumerated elsewhere in this program are Copyright (C) 1991-2020 by diff --git a/astrolog.as b/astrolog.as index e042fda..17dbbef 100644 --- a/astrolog.as +++ b/astrolog.as @@ -1,10 +1,10 @@ -@AD700 ; Astrolog 7.00 default settings file astrolog.as +@AD710 ; Astrolog 7.10 default settings file astrolog.as -z 8:00W ; Default time zone [hours W or E of UTC ] -z0 Autodetect ; Default Daylight time [0 standard, 1 daylight] -zl 122W19:59 47N36:35 ; Default location [longitude and latitude] -zv 167ft ; Default elevation [in feet or meters ] --zj "Current moment now" "Seattle, WA" ; Default name and location +-zj "Current moment now" "Seattle, WA, USA" ; Default name and location ;-n ; Comment out this line to not start with chart for "now". -Yz 0 ; Time minute addition to be used if "now" charts are offset. @@ -109,7 +109,7 @@ _Yr ; Show rounded positions ["=Yr" rounds, "_Yr" doesn't ] -YjT 43 43 60 ; Fixed stars -Yj0 20 10 15 5 ; In ruling sign, exalted sign, ruling house, exalted house --Yj7 10 10 10 5 5 5 ; Esoteric, Hierarchical, Ray ruling - sign, house +-Yj7 10 10 10 5 5 5 ; In Esoteric, Hierarchical, Ray ruling (signs, houses) ; DEFAULT RAYS: @@ -151,7 +151,7 @@ _Xr ; Reverse background ["_Xr" is black, "=Xr" is white ] :YXS 0.0 ; Orbit radius in AU ["0.0" for autodetect] :YXj 0 ; Orbit trail count :YX7 600 ; Esoteric ray column influence width -:YXf 0 ; Use actual fonts +:YXf 0000 ; Use system fonts [signs, houses, planets, aspects] :YXp 0 ; PostScript paper orientation ["-1" portrait, "1" landscape] :YXp0 8.5in 11in ; PostScript paper X and Y sizes diff --git a/astrolog.cpp b/astrolog.cpp index 0d9b594..531772e 100644 --- a/astrolog.cpp +++ b/astrolog.cpp @@ -1,5 +1,5 @@ /* -** Astrolog (Version 7.00) File: astrolog.cpp +** Astrolog (Version 7.10) File: astrolog.cpp ** ** IMPORTANT NOTICE: Astrolog and all chart display routines and anything ** not enumerated below used in this program are Copyright (C) 1991-2020 by @@ -48,7 +48,7 @@ ** Initial programming 8/28-30/1991. ** X Window graphics initially programmed 10/23-29/1991. ** PostScript graphics initially programmed 11/29-30/1992. -** Last code change made 6/4/2020. +** Last code change made 9/30/2020. */ #include "astrolog.h" @@ -66,7 +66,7 @@ void InitColors(void) { int *rgObjRuler = ruler1, i, k; - /* Figure out which rulership set to use for "Element" color. */ + // Figure out which rulership set to use for "Element" color. if (ignore7[rrStd]) { if (!ignore7[rrExa]) rgObjRuler = exalt; else if (!ignore7[rrEso]) rgObjRuler = rgObjEso1; @@ -74,7 +74,7 @@ void InitColors(void) else if (!ignore7[rrRay]) rgObjRuler = NULL; } - /* Determine and assign the color of each object. */ + // Determine and assign the color of each planet. for (i = 0; i <= oNorm; i++) { k = kObjU[i]; if (k == kRay || rgObjRuler == NULL) @@ -83,6 +83,8 @@ void InitColors(void) k = kElemA[(rgObjRuler[i]-1) & 3]; kObjA[i] = k; } + + // Determine and assign the color of each star. EnsureStarBright(); for (i = starLo; i <= starHi; i++) kObjA[i] = KStarA(rStarBright[i-starLo+1]); @@ -99,8 +101,8 @@ void Action(void) int iChart = 0, i; flag fHTML, fHTMLClip; - /* If the -os switch is in effect, open a file and set a global to */ - /* internally 'redirect' all screen output to. */ + // If the -os switch is in effect, open a file and set a global to + // internally 'redirect' all screen output to. if (is.szFileScreen) { is.S = fopen(is.szFileScreen, "w"); @@ -113,7 +115,7 @@ void Action(void) is.S = stdout; is.cchRow = 0; - /* If the -kh switch is in effect, start outputting a new HTML file. */ + // If the -kh switch is in effect, start outputting a new HTML file. fHTML = us.fTextHTML && !us.fGraphics && is.S != stdout; if (fHTML) { @@ -137,14 +139,14 @@ void Action(void) if (iChart < us.cSequenceLine && is.rgszLine[iChart] != NULL) FProcessCommandLine(is.rgszLine[iChart]); #ifdef WIN - is.fMult = fFalse; /* Cleared here because no InitVariables routine. */ + is.fMult = fFalse; // Cleared here because no InitVariables routine. #endif is.fSzPersist = is.fNoEphFile = fFalse; InitColors(); AnsiColor(kDefault); - /* First let's adjust the restriction status of the cusps, Uranians, and */ - /* fixed stars based on whether -C, -u, and -U switches are in effect. */ + // First adjust the restriction status of the cusps, Uranians, and stars + // based on whether -C, -u, and -U switches are in effect. if (!us.fCusp) for (i = cuspLo; i <= cuspHi; i++) @@ -156,15 +158,15 @@ void Action(void) for (i = starLo; i <= starHi; i++) ignore[i] = ignore2[i] = fTrue; - if (FPrintTables()) /* Print out any generic tables specified. */ - goto LDone; /* If nothing else to do, we can exit right away. */ + if (FPrintTables()) // Print out any generic tables specified. + goto LDone; // If nothing else to do, then exit right away. if (is.fMult) { PrintL2(); is.fMult = fFalse; } - /* If -+ or -- switches in effect, then add the specified delta value to */ - /* the date and use that as a new date before proceeding to make chart. */ + // If -+ or -- switches in effect, then add the specified delta value to the + // date and use that as a new date before proceeding to make chart. if (us.dayDelta != 0) { is.JD = (real)MdyToJulian(MM, DD+us.dayDelta, YY); @@ -172,20 +174,25 @@ void Action(void) us.dayDelta = 0; } - /* Here we either do a normal chart or some kind of relationship chart. */ + // Here either do a normal chart or some kind of relationship chart. +#ifdef EXPRESS + // Notify AstroExpression a chart is about to be drawn. + if (!us.fExpOff && FSzSet(us.szExpDisp1)) + ParseExpression(us.szExpDisp1); +#endif if (!us.nRel) { #ifndef WIN - /* If chart info not in memory yet, then prompt the user for it. */ + // If chart info not in memory yet, then prompt the user for it. if (!is.fHaveInfo && !FInputData(szTtyCore)) return; ciMain = ciCore; - CastChart(fTrue); + CastChart(1); #else ciMain = ciCore; if (wi.fCast || us.cSequenceLine > 0) { wi.fCast = fFalse; - CastChart(fTrue); + CastChart(1); } #endif } else { @@ -197,8 +204,8 @@ void Action(void) #endif #ifdef GRAPH - if (us.fGraphics) /* If any of the X window switches in effect, */ - FActionX(); /* then go make a graphics chart... */ + if (us.fGraphics) // If any of the X window switches in effect, + FActionX(); // then go make a graphics chart. else #endif { @@ -209,7 +216,7 @@ void Action(void) AnsiColor(kDefault); } #endif - PrintChart(is.fProgress); /* Otherwise print chart on text screen. */ + PrintChart(is.fProgress); // Otherwise print chart on text screen. #ifdef GRAPH if (gs.fInverse) { SwapN(kBlackA, kWhiteA); @@ -217,6 +224,11 @@ void Action(void) } #endif } +#ifdef EXPRESS + // Notify AstroExpression a chart has just been drawn. + if (!us.fExpOff && FSzSet(us.szExpDisp2)) + ParseExpression(us.szExpDisp2); +#endif LDone: iChart++; @@ -225,7 +237,7 @@ void Action(void) goto LNext; } - if (fHTML) { /* If -kh switch in effect, end the HTML file. */ + if (fHTML) { // If -kh switch in effect, end the HTML file. is.nHTML = 2; PrintSz("\n"); if (fHTMLClip) @@ -234,11 +246,11 @@ void Action(void) is.nHTML = 0; } - if (us.fWriteFile) /* If -o switch in effect, then write */ - FOutputData(); /* the chart information to a file. */ + if (us.fWriteFile) // If -o switch in effect, then write the chart + FOutputData(); // information to a file. - if (is.S != stdout) /* If we were internally directing chart display to a */ - fclose(is.S); /* file as with the -os switch, close it here. */ + if (is.S != stdout) // If were internally directing chart display to a + fclose(is.S); // file as with the -os switch, close it here. } @@ -270,7 +282,7 @@ void InitVariables(void) flag FProcessCommandLine(char *szLine) { - char szCommandLine[cchSzMax], *rgsz[MAXSWITCHES]; + char szCommandLine[cchSzLine], *rgsz[MAXSWITCHES]; int argc, cb; flag fT = fFalse, fSav; FILE *fileT; @@ -279,7 +291,7 @@ flag FProcessCommandLine(char *szLine) return fTrue; cb = CchSz(szLine)+1; - /* Check for filename on command line */ + // Check for filename on command line. if (!FChSwitch(szLine[0])) { fileT = fopen(szLine, "r"); if (fileT != NULL) { @@ -308,14 +320,14 @@ int NParseCommandLine(char *szLine, char **argv) int argc = 1, fSpace = fTrue; char *pch = szLine, chQuote = chNull; - /* Split the entered line up into its individual switch strings. */ + // Split the entered line up into its individual switch strings. while ((uchar)*pch >= ' ' || *pch == chTab) { if (*pch == ' ' || *pch == chTab) { if (fSpace) - /* Skip over the current run of spaces between strings. */ + // Skip over the current run of spaces between strings. ; else { - /* First space after a string, end parameter here. */ + // First space after a string, end parameter here. if (chQuote == chNull) { *pch = chNull; fSpace = fTrue; @@ -323,7 +335,7 @@ int NParseCommandLine(char *szLine, char **argv) } } else { if (fSpace) { - /* First character after run of spaces, begin parameter here. */ + // First character after run of spaces, begin parameter here. if (argc >= MAXSWITCHES-1) { PrintWarning("Too many parameters! Rest of line ignored."); break; @@ -332,7 +344,7 @@ int NParseCommandLine(char *szLine, char **argv) argv[argc++] = pch + (chQuote != chNull); fSpace = fFalse; } else { - /* Skip over the current string. */ + // Skip over the current string. if (chQuote != chNull && *pch == chQuote) { *pch = chNull; fSpace = fTrue; @@ -342,7 +354,7 @@ int NParseCommandLine(char *szLine, char **argv) pch++; } argv[0] = (char *)szAppNameCore; - argv[argc] = NULL; /* Set last string in switch array to Null. */ + argv[argc] = NULL; // Set last string in switch array to Null. return argc; } @@ -418,12 +430,23 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, SwitchF(us.fBarycenter); break; + case 'm': + SwitchF(us.fMoonMove); + break; + case 's': SwitchF(us.fSidereal2); break; case 'n': - SwitchF(us.fTrueNode); + if (ch1 == '0') + SwitchF(us.fNoNutation); + else + SwitchF(us.fTrueNode); + break; + + case 'u': + SwitchF(us.fEclipse); break; case 'd': @@ -455,15 +478,11 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, break; case 'Q': - if (argc <= 1) { - ErrorArgc("YQ"); + if (FErrorArgc("YQ", argc, 1)) return tcError; - } - i = atoi(argv[1]); - if (i < 0) { - ErrorValN("YQ", i); + i = NFromSz(argv[1]); + if (FErrorValN("YQ", i < 0, i, 0)) return tcError; - } us.nScrollRow = i; darg++; break; @@ -472,10 +491,8 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, i = (ch1 - '0'); if (!FBetween(i, 0, 9)) i = 0; - if (argc <= i) { - ErrorArgc("Yq"); + if (FErrorArgc("Yq", argc, i)) return tcError; - } us.cSequenceLine = i; for (i = 0; i < us.cSequenceLine; i++) is.rgszLine[i] = SzPersist(argv[i+1]); @@ -483,10 +500,8 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, break; case 'i': - if (argc <= 1) { - ErrorArgc("Yi"); + if (FErrorArgc("Yi", argc, 1)) return tcError; - } i = (ch1 - '0'); if (!FBetween(i, 0, 9)) i = 0; @@ -501,40 +516,31 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, case 'c': SwitchF(us.fHouseAngle); + for (i = 0; i < 4; i++) + szObjDisp[oAsc + i*3] = + us.fHouseAngle ? szObjName[objMax + i] : szObjName[oAsc + i*3]; break; case 'p': SwitchF(us.fPolarAsc); break; - case 'u': - SwitchF(us.fEclipse); - break; - case 'z': - if (argc <= 1) { - ErrorArgc("Yz"); + if (FErrorArgc("Yz", argc, 1)) return tcError; - } - us.lTimeAddition = atol(argv[1]); + us.lTimeAddition = NFromSz(argv[1]); darg++; break; case '1': - if (argc <= 2) { - ErrorArgc("Y1"); + if (FErrorArgc("Y1", argc, 2)) return tcError; - } i = NParseSz(argv[1], pmObject); - if (!FItem(i)) { - ErrorValN("Y1", i); + if (FErrorValN("Y1", !FItem(i), i, 1)) return tcError; - } j = NParseSz(argv[2], pmObject); - if (!FItem(j)) { - ErrorValN("Y1", j); + if (FErrorValN("Y1", !FItem(j), j, 2)) return tcError; - } us.fObjRotWhole = (ch1 == '0' && !fAnd); us.objRot1 = i; us.objRot2 = j; @@ -542,65 +548,49 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, break; case 'l': - if (argc <= 1) { - ErrorArgc("Yl"); + if (FErrorArgc("Yl", argc, 1)) return tcError; - } - i = atoi(argv[1]); - if (!FSector(i)) { - ErrorValN("Yl", i); + i = NFromSz(argv[1]); + if (FErrorValN("Yl", !FSector(i), i, 0)) return tcError; - } SwitchF(pluszone[i]); darg++; break; #ifdef ARABIC case 'P': - if (argc <= 1) { - ErrorArgc("YP"); + if (FErrorArgc("YP", argc, 1)) return tcError; - } - i = atoi(argv[1]); - if (!FBetween(i, -1, 1)) { - ErrorValN("YP", i); + i = NFromSz(argv[1]); + if (FErrorValN("YP", !FBetween(i, -1, 1), i, 0)) return tcError; - } us.nArabicNight = i; darg++; break; #endif case 'b': - if (argc <= 1) { - ErrorArgc("Yb"); + if (FErrorArgc("Yb", argc, 1)) return tcError; - } - i = atoi(argv[1]); - if (!FValidBioday(i)) { - ErrorValN("Yb", i); + i = NFromSz(argv[1]); + if (FErrorValN("Yb", !FValidBioday(i), i, 0)) return tcError; - } us.nBioday = i; darg++; break; #ifdef SWISS case 'e': - if (argc <= 2) { - ErrorArgc("Ye"); + if (FErrorArgc("Ye", argc, 2)) return tcError; - } i = NParseSz(argv[1], pmObject); - if (!FUranian(i)) { - ErrorValN("Ye", i); + if (FErrorValN("Ye", !FUranian(i), i, 1)) return tcError; - } i -= uranLo; - j = (ch1 == 'b') + (ch1 == 'O')*2; + j = (ch1 == 'b') + (ch1 == 'O')*2 + (ch1 == 'm')*3; if (j > 0) ch1 = ch2; - rgObjSwiss[i] = j == 2 ? NParseSz(argv[2], pmObject) : atoi(argv[2]); + rgObjSwiss[i] = j == 2 ? NParseSz(argv[2], pmObject) : NFromSz(argv[2]); rgTypSwiss[i] = j; rgPntSwiss[i] = (ch1 == 'n') + (ch1 == 's')*2 + (ch1 == 'p')*3 + (ch1 == 'a')*4; @@ -617,16 +607,12 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, #ifdef MATRIX case 'E': - if (argc <= 17) { - ErrorArgc("YE"); + if (FErrorArgc("YE", argc, 17)) return tcError; - } i = NParseSz(argv[1], pmObject); - if (!FHelio(i)) { - ErrorValN("YE", i); + if (FErrorValN("YE", !FHelio(i), i, 1)) return tcError; - } - oe.sma = atof(argv[2]); + oe.sma = RFromSz(argv[2]); oe.ec0 = atof(argv[3]); oe.ec1 = atof(argv[4]); oe.ec2 = atof(argv[5]); oe.in0 = atof(argv[6]); oe.in1 = atof(argv[7]); oe.in2 = atof(argv[8]); oe.ap0 = atof(argv[9]); oe.ap1 = atof(argv[10]); oe.ap2 = atof(argv[11]); @@ -644,45 +630,35 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, SwitchF(us.fStarMagAbs); break; } - if (argc <= 2) { - ErrorArgc("YU"); + if (FErrorArgc("YU", argc, 2)) return tcError; - } i = NParseSz(argv[1], pmObject); - if (!FStar(i)) { - ErrorValN("YU", i); + if (FErrorValN("YU", !FStar(i), i, 1)) return tcError; - } szStarCustom[i-oNorm] = SzPersist(argv[2]); darg += 2; break; case 'R': if (ch1 == 'd') { - if (argc <= 1) { - ErrorArgc("YRd"); + if (FErrorArgc("YRd", argc, 1)) return tcError; - } - us.nSignDiv = atoi(argv[1]); + us.nSignDiv = NFromSz(argv[1]); darg++; break; } else if (ch1 == 'h') { SwitchF(us.fIgnoreAuto); break; } else if (ch1 == 'U') { - if (argc <= 1) { - ErrorArgc("YRU"); + if (FErrorArgc("YRU", argc, 1)) return tcError; - } us.fStarsList = (ch2 == '0'); us.szStarsList = SzPersist(argv[1]); darg++; break; } - if (argc <= 2 + (ch1 == 'Z')*2 + (ch1 == '7')*3) { - ErrorArgc("YR"); + if (FErrorArgc("YR", argc, 2 + (ch1 == 'Z')*2 + (ch1 == '7')*3)) return tcError; - } i = NParseSz(argv[1], pmObject); j = NParseSz(argv[2], pmObject); if (ch1 == '0') { us.fIgnoreSign = i != 0; @@ -692,34 +668,28 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, } else if (ch1 == 'Z') { ignorez[0] = i != 0; ignorez[1] = j != 0; - ignorez[2] = atoi(argv[3]) != 0; - ignorez[3] = atoi(argv[4]) != 0; + ignorez[2] = NFromSz(argv[3]) != 0; + ignorez[3] = NFromSz(argv[4]) != 0; darg += 4; break; } else if (ch1 == '7') { ignore7[0] = i != 0; ignore7[1] = j != 0; - ignore7[2] = atoi(argv[3]) != 0; - ignore7[3] = atoi(argv[4]) != 0; - ignore7[4] = atoi(argv[5]) != 0; + ignore7[2] = NFromSz(argv[3]) != 0; + ignore7[3] = NFromSz(argv[4]) != 0; + ignore7[4] = NFromSz(argv[5]) != 0; darg += 5; break; } - if (!FItem(i)) { - ErrorValN("YR", i); + if (FErrorValN("YR", !FItem(i), i, 1)) return tcError; - } - if (!FItem(j) || j < i) { - ErrorValN("YR", j); + if (FErrorValN("YR", !FItem(j) || j < i, j, 2)) return tcError; - } - if (argc <= 3+j-i) { - ErrorArgc("YR"); + if (FErrorArgc("YR", argc, 3+j-i)) return tcError; - } pb = ch1 == 'T' ? ignore2 : ignore; for (k = i; k <= j; k++) - pb[k] = atoi(argv[3+k-i]) != 0; + pb[k] = NFromSz(argv[3+k-i]) != 0; darg += 3+j-i; for (j = fFalse, i = cuspLo; i <= cuspHi; i++) if (!ignore[i] || !ignore2[i]) { @@ -744,15 +714,11 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, case 'A': if (ch1 == 'D') { - if (argc <= 4) { - ErrorArgc("YAD"); + if (FErrorArgc("YAD", argc, 4)) return tcError; - } i = NParseSz(argv[1], pmAspect); - if (!FAspect2(i)) { - ErrorValN("YAD", i); + if (FErrorValN("YAD", !FAspect2(i), i, 1)) return tcError; - } if (CchSz(argv[2]) >= 3) szAspectDisp[i] = SzPersist(argv[2]); else @@ -768,97 +734,74 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, darg += 4; break; } - if (argc <= 2) { - ErrorArgc("YA"); + if (FErrorArgc("YA", argc, 2)) return tcError; - } k = ch1 == 'm' || ch1 == 'd' ? pmObject : pmAspect; i = NParseSz(argv[1], k); j = NParseSz(argv[2], k); k = ch1 == 'm' || ch1 == 'd' ? oNorm+1 : cAspect; - if (!FBetween(i, (int)(ch1 == 'o' || ch1 == 'a'), k)) { - ErrorValN("YA", i); + if (FErrorValN("YA", !FBetween(i, (int)(ch1 == 'o' || ch1 == 'a'), k), + i, 1)) return tcError; - } - if (!FBetween(j, 0, k) || j < i) { - ErrorValN("YA", j); + if (FErrorValN("YA", !FBetween(j, 0, k) || j < i, j, 2)) return tcError; - } - if (argc <= 3+j-i) { - ErrorArgc("YA"); + if (FErrorArgc("YA", argc, 3+j-i)) return tcError; - } lpr = ch1 == 'o' ? rAspOrb : (ch1 == 'm' ? rObjOrb : (ch1 == 'd' ? rObjAdd : rAspAngle)); for (k = i; k <= j; k++) - lpr[k] = atof(argv[3+k-i]); + lpr[k] = RFromSz(argv[3+k-i]); darg += 3+j-i; break; case 'j': - if (argc <= 2 + 2*(ch1 == '0') + 4*(ch1 == '7')) { - ErrorArgc("Yj"); + if (FErrorArgc("Yj", argc, 2 + 2*(ch1 == '0') + 4*(ch1 == '7'))) return tcError; - } if (ch1 == '0') { - rObjInf[oNorm1+1] = atof(argv[1]); - rObjInf[oNorm1+2] = atof(argv[2]); - rHouseInf[cSign+1] = atof(argv[3]); - rHouseInf[cSign+2] = atof(argv[4]); + rObjInf[oNorm1+1] = RFromSz(argv[1]); + rObjInf[oNorm1+2] = RFromSz(argv[2]); + rHouseInf[cSign+1] = RFromSz(argv[3]); + rHouseInf[cSign+2] = RFromSz(argv[4]); darg += 4; break; } else if (ch1 == '7') { - rObjInf[oNorm1+3] = atof(argv[1]); - rObjInf[oNorm1+4] = atof(argv[2]); - rObjInf[oNorm1+5] = atof(argv[3]); - rHouseInf[cSign+3] = atof(argv[4]); - rHouseInf[cSign+4] = atof(argv[5]); - rHouseInf[cSign+5] = atof(argv[6]); + rObjInf[oNorm1+3] = RFromSz(argv[1]); + rObjInf[oNorm1+4] = RFromSz(argv[2]); + rObjInf[oNorm1+5] = RFromSz(argv[3]); + rHouseInf[cSign+3] = RFromSz(argv[4]); + rHouseInf[cSign+4] = RFromSz(argv[5]); + rHouseInf[cSign+5] = RFromSz(argv[6]); darg += 6; break; } k = ch1 == 'C' ? pmSign : (ch1 == 'A' ? pmAspect : pmObject); i = NParseSz(argv[1], k); j = NParseSz(argv[2], k); k = ch1 == 'C' ? cSign : (ch1 == 'A' ? cAspect : oNorm1); - if (!FBetween(i, 0, k)) { - ErrorValN("Yj", i); + if (FErrorValN("Yj", !FBetween(i, 0, k), i, 1)) return tcError; - } - if (!FBetween(j, 0, k) || j < i) { - ErrorValN("Yj", j); + if (FErrorValN("Yj", !FBetween(j, 0, k) || j < i, j, 2)) return tcError; - } - if (argc <= 3+j-i) { - ErrorArgc("Yj"); + if (FErrorArgc("Yj", argc, 3+j-i)) return tcError; - } lpr = ch1 == 'C' ? rHouseInf : (ch1 == 'A' ? rAspInf : (ch1 == 'T' ? rTransitInf : rObjInf)); for (k = i; k <= j; k++) - lpr[k] = atof(argv[3+k-i]); + lpr[k] = RFromSz(argv[3+k-i]); darg += 3+j-i; break; case 'J': - if (argc <= 3 - (ch1 == '0')) { - ErrorArgc("YJ"); + if (FErrorArgc("YJ", argc, 3 - (ch1 == '0'))) return tcError; - } i = NParseSz(argv[1], pmObject); - if (!FNorm(i)) { - ErrorValN("YJ", i); + if (FErrorValN("YJ", !FNorm(i), i, 1)) return tcError; - } j = NParseSz(argv[2], pmSign); - if (!FBetween(j, 0, cSign)) { - ErrorValN("YJ", j); + if (FErrorValN("YJ", !FBetween(j, 0, cSign), j, 2)) return tcError; - } if (ch1 != '0') { k = NParseSz(argv[3], pmSign); - if (!FBetween(k, 0, cSign)) { - ErrorValN("YJ", k); + if (FErrorValN("YJ", !FBetween(k, 0, cSign), k, 3)) return tcError; - } } if (ch1 == chNull) { ruler1[i] = j; @@ -894,32 +837,23 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, break; case '7': - if (argc <= 2) { - ErrorArgc("Y7"); + if (FErrorArgc("Y7", argc, 2)) return tcError; - } k = ch1 == 'O' ? pmObject : (ch1 == 'C' ? pmSign : 0); i = NParseSz(argv[1], k); j = NParseSz(argv[2], k); k = ch1 == 'O' ? oNorm : (ch1 == 'C' ? cSign : 0); - if (!FBetween(i, (int)(ch1 == 'C'), k)) { - ErrorValN("Y7", i); + if (FErrorValN("Y7", !FBetween(i, (int)(ch1 == 'C'), k), i, 1)) return tcError; - } - if (!FBetween(j, (int)(ch1 == 'C'), k) || j < i) { - ErrorValN("Y7", j); + if (FErrorValN("Y7", !FBetween(j, (int)(ch1 == 'C'), k) || j < i, j, 2)) return tcError; - } - if (argc <= 3+j-i) { - ErrorArgc("Y7"); + if (FErrorArgc("Y7", argc, 3+j-i)) return tcError; - } lpn = ch1 == 'O' ? rgObjRay : (ch1 == 'C' ? rgSignRay : NULL); for (k = i; k <= j; k++) { - l = atoi(argv[3+k-i]); - if (!FBetween(l, (int)(ch1 == 'C'), ch1 != 'C' ? 7 : 1234567)) { - ErrorValN("Y7", l); + l = NFromSz(argv[3+k-i]); + if (FErrorValN("Y7", + !FBetween(l, (int)(ch1 == 'C'), ch1 != 'C' ? 7 : 1234567), l, 3+k-i)) return tcError; - } lpn[k] = l; } darg += 3+j-i; @@ -927,17 +861,13 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, #ifdef INTERPRET case 'I': - if (argc <= 2) { - ErrorArgc("YI"); + if (FErrorArgc("YI", argc, 2)) return tcError; - } i = NParseSz(argv[1], ch1 == 'A' ? pmAspect : (ch1 == chNull ? pmObject : pmSign)); j = ch1 == 'A' ? cAspect : (ch1 == chNull ? oNorm : cSign); - if (!FBetween(i, (int)(ch1 != chNull), j)) { - ErrorValN("YI", i); + if (FErrorValN("YI", !FBetween(i, (int)(ch1 != chNull), j), i, 1)) return tcError; - } if (ch1 == 'A' && ch2 == '0') ch1 = '0'; sz = SzPersist(argv[2]); @@ -955,27 +885,21 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, case 'k': if (ch1 == 'U') { - if (argc <= 1) { - ErrorArgc("YkU"); + if (FErrorArgc("YkU", argc, 1)) return tcError; - } us.szStarsColor = SzPersist(argv[1]); darg++; break; } if (ch1 == 'E') { - if (argc <= 1) { - ErrorArgc("YkE"); + if (FErrorArgc("YkE", argc, 1)) return tcError; - } us.szAstColor = SzPersist(argv[1]); darg++; break; } - if (argc <= 2 + 2*(ch1 == 'C')) { - ErrorArgc("Yk"); + if (FErrorArgc("Yk", argc, 2 + 2*(ch1 == 'C'))) return tcError; - } if (ch1 == 'C') { kElemA[eFir] = NParseSz(argv[1], pmColor) & (cColor-1); kElemA[eEar] = NParseSz(argv[2], pmColor) & (cColor-1); @@ -988,18 +912,14 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, i = NParseSz(argv[1], k); j = NParseSz(argv[2], k); k = ch1 == 'O' ? oNorm : (ch1 == 'A' ? cAspect : (ch1 == '0' || ch1 == '7' ? cRainbow : 8)); - if (!FBetween(i, (int)(ch1 != chNull && ch1 != 'O'), k)) { - ErrorValN("Yk", i); + if (FErrorValN("Yk", + !FBetween(i, (int)(ch1 != chNull && ch1 != 'O'), k), i, 1)) return tcError; - } - if (!FBetween(j, (int)(ch1 != chNull && ch1 != 'O'), k) || j < i) { - ErrorValN("Yk", j); + if (FErrorValN("Yk", + !FBetween(j, (int)(ch1 != chNull && ch1 != 'O'), k) || j < i, j, 2)) return tcError; - } - if (argc <= 3+j-i) { - ErrorArgc("Yk"); + if (FErrorArgc("Yk", argc, 3+j-i)) return tcError; - } lpn = ch1 == 'O' ? kObjU : (ch1 == 'A' ? kAspA : (ch1 == '7' ? kRayA : (ch1 == '0' ? kRainbowA : kMainA))); for (k = i; k <= j; k++) @@ -1008,15 +928,11 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, break; case 'D': - if (argc <= 2) { - ErrorArgc("YD"); + if (FErrorArgc("YD", argc, 2)) return tcError; - } i = NParseSz(argv[1], pmObject); - if (!FItem(i)) { - ErrorValN("YD", i); + if (FErrorValN("YD", !FItem(i), i, 1)) return tcError; - } if (CchSz(argv[2]) >= 2) szObjDisp[i] = SzPersist(argv[2]); else @@ -1025,17 +941,13 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, break; case 'F': - if (argc <= 8) { - ErrorArgc("YF"); + if (FErrorArgc("YF", argc, 8)) return tcError; - } i = NParseSz(argv[1], pmObject); - if (!FItem(i)) { - ErrorValN("YF", i); + if (FErrorValN("YF", !FItem(i), i, 1)) return tcError; - } - r = Mod((real)(atoi(argv[2]) + - (NParseSz(argv[3], pmSign)-1)*30) + atof(argv[4])/60.0); + r = Mod((real)(NFromSz(argv[2]) + + (NParseSz(argv[3], pmSign)-1)*30) + RFromSz(argv[4])/60.0); planet[i] = r; if (FCusp(i) && i != oAsc && i != oMC) { chouse[i-(cuspLo-1)] = r; @@ -1044,12 +956,12 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, else if (i == oNad) chouse[sCap] = Mod(chouse[sCan] + rDegHalf); } - j = atoi(argv[5]); - r = (j < 0 ? -1.0 : 1.0)*((real)NAbs(j) + atof(argv[6])/60.0); + j = NFromSz(argv[5]); + r = (j < 0 ? -1.0 : 1.0)*((real)NAbs(j) + RFromSz(argv[6])/60.0); planetalt[i] = Mod((r + rDegQuad) * 2.0) / 2.0 - rDegQuad; - ret[i] = atof(argv[7]); + ret[i] = RFromSz(argv[7]); if (i <= oNorm) - SphToRec(atof(argv[8]), planet[i], planetalt[i], + SphToRec(RFromSz(argv[8]), planet[i], planetalt[i], &space[i].x, &space[i].y, &space[i].z); MM = -1; darg += 8; @@ -1071,10 +983,8 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, #ifdef ATLAS case 'Y': i = ch1 - '0'; - if (argc <= 1 + (i == 1 || i == 2)) { - ErrorArgc("YY"); + if (FErrorArgc("YY", argc, 1 + (i == 1 || i == 2))) return tcError; - } if (is.fileIn == NULL) { PrintError("Switch only allowed in file context."); return tcError; @@ -1083,16 +993,16 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, if (ch2 >= ' ') ungetc(ch2, is.fileIn); if (i <= 0) { - if (!FLoadAtlas(is.fileIn, atoi(argv[1]))) + if (!FLoadAtlas(is.fileIn, NFromSz(argv[1]))) return tcError; } else if (i == 1) { - if (!FLoadZoneRules(is.fileIn, atoi(argv[1]), atoi(argv[2]))) + if (!FLoadZoneRules(is.fileIn, NFromSz(argv[1]), NFromSz(argv[2]))) return tcError; } else if (i == 2) { - if (!FLoadZoneChanges(is.fileIn, atoi(argv[1]), atoi(argv[2]))) + if (!FLoadZoneChanges(is.fileIn, NFromSz(argv[1]), NFromSz(argv[2]))) return tcError; } else if (i >= 3) { - if (!FLoadZoneLinks(is.fileIn, atoi(argv[1]))) + if (!FLoadZoneLinks(is.fileIn, NFromSz(argv[1]))) return tcError; } darg += 1 + (i == 1 || i == 2); @@ -1103,7 +1013,7 @@ int NProcessSwitchesRare(int argc, char **argv, int pos, ErrorSwitch(argv[0]); return tcError; } - return darg; /* Return the value to be added to argc. */ + return darg; // Return the value to be added to argc. } @@ -1117,6 +1027,9 @@ flag FProcessSwitches(int argc, char **argv) real rT; char ch1, ch2, *pch; CI ci; +#ifdef EXPRESS + char **ppch; +#endif argc--; argv++; while (argc) { @@ -1128,7 +1041,7 @@ flag FProcessSwitches(int argc, char **argv) case ':': break; default: fNot = fTrue; break; } - ich = 1 + FChSwitch(ch1); /* Leading dash? */ + ich = 1 + FChSwitch(ch1); // Leading dash? ch1 = argv[0][ich]; ch2 = ch1 == chNull ? chNull : argv[0][ich+1]; switch (argv[0][ich-1]) { @@ -1174,25 +1087,19 @@ flag FProcessSwitches(int argc, char **argv) case 'M': if (FBetween(ch1, '1', '4')) { i = (ch1 - '0') + (ch2 == '0'); - if (argc <= i) { - ErrorArgc("M"); + if (FErrorArgc("M", argc, i)) return fFalse; - } for (j = 1; j <= i; j++) szWheel[(ch2 == '0' && j >= i) ? 0 : j] = SzPersist(argv[j]); argc -= i; argv += i; break; } i = (ch1 == '0'); - if (argc <= 1+i) { - ErrorArgc("M"); + if (FErrorArgc("M", argc, 1+i)) return fFalse; - } - j = atoi(argv[1]); - if (!FValidMacro(j)) { - ErrorValN("M", j); + j = NFromSz(argv[1]); + if (FErrorValN("M", !FValidMacro(j), j, 1)) return fFalse; - } j--; if (i) szMacro[j] = SzPersist(argv[2]); @@ -1208,7 +1115,7 @@ flag FProcessSwitches(int argc, char **argv) argc -= i; argv += i; break; - /* Switches which determine the type of chart to display: */ + // Switches which determine the type of chart to display: case 'v': if (ch1 == '0') @@ -1219,12 +1126,10 @@ flag FProcessSwitches(int argc, char **argv) case 'w': if (ch1 == '0') SwitchF(us.fWheelReverse); - if (argc > 1 && (i = atoi(argv[1]))) { + if (argc > 1 && (i = NFromSz(argv[1]))) { argc--; argv++; - if (!FValidWheel(i)) { - ErrorValN("w", i); + if (FErrorValN("w", !FValidWheel(i), i, 0)) return fFalse; - } us.nWheelRows = i; } SwitchF(us.fWheel); @@ -1241,23 +1146,17 @@ flag FProcessSwitches(int argc, char **argv) SwitchF(us.fParallel); #ifdef X11 else if (ch1 == 'e') { - if (argc <= 1) { - ErrorArgc("geometry"); + if (FErrorArgc("geometry", argc, 1)) return fFalse; - } - gs.xWin = atoi(argv[1]); - if (argc > 2 && (gs.yWin = atoi(argv[2]))) { + gs.xWin = NFromSz(argv[1]); + if (argc > 2 && (gs.yWin = NFromSz(argv[2]))) { argc--; argv++; } else gs.yWin = gs.xWin; - if (!FValidGraphx(gs.xWin)) { - ErrorValN("geometry", gs.xWin); + if (FErrorValN("geometry", !FValidGraphx(gs.xWin), gs.xWin, 1)) return fFalse; - } - if (!FValidGraphy(gs.yWin)) { - ErrorValN("geometry", gs.yWin); + if (FErrorValN("geometry", !FValidGraphy(gs.yWin), gs.yWin, 2)) return fFalse; - } argc--; argv++; break; } @@ -1305,15 +1204,11 @@ flag FProcessSwitches(int argc, char **argv) if (ch2 == 'y') us.nEphemYears = 1; else if (ch2 == 'Y') { - if (argc <= 1) { - ErrorArgc("ZdY"); + if (FErrorArgc("ZdY", argc, 1)) return fFalse; - } - i = atoi(argv[1]); - if (i < 1) { - ErrorValN("ZdY", i); + i = NFromSz(argv[1]); + if (FErrorValN("ZdY", i < 1, i, 0)) return fFalse; - } us.nEphemYears = i; argc--; argv++; } @@ -1351,12 +1246,10 @@ flag FProcessSwitches(int argc, char **argv) case 'L': if (ch1 == '0') SwitchF(us.fLatitudeCross); - if (argc > 1 && (i = atoi(argv[1]))) { + if (argc > 1 && (i = NFromSz(argv[1]))) { argc--; argv++; - if (!FValidAstrograph(i)) { - ErrorValN("L", i); + if (FErrorValN("L", !FValidAstrograph(i), i, 0)) return fFalse; - } us.nAstroGraphStep = i; } SwitchF(us.fAstroGraph); @@ -1379,10 +1272,8 @@ flag FProcessSwitches(int argc, char **argv) #else j = fFalse; #endif - if (!j && argc <= 2-(i&1)) { - ErrorArgc("dp"); + if (!j && FErrorArgc("dp", argc, 2-(i&1))) return fFalse; - } is.fProgress = us.fInDayMonth = fTrue; DstT = us.dstDef; ZonT = us.zonDef; LonT = us.lonDef; LatT = us.latDef; @@ -1394,21 +1285,17 @@ flag FProcessSwitches(int argc, char **argv) us.fInDayYear = fTrue; if (!j) YeaT = NParseSz(argv[1], pmYea); - us.nEphemYears = i == 2 ? atoi(argv[2]) : 1; + us.nEphemYears = i == 2 ? NFromSz(argv[2]) : 1; } else { if (!j) { MonT = NParseSz(argv[1], pmMon); YeaT = NParseSz(argv[2], pmYea); - if (!FValidMon(MonT)) { - ErrorValN("dp", MonT); + if (FErrorValN("dp", !FValidMon(MonT), MonT, 1)) return fFalse; - } } } - if (!FValidYea(YeaT)) { - ErrorValN("dp", YeaT); + if (FErrorValN("dp", !FValidYea(YeaT), YeaT, i ? 1 : 2)) return fFalse; - } if (!j) { i = 2-(i&1); argc -= i; argv += i; @@ -1417,15 +1304,11 @@ flag FProcessSwitches(int argc, char **argv) if (ch1 == 'y') us.nEphemYears = 1; else if (ch1 == 'Y') { - if (argc <= 1) { - ErrorArgc("dY"); + if (FErrorArgc("dY", argc, 1)) return fFalse; - } - i = atoi(argv[1]); - if (i < 1) { - ErrorValN("dY", i); + i = NFromSz(argv[1]); + if (FErrorValN("dY", i < 1, i, 1)) return fFalse; - } us.nEphemYears = i; argc--; argv++; } @@ -1433,21 +1316,17 @@ flag FProcessSwitches(int argc, char **argv) us.fInDayYear = us.fInDayMonth && (ch1 != 'm'); } #ifdef X11 - else if (ch1 == 'i') { /* -display switch for X */ - if (argc <= 1) { - ErrorArgc("display"); + else if (ch1 == 'i') { // -display switch for X + if (FErrorArgc("display", argc, 1)) return fFalse; - } gs.szDisplay = SzPersist(argv[1]); argc--; argv++; break; } #endif - else if (argc > 1 && (i = atoi(argv[1]))) { - if (!FValidDivision(i)) { - ErrorValN("d", i); + else if (argc > 1 && (i = NFromSz(argv[1]))) { + if (FErrorValN("d", !FValidDivision(i), i, 0)) return fFalse; - } us.nDivision = i; argc--; argv++; } @@ -1460,19 +1339,15 @@ flag FProcessSwitches(int argc, char **argv) case 'E': j = ch1 == '0' || ch2 == '0'; - if (ch1 == 'Y' && argc <= 1 + j) { - ErrorArgc("E"); + if (FErrorArgc("E", argc, (ch1 == 'Y') + j)) return fFalse; - } SwitchF(us.fEphemeris); if (ch1 == 'y') us.nEphemYears = us.fEphemeris ? 1 : 0; else if (ch1 == 'Y') { - i = atoi(argv[1]); - if (i < 1) { - ErrorValN("EY", i); + i = NFromSz(argv[1]); + if (FErrorValN("EY", i < 1, i, 1)) return fFalse; - } us.nEphemYears = i; argc--; argv++; } @@ -1480,7 +1355,7 @@ flag FProcessSwitches(int argc, char **argv) ch1 = argv[1][0]; if (ch1) { us.nEphemRate = ch1 == 'm' ? 1 : (ch1 == 'y' ? 2 : 0); - i = atoi(&argv[1][1]); + i = NFromSz(&argv[1][1]); us.nEphemFactor = Max(i, 1); } argc--; argv++; @@ -1520,41 +1395,31 @@ flag FProcessSwitches(int argc, char **argv) if (ch1 == 'n') { GetTimeNow(&MonT, &DayT, &YeaT, &TimT, DstT, ZonT); if (i >= 2) { - if (argc <= 1) { - ErrorArgc("tYn"); + if (FErrorArgc("tYn", argc, 1)) return fFalse; - } - us.nEphemYears = atoi(argv[1]); + us.nEphemYears = NFromSz(argv[1]); argc--; argv++; } break; } #endif - if (argc <= 2 - (i == 1) + (i < 0)) { - ErrorArgc("t"); + if (FErrorArgc("t", argc, 2 - (i == 1) + (i < 0))) return fFalse; - } YeaT = NParseSz(argv[2 - (i > 0) + (i < 0)], pmYea); - if (!FValidYea(YeaT)) { - ErrorValN("t", YeaT); + if (FErrorValN("t", !FValidYea(YeaT), YeaT, 2 - (i > 0) + (i < 0))) return fFalse; - } if (i <= 0) { MonT = NParseSz(argv[1], pmMon); - if (!FValidMon(MonT)) { - ErrorValN("t", MonT); + if (FErrorValN("t", !FValidMon(MonT), MonT, 1)) return fFalse; - } } if (i < 0) { DayT = NParseSz(argv[2], pmDay); - if (!FValidDay(DayT, MonT, YeaT)) { - ErrorValN("td", DayT); + if (FErrorValN("td", !FValidDay(DayT, MonT, YeaT), DayT, 2)) return fFalse; - } } if (i > 1) - us.nEphemYears = atoi(argv[2]); + us.nEphemYears = NFromSz(argv[2]); i = 2 - (i == 1) + (i < 0); argc -= i; argv += i; break; @@ -1579,27 +1444,20 @@ flag FProcessSwitches(int argc, char **argv) break; } #endif - if (argc <= 3 + i) { - ErrorArgc("T"); + if (FErrorArgc("T", argc, 3 + i)) return fFalse; - } MonT = NParseSz(argv[1], pmMon); DayT = NParseSz(argv[2], pmDay); YeaT = NParseSz(argv[3], pmYea); TimT = i > 0 ? RParseSz(argv[4], pmTim) : Tim; - if (!FValidMon(MonT)) { - ErrorValN("T", MonT); + if (FErrorValN("T", !FValidMon(MonT), MonT, 1)) return fFalse; - } else if (!FValidYea(YeaT)) { - ErrorValN("T", YeaT); + else if (FErrorValN("T", !FValidYea(YeaT), YeaT, 3)) return fFalse; - } else if (!FValidDay(DayT, MonT, YeaT)) { - ErrorValN("T", DayT); + else if (FErrorValN("T", !FValidDay(DayT, MonT, YeaT), DayT, 2)) return fFalse; - } else if (i > 0 && !FValidTim(TimT)) { - ErrorValR("T0", TimT); + else if (i > 0 && FErrorValR("Tt", !FValidTim(TimT), TimT, 4)) return fFalse; - } argc -= 3+i; argv += 3+i; break; @@ -1658,10 +1516,8 @@ flag FProcessSwitches(int argc, char **argv) } #endif j = i < 2 ? 3 : (i == 2 ? 2 : 1); - if (argc <= j) { - ErrorArgc("V"); + if (FErrorArgc("V", argc, j)) return fFalse; - } if (i == 1) { MonT = NParseSz(argv[1], pmMon); DayT = NParseSz(argv[2], pmDay); @@ -1674,29 +1530,21 @@ flag FProcessSwitches(int argc, char **argv) YeaT = NParseSz(argv[1], pmYea); MonT = DayT = 1; } - if (!FValidMon(MonT)) { - ErrorValN("V", MonT); + if (FErrorValN("V", !FValidMon(MonT), MonT, 1)) return fFalse; - } - if (!FValidYea(YeaT)) { - ErrorValN("V", YeaT); + if (FErrorValN("V", !FValidYea(YeaT), YeaT, j)) return fFalse; - } - if (!FValidDay(DayT, MonT, YeaT)) { - ErrorValN("V", DayT); + if (FErrorValN("V", !FValidDay(DayT, MonT, YeaT), DayT, 2)) return fFalse; - } argc -= j; argv += j; break; #ifdef ARABIC case 'P': - if (argc > 1 && (i = atoi(argv[1]))) { + if (argc > 1 && (i = NFromSz(argv[1]))) { argc--; argv++; - if (!FValidPart(i)) { - ErrorValN("P", i); + if (FErrorValN("P", !FValidPart(i), i, 0)) return fFalse; - } us.nArabicParts = i; } if (ch1 == 'z' || ch1 == 'n' || ch1 == 'f') { @@ -1710,7 +1558,7 @@ flag FProcessSwitches(int argc, char **argv) #endif case 'N': - if (argc > 1 && (i = atoi(argv[1]))) { + if (argc > 1 && (i = NFromSz(argv[1]))) { argc--; argv++; us.nAtlasList = i; } @@ -1723,18 +1571,16 @@ flag FProcessSwitches(int argc, char **argv) break; case 'I': - if (argc > 1 && (i = atoi(argv[1]))) { + if (argc > 1 && (i = NFromSz(argv[1]))) { argc--; argv++; - if (!FValidScreen(i)) { - ErrorValN("I", i); + if (FErrorValN("I", !FValidScreen(i), i, 0)) return fFalse; - } us.nScreenWidth = i; } SwitchF(us.fInterpret); break; - /* Switches which affect how the chart parameters are obtained: */ + // Switches which affect how the chart parameters are obtained: #ifdef TIME case 'n': @@ -1752,108 +1598,79 @@ flag FProcessSwitches(int argc, char **argv) case 'z': if (ch1 == '0') { if (argc <= 1 || RParseSz(argv[1], pmDst) == rLarge) { - i = us.dstDef != 0.0; + i = (us.dstDef != 0.0); SwitchF(i); - SS = us.dstDef = i ? 1.0 : 0.0; + SS = us.dstDef = (i ? 1.0 : 0.0); } else { SS = us.dstDef = RParseSz(argv[1], pmDst); - if (!FValidDst(us.dstDef)) { - ErrorValR("z0", us.dstDef); + if (FErrorValR("z0", !FValidDst(us.dstDef), us.dstDef, 0)) return fFalse; - } argc--; argv++; } break; } else if (ch1 == 'l') { - if (argc <= 2) { - ErrorArgc("zl"); + if (FErrorArgc("zl", argc, 2)) return fFalse; - } OO = us.lonDef = RParseSz(argv[1], pmLon); AA = us.latDef = RParseSz(argv[2], pmLat); - if (!FValidLon(us.lonDef)) { - ErrorValR("zl", us.lonDef); + if (FErrorValR("zl", !FValidLon(us.lonDef), us.lonDef, 1)) return fFalse; - } else if (!FValidLat(us.latDef)) { - ErrorValR("zl", us.latDef); + else if (FErrorValR("zl", !FValidLat(us.latDef), us.latDef, 2)) return fFalse; - } argc -= 2; argv += 2; break; } else if (ch1 == 'v') { - if (argc <= 1) { - ErrorArgc("zv"); + if (FErrorArgc("zv", argc, 1)) return fFalse; - } us.elvDef = RParseSz(argv[1], pmElv); argc--; argv++; break; } else if (ch1 == 'j') { - if (argc <= 2) { - ErrorArgc("zj"); + if (FErrorArgc("zj", argc, 2)) return fFalse; - } us.namDef = SzPersist(argv[1]); us.locDef = SzPersist(argv[2]); argc -= 2; argv += 2; break; } else if (ch1 == 't') { - if (argc <= 1) { - ErrorArgc("zt"); + if (FErrorArgc("zt", argc, 1)) return fFalse; - } rT = RParseSz(argv[1], pmTim); - if (!FValidTim(rT)) { - ErrorValR("zt", rT); + if (FErrorValR("zt", !FValidTim(rT), rT, 0)) return fFalse; - } TT = rT; argc--; argv++; break; } else if (ch1 == 'd') { - if (argc <= 1) { - ErrorArgc("zd"); + if (FErrorArgc("zd", argc, 1)) return fFalse; - } i = NParseSz(argv[1], pmDay); - if (!FValidDay(i, MM, YY)) { - ErrorValN("zd", i); + if (FErrorValN("zd", !FValidDay(i, MM, YY), i, 0)) return fFalse; - } DD = i; argc--; argv++; break; } else if (ch1 == 'm') { - if (argc <= 1) { - ErrorArgc("zm"); + if (FErrorArgc("zm", argc, 1)) return fFalse; - } i = NParseSz(argv[1], pmMon); - if (!FValidMon(i)) { - ErrorValN("zm", i); + if (FErrorValN("zm", !FValidMon(i), i, 0)) return fFalse; - } MM = i; argc--; argv++; break; } else if (ch1 == 'y') { - if (argc <= 1) { - ErrorArgc("zy"); + if (FErrorArgc("zy", argc, 1)) return fFalse; - } i = NParseSz(argv[1], pmYea); - if (!FValidYea(i)) { - ErrorValN("zy", i); + if (FErrorValN("zy", !FValidYea(i), i, 0)) return fFalse; - } YY = i; argc--; argv++; break; } else if (ch1 == 'i') { - if (argc <= 2) { - ErrorArgc("zi"); + if (FErrorArgc("zi", argc, 2)) return fFalse; - } ciCore.nam = SzPersist(argv[1]); ciCore.loc = SzPersist(argv[2]); argc -= 2; argv += 2; @@ -1861,14 +1678,16 @@ flag FProcessSwitches(int argc, char **argv) } #ifdef ATLAS else if (ch1 == 'N') { - if (argc <= 1) { - ErrorArgc("zc"); + if (FErrorArgc("zN", argc, 1)) return fFalse; - } if (!DisplayAtlasLookup(argv[1], 0, &i)) PrintWarning("City doesn't match anything in atlas."); else if (!DisplayTimezoneChanges(is.rgae[i].izn, 0, &ciCore)) PrintWarning("Couldn't get time zone data!"); + else { + us.dstDef = SS; us.zonDef = ZZ; + us.lonDef = OO; us.latDef = AA; + } argc--; argv++; break; } @@ -1877,10 +1696,8 @@ flag FProcessSwitches(int argc, char **argv) ZZ -= 1.0; else { ZZ = us.zonDef = RParseSz(argv[1], pmZon); - if (!FValidZon(us.zonDef)) { - ErrorValR("z", us.zonDef); + if (FErrorValR("z", !FValidZon(us.zonDef), us.zonDef, 0)) return fFalse; - } argc--; argv++; } break; @@ -1890,13 +1707,11 @@ flag FProcessSwitches(int argc, char **argv) 7*(ch1 == 'a') + 8*(ch1 == 'b'); if (i <= 0) i = 4; - if (argc <= i) { - ErrorArgc("q"); + if (FErrorArgc("q", argc, i)) return fFalse; - } is.fHaveInfo = fTrue; if (ch1 == 'j') { - is.JD = atof(argv[1]) + rRound; + is.JD = RFromSz(argv[1]) + rRound; TT = RFract(is.JD); JulianToMdy(is.JD - TT, &MM, &DD, &YY); TT *= 24.0; @@ -1904,37 +1719,28 @@ flag FProcessSwitches(int argc, char **argv) } else { MM = i > 1 ? NParseSz(argv[1], pmMon) : 1; DD = i > 2 ? NParseSz(argv[2], pmDay) : 1; - YY = NParseSz(argv[3-(i<3)-(i<2)], pmYea); + YY = NParseSz(argv[3 - (i < 3) - (i < 2)], pmYea); TT = i > 3 ? RParseSz(argv[4], pmTim) : (i < 3 ? 0.0 : 12.0); SS = i > 7 ? RParseSz(argv[5], pmDst) : (i > 6 ? 0.0 : us.dstDef); ZZ = i > 6 ? RParseSz(argv[5 + (i > 7)], pmZon) : us.zonDef; OO = i > 6 ? RParseSz(argv[6 + (i > 7)], pmLon) : us.lonDef; AA = i > 6 ? RParseSz(argv[7 + (i > 7)], pmLat) : us.latDef; - if (!FValidMon(MM)) { - ErrorValN("q", MM); + if (FErrorValN("q", !FValidMon(MM), MM, 1)) return fFalse; - } else if (!FValidDay(DD, MM, YY)) { - ErrorValN("q", DD); + else if (FErrorValN("q", !FValidDay(DD, MM, YY), DD, 2)) return fFalse; - } else if (!FValidYea(YY)) { - ErrorValN("q", YY); + else if (FErrorValN("q", !FValidYea(YY), YY, 3 - (i < 3) - (i < 2))) return fFalse; - } else if (!FValidTim(TT)) { - ErrorValR("q", TT); + else if (FErrorValR("q", !FValidTim(TT), TT, 4)) return fFalse; - } else if (!FValidDst(SS)) { - ErrorValR("q", SS); + else if (FErrorValR("q", !FValidDst(SS), SS, 5)) return fFalse; - } else if (!FValidZon(ZZ)) { - ErrorValR("q", ZZ); + else if (FErrorValR("q", !FValidZon(ZZ), ZZ, 5 + (i > 7))) return fFalse; - } else if (!FValidLon(OO)) { - ErrorValR("q", OO); + else if (FErrorValR("q", !FValidLon(OO), OO, 6 + (i > 7))) return fFalse; - } else if (!FValidLat(AA)) { - ErrorValR("q", AA); + else if (FErrorValR("q", !FValidLat(AA), AA, 7 + (i > 7))) return fFalse; - } } argc -= i; argv += i; break; @@ -1944,14 +1750,15 @@ flag FProcessSwitches(int argc, char **argv) ErrorArgv("i"); return tcError; } - if (argc <= 1) { - ErrorArgc("i"); + if (FErrorArgc("i", argc, 1)) return fFalse; - } ci = ciCore; if (!FInputData(argv[1])) return fFalse; - if (ch1 == '2') { + if (ch1 == '1') { + ciMain = ciCore; + ciCore = ci; + } else if (ch1 == '2') { ciTwin = ciCore; ciCore = ci; } else if (ch1 == '3') { @@ -1975,23 +1782,23 @@ flag FProcessSwitches(int argc, char **argv) case '>': ch1 = 's'; - /* Fall through */ + // Fall through case 'o': if (us.fNoWrite) { ErrorArgv("o"); return tcError; } - if (argc <= 1) { - ErrorArgc("o"); + if (FErrorArgc("o", argc, 1)) return fFalse; - } if (ch1 == 's') { is.szFileScreen = SzPersist(argv[1]); argc--; argv++; break; } else if (ch1 == '0') SwitchF(us.fWritePos); + else if (ch1 == 'd') + SwitchF(us.fWriteDef); SwitchF(us.fWriteFile); is.szFileOut = SzPersist(argv[1]); if (is.fSzPersist) { @@ -2003,7 +1810,7 @@ flag FProcessSwitches(int argc, char **argv) } break; - /* Switches which affect what information is used in a chart: */ + // Switches which affect what information is used in a chart: case 'R': if (ch1 == 'A') { @@ -2014,10 +1821,9 @@ flag FProcessSwitches(int argc, char **argv) for (i = 1; i <= cAspect; i++) ignorea[i] = fFalse; while (argc > 1 && (i = NParseSz(argv[1], pmAspect))) - if (!FAspect(i)) { - ErrorValN("RA", i); + if (FErrorValN("RA", !FAspect(i), i, 0)) return fFalse; - } else { + else { SwitchF(ignorea[i]); argc--; argv++; } @@ -2026,15 +1832,11 @@ flag FProcessSwitches(int argc, char **argv) break; } if (ch1 == 'O') { - if (argc <= 1) { - ErrorArgc("RO"); + if (FErrorArgc("RO", argc, 1)) return fFalse; - } i = NParseSz(argv[1], pmObject); - if (!FBetween(i, -1, cObj)) { - ErrorValN("RO", i); + if (FErrorValN("RO", !FBetween(i, -1, cObj), i, 0)) return fFalse; - } us.objRequire = i; argc--; argv++; break; @@ -2064,10 +1866,9 @@ flag FProcessSwitches(int argc, char **argv) if (i != oNod) SwitchF(pch[i]); while (argc > 1 && (i = NParseSz(argv[1], pmObject)) >= 0) - if (!FItem(i)) { - ErrorValN("R", i); + if (FErrorValN("R", !FItem(i), i, 0)) return fFalse; - } else { + else { if (ch1 != 'C' && ch1 != 'u' && ch1 != 'U') SwitchF(pch[i]); else @@ -2128,16 +1929,14 @@ flag FProcessSwitches(int argc, char **argv) SwitchF(us.fAspect3D); else if (ch1 == 'p') SwitchF(us.fAspectLat); + else if (ch1 == 'P') + SwitchF(us.fParallel2); else if (ch1 != 'o' && ch1 != 'm' && ch1 != 'd' && ch1 != 'a') { - if (argc <= 1) { - ErrorArgc("A"); + if (FErrorArgc("A", argc, 1)) return fFalse; - } i = NParseSz(argv[1], pmAspect); - if (!FValidAspect(i)) { - ErrorValN("A", i); + if (FErrorValN("A", !FValidAspect(i), i, 0)) return fFalse; - } for (j = us.nAsp + 1; j <= i; j++) ignorea[j] = fFalse; for (j = i + 1; j <= cAspect; j++) @@ -2145,21 +1944,15 @@ flag FProcessSwitches(int argc, char **argv) us.nAsp = i; argc--; argv++; } else { - if (argc <= 2) { - ErrorArgc("A"); + if (FErrorArgc("A", argc, 2)) return fFalse; - } i = NParseSz(argv[1], ch1 == 'o' || ch1 == 'a' ? pmAspect : pmObject); - if (i < (int)(ch1 == 'o' || ch1 == 'a') || - i > (ch1 == 'o' || ch1 == 'a' ? cAspect : oNorm+1)) { - ErrorValN("A", i); + if (FErrorValN("A", i < (int)(ch1 == 'o' || ch1 == 'a') || + i > (ch1 == 'o' || ch1 == 'a' ? cAspect : oNorm+1), i, 1)) return fFalse; - } rT = RParseSz(argv[2], 0); - if (rT < -rDegMax || rT > rDegMax) { - ErrorValR("A", rT); + if (FErrorValR("A", rT < -rDegMax || rT > rDegMax, rT, 2)) return fFalse; - } if (ch1 == 'o') rAspOrb[i] = rT; else if (ch1 == 'm') @@ -2172,7 +1965,7 @@ flag FProcessSwitches(int argc, char **argv) } break; - /* Switches which affect how a chart is computed: */ + // Switches which affect how a chart is computed: case 'b': if (ch1 == '0') { @@ -2198,27 +1991,22 @@ flag FProcessSwitches(int argc, char **argv) break; } #ifdef WIN - if (argc <= 1) { - if (!wi.fSaverCfg) - ErrorArgc("c"); + if (argc <= 1 && wi.fSaverCfg) return fFalse; - } #endif + if (FErrorArgc("c", argc, 1)) + return fFalse; i = NParseSz(argv[1], pmSystem); - if (!FValidSystem(i)) { - ErrorValN("c", i); + if (FErrorValN("c", !FValidSystem(i), i, 0)) return fFalse; - } us.nHouseSystem = i; argc--; argv++; break; case 's': - if (argc > 1 && ((rT = atof(argv[1])) != 0.0 || FNumCh(argv[1][0]))) { - if (!FValidOffset(rT)) { - ErrorValR("s", rT); + if (argc > 1 && ((rT = RFromSz(argv[1])) != 0.0 || FNumCh(argv[1][0]))) { + if (FErrorValR("s", !FValidOffset(rT), rT, 0)) return fFalse; - } argc--; argv++; us.rZodiacOffset = rT; } @@ -2246,10 +2034,8 @@ flag FProcessSwitches(int argc, char **argv) argc--; argv++; } else i = FSwitchF(us.objCenter != 0); - if (!FValidCenter(i)) { - ErrorValN("h", i); + if (FErrorValN("h", !FValidCenter(i), i, 0)) return fFalse; - } SetCentric(i); break; @@ -2270,66 +2056,47 @@ flag FProcessSwitches(int argc, char **argv) } #endif if (ch1 == 'd') { - if (argc <= 1) { - ErrorArgc("pd"); + if (FErrorArgc("pd", argc, 1)) return fFalse; - } - us.rProgDay = atof(argv[1]); - if (us.rProgDay == 0.0) { - ErrorValR("pd", us.rProgDay); + us.rProgDay = RFromSz(argv[1]); + if (FErrorValR("pd", us.rProgDay == 0.0, us.rProgDay, 0)) return fFalse; - } argc--; argv++; break; } else if (ch1 == 'C') { - if (argc <= 1) { - ErrorArgc("pC"); + if (FErrorArgc("pC", argc, 1)) return fFalse; - } - us.rProgCusp = atof(argv[1]); - if (us.rProgCusp == 0.0) { - ErrorValR("pC", us.rProgCusp); + us.rProgCusp = RFromSz(argv[1]); + if (FErrorValR("pC", us.rProgCusp == 0.0, us.rProgCusp, 0)) return fFalse; - } argc--; argv++; break; } i = 3 + (ch1 == 't'); - if (argc <= i) { - ErrorArgc("p"); + if (FErrorArgc("p", argc, i)) return fFalse; - } MonT = NParseSz(argv[1], pmMon); DayT = NParseSz(argv[2], pmDay); YeaT = NParseSz(argv[3], pmYea); TimT = ch1 == 't' ? RParseSz(argv[4], pmTim) : 0.0; - if (!FValidMon(MonT)) { - ErrorValN("p", MonT); + if (FErrorValN("p", !FValidMon(MonT), MonT, 1)) return fFalse; - } else if (!FValidDay(DayT, MonT, YeaT)) { - ErrorValN("p", DayT); + else if (FErrorValN("p", !FValidDay(DayT, MonT, YeaT), DayT, 2)) return fFalse; - } else if (!FValidYea(YeaT)) { - ErrorValN("p", YeaT); + else if (FErrorValN("p", !FValidYea(YeaT), YeaT, 3)) return fFalse; - } else if (ch1 == 't' && !FValidTim(TimT)) { - ErrorValR("p", TimT); + else if (ch1 == 't' && FErrorValR("p", !FValidTim(TimT), TimT, 4)) return fFalse; - } is.JDp = MdytszToJulian(MonT, DayT, YeaT, TimT, us.dstDef, us.zonDef); argc -= i; argv += i; break; case 'x': - if (argc <= 1) { - ErrorArgc("x"); + if (FErrorArgc("x", argc, 1)) return fFalse; - } - rT = atof(argv[1]); - if (!FValidHarmonic(rT)) { - ErrorValR("x", rT); + rT = RFromSz(argv[1]); + if (FErrorValR("x", !FValidHarmonic(rT), rT, 0)) return fFalse; - } us.rHarmonic = rT; argc--; argv++; break; @@ -2339,10 +2106,8 @@ flag FProcessSwitches(int argc, char **argv) argc--; argv++; } else i = oSun; - if (!FItem(i)) { - ErrorValN("1", i); + if (FErrorValN("1", !FItem(i), i, 0)) return fFalse; - } us.fSolarWhole = (ch1 == '0' && !fAnd); us.objOnAsc = fAnd ? 0 : i+1; break; @@ -2352,10 +2117,8 @@ flag FProcessSwitches(int argc, char **argv) argc--; argv++; } else i = oSun; - if (!FItem(i)) { - ErrorValN("2", i); + if (FErrorValN("2", !FItem(i), i, 0)) return fFalse; - } us.fSolarWhole = (ch1 == '0' && !fAnd); us.objOnAsc = fAnd ? 0 : -(i+1); break; @@ -2365,14 +2128,12 @@ flag FProcessSwitches(int argc, char **argv) break; case '4': - if (argc > 1 && (i = atoi(argv[1])) >= 0) { + if (argc > 1 && (i = NFromSz(argv[1])) >= 0) { argc--; argv++; } else i = 1; - if (!FValidDwad(i)) { - ErrorValN("4", i); + if (FErrorValN("4", !FValidDwad(i), i, 0)) return fFalse; - } us.nDwad = fAnd ? 0 : i; break; @@ -2393,40 +2154,31 @@ flag FProcessSwitches(int argc, char **argv) break; case 'F': - if (argc <= 3) { - ErrorArgc("F"); + if (FErrorArgc("F", argc, 3)) return fFalse; - } i = NParseSz(argv[1], pmObject); - if (!FItem(i)) { - ErrorValN("F", i); + if (FErrorValN("F", !FItem(i), i, 1)) return fFalse; - } if (ch1 != 'm') { - force[i] = ZD(NParseSz(argv[2], pmSign), atof(argv[3])); - if (force[i] < 0.0 || force[i] >= rDegMax) { - ErrorValR("F", force[i]); + force[i] = ZD(NParseSz(argv[2], pmSign), RFromSz(argv[3])); + if (FErrorValR("F", force[i] < 0.0 || force[i] >= rDegMax, + force[i], 0)) return fFalse; - } force[i] += rDegMax; } else { j = NParseSz(argv[2], pmObject); - if (!FItem(j)) { - ErrorValN("Fm", j); + if (FErrorValN("Fm", !FItem(j), j, 2)) return fFalse; - } k = NParseSz(argv[3], pmObject); - if (!FItem(k)) { - ErrorValN("Fm", k); + if (FErrorValN("Fm", !FItem(k), k, 3)) return fFalse; - } force[i] = (real)-(j * cObj + k + 1); } argc -= 3; argv += 3; break; case '+': - if (argc > 1 && (i = atoi(argv[1])) != 0) { + if (argc > 1 && (i = NFromSz(argv[1])) != 0) { argc--; argv++; } else i = 1; @@ -2436,17 +2188,17 @@ flag FProcessSwitches(int argc, char **argv) case chNull: if (ich <= 1) break; - /* Fall thorugh */ + // Fall thorugh case '-': - if (argc > 1 && (i = atoi(argv[1])) != 0) { + if (argc > 1 && (i = NFromSz(argv[1])) != 0) { argc--; argv++; } else i = 1; us.dayDelta -= i * (ch1 == 'y' ? 365 : (ch1 == 'm' ? 30 : 1)); break; - /* Switches for relationship and comparison charts: */ + // Switches for relationship and comparison charts: case 'r': if (fAnd) { @@ -2457,10 +2209,8 @@ flag FProcessSwitches(int argc, char **argv) break; } i = 2 + 2*((ch1 == 'c' || ch1 == 'm') && ch2 == '0'); - if (argc <= i) { - ErrorArgc("r"); + if (FErrorArgc("r", argc, i)) return fFalse; - } if (ch1 == 'c') us.nRel = rcComposite; else if (ch1 == 'm') @@ -2489,8 +2239,8 @@ flag FProcessSwitches(int argc, char **argv) if (!FInputData(argv[1])) return fFalse; if (i > 2) { - us.nRatio1 = atoi(argv[3]); - us.nRatio2 = atoi(argv[4]); + us.nRatio1 = NFromSz(argv[3]); + us.nRatio2 = NFromSz(argv[4]); if (us.nRatio1 == us.nRatio2) us.nRatio1 = us.nRatio2 = 1; } @@ -2499,10 +2249,8 @@ flag FProcessSwitches(int argc, char **argv) #ifdef TIME case 'y': - if (argc <= 1) { - ErrorArgc("y"); + if (FErrorArgc("y", argc, 1)) return fFalse; - } if (ch1 == 'd') us.nRel = rcDifference; #ifdef BIORHYTHM @@ -2525,14 +2273,14 @@ flag FProcessSwitches(int argc, char **argv) break; #endif - /* Switches to access graphics options: */ + // Switches to access graphics options: case 'k': if (ch1 == 'h') { SwitchF(us.fTextHTML); break; } - if (ch1 == '1') { /* Undocumented subswitch. */ + if (ch1 == '1') { // Undocumented subswitch. us.fAnsiColor = 2; us.fAnsiChar = 1; } else { @@ -2578,17 +2326,17 @@ flag FProcessSwitches(int argc, char **argv) } break; - case '?': /* Common command line usage does the same as -H. */ + case '?': // Common command line usage does the same as -H. SwitchF(us.fSwitch); break; - case ';': /* The -; switch means don't process the rest of the line. */ + case ';': // The -; switch means don't process the rest of the line. return fTrue; - case '@': /* The -@ switch is just a system flag indicator no-op. */ + case '@': // The -@ switch is just a system flag indicator no-op. break; - case '.': /* "-." is usually used to exit the -Q loop. */ + case '.': // "-." is usually used to exit the -Q loop. Terminate(tcForce); #ifdef EXPRESS @@ -2598,39 +2346,60 @@ flag FProcessSwitches(int argc, char **argv) break; } i = 1 + (ch1 == 'M'); - if (argc <= i) { - ErrorArgc("~"); + if (FErrorArgc("~", argc, i)) return fFalse; - } - if (ch1 == 'a') - us.szExpAsplist = SzPersist(argv[1]); + ppch = NULL; + if (ch1 == 'g') + ppch = &us.szExpConfig; + else if (ch1 == 'a') + ppch = (ch2 != '0' ? &us.szExpAspList : &us.szExpAspSumm); + else if (ch1 == 'm') + ppch = (ch2 != 'a' ? &us.szExpMid : &us.szExpMidAsp); + else if (ch1 == 'L') + ppch = &us.szExpCross; else if (ch1 == 'E') - us.szExpEph = SzPersist(argv[1]); + ppch = &us.szExpEph; else if (ch1 == 'd') - us.szExpDay = SzPersist(argv[1]); + ppch = &us.szExpDay; else if (ch1 == 't') - us.szExpTra = SzPersist(argv[1]); + ppch = &us.szExpTra; else if (ch1 == 'j') - us.szExpInf = SzPersist(argv[1]); + ppch = &us.szExpInf; + else if (ch1 == 'P') + ppch = &us.szExpPart; else if (ch1 == 'O') - us.szExpObj = SzPersist(argv[1]); + ppch = &us.szExpObj; else if (ch1 == 'C') - us.szExpHou = SzPersist(argv[1]); + ppch = &us.szExpHou; else if (ch1 == 'A') - us.szExpAsp = SzPersist(argv[1]); + ppch = &us.szExpAsp; else if (ch1 == 'k' && ch2 == 'O') - us.szExpColObj = SzPersist(argv[1]); + ppch = &us.szExpColObj; else if (ch1 == 'k' && ch2 == 'A') - us.szExpColAsp = SzPersist(argv[1]); + ppch = &us.szExpColAsp; + else if (ch1 == 'v') + ppch = &us.szExpSort; + else if (ch1 == 'p') + ppch = (ch2 != '0' ? &us.szExpProg : &us.szExpProg0); + else if (ch1 == 'q' && ch2 == '1') + ppch = &us.szExpCast1; + else if (ch1 == 'q' && ch2 == '2') + ppch = &us.szExpCast2; + else if (ch1 == 'Q' && ch2 == '1') + ppch = &us.szExpDisp1; + else if (ch1 == 'Q' && ch2 == '2') + ppch = &us.szExpDisp2; else if (ch1 == 'M') { - j = atoi(argv[1]); - if (!FBetween(j, 0, iLetterZ)) { - ErrorValN("~M", j); + j = NFromSz(argv[1]); + if (FErrorValN("~M", !FBetween(j, 0, iLetterZ), j, 1)) return fFalse; - } rgszExpMacro[j] = SzPersist(argv[2]); - } else - FParseExpression(argv[1]); + } else if (ch1 == '1') + ParseExpression(argv[1]); + else + ShowParseExpression(argv[1]); + if (ppch != NULL) + *ppch = SzPersist(argv[1]); argc -= i; argv += i; break; #endif @@ -2661,10 +2430,13 @@ void InitProgram() #endif int i; + Assert(starHi == cObj && cObj == objMax-1); is.S = stdout; ClearB((pbyte)szStarCustom, sizeof(szStarCustom)); - for (i = 0; i < objMax; i++) + for (i = 0; i < objMax; i++) { szObjDisp[i] = szObjName[i]; + rgobjList[i] = i; + } for (i = 1; i <= cAspect2; i++) { szAspectDisp[i] = szAspectName[i]; szAspectAbbrevDisp[i] = szAspectAbbrev[i]; @@ -2675,10 +2447,13 @@ void InitProgram() ClearB((pbyte)rgPntSwiss, sizeof(rgPntSwiss)); ClearB((pbyte)rgFlgSwiss, sizeof(rgFlgSwiss)); #endif +#ifdef EXPRESS + ExpInit(); +#endif #ifdef GRAPH for (i = 0; i < cColor; i++) rgbbmp[i] = rgbbmpDef[i]; - for (i = 0; i < objMax+5; i++) { + for (i = 0; i < objMax+9; i++) { szDrawObject[i] = szDrawObjectDef[i]; szDrawObject2[i] = szDrawObjectDef2[i]; } @@ -2714,6 +2489,8 @@ void FinalizeProgram() DeallocateP(is.rgrun); if (is.rgrue != NULL) DeallocateP(is.rgrue); + if (is.rgzonCol != NULL) + DeallocateP(is.rgzonCol); #endif #ifdef EXPRESS if (is.rgsTrieFun != NULL) @@ -2756,7 +2533,7 @@ int main() char szBeta[cchSzMax]; #endif - /* Read in info from the astrolog.as file. */ + // Read in info from the astrolog.as file. InitProgram(); #ifdef SWITCHES is.szProgName = argv[0]; @@ -2773,9 +2550,9 @@ int main() LBegin: is.fSzPersist = !us.fNoSwitches; - if (us.fNoSwitches) { /* Go prompt for */ - argc = NPromptSwitches(szCommandLine, rgsz); /* switches if we */ - argv = rgsz; /* don't have them. */ + if (us.fNoSwitches) { // Go prompt for switches + argc = NPromptSwitches(szCommandLine, rgsz); // if don't have them. + argv = rgsz; is.fSzPersist = fFalse; } is.szProgName = argv[0]; @@ -2786,13 +2563,13 @@ int main() } Action(); } - if (us.fLoop || us.fNoQuit) { /* If -Q in effect loop back and get switch */ - PrintL2(); /* info for another chart to display. */ + if (us.fLoop || us.fNoQuit) { // If -Q in effect loop back and get switch + PrintL2(); // info for another chart to display. InitVariables(); us.fLoop = us.fNoSwitches = fTrue; goto LBegin; } - Terminate(tcOK); /* The only standard place to exit Astrolog is here. */ + Terminate(tcOK); // The only standard place to exit Astrolog is here. return 0; } #endif /* WIN */ diff --git a/astrolog.def b/astrolog.def index d750676..befc3a6 100644 --- a/astrolog.def +++ b/astrolog.def @@ -1,4 +1,4 @@ -; Astrolog (Version 7.00) File: astrolog.def +; Astrolog (Version 7.10) File: astrolog.def ; ; IMPORTANT NOTICE: Astrolog and all chart display routines and anything ; not enumerated below used in this program are Copyright (C) 1991-2020 by @@ -47,10 +47,10 @@ ; Initial programming 8/28-30/1991. ; X Window graphics initially programmed 10/23-29/1991. ; PostScript graphics initially programmed 11/29-30/1992. -; Last code change made 6/4/2020. +; Last code change made 9/30/2020. NAME ASTROLOG -DESCRIPTION "Astrolog 7.00 for MS Windows - By Walter D. Pullen" +DESCRIPTION "Astrolog 7.10 for MS Windows - By Walter D. Pullen" EXETYPE WINDOWS STUB 'WINSTUB.EXE' CODE PRELOAD MOVEABLE DISCARDABLE diff --git a/astrolog.doc b/astrolog.doc index 11e792c22cd2ef6ba29a57bdbee034e99ba7e084..e3cd6b9fc3edeef7ea7fb9c345cc5f4c4cd9899f 100644 GIT binary patch delta 131351 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 diff --git a/astrolog.h b/astrolog.h index bafea73..0239178 100644 --- a/astrolog.h +++ b/astrolog.h @@ -1,5 +1,5 @@ /* -** Astrolog (Version 7.00) File: astrolog.h +** Astrolog (Version 7.10) File: astrolog.h ** ** IMPORTANT NOTICE: Astrolog and all chart display routines and anything ** not enumerated below used in this program are Copyright (C) 1991-2020 by @@ -48,7 +48,7 @@ ** Initial programming 8/28-30/1991. ** X Window graphics initially programmed 10/23-29/1991. ** PostScript graphics initially programmed 11/29-30/1992. -** Last code change made 6/4/2020. +** Last code change made 9/30/2020. */ /* @@ -63,23 +63,23 @@ ** can be disabled even if you are running a system that supports X windows. */ -/*#define PC /* Comment out this #define if you have a Unix, Mac, or other */ +//#define PC /* Comment out this #define if you have a Unix, Mac, or other */ /* system that isn't a generic PC running DOS or MS Windows. */ -/*#define MACOLD /* Comment out this #define if you're not compiling for an */ +//#define MACOLD /* Comment out this #define if you're not compiling for an */ /* old pre-OSX Mac. Modern Mac systems should not use this. */ #define X11 /* Comment out this #define if you don't have X windows, or */ /* else have them and don't wish to compile in X graphics. */ -/*#define WIN /* Comment out this #define if you don't have MS Windows, or */ +//#define WIN /* Comment out this #define if you don't have MS Windows, or */ /* else have them but want a command line version instead. */ -/*#define MACG /* Comment out this #define if you don't have a Mac, or else */ +//#define MACG /* Comment out this #define if you don't have a Mac, or else */ /* have one and don't wish to compile in Mac screen graphics. */ /* Note modern Mac's may be able to compile with X11 instead. */ -/*#define WCLI /* Comment out this #define if you don't want to compile a */ +//#define WCLI /* Comment out this #define if you don't want to compile a */ /* command line Windows version that can still popup windows. */ #define TIME /* Comment out this #define if your compiler can't take the */ @@ -91,7 +91,7 @@ #define ENVIRON /* Comment out this #define if your system doesn't have */ /* environment variables or can't compile calls to them. */ -/*#define ATOF /* Comment out this #define if you have a system in which */ +//#define ATOF /* Comment out this #define if you have a system in which */ /* 'atof' and related functions aren't defined in stdio.h, */ /* such as most PC's, Linux, VMS compilers, and NeXT's. */ @@ -164,28 +164,30 @@ #else #define DEFAULT_DIR "C:\\Astrolog" #endif - /* Change this string to directory path program should look in for the */ - /* astrolog.as default file, if one is not in the current directory or */ - /* in the dirs indicated by environment variables. For PC systems, use */ - /* two backslashes instead of one forward one to divide subdirectories. */ + // Change this string to directory path program should look in for the + // astrolog.as default file, if one is not in the current directory or + // in the dirs indicated by environment variables. For PC systems, use + // two backslashes instead of one forward slash to divide subdirectories. + // For Unix systems, it may be necessary to expand "~" to the full path. #define CHART_DIR DEFAULT_DIR - /* This string is the directory the program looks in for chart info */ - /* files (-i switch) if not in the current directory. This is normally */ - /* the default dir above but may be changed to be somewhere else. */ + // This string is the directory the program looks in for chart info files + // (-i switch) if not in the current directory. This is normally the default + // dir above but may be changed to be somewhere else. #define EPHE_DIR DEFAULT_DIR - /* This string is the directory the program looks in for the ephemeris */ - /* files as accessed with the -b switch. This is normally the default */ - /* dir above but may be changed to be somewhere else. */ + // This string is the directory the program looks in for the ephemeris files + // as accessed with the -b switch. This is normally the default dir above + // but may be changed to be somewhere else. -#define DEFAULT_LONG DM(122,20) /* Change numbers to longitude and latitude */ -#define DEFAULT_LAT DM(47, 36) /* of your current location. Use negative */ - /* values for eastern or southern degrees. */ +#define DEFAULT_LONG DM(122,20) +#define DEFAULT_LAT DM(47, 36) + // Change numbers to longitude and latitude of your current location. Use + // negative values for eastern or southern degrees. -#define DEFAULT_ZONE 8.00 /* Change this number to the time zone of your */ - /* current location in hours before (west of) */ - /* UTC. Use negative values for eastern zones. */ +#define DEFAULT_ZONE 8.00 + // Change this number to the time zone of your current location in hours + // before (west of) UTC. Use negative values for eastern zones. /* ** OPTIONAL CONFIGURATION SECTION: Although not necessary, one may like @@ -194,49 +196,51 @@ ** specified within the default settings file or in the program itself. */ -#define DEFAULT_SYSTEM 0 /* Normally, Placidus houses are used (unless the */ - /* user specifies otherwise). If you want a */ - /* different default system, change this number */ - /* to a value from 0..17 (values same as in -c). */ +#define DEFAULT_SYSTEM 0 + // Normally, Placidus houses are used (unless the user specifies otherwise). + // If you want a different default system, change this number to a value + // from 0-21 (values same as in -c switch). -#define DEFAULT_ASPECTS 5 /* Default number of aspects to use in charts. */ +#define DEFAULT_ASPECTS 5 + // Default number of aspects to include in charts. -#define DIVISIONS 48 /* Greater numbers means more accuracy but slower */ - /* calculation, of exact aspect and transit times. */ +#define DIVISIONS 48 + // Greater numbers means more accuracy but slower calculation, of exact + // aspect and transit times. #define DEFAULT_INFOFILE "astrolog.as" - /* Name of file to look in for default program parameters (which will */ - /* override the compile time values here, if the file exists). */ + // Name of file to look in for default program settings (which will override + // the compile time values here, if the file exists). #define DEFAULT_ATLASFILE "atlas.as" - /* Name of file to look in for default atlas city and time zone list. */ + // Name of file to look in for default atlas city and time zone list. #define DEFAULT_TIMECHANGE "timezone.as" - /* Name of file to look in for default list of time zone changes. */ + // Name of file to look in for default list of time zone changes. #define ENVIRONALL "ASTROLOG" #define ENVIRONVER "ASTR" - /* Name of environment variables to look in for chart, ephemeris, and */ - /* default files. The second name is a version specific variable which */ - /* can get the current version appended to it before it is accessed. */ - -#define WHEELCOLS 15 /* Affects width of each house in wheel display. */ -#define WHEELROWS 11 /* Max no. of objects that can be in a wheel house. */ -#define SCREENWIDTH 80 /* Number of columns to print interpretations in. */ -#define MONTHSPACE 3 /* Number of spaces between each calendar column. */ -#define MAXINDAY 200 /* Max number of aspects or transits displayable. */ -#define MAXCROSS 750 /* Max number of latitude crossings displayable. */ -#define BIODAYS 14 /* Days to include in graphic biorhythms. */ -#define CREDITWIDTH 74 /* Number of text columns in the -Hc credit screen. */ -#define MAXSWITCHES 64 /* Max number of switch parameters per input line. */ -#define PSGUTTER 9 /* Points of white space on PostScript page edge. */ - -#ifdef GRAPH /* For graphics, this char affects how bitmaps are */ -#ifndef PC /* written. 'N' is written like with the 'bitmap' */ -#define BITMAPMODE 'C' /* program, 'C' is compacted somewhat (files have */ -#else /* less spaces), and 'V' is compacted even more. */ -#define BITMAPMODE 'B' /* 'A' means write as rectangular Ascii text file. */ -#endif /* 'B' means write as Windows bitmap (.bmp) file. */ + // Name of environment variables to look in for chart, ephemeris, and + // default files. The second name is a version specific variable which can + // also have the current version appended to it before it is accessed. + +#define WHEELCOLS 15 // Affects width of each house in wheel display. +#define WHEELROWS 11 // Max no. of objects that can be in a wheel house. +#define SCREENWIDTH 80 // Number of columns to print interpretations in. +#define MONTHSPACE 3 // Number of spaces between each calendar column. +#define MAXINDAY 200 // Max number of aspects or transits displayable. +#define MAXCROSS 750 // Max number of latitude crossings displayable. +#define BIODAYS 14 // Days to include in graphic biorhythms. +#define CREDITWIDTH 74 // Number of text columns in the -Hc credit screen. +#define MAXSWITCHES 100 // Max number of switch parameters per input line. +#define PSGUTTER 9 // Points of white space on PostScript page edge. + +#ifdef GRAPH // For graphics, this char affects how bitmaps are +#ifndef PC // written. 'N' is written like with the 'bitmap +#define BITMAPMODE 'C' // program, 'C' is compacted somewhat (files have +#else // less spaces), and 'V' is compacted even more. +#define BITMAPMODE 'B' // 'A' means write as rectangular Ascii text file. +#endif // 'B' means write as Windows bitmap (.bmp) file. #endif /* GRAPH */ /* @@ -248,26 +252,27 @@ */ #ifdef GRAPH -#define BITMAPX 2730 /* Maximum window size allowed */ +#define BITMAPX 2730 // Maximum window size allowed. #define BITMAPY 2730 -#define BITMAPX1 180 /* Minimum window size allowed */ +#define BITMAPX1 180 // Minimum window size allowed. #define BITMAPY1 180 -#define DEFAULTX 600 /* Default window size */ +#define DEFAULTX 600 // Default window size. #define DEFAULTY 600 -#define SIDESIZE 160 /* Size of wheel chart information sidebar. */ -#define MAXMETA 1000000 /* Max bytes allowed in a metafile. */ -#define METAMUL 12 /* Metafile coordinate to chart pixel ratio. */ -#define PSMUL 11 /* PostScript coordinate to chart pixel ratio. */ -#define WIREMUL 10 /* Wireframe coordinate to chart pixel ratio. */ -#define CELLSIZE 14 /* Size for each cell in the aspect grid. */ -#define DEGINC 2 /* Number of degrees per segment for circles. */ -#define DEFORB 7.0 /* Min distance glyphs can be from each other. */ -#define MAXSCALE 400 /* Max scale factor as passed to -Xs swtich. */ +#define SIDESIZE 160 // Size of wheel chart information sidebar. +#define MAXMETA 1000000 // Max bytes allowed in a metafile. +#define METAMUL 12 // Metafile coordinate to chart pixel ratio. +#define PSMUL 11 // PostScript coordinate to chart pixel ratio. +#define WIREMUL 10 // Wireframe coordinate to chart pixel ratio. +#define CELLSIZE 14 // Size for each cell in the aspect grid. +#define DEGINC 2 // Number of degrees per segment for circles. +#define DEFORB 7.0 // Min distance glyphs can be from each other. +#define MAXSCALE 400 // Max scale factor as passed to -Xs swtich. #endif /* GRAPH */ -#define chH (char)(us.fAnsiChar ? 196 : '-') /* Ansi and Ascii */ -#define chV (char)(us.fAnsiChar ? 179 : '|') /* characters used to */ -#define chC (char)(us.fAnsiChar ? 197 : '|') /* display text charts. */ +// Ascii and other characters used to display text charts. +#define chH (char)(us.fAnsiChar ? 196 : '-') +#define chV (char)(us.fAnsiChar ? 179 : '|') +#define chC (char)(us.fAnsiChar ? 197 : '|') #define chNW (char)(us.fAnsiChar ? 218 : '+') #define chNE (char)(us.fAnsiChar ? 191 : '+') #define chSW (char)(us.fAnsiChar ? 192 : '+') @@ -285,7 +290,7 @@ ** One shouldn't ever need to change anything below this line to compile. */ -/*#define BETA /* Uncomment to compile in beta message on startup. */ +//#define BETA // Uncomment to compile in beta message on startup. #define ASTROLOG #ifdef _DEBUG #define DEBUG @@ -489,9 +494,9 @@ #define fTrue TRUE #define szAppNameCore "Astrolog" -#define szVersionCore "7.00" -#define szVerCore "700" -#define szDateCore "June 2020" +#define szVersionCore "7.10" +#define szVerCore "710" +#define szDateCore "October 2020" #define szAddressCore \ "Astara@msn.com - http://www.astrolog.org/astrolog.htm" #define szNowCore "now" @@ -501,6 +506,7 @@ #define cchSzDef 80 #define cchSzMax 255 +#define cchSzLine (cchSzMax*4) #define dwCanary 0x87654321 #define nDegMax 360 #define nDegHalf 180 @@ -566,9 +572,9 @@ #define cRay 7 #define xFont 6 #define yFont 10 -#define xFontT (xFont * gi.nScaleText * gi.nScaleT) -#define yFontT (yFont * gi.nScaleText * gi.nScaleT) -#define xSideT (SIDESIZE * gi.nScaleText * gi.nScaleT) +#define xFontT (xFont * gi.nScaleTextT) +#define yFontT (yFont * gi.nScaleTextT) +#define xSideT (SIDESIZE * gi.nScaleTextT) /* Atlas values */ @@ -577,9 +583,9 @@ #define icnewMax 252 #define icnusMax 51 #define icncaMax 13 -#define icnUS 234 // United States -#define icnCA 38 // Canada -#define icnFR 76 // France +#define icnUS 234 // United States +#define icnCA 38 // Canada +#define icnFR 76 // France #define iznMax 425 #define ilistMax 200 @@ -855,34 +861,36 @@ enum _graphicschart { gEsoteric = 9, gAstroGraph = 10, gEphemeris = 11, - gTraTraGra = 12, - gTraNatGra = 13, - gSphere = 14, - gWorldMap = 15, - gGlobe = 16, - gPolar = 17, - gBiorhythm = 18, + gLocal = 12, + gTraTraGra = 13, + gTraNatGra = 14, + gSphere = 15, + gWorldMap = 16, + gGlobe = 17, + gPolar = 18, + gTelescope = 19, + gBiorhythm = 20, #ifdef WIN - gAspect = 19, - gMidpoint = 20, - gArabic = 21, - gRising = 22, - gTraTraTim = 23, - gTraTraInf = 24, - gTraNatTim = 25, - gTraNatInf = 26, - gSign = 27, - gObject = 28, - gHelpAsp = 29, - gConstel = 30, - gPlanet = 31, - gRay = 32, - gMeaning = 33, - gSwitch = 34, - gObscure = 35, - gKeystroke = 36, - gCredit = 37, - gMax = 38, + gAspect = 21, + gMidpoint = 22, + gArabic = 23, + gRising = 24, + gTraTraTim = 25, + gTraTraInf = 26, + gTraNatTim = 27, + gTraNatInf = 28, + gSign = 29, + gObject = 30, + gHelpAsp = 31, + gConstel = 32, + gPlanet = 33, + gRay = 34, + gMeaning = 35, + gSwitch = 36, + gObscure = 37, + gKeystroke = 38, + gCredit = 39, + gMax = 40, #endif }; @@ -933,13 +941,13 @@ enum _calculationmethod { /* Draw text formatting flags */ enum _drawtext { - dtCent = 0x0, // Default: Center text at coordinates - dtLeft = 0x1, // Left justify text at X coordinate - dtTop = 0x2, // Y coordinate is top of text - dtBottom = 0x4, // Y coordinate is bottom of text - dtErase = 0x8, // Erase background behind text - dtScale = 0x10, // Scale text by -Xs character scale - dtScale2 = 0x20, // Scale text by -XS text scale + dtCent = 0x0, // Default: Center text at coordinates + dtLeft = 0x1, // Left justify text at X coordinate + dtTop = 0x2, // Y coordinate is top of text + dtBottom = 0x4, // Y coordinate is bottom of text + dtErase = 0x8, // Erase background behind text + dtScale = 0x10, // Scale text by -Xs character scale + dtScale2 = 0x20, // Scale text by -XS text scale }; /* User string parse modes */ @@ -1023,6 +1031,7 @@ enum _terminationcode { #define Max(v1, v2) ((v1) > (v2) ? (v1) : (v2)) #define Min(v1, v2) ((v1) < (v2) ? (v1) : (v2)) #define NSgn(n) ((n) < 0 ? -1 : (n) > 0) +#define NSgn2(n) ((n) < 0 ? -1 : 1) #define RSgn2(r) ((r) < 0.0 ? -1.0 : 1.0) #define FOdd(n) ((n) & 1) #define FBetween(v, v1, v2) ((v) >= (v1) && (v) <= (v2)) @@ -1064,6 +1073,7 @@ enum _terminationcode { #define RAtnD(r) DFromR(RAtn(r)) #define NSinD(nR, nD) ((int)((real)(nR)*RSinD((real)nD))) #define NCosD(nR, nD) ((int)((real)(nR)*RCosD((real)nD))) +#define RAngleD(x, y) DFromR(RAngle(x, y)) #define RLength2(x, y) RSqr(Sq(x) + Sq(y)) #define RLength3(x, y, z) RSqr(Sq(x) + Sq(y) + Sq(z)) #define RStarBright(b1, d1, d2) \ @@ -1200,50 +1210,50 @@ enum _terminationcode { #define MoveTo(hdc, x, y) MoveToEx(hdc, x, y, NULL) #endif -/* Should an object in the outer wheel be restricted? */ +// Should an object in the outer wheel be restricted? #define FProper2(i) (!(us.nRel == rcTransit ? ignore2[i] : ignore[i])) -/* Are particular coordinates on the chart? */ +// Are particular coordinates on the chart? #define FInRect(x, y, x1, y1, x2, y2) \ ((x) >= (x1) && (x) < (x2) && (y) >= (y1) && (y) < (y2)) #define FOnWin(X, Y) FInRect((X), (Y), 0, 0, gs.xWin, gs.yWin) -/* Get a coordinate based on chart radius, a fraction, and (co)sin value. */ +// Get a coordinate based on chart radius, a fraction, and (co)sin value. #define POINT1(U, R, S) ((int)(((U)+1.4)*(R)*(S))) #define POINT2(U, R, S) ((int)(((U)-0.3)*(R)*(S))) -/* Determine (co)sin factors based on zodiac angle and chart orientation. */ +// Determine (co)sin factors based on zodiac angle and chart orientation. #define PX(A) RCosD(A) #define PY(A) RSinD(A) #define PZ(A) PlaceInX(A) -/* Compute Mollewide projection in pixel scale given latitude. */ +// Compute Mollewide projection in pixel scale given latitude. #define RMollewide(y) RSqr((real)Sq(180*nScl) - 4.0*Sq((y)*(real)nScl)) #define NMollewide(y) \ ((int)(RSqr((real)(Sq(180*nScl) - 4*Sq((y)*nScl))) + rRound)) -/* Do settings indicate the current chart should have the info sidebar? */ +// Do settings indicate the current chart should have the info sidebar? #define fSidebar ((gi.nMode == gWheel || gi.nMode == gHouse || \ gi.nMode == gSector || gi.nMode == gSphere) && gs.fText && !us.fVelocity) -/* Is the current chart most properly displayed as a square graphic? */ +// Is the current chart most properly displayed as a square graphic? #define fSquare \ (gi.nMode == gWheel || gi.nMode == gHouse || gi.nMode == gGrid || \ (gi.nMode == gHorizon && us.fPrimeVert) || gi.nMode == gDisposit || \ gi.nMode == gOrbit || gi.nMode == gSector || gi.nMode == gSphere || \ gi.nMode == gGlobe || gi.nMode == gPolar) -/* Does the current chart have to be displayed in a map rectangle? */ +// Does the current chart have to be displayed in a map rectangle? #define fMap \ (gi.nMode == gAstroGraph || gi.nMode == gWorldMap) -/* Do settings indicate the current chart should have an outer border? */ +// Do settings indicate the current chart should have an outer border? #define fDrawBorder \ ((gs.fBorder || gi.nMode == gGrid) && gi.nMode != gTraTraGra && \ gi.nMode != gTraNatGra && gi.nMode != gGlobe && gi.nMode != gPolar && \ (gi.nMode != gWorldMap || !gs.fMollewide)) -/* Do settings indicate current chart should have chart info at its bottom? */ +// Do settings indicate current chart should have chart info at its bottom? #define fDrawText \ (gs.fText && gi.nMode != gCalendar && !((gi.nMode == gWorldMap || \ gi.nMode == gGlobe || gi.nMode == gPolar) && (gs.fAlt || gs.fConstel)) && \ @@ -1297,6 +1307,17 @@ typedef struct _CIRC { int yr; } CIRC; +typedef struct _TELE { + real xCent; // Center pixel coordinates of chart + real yCent; + real xBase; // Chart coordinates of center + real yBase; + real xScale; // Scale of chart + real yScale; + real lon; // Final coordinates used for point + real lat; +} TELE; + typedef struct _GridInfo { byte n[objMax][objMax]; int v[objMax][objMax]; @@ -1371,245 +1392,267 @@ typedef struct _ObjDraw { } ObjDraw; #endif -typedef word * TransGraInfo[objMax][objMax][cAspect]; +typedef word * TransGraInfo[objMax][objMax][cAspect+1]; typedef struct _UserSettings { - /* Chart types */ - flag fListing; /* -v */ - flag fWheel; /* -w */ - flag fGrid; /* -g */ - flag fAspList; /* -a */ - flag fMidpoint; /* -m */ - flag fHorizon; /* -Z */ - flag fOrbit; /* -S */ - flag fSector; /* -l */ - flag fInfluence; /* -j */ - flag fEsoteric; /* -7 */ - flag fAstroGraph; /* -L */ - flag fCalendar; /* -K */ - flag fInDay; /* -d */ - flag fInDayInf; /* -D */ - flag fEphemeris; /* -E */ - flag fHorizonSearch; /* -Zd */ - flag fTransit; /* -t */ - flag fTransitInf; /* -T */ - flag fInDayGra; /* -B */ - flag fTransitGra; /* -V */ - flag fAtlasLook; /* -N */ - flag fAtlasNear; /* -Nl */ - flag fZoneChange; /* -Nz */ - - /* Chart suboptions */ - flag fVelocity; /* -v0 */ - flag fWheelReverse; /* -w0 */ - flag fGridConfig; /* -g0 */ - flag fGridMidpoint; /* -gm */ - flag fAppSep; /* -ga */ - flag fParallel; /* -gp */ - flag fAspSummary; /* -a0 */ - flag fMidSummary; /* -m0 */ - flag fMidAspect; /* -ma */ - flag fPrimeVert; /* -Z0 */ - flag fSectorApprox; /* -l0 */ - flag fInfluenceSign; /* -j0 */ - flag fLatitudeCross; /* -L0 */ - flag fCalendarYear; /* -Ky */ - flag fInDayMonth; /* -dm */ - flag fInDayYear; /* -dy */ - flag fGraphAll; /* -B0 */ - flag fArabicFlip; /* -P0 */ - - /* Table chart types */ - flag fCredit; /* -Hc */ - flag fSwitch; /* -H */ - flag fSwitchRare; /* -Y */ - flag fKeyGraph; /* -HX */ - flag fSign; /* -HC */ - flag fObject; /* -HO */ - flag fAspect; /* -HA */ - flag fConstel; /* -HF */ - flag fOrbitData; /* -HS */ - flag fRay; /* -H7 */ - flag fMeaning; /* -HI */ - - /* Main flags */ - flag fLoop; /* -Q */ - flag fSidereal; /* -s */ - flag fCusp; /* -C */ - flag fUranian; /* -u */ - flag fProgress; /* Are we doing a -p progressed chart? */ - flag fInterpret; /* Is -I interpretation switch in effect? */ - flag fHouse3D; /* -c3 */ - flag fAspect3D; /* -A3 */ - flag fAspectLat; /* -Ap */ - flag fDecan; /* -3 */ - flag fFlip; /* -f */ - flag fGeodetic; /* -G */ - flag fVedic; /* -J */ - flag fNavamsa; /* -9 */ - flag fEphemFiles; /* -b */ - flag fWriteFile; /* -o */ - flag fAnsiColor; /* -k */ - flag fGraphics; /* -X */ - - /* Main subflags */ + // Chart types + flag fListing; // -v + flag fWheel; // -w + flag fGrid; // -g + flag fAspList; // -a + flag fMidpoint; // -m + flag fHorizon; // -Z + flag fOrbit; // -S + flag fSector; // -l + flag fInfluence; // -j + flag fEsoteric; // -7 + flag fAstroGraph; // -L + flag fCalendar; // -K + flag fInDay; // -d + flag fInDayInf; // -D + flag fEphemeris; // -E + flag fHorizonSearch; // -Zd + flag fTransit; // -t + flag fTransitInf; // -T + flag fInDayGra; // -B + flag fTransitGra; // -V + flag fAtlasLook; // -N + flag fAtlasNear; // -Nl + flag fZoneChange; // -Nz + + // Chart suboptions + flag fVelocity; // -v0 + flag fWheelReverse; // -w0 + flag fGridConfig; // -g0 + flag fGridMidpoint; // -gm + flag fAppSep; // -ga + flag fParallel; // -gp + flag fAspSummary; // -a0 + flag fMidSummary; // -m0 + flag fMidAspect; // -ma + flag fPrimeVert; // -Z0 + flag fSectorApprox; // -l0 + flag fInfluenceSign; // -j0 + flag fLatitudeCross; // -L0 + flag fCalendarYear; // -Ky + flag fInDayMonth; // -dm + flag fInDayYear; // -dy + flag fGraphAll; // -B0 + flag fArabicFlip; // -P0 + + // Table chart types + flag fCredit; // -Hc + flag fSwitch; // -H + flag fSwitchRare; // -Y + flag fKeyGraph; // -HX + flag fSign; // -HC + flag fObject; // -HO + flag fAspect; // -HA + flag fConstel; // -HF + flag fOrbitData; // -HS + flag fRay; // -H7 + flag fMeaning; // -HI + + // Main flags + flag fLoop; // -Q + flag fSidereal; // -s + flag fCusp; // -C + flag fUranian; // -u + flag fProgress; // Are we doing a -p progressed chart? + flag fInterpret; // Is -I interpretation switch in effect? + flag fHouse3D; // -c3 + flag fAspect3D; // -A3 + flag fAspectLat; // -Ap + flag fParallel2; // -AP + flag fDecan; // -3 + flag fFlip; // -f + flag fGeodetic; // -G + flag fVedic; // -J + flag fNavamsa; // -9 + flag fEphemFiles; // -b + flag fWriteFile; // -o + flag fAnsiColor; // -k + flag fGraphics; // -X + + // Main subflags flag fNoSwitches; - flag fLoopInit; /* -Q0 */ - flag fSeconds; /* -b0 */ - flag fSwissMosh; /* -bs */ - flag fPlacalcAst; /* -ba */ - flag fPlacalcPla; /* -bp */ - flag fMatrixPla; /* -bm */ - flag fMatrixStar; /* -bU */ - flag fEquator; /* -sr */ - flag fEquator2; /* -sr0 */ - flag fWritePos; /* -o0 */ - flag fAnsiChar; /* -k0 */ - flag fTextHTML; /* -kh */ - flag fSolarWhole; /* -10 */ - - /* Rare flags */ - flag fTruePos; /* -YT */ - flag fTopoPos; /* -YV */ - flag fBarycenter; /* -Yh */ - flag fSidereal2; /* -Ys */ - flag fTrueNode; /* -Yn */ - flag fEuroDate; /* -Yd */ - flag fEuroTime; /* -Yt */ - flag fEuroDist; /* -Yv */ - flag fRound; /* -Yr */ - flag fSmartCusp; /* -YC */ - flag fSmartSave; /* -YO */ - flag fClip80; /* -Y8 */ - flag fWriteOld; /* -Yo */ - flag fHouseAngle; /* -Yc */ - flag fPolarAsc; /* -Yp */ - flag fEclipse; /* -Yu */ - flag fObjRotWhole; /* -Y10 */ - flag fIgnoreSign; /* -YR0 */ - flag fIgnoreDir; /* -YR0 */ - flag fIgnoreAuto; /* -YRh */ - flag fStarsList; /* -YRU0 */ - flag fStarMagDist; /* -YUb */ - flag fStarMagAbs; /* -YUb0 */ - flag fNoWrite; /* -0o */ - flag fNoRead; /* -0i */ - flag fNoQuit; /* -0q */ - flag fNoGraphics; /* -0X */ - flag fNoExp; /* -0~ */ - flag fExpOff; /* -~0 */ - - /* Value settings */ - int nAspectSort; /* -a */ - int nEphemYears; /* -Ey */ - int nEphemRate; /* -E0 */ - int nEphemFactor; /* -E0 */ - int nArabic; /* -P */ - int nRel; /* What relationship chart is in effect, if any? */ - int nHouseSystem; /* -c */ - int nAsp; /* -A */ - int objCenter; /* -h */ - int nDwad; /* -4 */ - int nStar; /* -U */ - real rHarmonic; /* Harmonic chart value passed to -x switch. */ - int objOnAsc; /* Planet value passed to -1 or -2 switch. */ - int objRequire; /* Required object passed to -RO switch. */ - int dayDelta; /* -+, -- */ - int nDegForm; /* -s */ - int nProgress; /* -p0 */ - int nDivision; /* -d */ - int nScreenWidth; /* -I */ - real dstDef; /* -z0 */ - real zonDef; /* -z */ - real lonDef; /* -zl */ - real latDef; /* -zl */ - real elvDef; /* -zv */ - char *namDef; /* -zj */ - char *locDef; /* -zj */ - char *rgszPath[10]; /* -Yi */ - char *szAstColor; /* -YkE */ - char *szStarsColor; /* -YkU */ - char *szStarsList; /* -YRU */ - - /* Value subsettings */ - int nWheelRows; /* Number of rows per house to use for -w wheel. */ - int nAstroGraphStep; /* Latitude step rate passed to -L switch. */ - int nArabicParts; /* Arabic parts to include value passed to -P. */ - int nAtlasList; /* Number of rows to display value passed to -N. */ - real rZodiacOffset; /* Position shifting value passed to -s switch. */ - real rProgDay; /* Progression day value passed to -pd switch. */ - real rProgCusp; /* Progression cusp ratio value passed to -pC. */ - int nRatio1; /* Chart ratio factors passed to -rc or -rm. */ + flag fLoopInit; // -Q0 + flag fSeconds; // -b0 + flag fSwissMosh; // -bs + flag fPlacalcAst; // -ba + flag fPlacalcPla; // -bp + flag fMatrixPla; // -bm + flag fMatrixStar; // -bU + flag fEquator; // -sr + flag fEquator2; // -sr0 + flag fWritePos; // -o0 + flag fWriteDef; // -od + flag fAnsiChar; // -k0 + flag fTextHTML; // -kh + flag fSolarWhole; // -10 + + // Rare flags + flag fTruePos; // -YT + flag fTopoPos; // -YV + flag fBarycenter; // -Yh + flag fMoonMove; // -Ym + flag fSidereal2; // -Ys + flag fTrueNode; // -Yn + flag fNoNutation; // -Yn0 + flag fEuroDate; // -Yd + flag fEuroTime; // -Yt + flag fEuroDist; // -Yv + flag fRound; // -Yr + flag fSmartCusp; // -YC + flag fSmartSave; // -YO + flag fClip80; // -Y8 + flag fWriteOld; // -Yo + flag fHouseAngle; // -Yc + flag fPolarAsc; // -Yp + flag fEclipse; // -Yu + flag fObjRotWhole; // -Y10 + flag fIgnoreSign; // -YR0 + flag fIgnoreDir; // -YR0 + flag fIgnoreAuto; // -YRh + flag fStarsList; // -YRU0 + flag fStarMagDist; // -YUb + flag fStarMagAbs; // -YUb0 + flag fNoWrite; // -0o + flag fNoRead; // -0i + flag fNoQuit; // -0q + flag fNoGraphics; // -0X + flag fNoExp; // -0~ + flag fExpOff; // -~0 + + // Value settings + int nAspectSort; // -a + int nEphemYears; // -Ey + int nEphemRate; // -E0 + int nEphemFactor; // -E0 + int nArabic; // -P + int nRel; // What relationship chart is in effect, if any? + int nHouseSystem; // -c + int nAsp; // -A + int objCenter; // -h + int nDwad; // -4 + int nStar; // -U + real rHarmonic; // Harmonic chart value passed to -x switch. + int objOnAsc; // Planet value passed to -1 or -2 switch. + int objRequire; // Required object passed to -RO switch. + int dayDelta; // -+, -- + int nDegForm; // -s + int nProgress; // -p0 + int nDivision; // -d + int nScreenWidth; // -I + real dstDef; // -z0 + real zonDef; // -z + real lonDef; // -zl + real latDef; // -zl + real elvDef; // -zv + char *namDef; // -zj + char *locDef; // -zj + char *rgszPath[10]; // -Yi + char *szAstColor; // -YkE + char *szStarsColor; // -YkU + char *szStarsList; // -YRU + + // Value subsettings + int nWheelRows; // Number of rows per house to use for -w wheel. + int nAstroGraphStep; // Latitude step rate passed to -L switch. + int nArabicParts; // Arabic parts to include value passed to -P. + int nAtlasList; // Number of rows to display value passed to -N. + real rZodiacOffset; // Position shifting value passed to -s switch. + real rProgDay; // Progression day value passed to -pd switch. + real rProgCusp; // Progression cusp ratio value passed to -pC. + int nRatio1; // Chart ratio factors passed to -rc or -rm. int nRatio2; - int nScrollRow; /* -YQ */ - int cSequenceLine; /* -Yq */ - long lTimeAddition; /* -Yz */ - int objRot1; /* -Y1 */ - int objRot2; /* -Y1 */ - int nArabicNight; /* -YP */ - int nBioday; /* -Yb */ - int nSignDiv; /* -YRd */ - char *szExpAsplist; /* -~a */ - char *szExpEph; /* -~E */ - char *szExpDay; /* -~d */ - char *szExpTra; /* -~t */ - char *szExpInf; /* -~j */ - char *szExpObj; /* -~O */ - char *szExpHou; /* -~C */ - char *szExpAsp; /* -~A */ - char *szExpColObj; /* -~kO */ - char *szExpColAsp; /* -~kA */ + int nScrollRow; // -YQ + int cSequenceLine; // -Yq + long lTimeAddition; // -Yz + int objRot1; // -Y1 + int objRot2; // -Y1 + int nArabicNight; // -YP + int nBioday; // -Yb + int nSignDiv; // -YRd + + // AstroExpression hooks + char *szExpConfig; // -~g + char *szExpAspList; // -~a + char *szExpAspSumm; // -~a0 + char *szExpMid; // -~m + char *szExpMidAsp; // -~ma + char *szExpCross; // -~L + char *szExpEph; // -~E + char *szExpDay; // -~d + char *szExpTra; // -~t + char *szExpInf; // -~j + char *szExpPart; // -~P + char *szExpObj; // -~O + char *szExpHou; // -~C + char *szExpAsp; // -~A + char *szExpColObj; // -~kO + char *szExpColAsp; // -~kA + char *szExpSort; // -~v + char *szExpProg; // -~p + char *szExpProg0; // -~p0 + char *szExpCast1; // -~q1 + char *szExpCast2; // -~q2 + char *szExpDisp1; // -~Q1 + char *szExpDisp2; // -~Q2 } US; typedef struct _InternalSettings { - flag fHaveInfo; /* Do we need to prompt user for chart info? */ - flag fDst; /* Has Daylight Saving Time been autodetected? */ - flag fProgress; /* Are we doing a chart involving progression? */ - flag fReturn; /* Are we doing a transit chart for returns? */ - flag fMult; /* Have we already printed at least one text chart? */ - flag fSeconds; /* Do we print locations to nearest second? */ - flag fSzPersist; /* Are parameter strings persistent when processing? */ - flag fSzInteract; /* Are we in middle of chart so some setting fixed? */ - flag fNoEphFile; /* Have we already had a ephem file not found error? */ - flag fSwissPathSet; /* Has the Swiss Ephemeris path been set yet? */ - char *szProgName; /* The name and path of the executable running. */ - char *rgszLine[9]; /* The command lines to run before each -Yq chart. */ - char *szFileScreen; /* The file to send text output to as passed to -os. */ - char *szFileOut; /* The output chart filename string as passed to -o. */ - char **rgszComment; /* Points to any comment strings after -o filename. */ - int cszComment; /* The number of strings after -o that are comments. */ - int cchCol; /* The current column text charts are printing at. */ - int cchRow; /* The current row text charts have scrolled to. */ - int nHTML; /* HTML text output context mode for -kh. */ - int nHouseSystem; /* Actual house system used to compute cusps for -c. */ - int nWheelRows; /* Actual number of rows per house to use for -w. */ - int cae; /* Number of atlas entries of city locations loaded. */ - int czcn; /* Number of time zone change areas loaded. */ - int czce; /* Total number of change entries in all zone areas. */ - int crun; /* Number of time zone Daylight rule categories. */ - int crue; /* Total number of rule entries in all categories. */ - int cAlloc; /* Number of memory allocations currently allocated. */ - int cAllocTotal; /* Total memory allocations allocated this session. */ - int cbAllocSize; /* Total bytes in all memory allocations allocated. */ - real rSid; /* Sidereal offset degrees to be added to locations. */ - real JD; /* Fractional Julian day for current chart. */ - real JDp; /* Julian day that a progressed chart indicates. */ - real Tp; /* Julian time used for progressed chart cusps. */ - real lonMC; /* 0 longitude converted to equatorial coordinates. */ - real latMC; /* 0 latitude converted to equatorial coordinates. */ - TRIE rgsTrieFun; /* Trie tree of tokens for AstroExpression parsing. */ - AtlasEntry *rgae; /* List of atlas entries for city coordinates. */ - ZoneChange *rgzc; /* List of time zone change entries for zone areas. */ - RuleName *rgrun; /* List of Daylight Saving change rule names. */ - RuleEntry *rgrue; /* List of all Daylight Saving change rule entries. */ - FILE *fileIn; /* The switch file currently being read from. */ - FILE *S; /* File to write text to. */ - real T; /* Julian time for chart. */ - real MC; /* Midheaven at chart time. */ - real Asc; /* Ascendant at chart time. */ - real RA; /* Right ascension at time. */ - real OB; /* Obliquity of ecliptic. */ + flag fHaveInfo; // Do we need to prompt user for chart info? + flag fDst; // Has Daylight Saving Time been autodetected? + flag fProgress; // Are we doing a chart involving progression? + flag fReturn; // Are we doing a transit chart for returns? + flag fMult; // Have we already printed at least one text chart? + flag fSeconds; // Do we print locations to nearest second? + flag fSzPersist; // Are parameter strings persistent when processing? + flag fSzInteract; // Are we in middle of chart so some setting fixed? + flag fNoEphFile; // Have we already had a ephem file not found error? + flag fSwissPathSet; // Has the Swiss Ephemeris path been set yet? + char *szProgName; // The name and path of the executable running. + char *rgszLine[9]; // The command lines to run before each -Yq chart. + char *szFileScreen; // The file to send text output to as passed to -os. + char *szFileOut; // The output chart filename string as passed to -o. + char **rgszComment; // Points to any comment strings after -o filename. + int nContext; // Context of current or most recent chart cast. + int cszComment; // The number of strings after -o that are comments. + int cchCol; // The current column text charts are printing at. + int cchRow; // The current row text charts have scrolled to. + int nHTML; // HTML text output context mode for -kh. + int nHouseSystem; // Actual house system used to compute cusps for -c. + int nWheelRows; // Actual number of rows per house to use for -w. + int cae; // Number of atlas entries of city locations loaded. + int czcn; // Number of time zone change areas loaded. + int czce; // Total number of change entries in all zone areas. + int crun; // Number of time zone Daylight rule categories. + int crue; // Total number of rule entries in all categories. + int cAlloc; // Number of memory allocations currently allocated. + int cAllocTotal; // Total memory allocations allocated this session. + int cbAllocSize; // Total bytes in all memory allocations allocated. + real rOff; // Offset between sidereal and tropical zodiacs. + real rSid; // Sidereal offset degrees to be added to locations. + real JD; // Fractional Julian day for current chart. + real JDp; // Julian day that a progressed chart indicates. + real Tp; // Julian time used for progressed chart cusps. + real lonMC; // 0 longitude converted to equatorial coordinates. + real latMC; // 0 latitude converted to equatorial coordinates. + TRIE rgsTrieFun; // Trie tree of tokens for AstroExpression parsing. + AtlasEntry *rgae; // List of atlas entries for city coordinates. + ZoneChange *rgzc; // List of time zone change entries for zone areas. + RuleName *rgrun; // List of Daylight Saving change rule names. + RuleEntry *rgrue; // List of all Daylight Saving change rule entries. + real *rgzonCol; // Cache of time zone offsets for each zone area. + FILE *fileIn; // The switch file currently being read from. + FILE *S; // File to write text to. + real T; // Julian time for chart. + real MC; // Midheaven at chart time. + real Asc; // Ascendant at chart time. + real RA; // Right ascension at time. + real OB; // Obliquity of ecliptic. } IS; typedef struct _ChartInfo { @@ -1652,134 +1695,137 @@ typedef struct _ExtraStar { #ifdef GRAPH typedef struct _GraphicsSettings { - int ft; /* File type being created (-Xb, -Xp, -XM, or -X3). */ - flag fPSComplete; /* Is PostScript file not encapsulated (-Xp0 set). */ - flag fColor; /* Are we drawing a color chart (-Xm not set). */ - flag fInverse; /* Are we drawing in reverse video (-Xr set). */ - flag fRoot; /* Are we drawing on the X11 background (-XB set). */ - flag fText; /* Are we printing chart info on chart (-XT set). */ - flag fFont; /* Are we simulating fonts in charts (-XM0 set). */ - flag fAlt; /* Are we drawing in alternate mode (-Xi set). */ - flag fBorder; /* Are we drawing borders around charts (-Xu set). */ - flag fLabel; /* Are we labeling objects in charts (-Xl not set). */ - flag fLabelAsp; /* Are we drawing aspect glyphs on lines (-XA set). */ - flag fLabelCity; /* Are we plotting cities on maps (-XL set). */ - flag fJetTrail; /* Are we not clearing screen on updates (-Xj set). */ - flag fConstel; /* Are we drawing maps as constellations (-XF set). */ - flag fSouth; /* Are we focus on south hemisphere (-XX0/XP0 set). */ - flag fMollewide; /* Are we drawing maps scaled correctly (-XW0 set). */ - flag fEquator; /* Are we showing equator on maps/globes (-Xe set). */ - flag fEcliptic; /* Are we drawing oriented to ecliptic (-YXe set). */ - flag fAllStar; /* Are we drawing all sefstars.txt stars (-XU set). */ - flag fHouseExtra; /* Are we showing additional house info (-XC set). */ - flag fPrintMap; /* Are we printing globe names on draw (-XPv set). */ - flag fKeepSquare; /* Are we preserving chart aspect ratio (-XQ set). */ - flag fAnimMap; /* Are we animating map instead of time (-XN set). */ - int xWin; /* Current hor. size of graphic chart (-Xw). */ - int yWin; /* Current ver. size of graphic chart (-Xw). */ - int nAnim; /* Current animation mode jump rate (-Xn). */ - int nScale; /* Current character scale factor (-Xs). */ - int nScaleText; /* Current graphics text scale factor (-XS). */ - int nAllStar; /* Extra star size and labelling (-XU). */ - int nAstLo; /* Extra asteroid min ephemeris file (-XE). */ - int nAstHi; /* Extra asteroid max ephemeris file (-XE). */ - int nAstLabel; /* How extra asteroids get labeled (-XE). */ - int nLabelCity; /* How city plottings get colored (-XL). */ - int objLeft; /* Current object to place on Asc (-X1). */ - real rRot; /* Current rotation degree of globe. */ - real rTilt; /* Current vertical tilt of rotating globe. */ - char chBmpMode; /* Current bitmap file type (-Xb). */ - int nOrient; /* PostScript paper orientation indicator. */ - real xInch; /* PostScript horizontal paper size inches. */ - real yInch; /* PostScript vertical paper size inches. */ - char *szDisplay; /* Current X11 display name (-Xd). */ - int nDecaType; /* Type of wheel chart decoration (-YXv). */ - int nDecaSize; /* Size of wheel chart decoration (-YXv). */ - int nDecaLine; /* Lines in wheel chart decoration (-YXv). */ - int nGridCell; /* Number of cells in -g grids (-YXg). */ - real rspace; /* Radius in AU of -S orbit chart (-YXS). */ - int cspace; /* Number of -S orbit trails allowed (-YXj). */ - int zspace; /* Height diff of each orbit trail (-YXj0). */ - int nRayWidth; /* Column width in -7 esoteric chart (-YX7). */ - int nGlyphs; /* Settings for what gylphs to use (-YXG). */ - flag fColorSign; /* More color for sign boundaries. (-YXk). */ - flag fColorHouse; /* More color for house boundaries. (-YXk0). */ - int nDashMax; /* Maximum dash allowed for lines (-YXA). */ - char *szStarsLin; /* Names of extra stars for linking (-YXU). */ - char *szStarsLnk; /* Indexes of star pairs to link up (-YXU). */ + int ft; // File type being created (-Xb, -Xp, -XM, or -X3). + flag fPSComplete; // Is PostScript file not encapsulated (-Xp0 set). + flag fColor; // Are we drawing a color chart (-Xm not set). + flag fInverse; // Are we drawing in reverse video (-Xr set). + flag fRoot; // Are we drawing on the X11 background (-XB set). + flag fText; // Are we printing chart info on chart (-XT set). + int nFont; // Are we simulating fonts in charts (-YXf set). + flag fAlt; // Are we drawing in alternate mode (-Xi set). + flag fBorder; // Are we drawing borders around charts (-Xu set). + flag fLabel; // Are we labeling objects in charts (-Xl not set). + flag fLabelAsp; // Are we drawing aspect glyphs on lines (-XA set). + flag fLabelCity; // Are we plotting cities on maps (-XL set). + flag fJetTrail; // Are we not clearing screen on updates (-Xj set). + flag fConstel; // Are we drawing maps as constellations (-XF set). + flag fSouth; // Are we focus on south hemisphere (-XX0/XP0 set). + flag fMollewide; // Are we drawing maps scaled correctly (-XW0 set). + flag fEquator; // Are we showing equator on maps/globes (-Xe set). + flag fEcliptic; // Are we drawing oriented to ecliptic (-YXe set). + flag fAllStar; // Are we drawing all sefstars.txt stars (-XU set). + flag fHouseExtra; // Are we showing additional house info (-XC set). + flag fPrintMap; // Are we printing globe names on draw (-XPv set). + flag fKeepSquare; // Are we preserving chart aspect ratio (-XQ set). + flag fAnimMap; // Are we animating map instead of time (-XN set). + int xWin; // Current hor. size of graphic chart (-Xw). + int yWin; // Current ver. size of graphic chart (-Xw). + int nAnim; // Current animation mode jump rate (-Xn). + int nScale; // Current character scale factor (-Xs). + int nScaleText; // Current graphics text scale factor (-XS). + int nAllStar; // Extra star size and labelling (-XU). + int nAstLo; // Extra asteroid min ephemeris file (-XE). + int nAstHi; // Extra asteroid max ephemeris file (-XE). + int nAstLabel; // How extra asteroids get labeled (-XE). + int nLabelCity; // How city plottings get colored (-XL). + int objLeft; // Current object to place on Asc (-X1). + real rRot; // Current rotation degree of globe. + real rTilt; // Current vertical tilt of rotating globe. + int objTrack; // Comment me + char chBmpMode; // Current bitmap file type (-Xb). + int nOrient; // PostScript paper orientation indicator. + real xInch; // PostScript horizontal paper size inches. + real yInch; // PostScript vertical paper size inches. + char *szDisplay; // Current X11 display name (-Xd). + int nDecaType; // Type of wheel chart decoration (-YXv). + int nDecaSize; // Size of wheel chart decoration (-YXv). + int nDecaLine; // Lines in wheel chart decoration (-YXv). + int nGridCell; // Number of cells in -g grids (-YXg). + real rspace; // Radius in AU of -S orbit chart (-YXS). + int cspace; // Number of -S orbit trails allowed (-YXj). + int zspace; // Height diff of each orbit trail (-YXj0). + int nRayWidth; // Column width in -7 esoteric chart (-YX7). + int nGlyphs; // Settings for what gylphs to use (-YXG). + flag fColorSign; // More color for sign boundaries. (-YXk). + flag fColorHouse; // More color for house boundaries. (-YXk0). + int nDashMax; // Maximum dash allowed for lines (-YXA). + char *szStarsLin; // Names of extra stars for linking (-YXU). + char *szStarsLnk; // Indexes of star pairs to link up (-YXU). } GS; typedef struct _GraphicsInternal { - int nMode; /* Current type of chart to create. */ - flag fMono; /* Is this a monochrome display. */ - int kiCur; /* Current color drawing with. */ - pbyte bm; /* Pointer to allocated memory. */ - int cbBmpRow; /* Horizontal size of bitmap array in memory. */ - char *szFileOut; /* Current name of bitmap file (-Xo). */ - FILE *file; /* Actual file handle writing graphics to. */ - real rAsc; /* Degree to be at left edge in wheel charts. */ - flag fFile; /* Are we making a graphics file. */ - flag fDidSphere; /* Has a chart sphere been drawn once yet? */ - int nScale; /* Scale ratio, i.e. percentage / 100. */ - int nScaleText; /* Text scale ratio, i.e. percentage / 100. */ - int nScaleT; /* Relative scale to draw chart text at. */ - int nGridCell; /* Actual number of cells in -g grids. */ - int nPenWid; /* Pen width to use when creating metafiles. */ - KI kiOn; /* Foreground color. */ - KI kiOff; /* Background color. */ - KI kiLite; /* Hilight color. */ - KI kiGray; /* A "dim" color. */ - int xOffset; /* Viewport origin. */ + int nMode; // Current type of chart to create. + flag fMono; // Is this a monochrome display. + int kiCur; // Current color drawing with. + pbyte bm; // Pointer to allocated memory. + int cbBmpRow; // Horizontal size of bitmap array in memory. + char *szFileOut; // Current name of bitmap file (-Xo). + FILE *file; // Actual file handle writing graphics to. + real rAsc; // Degree to be at left edge in wheel charts. + flag fFile; // Are we making a graphics file. + flag fDidSphere; // Has a chart sphere been drawn once yet? + int nScale; // Scale ratio, e.g. percentage / 100. + int nScaleText; // Text scale ratio, i.e. percentage / 100. + int nScaleT; // Internal units per pixel (1 for screen). + int nScaleTextT; // Internal text scale, i.e. nScaleText * nScaleT. + int nGridCell; // Actual number of cells in -g grids. + int nPenWid; // Pen width to use when creating metafiles. + int nFontPrev; // System fonts to restore when turning fonts on. + KI kiOn; // Foreground color. + KI kiOff; // Background color. + KI kiLite; // Hilight color. + KI kiGray; // A "dim" color. + int xOffset; // Viewport origin. int yOffset; - int xTurtle; /* Current coordinates of drawing pen. */ + int xTurtle; // Current coordinates of drawing pen. int yTurtle; - int xPen; /* Cached coordinates where last line ended. */ + int xPen; // Cached coordinates where last line ended. int yPen; - PT3R *rgspace; /* List of orbit trail coordinates (-S -X). */ - int ispace; /* Index of most recent coordinate (-S -X). */ - int cspace; /* Coordinates within table so far (-S -X). */ - int *rgzCalendar; /* Aspect coordinates in calendar (-K -X). */ + PT3R *rgspace; // List of orbit trail coordinates (-S -X). + int ispace; // Index of most recent coordinate (-S -X). + int cspace; // Coordinates within table so far (-S -X). + int *rgzCalendar; // Aspect coordinates in calendar (-K -X). #ifdef SWISS - ES *rges; /* List of extra star coordinates (-YXU). */ - int cStarsLin; /* Count of extra star coordinates (-YXU). */ + ES *rges; // List of extra star coordinates (-YXU). + int cStarsLin; // Count of extra star coordinates (-YXU). #endif #ifdef X11 - Display *disp; /* The opened X11 display (-Xd). */ + Display *disp; // The opened X11 display (-Xd). GC gc, pmgc; Pixmap pmap, icon; Window wind, root; int screen; - int depth; /* Number of active color bits. */ + int depth; // Number of active color bits. #endif -#ifdef PS /* Variables used by the PostScript generator. */ - flag fEps; /* Are we doing Encapsulated PostScript. */ - int cStroke; /* Number of items drawn without flushing. */ - flag fLineCap; /* Are line ends rounded instead of square. */ - int nDash; /* How much long are dashes in lines drawn. */ - int nFont; /* What system font are we drawing text in. */ - real rLineWid; /* How wide are lines, et al, drawn with. */ +#ifdef PS // Variables used by the PostScript generator. + flag fEps; // Are we doing Encapsulated PostScript. + int cStroke; // Number of items drawn without flushing. + flag fLineCap; // Are line ends rounded instead of square. + int nDash; // How much long are dashes in lines drawn. + int nFontPS; // What system font are we drawing text in. + real rLineWid; // How wide are lines, et al, drawn with. #endif -#ifdef META /* Variables used by the metafile generator. */ - word *pwMetaCur; /* Current mem position when making metafile. */ - word *pwPoly; /* Position for start of current polyline. */ +#ifdef META // Variables used by the metafile generator. + word *pwMetaCur; // Current mem position when making metafile. + word *pwPoly; // Position for start of current polyline. long cbMeta; - KI kiLineAct; /* Desired and actual line color. */ + KI kiLineAct; // Desired and actual line color. KI kiLineDes; - KI kiFillAct; /* Desired and actual fill color. */ + KI kiFillAct; // Desired and actual fill color. KI kiFillDes; - int nFontAct; /* Desired and actual text font. */ + int nFontAct; // Desired and actual text font. int nFontDes; - KI kiTextAct; /* Desired and actual text color. */ + KI kiTextAct; // Desired and actual text color. KI kiTextDes; - int nAlignAct; /* Desired/actual text alignment. */ + int nAlignAct; // Desired/actual text alignment. int nAlignDes; #endif -#ifdef WIRE /* Variables used by the wireframe generator. */ - word *pwWireCur; /* Current mem position when doing wireframe. */ +#ifdef WIRE // Variables used by the wireframe generator. + word *pwWireCur; // Current memory position when doing wireframe. long cbWire; - int cWire; /* Number of lines in wireframe file. */ - KI kiInFile; /* Actual line color currently in file. */ - int zDefault; /* Default elevation for 2D drawing. */ + int cWire; // Number of lines in wireframe file. + KI kiInFile; // Actual line color currently in file. + int zDefault; // Default elevation for 2D drawing. #endif #ifdef MACG WindowPtr wpAst; @@ -1830,59 +1876,60 @@ typedef struct _OrbitalElements { #define szFileAutoCore "astrolog.bmp" typedef struct _WindowInternal { - HINSTANCE hinst; /* Instance of the Astrolog window class. */ - HWND hwndMain; /* The outer created frame window. */ - HWND hwnd; /* The current window being dealt with. */ - HMENU hmenu; /* The Astrolog main menu bar. */ - HACCEL haccel; /* Keyboard accelerator or shortcut table. */ - HDC hdc; /* The current DC bring drawn upon. */ - HDC hdcPrint; /* The current DC being printed upon. */ - HWND hwndAbort; /* Window of the printing abort dialog. */ - HPEN hpen; /* Pen with the current line color. */ - HBRUSH hbrush; /* Fill if any with the current color. */ - HFONT hfont; /* Font of current text size being printed. */ - HANDLE hMutex; /* To ensure output file isn't already open. */ - size_t lTimer; /* Identifier for the animation timer. */ - short xScroll; /* Horizontal & vertical scrollbar position. */ + HINSTANCE hinst; // Instance of the Astrolog window class. + HWND hwndMain; // The outer created frame window. + HWND hwnd; // The current window being dealt with. + HMENU hmenu; // The Astrolog main menu bar. + HACCEL haccel; // Keyboard accelerator or shortcut table. + HDC hdc; // The current DC bring drawn upon. + HDC hdcPrint; // The current DC being printed upon. + HWND hwndAbort; // Window of the printing abort dialog. + HPEN hpen; // Pen with the current line color. + HBRUSH hbrush; // Fill if any with the current color. + HFONT hfont; // Font of current text size being printed. + HANDLE hMutex; // To ensure output file isn't already open. + size_t lTimer; // Identifier for the animation timer. + short xScroll; // Horizontal & vertical scrollbar position. short yScroll; - short xClient; /* Horizontal & vertical window size. */ + short xClient; // Horizontal & vertical window size. short yClient; - int xChar; /* Horizontal & vertical font character size. */ + int xChar; // Horizontal & vertical font character size. int yChar; - int xMouse; /* Horizontal & vertical mouse position. */ + int xMouse; // Horizontal & vertical mouse position. int yMouse; - WORD wCmd; /* The currently invoked menu command. */ - LPARAM lParamRC; /* Coordinates where right click originated. */ - int nMode; /* New chart type to switch to if any. */ - int cmdCur; /* Menu command for current chart type. */ - flag fMenu; /* Do we need to repaint the menu bar? */ - flag fMenuAll; /* Do we need to redetermine all menu checks? */ - flag fRedraw; /* Do we need to redraw the screen? */ - flag fCast; /* Do we need to recast the chart positions? */ - flag fAbort; /* Did the user cancel printing in progress? */ - flag fMoved; /* Has mouse been dragged since down click? */ - int nDlgChart; /* Which chart to set in Open or Info dialog. */ - flag fWindowFull;/* Is the window in full screen mode? */ - RECT rcFull; /* Former window coordinates if full screen. */ - flag fSaverExt; /* Is executable .scr screen saver extension? */ - flag fSaverCfg; /* Is screen saver in configuration mode? */ - - /* Window user settings. */ - flag fPause; /* Is animation paused? */ - flag fBuffer; /* Are we drawing updates off screen? */ - flag fHourglass; /* Bring up hourglass cursor on redraws? */ - flag fChartWindow; /* Does chart change cause window resize? */ - flag fWindowChart; /* Does window resize cause chart change? */ - flag fNoUpdate; /* Do we not automatically update screen? */ - flag fNoPopup; /* Do we not display warning messages? */ - flag fSaverRun; /* Do we run Astrolog as a screen saver? */ - flag fAutoSave; /* Are we saving chart after win draw? */ - flag fAutoSaveNum; /* Autosave charts are incremental files? */ - flag fAutoSaveWire; /* Autosave wireframe instead of bitmap? */ - int nAutoSaveNum; /* Number of incremental bitmap save. */ - KI kiPen; /* The current pen scribble color. */ - int nDir; /* Animation step factor and direction. */ - UINT nTimerDelay; /* Milliseconds between animation draws. */ + WORD wCmd; // The currently invoked menu command. + LPARAM lParamRC; // Coordinates where right click originated. + int nMode; // New chart type to switch to if any. + int cmdCur; // Menu command for current chart type. + flag fMenu; // Do we need to repaint the menu bar? + flag fMenuAll; // Do we need to redetermine all menu checks? + flag fRedraw; // Do we need to redraw the screen? + flag fCast; // Do we need to recast the chart positions? + flag fAbort; // Did the user cancel printing in progress? + flag fMoved; // Has mouse been dragged since down click? + flag fSkipSystem; // If should suppress the next system command. + int nDlgChart; // Which chart to set in Open or Info dialog. + flag fWindowFull; // Is the window in full screen mode? + RECT rcFull; // Former window coordinates if full screen. + flag fSaverExt; // Is executable .scr screen saver extension? + flag fSaverCfg; // Is screen saver in configuration mode? + + // Window user settings. + flag fPause; // Is animation paused? + flag fBuffer; // Are we drawing updates off screen? + flag fHourglass; // Bring up hourglass cursor on redraws? + flag fChartWindow; // Does chart change cause window resize? + flag fWindowChart; // Does window resize cause chart change? + flag fNoUpdate; // Do we not automatically update screen? + flag fNoPopup; // Do we not display warning messages? + flag fSaverRun; // Do we run Astrolog as a screen saver? + flag fAutoSave; // Are we saving chart after win draw? + flag fAutoSaveNum; // Autosave charts are incremental files? + flag fAutoSaveWire; // Autosave wireframe instead of bitmap? + int nAutoSaveNum; // Number of incremental bitmap save. + KI kiPen; // The current pen scribble color. + int nDir; // Animation step factor and direction. + UINT nTimerDelay; // Milliseconds between animation draws. } WI; #endif @@ -1898,7 +1945,12 @@ typedef struct _WindowInternal { short yClient; flag fDoRedraw; flag fDoResize; + flag fDoCast; flag fWndclass; + int xMouse; // Horizontal & vertical mouse position. + int yMouse; + LPARAM lParamRC; // Coordinates where right click originated. + KI kiPen; // The current pen scribble color. } WI; #endif diff --git a/astrolog.htm b/astrolog.htm index 4f82379..87d2110 100644 --- a/astrolog.htm +++ b/astrolog.htm @@ -2,7 +2,7 @@ -Astrolog 7.00 Documentation +Astrolog 7.10 Documentation