--- astrolog.c.orig 1998-12-23 23:29:03.000000000 +0300 +++ astrolog.c 2007-06-26 15:44:04.000000000 +0400 @@ -35,6 +35,7 @@ ** Last code change made 12/20/1998. */ +#include #include "astrolog.h" @@ -234,7 +235,7 @@ char *pch = szLine; /* Split the entered line up into its individual switch strings. */ - while (*pch >= ' ' || *pch == chTab) { + while (!iscntrl((_char)*pch) || *pch == chTab) { if (*pch == ' ' || *pch == chTab) { if (fSpace) /* Skip over the current run of spaces between strings. */ @@ -1146,8 +1147,18 @@ case 'z': if (ch1 == '0') { if (argc <= 1 || RParseSz(argv[1], pmZon) == rLarge) { - i = us.dstDef != 0.0; - SwitchF(i); + if (argc > 1 && strcasecmp(argv[1], "current") == 0) { + time_t t; + struct tm *tm; + + (void) time(&t); + tm = localtime(&t); + i = tm->tm_isdst != 0; + argc--; argv++; + } else { + i = us.dstDef != 0.0; + SwitchF(i); + } SS = us.dstDef = i ? 1.0 : 0.0; } else { SS = us.dstDef = RParseSz(argv[1], pmZon); @@ -1232,13 +1243,39 @@ return fFalse; } ciCore.nam = SzPersist(argv[1]); + if (CchSz(ciCore.nam) > 29) /* see charts1.c */ + ciCore.nam[29] = chNull; + for (pch = ciCore.nam; *pch; pch++) { + if (*pch == '"') /* see io.c */ + *pch = '\''; + else if (iscntrl((_char)*pch)) /* see xgeneral.c */ + *pch = ' '; + } ciCore.loc = SzPersist(argv[2]); + if (CchSz(ciCore.loc) > 29) /* see charts1.c */ + ciCore.loc[29] = chNull; + for (pch = ciCore.loc; *pch; pch++) { + if (*pch == '"') /* see io.c */ + *pch = '\''; + else if (iscntrl((_char)*pch)) /* see xgeneral.c */ + *pch = ' '; + } argc -= 2; argv += 2; break; } - if (argc <= 1 || RParseSz(argv[1], pmZon) == rLarge) - ZZ -= 1.0; - else { + if (argc <= 1 || RParseSz(argv[1], pmZon) == rLarge) { + if (argc > 1 && strcasecmp(argv[1], "current") == 0) { + time_t t; + struct tm *tm; + + (void) time(&t); + tm = localtime(&t); + ZZ = us.zonDef = (tm->tm_isdst ? 1 : 0) - + (real)tm->tm_gmtoff/(60*60); + argc--; argv++; + } else + ZZ -= 1.0; + } else { ZZ = us.zonDef = RParseSz(argv[1], pmZon); if (!FValidZon(us.zonDef)) { ErrorValR("z", us.zonDef);