1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
|
/***************************************************************/
/* */
/* TYPES.H */
/* */
/* Type definitions all dumped here. */
/* */
/* This file is part of REMIND. */
/* Copyright (C) 1992-1998 by David F. Skoll */
/* Copyright (C) 1999-2000 by Roaring Penguin Software Inc. */
/* */
/***************************************************************/
#include <limits.h>
#include "dynbuf.h"
/* Values */
typedef struct {
char type;
union {
char *str;
int val;
} v;
} Value;
/* Define the type of operators */
typedef struct {
char const *name;
char prec;
char type;
int (*func)(void);
} Operator;
/* Define the structure of a variable */
typedef struct var {
struct var *next;
char name[VAR_NAME_LEN+1];
char preserve;
Value v;
} Var;
/* A trigger */
typedef struct {
int wd;
int d;
int m;
int y;
int back;
int delta;
int rep;
int localomit;
int skip;
int until;
int typ;
int once;
int scanfrom;
int priority;
char sched[VAR_NAME_LEN+1]; /* Scheduling function */
char warn[VAR_NAME_LEN+1]; /* Warning function */
char tag[TAG_LEN+1];
char passthru[PASSTHRU_LEN+1];
} Trigger;
/* A time trigger */
typedef struct {
int ttime;
int nexttime;
int delta;
int rep;
int duration;
} TimeTrig;
/* The parse pointer */
typedef struct {
char isnested; /* Is it a nested expression? */
char allownested;
char const *text; /* Start of text */
char const *pos; /* Current position */
char const *etext; /* Substituted text */
char const *epos; /* Position in substituted text */
DynamicBuffer pushedToken; /* Pushed-back token */
char const *tokenPushed; /* NULL if no pushed-back token */
char expr_happened; /* Did we encounter an [expression] ? */
} Parser;
typedef Parser *ParsePtr; /* Pointer to parser structure */
/* Some useful manifest constants */
#define NO_BACK 0
#define NO_DELTA 0
#define NO_REP 0
#define NO_WD 0
#define NO_DAY -1
#define NO_MON -1
#define NO_YR -1
#define NO_UNTIL -1
#define NO_ONCE 0
#define ONCE_ONCE 1
#define NO_DATE -1
#define NO_SKIP 0
#define SKIP_SKIP 1
#define BEFORE_SKIP 2
#define AFTER_SKIP 3
#define NO_TIME INT_MAX
#define NO_PRIORITY 5000 /* Default priority is midway between 0 and 9999 */
#define NO_TYPE 0
#define MSG_TYPE 1
#define RUN_TYPE 2
#define CAL_TYPE 3
#define SAT_TYPE 4
#define PS_TYPE 5
#define PSF_TYPE 6
#define MSF_TYPE 7
#define PASSTHRU_TYPE 8
/* DEFINES for debugging flags */
#define DB_PRTLINE 1
#define DB_PRTEXPR 2
#define DB_PRTTRIG 4
#define DB_DUMP_VARS 8
#define DB_ECHO_LINE 16
#define DB_TRACE_FILES 32
/* Enumeration of the tokens */
enum TokTypes
{ T_Illegal,
/* Commands first */
T_Rem, T_Push, T_Pop, T_Preserve, T_Include, T_If, T_Else, T_EndIf,
T_IfTrig, T_ErrMsg,
T_Set, T_UnSet, T_Fset, T_Omit, T_Banner, T_Exit,
T_WkDay,
T_Month, T_Time,
T_Skip, T_At, T_RemType, T_Until, T_Year, T_Day, T_Rep, T_Delta, T_Back,
T_Once,
T_Empty,
T_Comment,
T_Number,
T_Clr,
T_Debug,
T_Dumpvars,
T_Scanfrom,
T_Flush,
T_Priority,
T_Sched,
T_Warn,
T_Tag,
T_Duration,
T_LongTime
};
/* The structure of a token */
typedef struct {
char *name;
char MinLen;
enum TokTypes type;
int val;
} Token;
/* Flags for the state of the "if" stack */
#define IF_TRUE 0
#define IF_FALSE 1
#define BEFORE_ELSE 0
#define AFTER_ELSE 2
#define IF_MASK 3
#define IF_TRUE_MASK 1
#define IF_ELSE_MASK 2
/* Flags for the DoSubst function */
#define NORMAL_MODE 0
#define CAL_MODE 1
#define ADVANCE_MODE 2
#define QUOTE_MARKER 1 /* Unlikely character to appear in reminder */
/* Flags for disabling run */
#define RUN_CMDLINE 1
#define RUN_SCRIPT 2
#define RUN_NOTOWNER 4
/* Flags for the SimpleCalendar format */
#define SC_AMPM 0 /* Time shown as 3:00am, etc. */
#define SC_MIL 1 /* 24-hour time format */
#define SC_NOTIME 2 /* Do not display time in SC format. */
/* Flags for sorting */
#define SORT_NONE 0
#define SORT_ASCEND 1
#define SORT_DESCEND 2
/* Flags for FROM / SCANFROM */
#define SCANFROM_TYPE 0
#define FROM_TYPE 1
|