Make "SPECIAL MSG" the same as "MSG" and same for MSF, RUN, PS and PSFILE

This lets us use variables to set the type of a REM command:

     SET t "MSG"
     REM SPECIAL [t] A message
     SET t "CAL"
     REM SPECIAL [t] A calendar message
     SET t "RUN"
     REM SPECIAL [t] /bin/some_cmd
This commit is contained in:
Dianne Skoll
2023-03-03 11:53:45 -05:00
parent 5134b47d47
commit f9656edc51
3 changed files with 34 additions and 2 deletions
+4
View File
@@ -1830,6 +1830,10 @@ static int DoCalRem(ParsePtr p, int col)
DBufFree(&buf); DBufFree(&buf);
} }
trig.typ = tok.val; trig.typ = tok.val;
/* Convert some SPECIALs back to plain types */
FixSpecialType(&trig);
if (trig.typ == MSG_TYPE || if (trig.typ == MSG_TYPE ||
trig.typ == CAL_TYPE || trig.typ == CAL_TYPE ||
trig.typ == MSF_TYPE) { trig.typ == MSF_TYPE) {
+29 -2
View File
@@ -123,8 +123,12 @@ int DoRem(ParsePtr p)
} }
StrnCpy(trig.passthru, DBufValue(&buf), PASSTHRU_LEN); StrnCpy(trig.passthru, DBufValue(&buf), PASSTHRU_LEN);
DBufFree(&buf); DBufFree(&buf);
} }
trig.typ = tok.val; trig.typ = tok.val;
/* Convert some SPECIALs back to plain types */
FixSpecialType(&trig);
dse = LastTriggerDate; dse = LastTriggerDate;
if (!LastTrigValid || PurgeMode) { if (!LastTrigValid || PurgeMode) {
FreeTrig(&trig); FreeTrig(&trig);
@@ -370,6 +374,7 @@ int ParseRem(ParsePtr s, Trigger *trig, TimeTrig *tim, int save_in_globals)
} }
StrnCpy(trig->passthru, DBufValue(&buf), PASSTHRU_LEN); StrnCpy(trig->passthru, DBufValue(&buf), PASSTHRU_LEN);
} }
FixSpecialType(trig);
parsing = 0; parsing = 0;
break; break;
@@ -1466,3 +1471,25 @@ static int ShouldTriggerBasedOnWarn(Trigger *t, int dse, int *err)
} }
} }
} }
void FixSpecialType(Trigger *t)
{
if (t->typ != PASSTHRU_TYPE) {
return;
}
/* Convert SPECIAL MSG / MSF / RUN / CAL to just plain MSG / MSF / etc */
if (!StrCmpi(t->passthru, "MSG")) {
t->typ = MSG_TYPE;
} else if (!StrCmpi(t->passthru, "MSF")) {
t->typ = MSF_TYPE;
} else if (!StrCmpi(t->passthru, "RUN")) {
t->typ = RUN_TYPE;
} else if (!StrCmpi(t->passthru, "CAL")) {
t->typ = CAL_TYPE;
} else if (!StrCmpi(t->passthru, "PS")) {
t->typ = PS_TYPE;
} else if (!StrCmpi(t->passthru, "PSFILE")) {
t->typ = PSF_TYPE;
}
}
+1
View File
@@ -177,6 +177,7 @@ int push_call(char const *filename, char const *func, int lineno);
void clear_callstack(void); void clear_callstack(void);
int print_callstack(FILE *fp); int print_callstack(FILE *fp);
void pop_call(void); void pop_call(void);
void FixSpecialType(Trigger *trig);
#ifdef REM_USE_WCHAR #ifdef REM_USE_WCHAR
#define _XOPEN_SOURCE 600 #define _XOPEN_SOURCE 600
#include <wctype.h> #include <wctype.h>