From c7ca1b4baad5b3c5168b44f57c8b7850831b8fb1 Mon Sep 17 00:00:00 2001 From: Dianne Skoll Date: Thu, 12 Dec 2024 11:43:03 -0500 Subject: [PATCH] Get rid of the DyamicFoo hacks and make most translatable variables live in the translation table. --- src/calendar.c | 14 ++-- src/dosubst.c | 74 +++++++++---------- src/funcs.c | 4 +- src/globals.h | 92 +----------------------- src/init.c | 2 +- src/main.c | 6 +- src/omit.c | 2 +- src/protos.h | 8 +-- src/trans.c | 22 +++--- src/types.h | 1 + src/var.c | 191 +++++++++++++++++-------------------------------- 11 files changed, 134 insertions(+), 282 deletions(-) diff --git a/src/calendar.c b/src/calendar.c index 28cf9790..916246cf 100644 --- a/src/calendar.c +++ b/src/calendar.c @@ -2320,7 +2320,7 @@ void WriteJSONTrigger(Trigger const *t, int include_tags, int today) printf(","); } done = 1; - printf("\"%s\"", EnglishDayName[i]); + printf("\"%s\"", DayName[i]); } } printf("],"); @@ -2355,7 +2355,7 @@ void WriteJSONTrigger(Trigger const *t, int include_tags, int today) printf(","); } done = 1; - printf("\"%s\"", EnglishDayName[i]); + printf("\"%s\"", DayName[i]); } } printf("],"); @@ -2706,14 +2706,14 @@ CalendarTime(int tim, int duration) } if (h >= 12) { - ampm1 = DynamicPm; + ampm1 = tr("pm"); } else { - ampm1 = DynamicAm; + ampm1 = tr("am"); } if (h2 >= 12) { - ampm2 = DynamicPm; + ampm2 = tr("pm"); } else { - ampm2 = DynamicAm; + ampm2 = tr("am"); } if (!days) { if (!strcmp(ampm1, ampm2)) { @@ -2760,7 +2760,7 @@ char const *SimpleTime(int tim) if (h == 0) hh=12; else if (h > 12) hh=h-12; else hh=h; - sprintf(buf, "%d%c%02d%s ", hh, TimeSep, min, (h>=12) ? DynamicPm : DynamicAm); + sprintf(buf, "%d%c%02d%s ", hh, TimeSep, min, (h>=12) ? tr("pm") : tr("am")); } break; diff --git a/src/dosubst.c b/src/dosubst.c index ce6a226f..1b95aacd 100644 --- a/src/dosubst.c +++ b/src/dosubst.c @@ -96,7 +96,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, mplu = (mdiff == 1 ? "" : DynamicMplu); hplu = (hdiff == 1 ? "" : DynamicHplu); - when = (tdiff < 0) ? DynamicAgo : DynamicFromnow; + when = (tdiff < 0) ? tr("ago") : tr("from now"); h = tim / 60; min = tim % 60; @@ -120,7 +120,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, } } if (r != OK) { - pm = (h < 12) ? DynamicAm : DynamicPm; + pm = (h < 12) ? tr("am") : tr("pm"); } hh = (h == 12) ? 12 : h % 12; @@ -147,7 +147,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, } } if (r != OK) { - cpm = (h < 12) ? DynamicAm : DynamicPm; + cpm = (h < 12) ? tr("am") : tr("pm"); } chh = (ch == 12) ? 12 : ch % 12; @@ -311,7 +311,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, case 'L': case 'U': case 'V': - snprintf(s, sizeof(s), "%s", (diff ? DynamicTomorrow: DynamicToday)); + snprintf(s, sizeof(s), "%s", (diff ? tr("tomorrow") : tr("today"))); SHIP_OUT(s); done = 1; break; @@ -347,11 +347,11 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, } switch(UPPER(c)) { case 'A': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%s, %d %s, %d", get_day_name(dse%7), d, get_month_name(m), y); } else { - snprintf(s, sizeof(s), "%s %s, %d %s, %d", DynamicOn, get_day_name(dse%7), d, + snprintf(s, sizeof(s), "%s %s, %d %s, %d", tr("on"), get_day_name(dse%7), d, get_month_name(m), y); } SHIP_OUT(s); @@ -363,10 +363,10 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, break; case 'C': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%s", get_day_name(dse%7)); } else { - snprintf(s, sizeof(s), "%s %s", DynamicOn, get_day_name(dse%7)); + snprintf(s, sizeof(s), "%s %s", tr("on"), get_day_name(dse%7)); } SHIP_OUT(s); break; @@ -377,79 +377,79 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, break; case 'E': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%02d%c%02d%c%04d", d, DateSep, m+1, DateSep, y); } else { - snprintf(s, sizeof(s), "%s %02d%c%02d%c%04d", DynamicOn, d, DateSep, + snprintf(s, sizeof(s), "%s %02d%c%02d%c%04d", tr("on"), d, DateSep, m+1, DateSep, y); } SHIP_OUT(s); break; case 'F': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%02d%c%02d%c%04d", m+1, DateSep, d, DateSep, y); } else { - snprintf(s, sizeof(s), "%s %02d%c%02d%c%04d", DynamicOn, m+1, DateSep, d, DateSep, y); + snprintf(s, sizeof(s), "%s %02d%c%02d%c%04d", tr("on"), m+1, DateSep, d, DateSep, y); } SHIP_OUT(s); break; case 'G': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%s, %d %s", get_day_name(dse%7), d, get_month_name(m)); } else { - snprintf(s, sizeof(s), "%s %s, %d %s", DynamicOn, get_day_name(dse%7), d, get_month_name(m)); + snprintf(s, sizeof(s), "%s %s, %d %s", tr("on"), get_day_name(dse%7), d, get_month_name(m)); } SHIP_OUT(s); break; case 'H': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%02d%c%02d", d, DateSep, m+1); } else { - snprintf(s, sizeof(s), "%s %02d%c%02d", DynamicOn, d, DateSep, m+1); + snprintf(s, sizeof(s), "%s %02d%c%02d", tr("on"), d, DateSep, m+1); } SHIP_OUT(s); break; case 'I': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%02d%c%02d", m+1, DateSep, d); } else { - snprintf(s, sizeof(s), "%s %02d%c%02d", DynamicOn, m+1, DateSep, d); + snprintf(s, sizeof(s), "%s %02d%c%02d", tr("on"), m+1, DateSep, d); } SHIP_OUT(s); break; case 'J': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%s, %s %d%s, %d", get_day_name(dse%7), get_month_name(m), d, plu, y); } else { - snprintf(s, sizeof(s), "%s %s, %s %d%s, %d", DynamicOn, get_day_name(dse%7), + snprintf(s, sizeof(s), "%s %s, %s %d%s, %d", tr("on"), get_day_name(dse%7), get_month_name(m), d, plu, y); } SHIP_OUT(s); break; case 'K': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%s, %s %d%s", get_day_name(dse%7), get_month_name(m), d, plu); } else { - snprintf(s, sizeof(s), "%s %s, %s %d%s", DynamicOn, get_day_name(dse%7), + snprintf(s, sizeof(s), "%s %s, %s %d%s", tr("on"), get_day_name(dse%7), get_month_name(m), d, plu); } SHIP_OUT(s); break; case 'L': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%04d%c%02d%c%02d", y, DateSep, m+1, DateSep, d); } else { - snprintf(s, sizeof(s), "%s %04d%c%02d%c%02d", DynamicOn, y, DateSep, m+1, DateSep, d); + snprintf(s, sizeof(s), "%s %04d%c%02d%c%02d", tr("on"), y, DateSep, m+1, DateSep, d); } SHIP_OUT(s); break; @@ -465,7 +465,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, break; case 'O': - if (RealToday == DSEToday) snprintf(s, sizeof(s), " (%s)", DynamicToday); + if (RealToday == DSEToday) snprintf(s, sizeof(s), " (%s)", tr("today")); else *s = 0; SHIP_OUT(s); break; @@ -496,22 +496,22 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, break; case 'U': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%s, %d%s %s, %d", get_day_name(dse%7), d, plu, get_month_name(m), y); } else { - snprintf(s, sizeof(s), "%s %s, %d%s %s, %d", DynamicOn, get_day_name(dse%7), d, + snprintf(s, sizeof(s), "%s %s, %d%s %s, %d", tr("on"), get_day_name(dse%7), d, plu, get_month_name(m), y); } SHIP_OUT(s); break; case 'V': - if (altmode == '*' || !strcmp(DynamicOn, "")) { + if (altmode == '*' || !strcmp(tr("on"), "")) { snprintf(s, sizeof(s), "%s, %d%s %s", get_day_name(dse%7), d, plu, get_month_name(m)); } else { - snprintf(s, sizeof(s), "%s %s, %d%s %s", DynamicOn, get_day_name(dse%7), d, plu, + snprintf(s, sizeof(s), "%s %s, %d%s %s", tr("on"), get_day_name(dse%7), d, plu, get_month_name(m)); } SHIP_OUT(s); @@ -539,14 +539,14 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, case '1': if (tdiff == 0) - snprintf(s, sizeof(s), "%s", DynamicNow); + snprintf(s, sizeof(s), "%s", tr("now")); else if (hdiff == 0) - snprintf(s, sizeof(s), "%d %s%s %s", mdiff, DynamicMinute, mplu, when); + snprintf(s, sizeof(s), "%d %s%s %s", mdiff, tr("minute"), mplu, when); else if (mdiff == 0) - snprintf(s, sizeof(s), "%d %s%s %s", hdiff, DynamicHour, hplu, when); + snprintf(s, sizeof(s), "%d %s%s %s", hdiff, tr("hour"), hplu, when); else - snprintf(s, sizeof(s), "%d %s%s %s %d %s%s %s", hdiff, DynamicHour, hplu, - DynamicAnd, mdiff, DynamicMinute, mplu, when); + snprintf(s, sizeof(s), "%d %s%s %s %d %s%s %s", hdiff, tr("hour"), hplu, + tr("and"), mdiff, tr("minute"), mplu, when); SHIP_OUT(s); break; @@ -554,7 +554,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, if (altmode == '*') { snprintf(s, sizeof(s), "%d%c%02d%s", hh, TimeSep, min, pm); } else { - snprintf(s, sizeof(s), "%s %d%c%02d%s", DynamicAt, hh, TimeSep, min, pm); + snprintf(s, sizeof(s), "%s %d%c%02d%s", tr("at"), hh, TimeSep, min, pm); } SHIP_OUT(s); break; @@ -563,7 +563,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, if (altmode == '*') { snprintf(s, sizeof(s), "%02d%c%02d", h, TimeSep, min); } else { - snprintf(s, sizeof(s), "%s %02d%c%02d", DynamicAt, h, TimeSep, min); + snprintf(s, sizeof(s), "%s %02d%c%02d", tr("at"), h, TimeSep, min); } SHIP_OUT(s); break; @@ -604,7 +604,7 @@ int DoSubst(ParsePtr p, DynamicBuffer *dbuf, Trigger *t, TimeTrig *tt, int dse, break; case '!': - snprintf(s, sizeof(s), "%s", (tdiff >= 0 ? DynamicIs : DynamicWas)); + snprintf(s, sizeof(s), "%s", (tdiff >= 0 ? tr("is") : tr("was"))); SHIP_OUT(s); break; diff --git a/src/funcs.c b/src/funcs.c index cf51ed68..4339147b 100644 --- a/src/funcs.c +++ b/src/funcs.c @@ -1825,10 +1825,10 @@ static int FTrigger(func_info *info) FromDSE(date, &y, &m, &d); if (tim != NO_TIME) { - sprintf(buf, "%d %s %d AT %02d:%02d", d, EnglishMonthName[m], y, + sprintf(buf, "%d %s %d AT %02d:%02d", d, MonthName[m], y, tim/60, tim%60); } else { - sprintf(buf, "%d %s %d", d, EnglishMonthName[m], y); + sprintf(buf, "%d %s %d", d, MonthName[m], y); } return RetStrVal(buf, info); } diff --git a/src/globals.h b/src/globals.h index 3a19d0d8..7bc35355 100644 --- a/src/globals.h +++ b/src/globals.h @@ -178,31 +178,14 @@ EXTERN INIT( int SuppressImplicitRemWarnings, 0); extern int NumFullOmits, NumPartialOmits; /* List of months */ -EXTERN char *EnglishMonthName[] +EXTERN char *MonthName[] #ifdef MK_GLOBALS = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} #endif ; -#define MonthName EnglishMonthName - -EXTERN char *DynamicMonthName[] -#ifdef MK_GLOBALS -= {"January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December"} -#endif -; -EXTERN char *EnglishDayName[] -#ifdef MK_GLOBALS -= {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", - "Saturday", "Sunday"} -#endif -; - -#define DayName EnglishDayName - -EXTERN char *DynamicDayName [] +EXTERN char *DayName[] #ifdef MK_GLOBALS = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"} @@ -227,86 +210,17 @@ EXTERN int MonthIndex[2][12] #endif ; -EXTERN char *DynamicAgo -#ifdef MK_GLOBALS -= "ago" -#endif -; -EXTERN char *DynamicAm -#ifdef MK_GLOBALS -= "am" -#endif -; -EXTERN char *DynamicAnd -#ifdef MK_GLOBALS -= "and" -#endif -; -EXTERN char *DynamicAt -#ifdef MK_GLOBALS -= "at" -#endif -; -EXTERN char *DynamicFromnow -#ifdef MK_GLOBALS -= "from now" -#endif -; -EXTERN char *DynamicHour -#ifdef MK_GLOBALS -= "hour" -#endif -; EXTERN char *DynamicHplu #ifdef MK_GLOBALS = "s" #endif ; -EXTERN char *DynamicIs -#ifdef MK_GLOBALS -= "is" -#endif -; -EXTERN char *DynamicMinute -#ifdef MK_GLOBALS -= "minute" -#endif -; + EXTERN char *DynamicMplu #ifdef MK_GLOBALS = "s" #endif ; -EXTERN char *DynamicNow -#ifdef MK_GLOBALS -= "now" -#endif -; -EXTERN char *DynamicOn -#ifdef MK_GLOBALS -= "on" -#endif -; -EXTERN char *DynamicPm -#ifdef MK_GLOBALS -= "pm" -#endif -; -EXTERN char *DynamicToday -#ifdef MK_GLOBALS -= "today" -#endif -; -EXTERN char *DynamicTomorrow -#ifdef MK_GLOBALS -= "tomorrow" -#endif -; -EXTERN char *DynamicWas -#ifdef MK_GLOBALS -= "was" -#endif -; #define XSTR(x) #x #define STRSYSDIR(x) XSTR(x) diff --git a/src/init.c b/src/init.c index 0bb8861a..c7a37f90 100644 --- a/src/init.c +++ b/src/init.c @@ -997,7 +997,7 @@ static void InitializeVar(char const *str) } if (*varname == '$') { - r=SetSysVar(varname+1, &val, 1); + r=SetSysVar(varname+1, &val); DestroyValue(val); if (r) fprintf(ErrFp, GetErr(M_I_OPTION), GetErr(r)); return; diff --git a/src/main.c b/src/main.c index 90a806a8..56e5683d 100644 --- a/src/main.c +++ b/src/main.c @@ -1979,8 +1979,7 @@ get_day_name(int wkday) if (wkday < 0 || wkday > 6) { return "INVALID_WKDAY"; } - if (DynamicDayName[wkday]) return DynamicDayName[wkday]; - return DayName[wkday]; + return t(DayName[wkday]); } char const * @@ -1989,8 +1988,7 @@ get_month_name(int mon) if (mon < 0 || mon > 11) { return "INVALID_MON"; } - if (DynamicMonthName[mon]) return DynamicMonthName[mon]; - return MonthName[mon]; + return t(MonthName[mon]); } static int GetOnceDateFromFile(void) diff --git a/src/omit.c b/src/omit.c index b4af39de..e65ccd6f 100644 --- a/src/omit.c +++ b/src/omit.c @@ -544,7 +544,7 @@ DumpOmits(void) } else { for (i=0; i<7; i++) { if (WeekdayOmits & (1< VAR_NAME_LEN) { Wprint("Warning: Variable name `%.*s...' truncated to `%.*s'", @@ -845,47 +845,47 @@ int DoPreserve (Parser *p) static SysVar SysVarArr[] = { /* name mod type value min/mal max */ {"AddBlankLines", 1, INT_TYPE, &AddBlankLines, 0, 1 }, - {"Ago", 1, STR_TYPE, &DynamicAgo, 0, 0 }, - {"Am", 1, STR_TYPE, &DynamicAm, 0, 0 }, - {"And", 1, STR_TYPE, &DynamicAnd, 0, 0 }, - {"April", 1, STR_TYPE, &DynamicMonthName[3], 0, 0 }, - {"At", 1, STR_TYPE, &DynamicAt, 0, 0 }, - {"August", 1, STR_TYPE, &DynamicMonthName[7], 0, 0 }, + {"Ago", 1, TRANS_TYPE, "ago", 0, 0 }, + {"Am", 1, TRANS_TYPE, "am", 0, 0 }, + {"And", 1, TRANS_TYPE, "and", 0, 0 }, + {"April", 1, TRANS_TYPE, "April", 0, 0 }, + {"At", 1, TRANS_TYPE, "at", 0, 0 }, + {"August", 1, TRANS_TYPE, "August", 0, 0 }, {"CalcUTC", 1, INT_TYPE, &CalculateUTC, 0, 1 }, {"CalMode", 0, INT_TYPE, &DoCalendar, 0, 0 }, {"Daemon", 0, INT_TYPE, &Daemon, 0, 0 }, {"DateSep", 1, SPECIAL_TYPE, date_sep_func, 0, 0 }, {"DateTimeSep", 1, SPECIAL_TYPE, datetime_sep_func, 0, 0 }, - {"December", 1, STR_TYPE, &DynamicMonthName[11],0, 0 }, + {"December", 1, TRANS_TYPE, "December", 0, 0 }, {"DedupeReminders",1, INT_TYPE, &DedupeReminders, 0, 1 }, {"DefaultColor", 1, SPECIAL_TYPE, default_color_func, 0, 0 }, {"DefaultDelta", 1, INT_TYPE, &DefaultDelta, 0, 10000 }, {"DefaultPrio", 1, INT_TYPE, &DefaultPrio, 0, 9999 }, {"DefaultTDelta", 1, INT_TYPE, &DefaultTDelta, 0, 1440 }, - {"DeltaOverride", 0, INT_TYPE, &DeltaOverride, 0, 0 }, + {"DeltaOverride", 0, INT_TYPE, &DeltaOverride, 0, 0 }, {"DontFork", 0, INT_TYPE, &DontFork, 0, 0 }, {"DontQueue", 0, INT_TYPE, &DontQueue, 0, 0 }, {"DontTrigAts", 0, INT_TYPE, &DontIssueAts, 0, 0 }, {"EndSent", 1, STR_TYPE, &EndSent, 0, 0 }, {"EndSentIg", 1, STR_TYPE, &EndSentIg, 0, 0 }, {"ExpressionTimeLimit", 1, SPECIAL_TYPE, expr_time_limit_func, 0, 0 }, - {"February", 1, STR_TYPE, &DynamicMonthName[1], 0, 0 }, + {"February", 1, TRANS_TYPE, "February", 0, 0 }, {"FirstIndent", 1, INT_TYPE, &FirstIndent, 0, 132 }, {"FoldYear", 1, INT_TYPE, &FoldYear, 0, 1 }, {"FormWidth", 1, INT_TYPE, &FormWidth, 20, 500 }, - {"Friday", 1, STR_TYPE, &DynamicDayName[4], 0, 0 }, - {"Fromnow", 1, STR_TYPE, &DynamicFromnow, 0, 0 }, - {"Hour", 1, STR_TYPE, &DynamicHour, 0, 0 }, + {"Friday", 1, TRANS_TYPE, "Friday", 0, 0 }, + {"Fromnow", 1, TRANS_TYPE, "from now", 0, 0 }, + {"Hour", 1, TRANS_TYPE, "hour", 0, 0 }, {"Hplu", 1, STR_TYPE, &DynamicHplu, 0, 0 }, {"HushMode", 0, INT_TYPE, &Hush, 0, 0 }, {"IgnoreOnce", 0, INT_TYPE, &IgnoreOnce, 0, 0 }, {"InfDelta", 0, INT_TYPE, &InfiniteDelta, 0, 0 }, {"IntMax", 0, INT_TYPE, &IntMax, 0, 0 }, {"IntMin", 0, INT_TYPE, &IntMin, 0, 0 }, - {"Is", 1, STR_TYPE, &DynamicIs, 0, 0 }, - {"January", 1, STR_TYPE, &DynamicMonthName[0], 0, 0 }, - {"July", 1, STR_TYPE, &DynamicMonthName[6], 0, 0 }, - {"June", 1, STR_TYPE, &DynamicMonthName[5], 0, 0 }, + {"Is", 1, TRANS_TYPE, "is", 0, 0 }, + {"January", 1, TRANS_TYPE, "January", 0, 0 }, + {"July", 1, TRANS_TYPE, "July", 0, 0 }, + {"June", 1, TRANS_TYPE, "June", 0, 0 }, {"LatDeg", 1, SPECIAL_TYPE, latdeg_func, 0, 0 }, {"Latitude", 1, SPECIAL_TYPE, latitude_func, 0, 0 }, {"LatMin", 1, SPECIAL_TYPE, latmin_func, 0, 0 }, @@ -895,53 +895,53 @@ static SysVar SysVarArr[] = { {"Longitude", 1, SPECIAL_TYPE, longitude_func, 0, 0 }, {"LongMin", 1, SPECIAL_TYPE, longmin_func, 0, 0 }, {"LongSec", 1, SPECIAL_TYPE, longsec_func, 0, 0 }, - {"March", 1, STR_TYPE, &DynamicMonthName[2], 0, 0 }, + {"March", 1, TRANS_TYPE, "March", 0, 0 }, {"MaxFullOmits", 0, CONST_INT_TYPE, NULL, MAX_FULL_OMITS, 0}, {"MaxLateMinutes", 1, INT_TYPE, &MaxLateMinutes, 0, 1440 }, {"MaxPartialOmits",0, CONST_INT_TYPE, NULL, MAX_PARTIAL_OMITS, 0}, {"MaxSatIter", 1, INT_TYPE, &MaxSatIter, 10, ANY }, {"MaxStringLen", 1, INT_TYPE, &MaxStringLen, -1, ANY }, - {"May", 1, STR_TYPE, &DynamicMonthName[4], 0, 0 }, + {"May", 1, TRANS_TYPE, "May", 0, 0 }, {"MinsFromUTC", 1, INT_TYPE, &MinsFromUTC, -780, 780 }, - {"Minute", 1, STR_TYPE, &DynamicMinute, 0, 0 }, - {"Monday", 1, STR_TYPE, &DynamicDayName[0], 0, 0 }, + {"Minute", 1, TRANS_TYPE, "minute", 0, 0 }, + {"Monday", 1, TRANS_TYPE, "Monday", 0, 0 }, {"Mplu", 1, STR_TYPE, &DynamicMplu, 0, 0 }, {"NextMode", 0, INT_TYPE, &NextMode, 0, 0 }, - {"November", 1, STR_TYPE, &DynamicMonthName[10],0, 0 }, - {"Now", 1, STR_TYPE, &DynamicNow, 0, 0 }, + {"November", 1, TRANS_TYPE, "November", 0, 0 }, + {"Now", 1, TRANS_TYPE, "now", 0, 0 }, {"NumFullOmits", 0, INT_TYPE, &NumFullOmits, 0, 0 }, {"NumPartialOmits",0, INT_TYPE, &NumPartialOmits, 0, 0 }, {"NumQueued", 0, INT_TYPE, &NumQueued, 0, 0 }, {"NumTrig", 0, INT_TYPE, &NumTriggered, 0, 0 }, - {"October", 1, STR_TYPE, &DynamicMonthName[9], 0, 0 }, - {"On", 1, STR_TYPE, &DynamicOn, 0, 0 }, + {"October", 1, TRANS_TYPE, "October", 0, 0 }, + {"On", 1, TRANS_TYPE, "on", 0, 0 }, {"OnceFile", 1, SPECIAL_TYPE, oncefile_func, 0, 0 }, {"ParseUntriggered", 1, INT_TYPE, &ParseUntriggered, 0, 1 }, - {"Pm", 1, STR_TYPE, &DynamicPm, 0, 0 }, + {"Pm", 1, TRANS_TYPE, "pm", 0, 0 }, {"PrefixLineNo", 0, INT_TYPE, &DoPrefixLineNo, 0, 0 }, {"PSCal", 0, INT_TYPE, &PsCal, 0, 0 }, {"RunOff", 0, INT_TYPE, &RunDisabled, 0, 0 }, - {"Saturday", 1, STR_TYPE, &DynamicDayName[5], 0, 0 }, - {"September", 1, STR_TYPE, &DynamicMonthName[8], 0, 0 }, + {"Saturday", 1, TRANS_TYPE, "Saturday", 0, 0 }, + {"September", 1, TRANS_TYPE, "September", 0, 0 }, {"SimpleCal", 0, INT_TYPE, &DoSimpleCalendar, 0, 0 }, {"SortByDate", 0, INT_TYPE, &SortByDate, 0, 0 }, {"SortByPrio", 0, INT_TYPE, &SortByPrio, 0, 0 }, {"SortByTime", 0, INT_TYPE, &SortByTime, 0, 0 }, {"SubsIndent", 1, INT_TYPE, &SubsIndent, 0, 132 }, - {"Sunday", 1, STR_TYPE, &DynamicDayName[6], 0, 0 }, + {"Sunday", 1, TRANS_TYPE, "Sunday", 0, 0 }, {"SuppressImplicitWarnings", 1, INT_TYPE, &SuppressImplicitRemWarnings, 0, 1}, {"SuppressLRM", 1, INT_TYPE, &SuppressLRM, 0, 1 }, {"SysInclude", 0, STR_TYPE, &SysDir, 0, 0 }, {"T", 0, SPECIAL_TYPE, trig_date_func, 0, 0 }, {"Td", 0, SPECIAL_TYPE, trig_day_func, 0, 0 }, {"TerminalBackground", 0, SPECIAL_TYPE, terminal_bg_func, 0, 0 }, - {"Thursday", 1, STR_TYPE, &DynamicDayName[3], 0, 0 }, + {"Thursday", 1, TRANS_TYPE, "Thursday", 0, 0 }, {"TimeSep", 1, SPECIAL_TYPE, time_sep_func, 0, 0 }, {"Tm", 0, SPECIAL_TYPE, trig_mon_func, 0, 0 }, - {"Today", 1, STR_TYPE, &DynamicToday, 0, 0 }, - {"Tomorrow", 1, STR_TYPE, &DynamicTomorrow, 0, 0 }, + {"Today", 1, TRANS_TYPE, "today", 0, 0 }, + {"Tomorrow", 1, TRANS_TYPE, "tomorrow", 0, 0 }, {"Tt", 0, SPECIAL_TYPE, trig_time_func, 0, 0 }, - {"Tuesday", 1, STR_TYPE, &DynamicDayName[1], 0, 0 }, + {"Tuesday", 1, TRANS_TYPE, "Tuesday", 0, 0 }, {"Tw", 0, SPECIAL_TYPE, trig_wday_func, 0, 0 }, {"Ty", 0, SPECIAL_TYPE, trig_year_func, 0, 0 }, {"U", 0, SPECIAL_TYPE, today_date_func, 0, 0 }, @@ -949,107 +949,37 @@ static SysVar SysVarArr[] = { {"Um", 0, SPECIAL_TYPE, today_mon_func, 0, 0 }, {"UntimedFirst", 0, INT_TYPE, &UntimedBeforeTimed, 0, 0 }, {"Use256Colors", 0, INT_TYPE, &Use256Colors, 0, 0 }, - {"UseBGVTColors", 0, INT_TYPE, &UseBGVTColors, 0, 0 }, + {"UseBGVTColors", 0, INT_TYPE, &UseBGVTColors, 0, 0 }, {"UseTrueColors", 0, INT_TYPE, &UseTrueColors, 0, 0 }, {"UseVTColors", 0, INT_TYPE, &UseVTColors, 0, 0 }, {"Uw", 0, SPECIAL_TYPE, today_wday_func, 0, 0 }, {"Uy", 0, SPECIAL_TYPE, today_year_func, 0, 0 }, - {"Was", 1, STR_TYPE, &DynamicWas, 0, 0 }, - {"Wednesday", 1, STR_TYPE, &DynamicDayName[2], 0, 0 } -}; - -typedef struct translatable_var { - char **var; - char const *word; - char const *sysvar_name; -} TranslatableVar; - -static TranslatableVar translatables[] = { - { &DynamicAgo, "ago", "Ago" }, - { &DynamicAm, "am", "Am" }, - { &DynamicAnd, "and", "And" }, - { &DynamicAt, "at", "At" }, - { &DynamicFromnow, "from now", "Fromnow" }, - { &DynamicHour, "hour", "Hour" }, - { &DynamicIs, "is", "Is" }, - { &DynamicMinute, "minute", "Minute" }, - { &DynamicNow, "now", "Now" }, - { &DynamicOn, "on", "On" }, - { &DynamicPm, "pm", "Pm" }, - { &DynamicToday, "today", "Today" }, - { &DynamicTomorrow, "tomorrow", "Tomorrow" }, - { &DynamicWas, "was", "Was" }, - { &DynamicMonthName[0], "January", "January" }, - { &DynamicMonthName[1], "February", "February" }, - { &DynamicMonthName[2], "March", "March" }, - { &DynamicMonthName[3], "April", "April" }, - { &DynamicMonthName[4], "May", "May" }, - { &DynamicMonthName[5], "June", "June" }, - { &DynamicMonthName[6], "July", "July" }, - { &DynamicMonthName[7], "August", "August" }, - { &DynamicMonthName[8], "September", "September" }, - { &DynamicMonthName[9], "October", "October" }, - { &DynamicMonthName[10], "November", "November" }, - { &DynamicMonthName[11], "December", "December" }, - { &DynamicDayName[0], "Monday", "Monday" }, - { &DynamicDayName[1], "Tuesday", "Tuesday" }, - { &DynamicDayName[2], "Wednesday", "Wednesday" }, - { &DynamicDayName[3], "Thursday", "Thursday" }, - { &DynamicDayName[4], "Friday", "Friday" }, - { &DynamicDayName[5], "Saturday", "Saturday" }, - { &DynamicDayName[6], "Sunday", "Sunday" }, + {"Was", 1, TRANS_TYPE, "was", 0, 0 }, + {"Wednesday", 1, TRANS_TYPE, "Wednesday", 0, 0 } }; #define NUMSYSVARS ( sizeof(SysVarArr) / sizeof(SysVar) ) static void DumpSysVar (char const *name, const SysVar *v); -static void HandleTranslatableVariable(char **var) +static int SetTranslatableVariable(SysVar *v, Value *value) { - size_t i; - for (i=0; ivalue, value->v.str); } -void RemoveSysvarTranslation(char const *orig) { - PropagateTranslationToSysvar(orig, orig); -} - -void PropagateTranslationToSysvar(char const *orig, char const *translated) +static int GetTranslatableVariable(SysVar *v, Value *value) { - size_t i; - Value val; - for (i=0; ivalue); + if (translated) { + value->v.str = StrDup(translated); + } else { + value->v.str = StrDup(""); } + if (!value->v.str) return E_NO_MEM; + value->type = STR_TYPE; + return OK; } -void ClearSysvarTranslations(void) -{ - Value val; - size_t i; - for (i=0; imodifiable) { @@ -1057,6 +987,13 @@ static int SetSysVarHelper(SysVar *v, Value *value, int propagate_translation) return E_CANT_MODIFY; } + if (v->type == TRANS_TYPE) { + if (value->type != STR_TYPE) return E_BAD_TYPE; + r = SetTranslatableVariable(v, value); + DestroyValue(*value); + return r; + } + if (v->type != SPECIAL_TYPE && v->type != value->type) return E_BAD_TYPE; if (v->type == SPECIAL_TYPE) { @@ -1078,9 +1015,6 @@ static int SetSysVarHelper(SysVar *v, Value *value, int propagate_translation) v->been_malloced = 1; *((char **) v->value) = value->v.str; value->type = ERR_TYPE; /* So that it's not accidentally freed */ - if (propagate_translation) { - HandleTranslatableVariable((char **) v->value); - } } else { if (v->max != ANY && value->v.val > v->max) return E_2HIGH; if (v->min != ANY && value->v.val < v->min) return E_2LOW; @@ -1096,11 +1030,11 @@ static int SetSysVarHelper(SysVar *v, Value *value, int propagate_translation) /* Set a system variable to the indicated value. */ /* */ /***************************************************************/ -int SetSysVar(char const *name, Value *value, int propagate_translation) +int SetSysVar(char const *name, Value *value) { SysVar *v = FindSysVar(name); if (!v) return E_NOSUCH_VAR; - return SetSysVarHelper(v, value, propagate_translation); + return SetSysVarHelper(v, value); } /***************************************************************/ @@ -1116,6 +1050,10 @@ int GetSysVar(char const *name, Value *val) val->type = ERR_TYPE; if (!v) return E_NOSUCH_VAR; + if (v->type == TRANS_TYPE) { + return GetTranslatableVariable(v, val); + } + if (v->type == CONST_INT_TYPE) { val->v.val = v->constval; val->type = INT_TYPE; @@ -1222,6 +1160,11 @@ static void DumpSysVar(char const *name, const SysVar *v) PrintValue(&vtmp, ErrFp); putc('\n', ErrFp); DestroyValue(vtmp); + } else if (v->type == TRANS_TYPE) { + GetSysVar(v->name, &vtmp); + PrintValue(&vtmp, ErrFp); + putc('\n', ErrFp); + DestroyValue(vtmp); } else if (v->type == STR_TYPE) { vtmp.type = STR_TYPE; vtmp.v.str = * ((char **)v->value);