mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-16 06:18:47 +02:00
Get rid of the DyamicFoo hacks and make most translatable variables live in the translation table.
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -544,7 +544,7 @@ DumpOmits(void)
|
||||
} else {
|
||||
for (i=0; i<7; i++) {
|
||||
if (WeekdayOmits & (1<<i)) {
|
||||
printf("\t%s\n", EnglishDayName[i]);
|
||||
printf("\t%s\n", DayName[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ int DoBanner (ParsePtr p);
|
||||
int DoRun (ParsePtr p);
|
||||
int DoExpr (ParsePtr p);
|
||||
int DoTranslate (ParsePtr p);
|
||||
int InsertTranslation(char const *orig, char const *translated, int propagate_to_sysvar);
|
||||
int InsertTranslation(char const *orig, char const *translated);
|
||||
void DumpTranslationTable(FILE *fp, int json);
|
||||
int DoErrMsg (ParsePtr p);
|
||||
int ClearGlobalOmits (void);
|
||||
@@ -182,7 +182,7 @@ int GetValidHebDate (int yin, int min, int din, int adarbehave, int *mout, int *
|
||||
int GetNextHebrewDate (int dsestart, int hm, int hd, int yahr, int adarbehave, int *ans);
|
||||
int ComputeJahr (int y, int m, int d, int *ans);
|
||||
int GetSysVar (char const *name, Value *val);
|
||||
int SetSysVar (char const *name, Value *val, int propagate_translation);
|
||||
int SetSysVar (char const *name, Value *val);
|
||||
void DumpSysVarByName (char const *name);
|
||||
int CalcMinsFromUTC (int dse, int tim, int *mins, int *isdst);
|
||||
void FillParagraph (char const *s, DynamicBuffer *output);
|
||||
@@ -267,12 +267,10 @@ void InitDedupeTable(void);
|
||||
|
||||
void InitVars(void);
|
||||
void InitUserFunctions(void);
|
||||
void ClearSysvarTranslations(void);
|
||||
void PropagateTranslationToSysvar(char const *orig, char const *translated);
|
||||
void InitTranslationTable(void);
|
||||
void RemoveSysvarTranslation(char const *orig);
|
||||
char const *GetTranslatedString(char const *orig);
|
||||
int GetTranslatedStringTryingVariants(char const *orig, DynamicBuffer *out);
|
||||
char const *GetErr(int r);
|
||||
char const *t(char const *s);
|
||||
char const *tr(char const *s);
|
||||
void print_escaped_string(FILE *fp, char const *s);
|
||||
|
||||
22
src/trans.c
22
src/trans.c
@@ -100,7 +100,6 @@ ClearTranslationTable(void)
|
||||
XlateItem *item;
|
||||
XlateItem *next;
|
||||
|
||||
ClearSysvarTranslations();
|
||||
item = hash_table_next(&TranslationTable, NULL);
|
||||
while(item) {
|
||||
next = hash_table_next(&TranslationTable, item);
|
||||
@@ -206,7 +205,7 @@ InitTranslationTable(void)
|
||||
fprintf(stderr, "Unable to initialize translation hash table: Out of memory. Exiting.\n");
|
||||
exit(1);
|
||||
}
|
||||
InsertTranslation("LANGID", "en", 1);
|
||||
InsertTranslation("LANGID", "en");
|
||||
}
|
||||
|
||||
static XlateItem *
|
||||
@@ -220,7 +219,7 @@ FindTranslation(char const *orig)
|
||||
}
|
||||
|
||||
int
|
||||
InsertTranslation(char const *orig, char const *translated, int propagate_to_sysvar)
|
||||
InsertTranslation(char const *orig, char const *translated)
|
||||
{
|
||||
XlateItem *item = FindTranslation(orig);
|
||||
if (item) {
|
||||
@@ -233,9 +232,6 @@ InsertTranslation(char const *orig, char const *translated, int propagate_to_sys
|
||||
|
||||
/* TRANSLATE "foo" "foo" means to remove the translation */
|
||||
if (strcmp(orig, "LANGID") && (!strcmp(orig, translated))) {
|
||||
if (propagate_to_sysvar) {
|
||||
RemoveSysvarTranslation(orig);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
item = AllocateXlateItem(orig, translated);
|
||||
@@ -243,9 +239,6 @@ InsertTranslation(char const *orig, char const *translated, int propagate_to_sys
|
||||
return E_NO_MEM;
|
||||
}
|
||||
hash_table_insert(&TranslationTable, item);
|
||||
if (propagate_to_sysvar) {
|
||||
PropagateTranslationToSysvar(orig, translated);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
@@ -329,6 +322,12 @@ char const *t(char const *orig)
|
||||
return orig;
|
||||
}
|
||||
|
||||
/* If another "t" is in scope... */
|
||||
char const *tr(char const *orig)
|
||||
{
|
||||
return t(orig);
|
||||
}
|
||||
|
||||
int
|
||||
DoTranslate(ParsePtr p)
|
||||
{
|
||||
@@ -371,10 +370,9 @@ DoTranslate(ParsePtr p)
|
||||
XlateItem *item = FindTranslation(DBufValue(&orig));
|
||||
if (item) {
|
||||
RemoveTranslation(item);
|
||||
RemoveSysvarTranslation(DBufValue(&orig));
|
||||
}
|
||||
if (!strcmp(DBufValue(&orig), "LANGID")) {
|
||||
InsertTranslation("LANGID", "en", 1);
|
||||
InsertTranslation("LANGID", "en");
|
||||
}
|
||||
r = OK;
|
||||
}
|
||||
@@ -387,7 +385,7 @@ DoTranslate(ParsePtr p)
|
||||
DBufFree(&translated);
|
||||
return r;
|
||||
}
|
||||
r = InsertTranslation(DBufValue(&orig), DBufValue(&translated), 1);
|
||||
r = InsertTranslation(DBufValue(&orig), DBufValue(&translated));
|
||||
DBufFree(&orig);
|
||||
DBufFree(&translated);
|
||||
return r;
|
||||
|
||||
@@ -28,6 +28,7 @@ typedef struct udf_struct UserFunc;
|
||||
#define STR_TYPE 0x8
|
||||
#define SPECIAL_TYPE 0x10 /* Only for system variables */
|
||||
#define CONST_INT_TYPE 0x20 /* Only for system variables */
|
||||
#define TRANS_TYPE 0x40 /* Only for system variables */
|
||||
|
||||
#define BEG_OF_EXPR '['
|
||||
#define END_OF_EXPR ']'
|
||||
|
||||
191
src/var.c
191
src/var.c
@@ -36,7 +36,7 @@ static int IntMin = INT_MIN;
|
||||
static int IntMax = INT_MAX;
|
||||
|
||||
static hash_table VHashTbl;
|
||||
static int SetSysVarHelper(SysVar *v, Value *value, int propagate_translation);
|
||||
static int SetSysVarHelper(SysVar *v, Value *value);
|
||||
|
||||
static unsigned int VarHashFunc(void *x)
|
||||
{
|
||||
@@ -625,7 +625,7 @@ int DoSet (Parser *p)
|
||||
return E_EXPECTING_EOL;
|
||||
}
|
||||
DBufFree(&buf2);
|
||||
if (*DBufValue(&buf) == '$') r = SetSysVar(DBufValue(&buf)+1, &v, 1);
|
||||
if (*DBufValue(&buf) == '$') r = SetSysVar(DBufValue(&buf)+1, &v);
|
||||
else r = SetVar(DBufValue(&buf), &v);
|
||||
if (buf.len > 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; i<sizeof(translatables) / sizeof(translatables[0]); i++) {
|
||||
if (var == translatables[i].var) {
|
||||
InsertTranslation(translatables[i].word, *(translatables[i].var), 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
return InsertTranslation((char const *) v->value, 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; i<sizeof(translatables) / sizeof(translatables[0]); i++) {
|
||||
if (!strcmp(translatables[i].word, orig)) {
|
||||
val.type = STR_TYPE;
|
||||
val.v.str = StrDup(translated);
|
||||
if (val.v.str) {
|
||||
(void) SetSysVar(translatables[i].sysvar_name, &val, 0);
|
||||
DestroyValue(val);
|
||||
}
|
||||
return;
|
||||
}
|
||||
char const *translated = t((char const *) v->value);
|
||||
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; i<sizeof(translatables) / sizeof(translatables[0]); i++) {
|
||||
val.type = STR_TYPE;
|
||||
val.v.str = StrDup(translatables[i].word);
|
||||
if (val.v.str) {
|
||||
(void) SetSysVar(translatables[i].sysvar_name, &val, 0);
|
||||
}
|
||||
DestroyValue(val);
|
||||
}
|
||||
}
|
||||
|
||||
static int SetSysVarHelper(SysVar *v, Value *value, int propagate_translation)
|
||||
static int SetSysVarHelper(SysVar *v, Value *value)
|
||||
{
|
||||
int r;
|
||||
if (!v->modifiable) {
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user