drop extend-if-key-in-array-syntax.patch add yacc debug
[nedit-bw.git] / pass-context-to-ops.patch
blob5da00f2e5128ada38019ca3f94ac16d6a7ed9c4d
1 ---
3 source/interpret.c | 295 +++++-------
4 source/interpret.h | 22
5 source/macro.c | 1248 +++++++++++++++++++++++++++++++----------------------
6 source/macro.h | 2
7 4 files changed, 898 insertions(+), 669 deletions(-)
9 diff --quilt old/source/interpret.c new/source/interpret.c
10 --- old/source/interpret.c
11 +++ new/source/interpret.c
12 @@ -81,29 +81,29 @@ static const char CVSID[] = "$Id: interp
13 enum opStatusCodes {STAT_OK=2, STAT_DONE, STAT_ERROR, STAT_PREEMPT};
15 static int addLoopAddr(Inst *addr, char **msg);
16 -static void saveContext(RestartData *context);
17 -static void restoreContext(RestartData *context);
19 /* the function prototype of a operand instruction */
20 -#define OP_FUNCTION(op) static int op(void)
21 +#define OP_FUNCTION(op) static int op(RestartData *context)
23 #define OP(name, fn) OP_FUNCTION(fn);
24 #include "ops.h"
25 #undef OP
26 -static int returnValOrNone(int valOnStack);
27 -static int branchIf(Boolean trueOrFalse);
28 -static int namedArg1orN(Boolean isFirst);
30 -static int callSubroutineFromSymbol(Symbol *sym, int nArgs);
31 -static int concatenateNwithSep(int nVals, const char *sep, char **result,
32 - int leaveParams);
33 -static int makeArrayKeyFromArgs(int nArgs, char **keyString, int leaveParams);
34 +static int returnValOrNone(RestartData *context, int valOnStack);
35 +static int branchIf(RestartData *context, Boolean trueOrFalse);
36 +static int namedArg1orN(RestartData *context, Boolean isFirst);
38 +static int callSubroutineFromSymbol(RestartData *context, Symbol *sym,
39 + int nArgs);
40 +static int concatenateNwithSep(RestartData *context, int nVals, const char *sep,
41 + char **result, int leaveParams);
42 +static int makeArrayKeyFromArgs(RestartData *context, int nArgs,
43 + char **keyString, int leaveParams);
44 static void freeSymbolList(Symbol *symList);
45 static void addToGlobalSymTab(Symbol *sym);
46 static unsigned int hashNameWith(unsigned int hash, const char *name);
47 static unsigned int hashName(const char *name);
48 -static int errCheck(const char *s);
49 -static int execError(const char *s1, const char *s2);
50 +static int errCheck(RestartData *context, const char *s);
51 +static int execError(RestartData *context, const char *s1, const char *s2);
52 static rbTreeNode *arrayEmptyAllocator(void);
53 static rbTreeNode *arrayAllocateNode(rbTreeNode *src);
54 static int arrayEntryCopyToNode(rbTreeNode *dst, rbTreeNode *src);
55 @@ -136,9 +136,9 @@ static void disasmInternal(Inst *inst, i
56 #endif /* #ifndef DEBUG_ASSEMBLY */
58 #ifdef DEBUG_STACK /* for run-time instruction and stack trace */
59 -static void stackdump(int n, int extra);
60 -static void stackdumpInternal(int n, int extra);
61 -#define STACKDUMP(n, x) stackdump(n, (x) + 10)
62 +static void stackdump(RestartData *context, int n, int extra);
63 +static void stackdumpInternal(RestartData *context, int n, int extra);
64 +#define STACKDUMP(n, x) stackdump(context, n, (x) + 10)
65 #define DISASM_RT() disasm(NULL, PC - 1, 1)
66 #else /* #ifndef DEBUG_STACK */
67 #define STACKDUMP(n, x)
68 @@ -178,13 +178,6 @@ static Inst **LoopStackPtr = LoopStack;
69 static const char *ProgramName = "";
71 /* Global data for the interpreter */
72 -static DataValue *TheStack; /* the stack */
73 -static DataValue *StackP; /* next free spot on stack */
74 -static DataValue *FrameP; /* frame pointer (start of local variables
75 - for the current subroutine invocation) */
76 -static Inst *PC; /* program counter during execution */
77 -static char *ErrMsg; /* global for returning error messages
78 - from executing functions */
79 static WindowInfo
80 *InitiatingWindow = NULL; /* window from which macro was run */
81 static WindowInfo *FocusWindow; /* window on which macro commands operate */
82 @@ -536,7 +529,7 @@ static int setupFrame(RestartData *conte
84 /* !OK_TO_PUSH(totalPushs) */
85 if (!((context->stackP + totalPushs) <= &context->stack[STACK_SIZE])) {
86 - return execError(StackOverflowMsg, "");
87 + return execError(context, StackOverflowMsg, "");
90 /* Push arguments and caller information onto the stack */
91 @@ -599,30 +592,30 @@ static int setupFrame(RestartData *conte
92 return STAT_OK;
95 -static Inst *rewindFrame(DataValue **frameP, DataValue **stackP)
96 +static void rewindFrame(RestartData *context)
98 /* get stored return information */
99 - int nArgs = FP_GET_ARG_COUNT(*frameP);
100 - DataValue *newFrameP = FP_GET_OLD_FP(*frameP);
101 - Inst *newPC = FP_GET_RET_PC(*frameP);
102 - Program *prog = FP_GET_PROG(*frameP);
103 + int nArgs = FP_GET_ARG_COUNT(context->frameP);
104 + DataValue *newFrameP = FP_GET_OLD_FP(context->frameP);
105 + Inst *newPC = FP_GET_RET_PC(context->frameP);
106 + Program *prog = FP_GET_PROG(context->frameP);
108 /* pop past local variables */
109 - *stackP = *frameP;
110 + context->stackP = context->frameP;
111 /* pop past arguments */
112 - *stackP -= (FP_TO_ARGS_DIST + nArgs);
113 + context->stackP -= (FP_TO_ARGS_DIST + nArgs);
115 - *frameP = newFrameP;
116 + context->frameP = newFrameP;
118 FreeProgram(prog);
120 - return newPC;
121 + context->pc = newPC;
124 static void rewindStack(RestartData *context)
126 while (context->pc) {
127 - context->pc = rewindFrame(&context->frameP, &context->stackP);
128 + rewindFrame(context);
132 @@ -665,7 +658,7 @@ int ExecuteMacro(WindowInfo *window, Pro
133 prog->name ? prog->name : "<exec-macro>");
135 if (status == STAT_ERROR) {
136 - *msg = ErrMsg;
137 + *msg = context->errMsg;
138 FreeRestartData(context);
139 return MACRO_ERROR;
141 @@ -682,25 +675,23 @@ int ContinueMacro(RestartData *continuat
143 register int status, instCount = 0;
144 register Inst *inst;
145 - RestartData oldContext;
147 - /* To allow macros to be invoked arbitrarily (such as those automatically
148 - triggered within smart-indent) within executing macros, this call is
149 - reentrant. */
150 - saveContext(&oldContext);
152 + WindowInfo *oldRunWindow = InitiatingWindow;
153 + WindowInfo *oldFocusWindow = FocusWindow;
156 ** Execution Loop: Call the succesive routine addresses in the program
157 ** until one returns something other than STAT_OK, then take action
159 - restoreContext(continuation);
160 - ErrMsg = NULL;
161 + InitiatingWindow = continuation->runWindow;
162 + FocusWindow = continuation->focusWindow;
163 + continuation->errMsg = NULL;
164 for (;;) {
166 /* Execute an instruction */
167 - inst = PC++;
168 + inst = continuation->pc++;
169 if (inst->type != OP_INST) {
170 - status = execError("Unexpected instruction of type %s",
171 + status = execError(continuation,
172 + "Unexpected instruction of type %s",
173 instTypeToStr(inst->type));
175 else {
176 @@ -708,31 +699,34 @@ int ContinueMacro(RestartData *continuat
177 #define OP(name, fn) case OP_##name:
178 #include "ops.h"
179 #undef OP
180 - status = (OpFns[inst->val.op])();
181 + status = (OpFns[inst->val.op])(continuation);
182 break;
183 default:
184 - status = execError("Illegal instruction at %8p", (char *)inst);
185 + status = execError(continuation, "Illegal instruction at %8p",
186 + (char *)inst);
190 /* If error return was not STAT_OK, return to caller */
191 if (status != STAT_OK) {
192 if (status == STAT_PREEMPT) {
193 - saveContext(continuation);
194 - restoreContext(&oldContext);
195 + continuation->runWindow = InitiatingWindow;
196 + continuation->focusWindow = FocusWindow;
197 + InitiatingWindow = oldRunWindow;
198 + FocusWindow = oldFocusWindow;
199 return MACRO_PREEMPT;
200 } else if (status == STAT_ERROR) {
201 - *msg = ErrMsg;
202 - saveContext(continuation);
203 + *msg = continuation->errMsg;
204 FreeRestartData(continuation);
205 - restoreContext(&oldContext);
206 + InitiatingWindow = oldRunWindow;
207 + FocusWindow = oldFocusWindow;
208 return MACRO_ERROR;
209 } else if (status == STAT_DONE) {
210 *msg = "";
211 - *result = *--StackP;
212 - saveContext(continuation);
213 + *result = *--continuation->stackP;
214 FreeRestartData(continuation);
215 - restoreContext(&oldContext);
216 + InitiatingWindow = oldRunWindow;
217 + FocusWindow = oldFocusWindow;
218 return MACRO_DONE;
221 @@ -742,8 +736,10 @@ int ContinueMacro(RestartData *continuat
222 X, other macros, and other shell scripts a chance to execute */
223 instCount++;
224 if (instCount >= INSTRUCTION_LIMIT) {
225 - saveContext(continuation);
226 - restoreContext(&oldContext);
227 + continuation->runWindow = InitiatingWindow;
228 + continuation->focusWindow = FocusWindow;
229 + InitiatingWindow = oldRunWindow;
230 + FocusWindow = oldFocusWindow;
231 return MACRO_TIME_LIMIT;
234 @@ -765,7 +761,7 @@ int RunMacroAsSubrCall(RestartData *cont
235 prog->name ? prog->name : "<run-macro>");
237 if (status == STAT_ERROR) {
238 - *msg = ErrMsg;
239 + *msg = context->errMsg;
240 FreeRestartData(context);
241 return MACRO_ERROR;
243 @@ -800,8 +796,8 @@ void PreemptMacro(void)
245 void ModifyReturnedValue(RestartData *context, DataValue dv)
247 - if ((context->pc-1)->val.op == OP_FETCH_RET_VAL)
248 - *(context->stackP-1) = dv;
249 + if ((context->pc - 1)->val.op == OP_FETCH_RET_VAL)
250 + *(context->stackP - 1) = dv;
254 @@ -1319,29 +1315,6 @@ void GarbageCollectStrings(void)
255 #endif
259 -** Save and restore execution context to data structure "context"
261 -static void saveContext(RestartData *context)
263 - context->stack = TheStack;
264 - context->stackP = StackP;
265 - context->frameP = FrameP;
266 - context->pc = PC;
267 - context->runWindow = InitiatingWindow;
268 - context->focusWindow = FocusWindow;
271 -static void restoreContext(RestartData *context)
273 - TheStack = context->stack;
274 - StackP = context->stackP;
275 - FrameP = context->frameP;
276 - PC = context->pc;
277 - InitiatingWindow = context->runWindow;
278 - FocusWindow = context->focusWindow;
281 static void freeSymbolList(Symbol *symList)
283 Symbol *s;
284 @@ -1378,7 +1351,12 @@ static void addToGlobalSymTab(Symbol *sy
285 GlobalSymTab[idx] = sym;
288 -#define EXEC_ERROR(s1, s2) return execError(s1, s2)
289 +#define StackP (context->stackP)
290 +#define TheStack (context->stack)
291 +#define FrameP (context->frameP)
292 +#define PC (context->pc)
294 +#define EXEC_ERROR(s1, s2) return execError(context, s1, s2)
296 #define GET_SYM(s) \
297 do { \
298 @@ -1386,7 +1364,8 @@ static void addToGlobalSymTab(Symbol *sy
299 EXEC_ERROR("Unexpected instruction, expected <symbol>: %s", \
300 instTypeToStr(PC->type)); \
302 - s = PC++->val.sym; \
303 + s = PC->val.sym; \
304 + PC++; \
305 } while (0)
307 #define GET_IMMED(i) \
308 @@ -1395,7 +1374,8 @@ static void addToGlobalSymTab(Symbol *sy
309 EXEC_ERROR("Unexpected instruction, expected <immediate>: %s", \
310 instTypeToStr(PC->type)); \
312 - i = PC++->val.immed; \
313 + i = PC->val.immed; \
314 + PC++; \
315 } while (0)
317 #define GET_BRANCH(a) \
318 @@ -1617,10 +1597,8 @@ OP_FUNCTION(pushSymVal)
319 symVal = FRAME_GET_ARG_N(argNum);
321 } else if (s->type == PROC_VALUE_SYM) {
322 - char *errMsg;
323 - if (!(s->value.val.subr)(FocusWindow, NULL, 0,
324 - &symVal, &errMsg)) {
325 - EXEC_ERROR(errMsg, s->name);
326 + if (!s->value.val.subr(context, NULL, 0, &symVal)) {
327 + EXEC_ERROR(context->errMsg, s->name);
329 } else if (s->type == C_FUNCTION_SYM
330 || s->type == MACRO_FUNCTION_SYM
331 @@ -1885,7 +1863,7 @@ OP_FUNCTION(anonArrayIndexVal)
332 POP(exprVal);
334 /* the next nDim stack entries form the index */
335 - errNum = makeArrayKeyFromArgs(nDim, &keyString, 0);
336 + errNum = makeArrayKeyFromArgs(context, nDim, &keyString, 0);
337 if (errNum != STAT_OK) {
338 return errNum;
340 @@ -1947,7 +1925,7 @@ OP_FUNCTION(anonArrayClose)
342 OP_FUNCTION(namedArg1)
344 - return namedArg1orN(True);
345 + return namedArg1orN(context, True);
349 @@ -1961,13 +1939,13 @@ OP_FUNCTION(namedArg1)
351 OP_FUNCTION(namedArgN)
353 - return namedArg1orN(False);
354 + return namedArg1orN(context, False);
358 ** implementation for namedArg1(), namedArgN()
360 -static int namedArg1orN(Boolean isFirst)
361 +static int namedArg1orN(RestartData *context, Boolean isFirst)
363 int errNum;
364 char *keyString = NULL;
365 @@ -1983,7 +1961,7 @@ static int namedArg1orN(Boolean isFirst)
366 POP(exprVal);
368 /* the next nDim stack entries form the index */
369 - errNum = makeArrayKeyFromArgs(nDim, &keyString, 0);
370 + errNum = makeArrayKeyFromArgs(context, nDim, &keyString, 0);
371 if (errNum != STAT_OK) {
372 return errNum;
374 @@ -2389,8 +2367,8 @@ OP_FUNCTION(eq)
375 /* negated eq() call */
376 OP_FUNCTION(ne)
378 - eq();
379 - return not();
380 + eq(context);
381 + return not(context);
385 @@ -2581,7 +2559,7 @@ OP_FUNCTION(power)
388 PUSH_INT(n3);
389 - return errCheck("exponentiation");
390 + return errCheck(context, "exponentiation");
394 @@ -2592,8 +2570,8 @@ OP_FUNCTION(power)
395 ** stack elements. The stack elements are popped from the stack if leaveParams
396 ** is false.
398 -static int concatenateNwithSep(int nVals, const char *sep, char **result,
399 - int leaveParams)
400 +static int concatenateNwithSep(RestartData *context, int nVals, const char *sep,
401 + char **result, int leaveParams)
403 DataValue value;
404 char *res = NULL;
405 @@ -2676,7 +2654,7 @@ OP_FUNCTION(concat)
407 STACKDUMP(nExpr, 3);
409 - len = concatenateNwithSep(nExpr, "", &out, False);
410 + len = concatenateNwithSep(context, nExpr, "", &out, False);
411 if (len < 0) {
412 EXEC_ERROR("can only concatenate with string or integer", NULL);
414 @@ -2710,7 +2688,8 @@ OP_FUNCTION(concat)
415 ** or: Prog-> (in called)next, ... -- (macro code called subr)
416 ** TheStack-> symN-sym1(FP), nArgs, oldFP, retPC, argArray, argN-arg1, next, ...
418 -static int callSubroutineFromSymbol(Symbol *sym, int nArgs)
419 +static int callSubroutineFromSymbol(RestartData *context, Symbol *sym,
420 + int nArgs)
422 Symbol *s;
423 int i;
424 @@ -2753,9 +2732,9 @@ static int callSubroutineFromSymbol(Symb
426 /* Call the function and check for preemption */
427 PreemptRequest = False;
428 - if (!sym->value.val.subr(FocusWindow, StackP,
429 - nArgs, &result, &errMsg))
430 - EXEC_ERROR(errMsg, sym->name);
431 + if (!sym->value.val.subr(context, StackP, nArgs, &result)) {
432 + EXEC_ERROR(context->errMsg, sym->name);
434 PUSH_RET_VAL(result);
435 return PreemptRequest ? STAT_PREEMPT : STAT_OK;
437 @@ -2768,15 +2747,10 @@ static int callSubroutineFromSymbol(Symb
438 ** values which are already there.
440 if (sym->type == MACRO_FUNCTION_SYM) {
441 - RestartData context;
442 - int status;
443 prog = sym->value.val.prog;
444 prog->refcount++;
445 /* -nArgs means 'arguments are on stack' */
446 - saveContext(&context);
447 - status = setupFrame(&context, prog, -nArgs, NULL, argArray, sym->name);
448 - restoreContext(&context);
449 - return status;
450 + return setupFrame(context, prog, -nArgs, NULL, argArray, sym->name);
454 @@ -2798,11 +2772,11 @@ static int callSubroutineFromSymbol(Symb
455 timestamps, a marker to indicate that the call was from a macro
456 (to stop shell commands from putting up their own separate banner) */
457 disp=XtDisplay(InitiatingWindow->shell);
458 - win=XtWindow(InitiatingWindow->shell);
459 + win=XtWindow(InitiatingWindow->shell);
461 key_event.type = KeyPress;
462 key_event.send_event = MACRO_EVENT_MARKER;
463 - key_event.time=XtLastTimestampProcessed(XtDisplay(InitiatingWindow->shell));
464 + key_event.time=XtLastTimestampProcessed(XtDisplay(InitiatingWindow->shell));
466 /* The following entries are just filled in to avoid problems
467 in strange cases, like calling "self_insert()" directly from the
468 @@ -2818,7 +2792,7 @@ static int callSubroutineFromSymbol(Symb
470 /* Call the action routine and check for preemption */
471 PreemptRequest = False;
472 - sym->value.val.xtproc(FocusWindow->lastFocus,
473 + sym->value.val.xtproc(MacroFocusWindow()->lastFocus,
474 (XEvent *)&key_event, argList, &numArgs);
475 XtFree((char *)argList);
476 PUSH_RET_VAL(noValue);
477 @@ -2850,7 +2824,7 @@ OP_FUNCTION(callSubroutine)
479 STACKDUMP(nArgs > 0 ? nArgs : -nArgs, 3);
481 - return callSubroutineFromSymbol(sym, nArgs);
482 + return callSubroutineFromSymbol(context, sym, nArgs);
486 @@ -2885,7 +2859,7 @@ OP_FUNCTION(callSubroutineStackedN)
487 EXEC_ERROR("array argument call to %s erroneous", sym->name);
490 - return callSubroutineFromSymbol(sym, nArgs);
491 + return callSubroutineFromSymbol(context, sym, nArgs);
495 @@ -2894,8 +2868,8 @@ OP_FUNCTION(callSubroutineStackedN)
496 ** written in macro.c. If the caller has already "consumed" stack elements,
497 ** removeArgs must indicate how many.
500 -int OverlayRoutineFromSymbol(Symbol *sym, int nArgs, int removeArgs)
501 +int OverlayRoutineFromSymbol(RestartData *context, Symbol *sym, int nArgs,
502 + int removeArgs)
504 DataValue *argArray = StackP + nArgs - removeArgs;
506 @@ -2922,7 +2896,7 @@ int OverlayRoutineFromSymbol(Symbol *sym
507 assert (argArray->tag == NO_TAG);
508 StackP = argArray;
510 - return callSubroutineFromSymbol(sym, nArgs);
511 + return callSubroutineFromSymbol(context, sym, nArgs);
515 @@ -2930,8 +2904,8 @@ int OverlayRoutineFromSymbol(Symbol *sym
516 ** OverlayRoutineFromSymbol(). In this way a piece of compiled code can be
517 ** executed in the caller's context from a function in macro.c.
520 -int OverlayRoutineFromProg(Program *prog, int nArgs, int removeArgs)
521 +int OverlayRoutineFromProg(RestartData *context, Program *prog, int nArgs,
522 + int removeArgs)
524 Symbol *sym;
525 int ret;
526 @@ -2948,7 +2922,7 @@ int OverlayRoutineFromProg(Program *prog
527 sym->next = NULL;
528 sym->added = 0;
530 - ret = OverlayRoutineFromSymbol(sym, nArgs, removeArgs);
531 + ret = OverlayRoutineFromSymbol(context, sym, nArgs, removeArgs);
533 free(sym);
535 @@ -3051,11 +3025,11 @@ OP_FUNCTION(fetchRetVal)
536 /* see comments for returnValOrNone() */
537 OP_FUNCTION(returnNoVal)
539 - return returnValOrNone(False);
540 + return returnValOrNone(context, False);
542 OP_FUNCTION(returnVal)
544 - return returnValOrNone(True);
545 + return returnValOrNone(context, True);
549 @@ -3065,7 +3039,7 @@ OP_FUNCTION(returnVal)
550 ** After: Prog-> next, ..., (in caller)[FETCH_RET_VAL?], ...
551 ** TheStack-> retVal?, next, ...
553 -static int returnValOrNone(int valOnStack)
554 +static int returnValOrNone(RestartData *context, int valOnStack)
556 DataValue retVal;
557 static DataValue noValue = {NO_TAG, {0}};
558 @@ -3081,7 +3055,7 @@ static int returnValOrNone(int valOnStac
559 retVal = noValue;
562 - PC = rewindFrame(&FrameP, &StackP);
563 + rewindFrame(context);
565 /* push returned value, if requsted */
566 PUSH_RET_VAL(retVal);
567 @@ -3119,13 +3093,13 @@ OP_FUNCTION(branch)
569 OP_FUNCTION(branchTrue)
571 - return branchIf(True);
572 + return branchIf(context, True);
574 OP_FUNCTION(branchFalse)
576 - return branchIf(False);
577 + return branchIf(context, False);
579 -static int branchIf(Boolean trueOrFalse)
580 +static int branchIf(RestartData *context, Boolean trueOrFalse)
582 int value;
583 Inst *addr;
584 @@ -3206,11 +3180,13 @@ int ArrayCopy(DataValue *dstArray, DataV
585 ** I really need to optimize the size approximation rather than assuming
586 ** a worst case size for every integer argument
588 -static int makeArrayKeyFromArgs(int nArgs, char **keyString, int leaveParams)
589 +static int makeArrayKeyFromArgs(RestartData *context, int nArgs,
590 + char **keyString, int leaveParams)
592 int len;
594 - len = concatenateNwithSep(nArgs, ARRAY_DIM_SEP, keyString, leaveParams);
595 + len = concatenateNwithSep(context, nArgs, ARRAY_DIM_SEP, keyString,
596 + leaveParams);
597 if (len < 0) {
598 EXEC_ERROR("can only index array with string or int.", NULL);
600 @@ -3526,7 +3502,7 @@ OP_FUNCTION(arrayRef)
601 STACKDUMP(nDim+1, 3);
603 if (nDim > 0) {
604 - errNum = makeArrayKeyFromArgs(nDim, &keyString, 0);
605 + errNum = makeArrayKeyFromArgs(context, nDim, &keyString, 0);
606 if (errNum != STAT_OK) {
607 return(errNum);
609 @@ -3580,7 +3556,7 @@ OP_FUNCTION(arrayAssign)
610 if (nDim > 0) {
611 POP(srcValue);
613 - errNum = makeArrayKeyFromArgs(nDim, &keyString, 0);
614 + errNum = makeArrayKeyFromArgs(context, nDim, &keyString, 0);
615 if (errNum != STAT_OK) {
616 return(errNum);
618 @@ -3636,7 +3612,7 @@ OP_FUNCTION(arrayRefAndAssignSetup)
621 if (nDim > 0) {
622 - errNum = makeArrayKeyFromArgs(nDim, &keyString, 1);
623 + errNum = makeArrayKeyFromArgs(context, nDim, &keyString, 1);
624 if (errNum != STAT_OK) {
625 return(errNum);
627 @@ -4072,7 +4048,7 @@ OP_FUNCTION(deleteArrayElement)
628 if (nDim > 0) {
629 int errNum;
631 - errNum = makeArrayKeyFromArgs(nDim, &keyString, 0);
632 + errNum = makeArrayKeyFromArgs(context, nDim, &keyString, 0);
633 if (errNum != STAT_OK) {
634 return(errNum);
636 @@ -4216,7 +4192,7 @@ OP_FUNCTION(arrayNextNumIdx)
637 ** checks errno after operations which can set it. If an error occured,
638 ** creates appropriate error messages and returns false
640 -static int errCheck(const char *s)
641 +static int errCheck(RestartData *context, const char *s)
643 if (errno == EDOM)
644 EXEC_ERROR("%s argument out of domain", s);
645 @@ -4229,25 +4205,25 @@ static int errCheck(const char *s)
647 ** build a stack dump string, reallocating s as necessary.
649 -static char *stackDumpStr(DataValue *fp, const char *msg, char **s, int *pLen)
650 +static void stackDumpStr(RestartData *context, const char *msg, char **s, int *pLen)
652 int len;
653 const char *op;
654 char *np;
655 - DataValue *nfp = fp;
656 + DataValue *nfp = context->frameP;
657 Inst *pc;
659 #ifdef DEBUG_STACK
660 const char *dump;
661 printd("\n\n");
662 - disasmInternal(PC - 1, 1);
663 - stackdumpInternal(0, 50);
664 + disasmInternal(context->pc - 1, 1);
665 + stackdumpInternal(context, 0, 50);
666 dump = printd(NULL);
667 #endif
669 /* first measure the lengths */
670 len = strlen(msg) + 1;
671 - nfp = fp;
672 + nfp = context->frameP;
673 do {
674 len = len + FP_GET_ITEM(nfp, FP_FUNCTION_NAME).val.str.len + 1;
675 pc = FP_GET_RET_PC(nfp);
676 @@ -4267,7 +4243,7 @@ static char *stackDumpStr(DataValue *fp,
677 while (*op)
678 *np++ = *op++;
680 - nfp = fp;
681 + nfp = context->frameP;
682 do {
683 *np++ = '\n';
684 op = FP_GET_ITEM(nfp, FP_FUNCTION_NAME).val.str.rep;
685 @@ -4283,22 +4259,22 @@ static char *stackDumpStr(DataValue *fp,
686 #endif
688 *np = 0;
689 - return *s;
690 + context->errMsg = *s;
694 -** combine two strings in a static area and set ErrMsg to point to the
695 -** result. Returns false so a single return execError() statement can
696 +** combine two strings in a static area and set continuation->errMsg to point
697 +** to the result. Returns false so a single return execError() statement can
698 ** be used to both process the message and return.
700 -static int execError(const char *s1, const char *s2)
701 +static int execError(RestartData *context, const char *s1, const char *s2)
703 static char msg[MAX_ERR_MSG_LEN];
704 static char *err = NULL;
705 static int errlen = 0;
707 sprintf(msg, s1, s2);
708 - ErrMsg = stackDumpStr(FrameP, msg, &err, &errlen);
709 + stackDumpStr(context, msg, &err, &errlen);
710 return STAT_ERROR;
713 @@ -4410,6 +4386,11 @@ static const char *instTypeToStr(enum in
717 +#undef StackP
718 +#undef TheStack
719 +#undef FrameP
720 +#undef PC
722 #ifdef DEBUG_DISASSEMBLER /* dumping values in disassembly or stack dump */
723 static char *printdBuffer = NULL;
724 static int printdPos = 0;
725 @@ -4869,31 +4850,31 @@ static void stackdumpframe(DataValue *ar
726 #endif /* #ifdef DEBUG_STACK_HEADFIRST */
729 -static void stackdumpInternal(int n, int extra)
730 +static void stackdumpInternal(RestartData *context, int n, int extra)
732 - DataValue *arrow = StackP - n;
733 - DataValue *outpt = StackP - n - extra;
734 + DataValue *arrow = context->stackP - n;
735 + DataValue *outpt = context->stackP - n - extra;
737 #ifdef DEBUG_STACK_HEADFIRST
738 printd("Stack ----->\n");
739 - stackdumpframe(arrow, outpt, FrameP, StackP, '*');
740 - if (outpt < TheStack)
741 + stackdumpframe(arrow, outpt, context->frameP, context->stackP, '*');
742 + if (outpt < context->stack)
743 printd("--------------Stack base--------------\n");
744 #else
745 - if (outpt < TheStack)
746 + if (outpt < context->stack)
747 printd("--------------Stack base--------------\n");
748 - stackdumpframe(arrow, outpt, FrameP, StackP, '*');
749 + stackdumpframe(arrow, outpt, context->frameP, context->stackP, '*');
750 printd("Stack ----->\n\n");
751 #endif /* #ifdef DEBUG_STACK_HEADFIRST */
754 -static void stackdump(int n, int extra)
755 +static void stackdump(RestartData *context, int n, int extra)
757 static int outIsTTY = -1;
758 if (outIsTTY == -1)
759 outIsTTY = isatty(fileno(stdout));
761 - stackdumpInternal(n, extra);
762 + stackdumpInternal(context, n, extra);
764 if (outIsTTY)
765 printd("\033[J\n");
766 diff --quilt old/source/interpret.h new/source/interpret.h
767 --- old/source/interpret.h
768 +++ new/source/interpret.h
769 @@ -62,6 +62,7 @@ struct DataValueTag;
770 struct SparseArrayEntryTag;
771 struct ProgramTag;
772 struct SymbolRec;
773 +struct RestartDataTag;
775 typedef struct InstTag {
776 enum instTypes type;
777 @@ -73,8 +74,8 @@ typedef struct InstTag {
778 } val;
779 } Inst;
781 -typedef int (*BuiltInSubr)(WindowInfo *window, struct DataValueTag *argList,
782 - int nArgs, struct DataValueTag *result, char **errMsg);
783 +typedef int (BuiltInSubr)(struct RestartDataTag *context,
784 + struct DataValueTag *argList, int nArgs, struct DataValueTag *result);
786 typedef struct NStringTag {
787 char *rep;
788 @@ -86,11 +87,11 @@ typedef struct DataValueTag {
789 union {
790 int n;
791 struct NStringTag str;
792 - BuiltInSubr subr;
793 - struct ProgramTag* prog;
794 + BuiltInSubr *subr;
795 + struct ProgramTag *prog;
796 XtActionProc xtproc;
797 - Inst* inst;
798 - struct DataValueTag* dataval;
799 + Inst *inst;
800 + struct DataValueTag *dataval;
801 struct SparseArrayEntryTag *arrayPtr;
802 struct SymbolRec *sym;
803 } val;
804 @@ -120,13 +121,14 @@ typedef struct ProgramTag {
805 } Program;
807 /* Information needed to re-start a preempted macro */
808 -typedef struct {
809 +typedef struct RestartDataTag {
810 DataValue *stack;
811 DataValue *stackP;
812 DataValue *frameP;
813 Inst *pc;
814 WindowInfo *runWindow;
815 WindowInfo *focusWindow;
816 + char *errMsg;
817 } RestartData;
819 /* state of the accumulator (aka compiler) */
820 @@ -183,8 +185,10 @@ int ContinueMacro(RestartData *continuat
821 int RunMacroAsSubrCall(RestartData *context, Program *prog, char **msg);
822 void PreemptMacro(void);
824 -int OverlayRoutineFromProg(Program *prog, int nArgs, int removeArgs);
825 -int OverlayRoutineFromSymbol(Symbol *sym, int nArgs, int removeArgs);
826 +int OverlayRoutineFromProg(RestartData *context, Program *prog, int nArgs,
827 + int removeArgs);
828 +int OverlayRoutineFromSymbol(RestartData *context, Symbol *sym, int nArgs,
829 + int removeArgs);
831 char *AllocString(int length);
832 char *AllocStringNCpy(const char *s, int length);
833 diff --quilt old/source/macro.c new/source/macro.c
834 --- old/source/macro.c
835 +++ new/source/macro.c
836 @@ -170,82 +170,82 @@ static void bannerTimeoutProc(XtPointer
837 static Boolean continueWorkProc(XtPointer clientData);
838 static int escapeStringChars(char *fromString, char *toString);
839 static int escapedStringLength(char *string);
840 -static int argsMS(WindowInfo *window, DataValue *argList, int nArgs,
841 - DataValue *result, char **errMsg);
842 -static int nArgsMS(WindowInfo *window, DataValue *argList, int nArgs,
843 - DataValue *result, char **errMsg);
844 -static int lengthMS(WindowInfo *window, DataValue *argList, int nArgs,
845 - DataValue *result, char **errMsg);
846 -static int minMS(WindowInfo *window, DataValue *argList, int nArgs,
847 - DataValue *result, char **errMsg);
848 -static int maxMS(WindowInfo *window, DataValue *argList, int nArgs,
849 - DataValue *result, char **errMsg);
850 -static int focusWindowMS(WindowInfo *window, DataValue *argList, int nArgs,
851 - DataValue *result, char **errMsg);
852 -static int getRangeMS(WindowInfo *window, DataValue *argList, int nArgs,
853 - DataValue *result, char **errMsg);
854 -static int getCharacterMS(WindowInfo *window, DataValue *argList, int nArgs,
855 - DataValue *result, char **errMsg);
856 -static int replaceRangeMS(WindowInfo *window, DataValue *argList, int nArgs,
857 - DataValue *result, char **errMsg);
858 -static int replaceSelectionMS(WindowInfo *window, DataValue *argList, int nArgs,
859 - DataValue *result, char **errMsg);
860 -static int getSelectionMS(WindowInfo *window, DataValue *argList, int nArgs,
861 - DataValue *result, char **errMsg);
862 -static int validNumberMS(WindowInfo *window, DataValue *argList, int nArgs,
863 - DataValue *result, char **errMsg);
864 -static int replaceInStringMS(WindowInfo *window, DataValue *argList, int nArgs,
865 - DataValue *result, char **errMsg);
866 -static int replaceSubstringMS(WindowInfo *window, DataValue *argList, int nArgs,
867 - DataValue *result, char **errMsg);
868 -static int fullFileNameMS(WindowInfo *window, DataValue *argList, int nArgs,
869 - DataValue *result, char **errMsg);
870 -static int readFileMS(WindowInfo *window, DataValue *argList, int nArgs,
871 - DataValue *result, char **errMsg);
872 -static int writeFileMS(WindowInfo *window, DataValue *argList, int nArgs,
873 - DataValue *result, char **errMsg);
874 -static int appendFileMS(WindowInfo *window, DataValue *argList, int nArgs,
875 - DataValue *result, char **errMsg);
876 +static int argsMS(RestartData *context, DataValue *argList, int nArgs,
877 + DataValue *result);
878 +static int nArgsMS(RestartData *context, DataValue *argList, int nArgs,
879 + DataValue *result);
880 +static int lengthMS(RestartData *context, DataValue *argList, int nArgs,
881 + DataValue *result);
882 +static int minMS(RestartData *context, DataValue *argList, int nArgs,
883 + DataValue *result);
884 +static int maxMS(RestartData *context, DataValue *argList, int nArgs,
885 + DataValue *result);
886 +static int focusWindowMS(RestartData *context, DataValue *argList, int nArgs,
887 + DataValue *result);
888 +static int getRangeMS(RestartData *context, DataValue *argList, int nArgs,
889 + DataValue *result);
890 +static int getCharacterMS(RestartData *context, DataValue *argList, int nArgs,
891 + DataValue *result);
892 +static int replaceRangeMS(RestartData *context, DataValue *argList, int nArgs,
893 + DataValue *result);
894 +static int replaceSelectionMS(RestartData *context, DataValue *argList, int nArgs,
895 + DataValue *result);
896 +static int getSelectionMS(RestartData *context, DataValue *argList, int nArgs,
897 + DataValue *result);
898 +static int validNumberMS(RestartData *context, DataValue *argList, int nArgs,
899 + DataValue *result);
900 +static int replaceInStringMS(RestartData *context, DataValue *argList, int nArgs,
901 + DataValue *result);
902 +static int replaceSubstringMS(RestartData *context, DataValue *argList, int nArgs,
903 + DataValue *result);
904 +static int fullFileNameMS(RestartData *context, DataValue *argList, int nArgs,
905 + DataValue *result);
906 +static int readFileMS(RestartData *context, DataValue *argList, int nArgs,
907 + DataValue *result);
908 +static int writeFileMS(RestartData *context, DataValue *argList, int nArgs,
909 + DataValue *result);
910 +static int appendFileMS(RestartData *context, DataValue *argList, int nArgs,
911 + DataValue *result);
912 static int writeOrAppendFile(int append, WindowInfo *window,
913 DataValue *argList, int nArgs, DataValue *result, char **errMsg);
914 -static int substringMS(WindowInfo *window, DataValue *argList, int nArgs,
915 - DataValue *result, char **errMsg);
916 -static int toupperMS(WindowInfo *window, DataValue *argList, int nArgs,
917 - DataValue *result, char **errMsg);
918 -static int tolowerMS(WindowInfo *window, DataValue *argList, int nArgs,
919 - DataValue *result, char **errMsg);
920 -static int stringToClipboardMS(WindowInfo *window, DataValue *argList, int nArgs,
921 - DataValue *result, char **errMsg);
922 -static int clipboardToStringMS(WindowInfo *window, DataValue *argList, int nArgs,
923 - DataValue *result, char **errMsg);
924 -static int searchMS(WindowInfo *window, DataValue *argList, int nArgs,
925 - DataValue *result, char **errMsg);
926 -static int searchStringMS(WindowInfo *window, DataValue *argList, int nArgs,
927 - DataValue *result, char **errMsg);
928 -static int setCursorPosMS(WindowInfo *window, DataValue *argList, int nArgs,
929 - DataValue *result, char **errMsg);
930 -static int beepMS(WindowInfo *window, DataValue *argList, int nArgs,
931 - DataValue *result, char **errMsg);
932 -static int selectMS(WindowInfo *window, DataValue *argList, int nArgs,
933 - DataValue *result, char **errMsg);
934 -static int selectRectangleMS(WindowInfo *window, DataValue *argList, int nArgs,
935 - DataValue *result, char **errMsg);
936 -static int tPrintMS(WindowInfo *window, DataValue *argList, int nArgs,
937 - DataValue *result, char **errMsg);
938 -static int getenvMS(WindowInfo *window, DataValue *argList, int nArgs,
939 - DataValue *result, char **errMsg);
940 -static int shellCmdMS(WindowInfo *window, DataValue *argList, int nArgs,
941 - DataValue *result, char **errMsg);
942 -static int dialogMS(WindowInfo *window, DataValue *argList, int nArgs,
943 - DataValue *result, char **errMsg);
944 +static int substringMS(RestartData *context, DataValue *argList, int nArgs,
945 + DataValue *result);
946 +static int toupperMS(RestartData *context, DataValue *argList, int nArgs,
947 + DataValue *result);
948 +static int tolowerMS(RestartData *context, DataValue *argList, int nArgs,
949 + DataValue *result);
950 +static int stringToClipboardMS(RestartData *context, DataValue *argList, int nArgs,
951 + DataValue *result);
952 +static int clipboardToStringMS(RestartData *context, DataValue *argList, int nArgs,
953 + DataValue *result);
954 +static int searchMS(RestartData *context, DataValue *argList, int nArgs,
955 + DataValue *result);
956 +static int searchStringMS(RestartData *context, DataValue *argList, int nArgs,
957 + DataValue *result);
958 +static int setCursorPosMS(RestartData *context, DataValue *argList, int nArgs,
959 + DataValue *result);
960 +static int beepMS(RestartData *context, DataValue *argList, int nArgs,
961 + DataValue *result);
962 +static int selectMS(RestartData *context, DataValue *argList, int nArgs,
963 + DataValue *result);
964 +static int selectRectangleMS(RestartData *context, DataValue *argList, int nArgs,
965 + DataValue *result);
966 +static int tPrintMS(RestartData *context, DataValue *argList, int nArgs,
967 + DataValue *result);
968 +static int getenvMS(RestartData *context, DataValue *argList, int nArgs,
969 + DataValue *result);
970 +static int shellCmdMS(RestartData *context, DataValue *argList, int nArgs,
971 + DataValue *result);
972 +static int dialogMS(RestartData *context, DataValue *argList, int nArgs,
973 + DataValue *result);
974 static void dialogBtnCB(Widget w, XtPointer clientData, XtPointer callData);
975 static void dialogCloseCB(Widget w, XtPointer clientData, XtPointer callData);
976 #ifdef LESSTIF_VERSION
977 static void dialogEscCB(Widget w, XtPointer clientData, XEvent *event,
978 Boolean *cont);
979 #endif /* LESSTIF_VERSION */
980 -static int stringDialogMS(WindowInfo *window, DataValue *argList, int nArgs,
981 - DataValue *result, char **errMsg);
982 +static int stringDialogMS(RestartData *context, DataValue *argList, int nArgs,
983 + DataValue *result);
984 static void stringDialogBtnCB(Widget w, XtPointer clientData,
985 XtPointer callData);
986 static void stringDialogCloseCB(Widget w, XtPointer clientData,
987 @@ -254,122 +254,122 @@ static void stringDialogCloseCB(Widget w
988 static void stringDialogEscCB(Widget w, XtPointer clientData, XEvent *event,
989 Boolean *cont);
990 #endif /* LESSTIF_VERSION */
991 -static int calltipMS(WindowInfo *window, DataValue *argList, int nArgs,
992 - DataValue *result, char **errMsg);
993 -static int killCalltipMS(WindowInfo *window, DataValue *argList, int nArgs,
994 - DataValue *result, char **errMsg);
995 -static int highlightCTLineMS(WindowInfo *window, DataValue *argList, int nArgs,
996 - DataValue *result, char **errMsg);
997 +static int calltipMS(RestartData *context, DataValue *argList, int nArgs,
998 + DataValue *result);
999 +static int killCalltipMS(RestartData *context, DataValue *argList, int nArgs,
1000 + DataValue *result);
1001 +static int highlightCTLineMS(RestartData *context, DataValue *argList, int nArgs,
1002 + DataValue *result);
1003 /* T Balinski */
1004 -static int listDialogMS(WindowInfo *window, DataValue *argList, int nArgs,
1005 - DataValue *result, char **errMsg);
1006 +static int listDialogMS(RestartData *context, DataValue *argList, int nArgs,
1007 + DataValue *result);
1008 static void listDialogBtnCB(Widget w, XtPointer clientData,
1009 - XtPointer callData);
1010 + XtPointer callData);
1011 static void listDialogCloseCB(Widget w, XtPointer clientData,
1012 - XtPointer callData);
1013 + XtPointer callData);
1014 /* T Balinski End */
1015 #ifdef LESSTIF_VERSION
1016 static void listDialogEscCB(Widget w, XtPointer clientData, XEvent *event,
1017 Boolean *cont);
1018 #endif /* LESSTIF_VERSION */
1019 -static int stringCompareMS(WindowInfo *window, DataValue *argList, int nArgs,
1020 - DataValue *result, char **errMsg);
1021 -static int splitMS(WindowInfo *window, DataValue *argList, int nArgs,
1022 - DataValue *result, char **errMsg);
1023 -static int joinMS(WindowInfo *window, DataValue *argList, int nArgs,
1024 - DataValue *result, char **errMsg);
1025 +static int stringCompareMS(RestartData *context, DataValue *argList, int nArgs,
1026 + DataValue *result);
1027 +static int splitMS(RestartData *context, DataValue *argList, int nArgs,
1028 + DataValue *result);
1029 +static int joinMS(RestartData *context, DataValue *argList, int nArgs,
1030 + DataValue *result);
1031 /* DISASBLED for 5.4
1032 -static int setBacklightStringMS(WindowInfo *window, DataValue *argList,
1033 - int nArgs, DataValue *result, char **errMsg);
1034 +static int setBacklightStringMS(RestartData *context, DataValue *argList,
1035 + int nArgs, DataValue *result);
1037 -static int cursorMV(WindowInfo *window, DataValue *argList, int nArgs,
1038 - DataValue *result, char **errMsg);
1039 -static int lineMV(WindowInfo *window, DataValue *argList, int nArgs,
1040 - DataValue *result, char **errMsg);
1041 -static int columnMV(WindowInfo *window, DataValue *argList, int nArgs,
1042 - DataValue *result, char **errMsg);
1043 -static int fileNameMV(WindowInfo *window, DataValue *argList, int nArgs,
1044 - DataValue *result, char **errMsg);
1045 -static int filePathMV(WindowInfo *window, DataValue *argList, int nArgs,
1046 - DataValue *result, char **errMsg);
1047 -static int lengthMV(WindowInfo *window, DataValue *argList, int nArgs,
1048 - DataValue *result, char **errMsg);
1049 -static int selectionStartMV(WindowInfo *window, DataValue *argList, int nArgs,
1050 - DataValue *result, char **errMsg);
1051 -static int selectionEndMV(WindowInfo *window, DataValue *argList, int nArgs,
1052 - DataValue *result, char **errMsg);
1053 -static int selectionLeftMV(WindowInfo *window, DataValue *argList, int nArgs,
1054 - DataValue *result, char **errMsg);
1055 -static int selectionRightMV(WindowInfo *window, DataValue *argList, int nArgs,
1056 - DataValue *result, char **errMsg);
1057 -static int statisticsLineMV(WindowInfo *window, DataValue *argList, int nArgs,
1058 - DataValue *result, char **errMsg);
1059 -static int incSearchLineMV(WindowInfo *window, DataValue *argList, int nArgs,
1060 - DataValue *result, char **errMsg);
1061 -static int showLineNumbersMV(WindowInfo *window, DataValue *argList, int nArgs,
1062 - DataValue *result, char **errMsg);
1063 -static int autoIndentMV(WindowInfo *window, DataValue *argList, int nArgs,
1064 - DataValue *result, char **errMsg);
1065 -static int wrapTextMV(WindowInfo *window, DataValue *argList, int nArgs,
1066 - DataValue *result, char **errMsg);
1067 -static int highlightSyntaxMV(WindowInfo *window, DataValue *argList, int nArgs,
1068 - DataValue *result, char **errMsg);
1069 -static int makeBackupCopyMV(WindowInfo *window, DataValue *argList, int nArgs,
1070 - DataValue *result, char **errMsg);
1071 -static int incBackupMV(WindowInfo *window, DataValue *argList, int nArgs,
1072 - DataValue *result, char **errMsg);
1073 -static int showMatchingMV(WindowInfo *window, DataValue *argList, int nArgs,
1074 - DataValue *result, char **errMsg);
1075 -static int overTypeModeMV(WindowInfo *window, DataValue *argList, int nArgs,
1076 - DataValue *result, char **errMsg);
1077 -static int readOnlyMV(WindowInfo *window, DataValue *argList, int nArgs,
1078 - DataValue *result, char **errMsg);
1079 -static int lockedMV(WindowInfo *window, DataValue *argList, int nArgs,
1080 - DataValue *result, char **errMsg);
1081 -static int fileFormatMV(WindowInfo *window, DataValue *argList, int nArgs,
1082 - DataValue *result, char **errMsg);
1083 -static int fontNameMV(WindowInfo *window, DataValue *argList, int nArgs,
1084 - DataValue *result, char **errMsg);
1085 -static int fontNameItalicMV(WindowInfo *window, DataValue *argList, int nArgs,
1086 - DataValue *result, char **errMsg);
1087 -static int fontNameBoldMV(WindowInfo *window, DataValue *argList, int nArgs,
1088 - DataValue *result, char **errMsg);
1089 -static int fontNameBoldItalicMV(WindowInfo *window, DataValue *argList, int nArgs,
1090 - DataValue *result, char **errMsg);
1091 -static int subscriptSepMV(WindowInfo *window, DataValue *argList, int nArgs,
1092 - DataValue *result, char **errMsg);
1093 -static int minFontWidthMV(WindowInfo *window, DataValue *argList, int nArgs,
1094 - DataValue *result, char **errMsg);
1095 -static int maxFontWidthMV(WindowInfo *window, DataValue *argList, int nArgs,
1096 - DataValue *result, char **errMsg);
1097 -static int wrapMarginMV(WindowInfo *window, DataValue *argList, int nArgs,
1098 - DataValue *result, char **errMsg);
1099 -static int topLineMV(WindowInfo *window, DataValue *argList, int nArgs,
1100 - DataValue *result, char **errMsg);
1101 -static int numDisplayLinesMV(WindowInfo *window, DataValue *argList, int nArgs,
1102 - DataValue *result, char **errMsg);
1103 -static int displayWidthMV(WindowInfo *window, DataValue *argList, int nArgs,
1104 - DataValue *result, char **errMsg);
1105 -static int activePaneMV(WindowInfo *window, DataValue *argList, int nArgs,
1106 - DataValue *result, char **errMsg);
1107 -static int nPanesMV(WindowInfo *window, DataValue *argList, int nArgs,
1108 - DataValue *result, char **errMsg);
1109 -static int emptyArrayMV(WindowInfo *window, DataValue *argList, int nArgs,
1110 - DataValue *result, char **errMsg);
1111 -static int serverNameMV(WindowInfo *window, DataValue *argList, int nArgs,
1112 - DataValue *result, char **errMsg);
1113 -static int tabDistMV(WindowInfo *window, DataValue *argList, int nArgs,
1114 - DataValue *result, char **errMsg);
1115 -static int emTabDistMV(WindowInfo *window, DataValue *argList, int nArgs,
1116 - DataValue *result, char **errMsg);
1117 -static int useTabsMV(WindowInfo *window, DataValue *argList, int nArgs,
1118 - DataValue *result, char **errMsg);
1119 -static int modifiedMV(WindowInfo *window, DataValue *argList, int nArgs,
1120 - DataValue *result, char **errMsg);
1121 -static int languageModeMV(WindowInfo *window, DataValue *argList, int nArgs,
1122 - DataValue *result, char **errMsg);
1123 -static int calltipIDMV(WindowInfo *window, DataValue *argList, int nArgs,
1124 - DataValue *result, char **errMsg);
1125 +static int cursorMV(RestartData *context, DataValue *argList, int nArgs,
1126 + DataValue *result);
1127 +static int lineMV(RestartData *context, DataValue *argList, int nArgs,
1128 + DataValue *result);
1129 +static int columnMV(RestartData *context, DataValue *argList, int nArgs,
1130 + DataValue *result);
1131 +static int fileNameMV(RestartData *context, DataValue *argList, int nArgs,
1132 + DataValue *result);
1133 +static int filePathMV(RestartData *context, DataValue *argList, int nArgs,
1134 + DataValue *result);
1135 +static int lengthMV(RestartData *context, DataValue *argList, int nArgs,
1136 + DataValue *result);
1137 +static int selectionStartMV(RestartData *context, DataValue *argList, int nArgs,
1138 + DataValue *result);
1139 +static int selectionEndMV(RestartData *context, DataValue *argList, int nArgs,
1140 + DataValue *result);
1141 +static int selectionLeftMV(RestartData *context, DataValue *argList, int nArgs,
1142 + DataValue *result);
1143 +static int selectionRightMV(RestartData *context, DataValue *argList, int nArgs,
1144 + DataValue *result);
1145 +static int statisticsLineMV(RestartData *context, DataValue *argList, int nArgs,
1146 + DataValue *result);
1147 +static int incSearchLineMV(RestartData *context, DataValue *argList, int nArgs,
1148 + DataValue *result);
1149 +static int showLineNumbersMV(RestartData *context, DataValue *argList, int nArgs,
1150 + DataValue *result);
1151 +static int autoIndentMV(RestartData *context, DataValue *argList, int nArgs,
1152 + DataValue *result);
1153 +static int wrapTextMV(RestartData *context, DataValue *argList, int nArgs,
1154 + DataValue *result);
1155 +static int highlightSyntaxMV(RestartData *context, DataValue *argList, int nArgs,
1156 + DataValue *result);
1157 +static int makeBackupCopyMV(RestartData *context, DataValue *argList, int nArgs,
1158 + DataValue *result);
1159 +static int incBackupMV(RestartData *context, DataValue *argList, int nArgs,
1160 + DataValue *result);
1161 +static int showMatchingMV(RestartData *context, DataValue *argList, int nArgs,
1162 + DataValue *result);
1163 +static int overTypeModeMV(RestartData *context, DataValue *argList, int nArgs,
1164 + DataValue *result);
1165 +static int readOnlyMV(RestartData *context, DataValue *argList, int nArgs,
1166 + DataValue *result);
1167 +static int lockedMV(RestartData *context, DataValue *argList, int nArgs,
1168 + DataValue *result);
1169 +static int fileFormatMV(RestartData *context, DataValue *argList, int nArgs,
1170 + DataValue *result);
1171 +static int fontNameMV(RestartData *context, DataValue *argList, int nArgs,
1172 + DataValue *result);
1173 +static int fontNameItalicMV(RestartData *context, DataValue *argList, int nArgs,
1174 + DataValue *result);
1175 +static int fontNameBoldMV(RestartData *context, DataValue *argList, int nArgs,
1176 + DataValue *result);
1177 +static int fontNameBoldItalicMV(RestartData *context, DataValue *argList, int nArgs,
1178 + DataValue *result);
1179 +static int subscriptSepMV(RestartData *context, DataValue *argList, int nArgs,
1180 + DataValue *result);
1181 +static int minFontWidthMV(RestartData *context, DataValue *argList, int nArgs,
1182 + DataValue *result);
1183 +static int maxFontWidthMV(RestartData *context, DataValue *argList, int nArgs,
1184 + DataValue *result);
1185 +static int wrapMarginMV(RestartData *context, DataValue *argList, int nArgs,
1186 + DataValue *result);
1187 +static int topLineMV(RestartData *context, DataValue *argList, int nArgs,
1188 + DataValue *result);
1189 +static int numDisplayLinesMV(RestartData *context, DataValue *argList, int nArgs,
1190 + DataValue *result);
1191 +static int displayWidthMV(RestartData *context, DataValue *argList, int nArgs,
1192 + DataValue *result);
1193 +static int activePaneMV(RestartData *context, DataValue *argList, int nArgs,
1194 + DataValue *result);
1195 +static int nPanesMV(RestartData *context, DataValue *argList, int nArgs,
1196 + DataValue *result);
1197 +static int emptyArrayMV(RestartData *context, DataValue *argList, int nArgs,
1198 + DataValue *result);
1199 +static int serverNameMV(RestartData *context, DataValue *argList, int nArgs,
1200 + DataValue *result);
1201 +static int tabDistMV(RestartData *context, DataValue *argList, int nArgs,
1202 + DataValue *result);
1203 +static int emTabDistMV(RestartData *context, DataValue *argList, int nArgs,
1204 + DataValue *result);
1205 +static int useTabsMV(RestartData *context, DataValue *argList, int nArgs,
1206 + DataValue *result);
1207 +static int modifiedMV(RestartData *context, DataValue *argList, int nArgs,
1208 + DataValue *result);
1209 +static int languageModeMV(RestartData *context, DataValue *argList, int nArgs,
1210 + DataValue *result);
1211 +static int calltipIDMV(RestartData *context, DataValue *argList, int nArgs,
1212 + DataValue *result);
1213 static int readSearchArgs(DataValue *argList, int nArgs, int*searchDirection,
1214 int *searchType, int *wrap, char **errMsg);
1215 static int wrongNArgsErr(char **errMsg);
1216 @@ -379,101 +379,101 @@ static int readIntArg(DataValue dv, int
1217 static int readStringArg(DataValue dv, char **result, char *stringStorage,
1218 char **errMsg);
1219 /* DISABLED FOR 5.4
1220 -static int backlightStringMV(WindowInfo *window, DataValue *argList,
1221 - int nArgs, DataValue *result, char **errMsg);
1222 +static int backlightStringMV(RestartData *context, DataValue *argList,
1223 + int nArgs, DataValue *result);
1225 -static int rangesetListMV(WindowInfo *window, DataValue *argList,
1226 - int nArgs, DataValue *result, char **errMsg);
1227 -static int versionMV(WindowInfo* window, DataValue* argList, int nArgs,
1228 - DataValue* result, char** errMsg);
1229 -static int neditHomeMV(WindowInfo *window, DataValue *argList, int nArgs,
1230 - DataValue *result, char **errMsg);
1231 -static int transientMV(WindowInfo *window, DataValue *argList, int nArgs,
1232 - DataValue *result, char **errMsg);
1233 -static int rangesetCreateMS(WindowInfo *window, DataValue *argList, int nArgs,
1234 - DataValue *result, char **errMsg);
1235 -static int rangesetDestroyMS(WindowInfo *window, DataValue *argList, int nArgs,
1236 - DataValue *result, char **errMsg);
1237 -static int rangesetGetByNameMS(WindowInfo *window, DataValue *argList, int nArgs,
1238 - DataValue *result, char **errMsg);
1239 -static int rangesetAddMS(WindowInfo *window, DataValue *argList, int nArgs,
1240 - DataValue *result, char **errMsg);
1241 -static int rangesetSubtractMS(WindowInfo *window, DataValue *argList, int nArgs,
1242 - DataValue *result, char **errMsg);
1243 -static int rangesetInvertMS(WindowInfo *window, DataValue *argList, int nArgs,
1244 - DataValue *result, char **errMsg);
1245 -static int rangesetInfoMS(WindowInfo *window, DataValue *argList, int nArgs,
1246 - DataValue *result, char **errMsg);
1247 -static int rangesetRangeMS(WindowInfo *window, DataValue *argList, int nArgs,
1248 - DataValue *result, char **errMsg);
1249 -static int rangesetIncludesPosMS(WindowInfo *window, DataValue *argList,
1250 - int nArgs, DataValue *result, char **errMsg);
1251 -static int rangesetSetColorMS(WindowInfo *window, DataValue *argList,
1252 - int nArgs, DataValue *result, char **errMsg);
1253 -static int rangesetSetUnderlineMS(WindowInfo *window, DataValue *argList,
1254 - int nArgs, DataValue *result, char **errMsg);
1255 -static int rangesetSetNameMS(WindowInfo *window, DataValue *argList,
1256 - int nArgs, DataValue *result, char **errMsg);
1257 -static int rangesetSetModeMS(WindowInfo *window, DataValue *argList,
1258 - int nArgs, DataValue *result, char **errMsg);
1259 +static int rangesetListMV(RestartData *context, DataValue *argList, int nArgs,
1260 + DataValue *result);
1261 +static int versionMV(RestartData *context, DataValue *argList, int nArgs,
1262 + DataValue *result);
1263 +static int neditHomeMV(RestartData *context, DataValue *argList, int nArgs,
1264 + DataValue *result);
1265 +static int transientMV(RestartData *context, DataValue *argList, int nArgs,
1266 + DataValue *result);
1267 +static int rangesetCreateMS(RestartData *context, DataValue *argList, int nArgs,
1268 + DataValue *result);
1269 +static int rangesetDestroyMS(RestartData *context, DataValue *argList, int nArgs,
1270 + DataValue *result);
1271 +static int rangesetGetByNameMS(RestartData *context, DataValue *argList, int nArgs,
1272 + DataValue *result);
1273 +static int rangesetAddMS(RestartData *context, DataValue *argList, int nArgs,
1274 + DataValue *result);
1275 +static int rangesetSubtractMS(RestartData *context, DataValue *argList, int nArgs,
1276 + DataValue *result);
1277 +static int rangesetInvertMS(RestartData *context, DataValue *argList, int nArgs,
1278 + DataValue *result);
1279 +static int rangesetInfoMS(RestartData *context, DataValue *argList, int nArgs,
1280 + DataValue *result);
1281 +static int rangesetRangeMS(RestartData *context, DataValue *argList, int nArgs,
1282 + DataValue *result);
1283 +static int rangesetIncludesPosMS(RestartData *context, DataValue *argList,
1284 + int nArgs, DataValue *result);
1285 +static int rangesetSetColorMS(RestartData *context, DataValue *argList,
1286 + int nArgs, DataValue *result);
1287 +static int rangesetSetUnderlineMS(RestartData *context, DataValue *argList,
1288 + int nArgs, DataValue *result);
1289 +static int rangesetSetNameMS(RestartData *context, DataValue *argList,
1290 + int nArgs, DataValue *result);
1291 +static int rangesetSetModeMS(RestartData *context, DataValue *argList,
1292 + int nArgs, DataValue *result);
1294 static int fillPatternResult(DataValue *result, char **errMsg, WindowInfo *window,
1295 char *patternName, Boolean preallocatedPatternName, Boolean includeName,
1296 char *styleName, int bufferPos);
1297 -static int getPatternByNameMS(WindowInfo *window, DataValue *argList, int nArgs,
1298 - DataValue *result, char **errMsg);
1299 -static int getPatternAtPosMS(WindowInfo *window, DataValue *argList, int nArgs,
1300 - DataValue *result, char **errMsg);
1301 +static int getPatternByNameMS(RestartData *context, DataValue *argList, int nArgs,
1302 + DataValue *result);
1303 +static int getPatternAtPosMS(RestartData *context, DataValue *argList, int nArgs,
1304 + DataValue *result);
1306 static int fillStyleResult(DataValue *result, char **errMsg,
1307 WindowInfo *window, char *styleName, Boolean preallocatedStyleName,
1308 Boolean includeName, int patCode, int bufferPos);
1309 -static int getStyleByNameMS(WindowInfo *window, DataValue *argList, int nArgs,
1310 - DataValue *result, char **errMsg);
1311 -static int getStyleAtPosMS(WindowInfo *window, DataValue *argList, int nArgs,
1312 - DataValue *result, char **errMsg);
1313 -static int filenameDialogMS(WindowInfo* window, DataValue* argList, int nArgs,
1314 - DataValue* result, char** errMsg);
1315 -static int callMS(WindowInfo *window, DataValue *argList,
1316 - int nArgs, DataValue *result, char **errMsg);
1317 -static int setWindowTitleMS(WindowInfo *window, DataValue *argList,
1318 - int nArgs, DataValue *result, char **errMsg);
1319 +static int getStyleByNameMS(RestartData *context, DataValue *argList, int nArgs,
1320 + DataValue *result);
1321 +static int getStyleAtPosMS(RestartData *context, DataValue *argList, int nArgs,
1322 + DataValue *result);
1323 +static int filenameDialogMS(RestartData *context, DataValue *argList, int nArgs,
1324 + DataValue *result);
1325 +static int callMS(RestartData *context, DataValue *argList, int nArgs,
1326 + DataValue *result);
1327 +static int setWindowTitleMS(RestartData *context, DataValue *argList, int nArgs,
1328 + DataValue *result);
1330 /* Pattern Match Feature */
1331 -static int getMatchingMS(WindowInfo *window, DataValue *argList, int nArgs,
1332 - DataValue *result, char **errMsg);
1333 +static int getMatchingMS(RestartData *context, DataValue *argList, int nArgs,
1334 + DataValue *result);
1336 -static int dictinsertMS(WindowInfo *window, DataValue *argList, int nArgs,
1337 - DataValue *result, char **errMsg);
1338 -static int dictcompleteMS(WindowInfo *window, DataValue *argList, int nArgs,
1339 - DataValue *result, char **errMsg);
1340 -static int dictsaveMS(WindowInfo *window, DataValue *argList, int nArgs,
1341 - DataValue *result, char **errMsg);
1342 -static int dictappendMS(WindowInfo *window, DataValue *argList, int nArgs,
1343 - DataValue *result, char **errMsg);
1344 -static int dictiselementMS(WindowInfo *window, DataValue *argList, int nArgs,
1345 - DataValue *result, char **errMsg);
1346 +static int dictinsertMS(RestartData *context, DataValue *argList, int nArgs,
1347 + DataValue *result);
1348 +static int dictcompleteMS(RestartData *context, DataValue *argList, int nArgs,
1349 + DataValue *result);
1350 +static int dictsaveMS(RestartData *context, DataValue *argList, int nArgs,
1351 + DataValue *result);
1352 +static int dictappendMS(RestartData *context, DataValue *argList, int nArgs,
1353 + DataValue *result);
1354 +static int dictiselementMS(RestartData *context, DataValue *argList, int nArgs,
1355 + DataValue *result);
1357 -static int defineMS(WindowInfo *window, DataValue *argList, int nArgs,
1358 - DataValue *result, char **errMsg);
1359 +static int defineMS(RestartData *context, DataValue *argList, int nArgs,
1360 + DataValue *result);
1363 * UL convertPos patch:
1364 * add "to_pos", "to_line", "to_column" macro subroutines
1366 -static int toPosMS(WindowInfo *window, DataValue *argList, int nArgs,
1367 - DataValue *result, char **errMsg);
1368 -static int toLineMS(WindowInfo *window, DataValue *argList, int nArgs,
1369 - DataValue *result, char **errMsg);
1370 -static int toColumnMS(WindowInfo *window, DataValue *argList, int nArgs,
1371 - DataValue *result, char **errMsg);
1373 -static int timerAddMS(WindowInfo *window, DataValue *argList,
1374 - int nArgs, DataValue *result, char **errMsg);
1375 -static int timerRemoveMS(WindowInfo *window, DataValue *argList,
1376 - int nArgs, DataValue *result, char **errMsg);
1377 -static int escapeLiteralMS(WindowInfo *window, DataValue *argList,
1378 - int nArgs, DataValue *result, char **errMsg);
1379 +static int toPosMS(RestartData *context, DataValue *argList, int nArgs,
1380 + DataValue *result);
1381 +static int toLineMS(RestartData *context, DataValue *argList, int nArgs,
1382 + DataValue *result);
1383 +static int toColumnMS(RestartData *context, DataValue *argList, int nArgs,
1384 + DataValue *result);
1386 +static int timerAddMS(RestartData *context, DataValue *argList,
1387 + int nArgs, DataValue *result);
1388 +static int timerRemoveMS(RestartData *context, DataValue *argList,
1389 + int nArgs, DataValue *result);
1390 +static int escapeLiteralMS(RestartData *context, DataValue *argList,
1391 + int nArgs, DataValue *result);
1393 /* Built-in subroutines and variables for the macro language */
1394 static const BuiltInSubrName MacroSubrs[] = {
1395 @@ -1190,7 +1190,7 @@ int MacroWindowCloseActions(WindowInfo *
1396 for (w=WindowList; w!=NULL; w=w->next) {
1397 mcd = (macroCmdInfo *)w->macroCmdData;
1398 if (w == MacroRunWindow() && MacroFocusWindow() == window)
1399 - SetMacroFocusWindow(MacroRunWindow());
1400 + SetMacroFocusWindow(w);
1401 else if (mcd != NULL && mcd->context->focusWindow == window)
1402 mcd->context->focusWindow = mcd->context->runWindow;
1404 @@ -1908,9 +1908,11 @@ static int escapedStringLength(char *str
1405 ** return $args
1406 ** }
1408 -static int argsMS(WindowInfo *window, DataValue *argList, int nArgs,
1409 - DataValue *result, char **errMsg)
1410 +static int argsMS(RestartData *context, DataValue *argList, int nArgs,
1411 + DataValue *result)
1413 + WindowInfo *window = MacroFocusWindow();
1414 + char **errMsg = &context->errMsg;
1415 DataValue *argsArray = &argList[nArgs];
1416 DataValue *argVal;
1417 int argNum;
1418 @@ -1944,9 +1946,11 @@ static int argsMS(WindowInfo *window, Da
1419 ** return i
1420 ** }
1422 -static int nArgsMS(WindowInfo *window, DataValue *argList, int nArgs,
1423 - DataValue *result, char **errMsg)
1424 +static int nArgsMS(RestartData *context, DataValue *argList, int nArgs,
1425 + DataValue *result)
1427 + WindowInfo *window = MacroFocusWindow();
1428 + char **errMsg = &context->errMsg;
1429 DataValue *argsArray = &argList[0];
1430 DataValue val;
1432 @@ -1970,9 +1974,11 @@ static int nArgsMS(WindowInfo *window, D
1434 ** Built-in macro subroutine for getting the length of a string
1436 -static int lengthMS(WindowInfo *window, DataValue *argList, int nArgs,
1437 - DataValue *result, char **errMsg)
1438 +static int lengthMS(RestartData *context, DataValue *argList, int nArgs,
1439 + DataValue *result)
1441 + WindowInfo *window = MacroFocusWindow();
1442 + char **errMsg = &context->errMsg;
1443 char *string, stringStorage[TYPE_INT_STR_SIZE(int)];
1445 if (nArgs != 1)
1446 @@ -1987,9 +1993,11 @@ static int lengthMS(WindowInfo *window,
1448 ** Built-in macro subroutines for min and max
1450 -static int minMS(WindowInfo *window, DataValue *argList, int nArgs,
1451 - DataValue *result, char **errMsg)
1452 +static int minMS(RestartData *context, DataValue *argList, int nArgs,
1453 + DataValue *result)
1455 + WindowInfo *window = MacroFocusWindow();
1456 + char **errMsg = &context->errMsg;
1457 int minVal, value, i;
1459 if (nArgs == 1)
1460 @@ -2005,9 +2013,11 @@ static int minMS(WindowInfo *window, Dat
1461 result->val.n = minVal;
1462 return True;
1464 -static int maxMS(WindowInfo *window, DataValue *argList, int nArgs,
1465 - DataValue *result, char **errMsg)
1466 +static int maxMS(RestartData *context, DataValue *argList, int nArgs,
1467 + DataValue *result)
1469 + WindowInfo *window = MacroFocusWindow();
1470 + char **errMsg = &context->errMsg;
1471 int maxVal, value, i;
1473 if (nArgs == 1)
1474 @@ -2024,9 +2034,11 @@ static int maxMS(WindowInfo *window, Dat
1475 return True;
1478 -static int focusWindowMS(WindowInfo *window, DataValue *argList, int nArgs,
1479 - DataValue *result, char **errMsg)
1480 +static int focusWindowMS(RestartData *context, DataValue *argList, int nArgs,
1481 + DataValue *result)
1483 + WindowInfo *window = MacroFocusWindow();
1484 + char **errMsg = &context->errMsg;
1485 char stringStorage[TYPE_INT_STR_SIZE(int)], *string;
1486 WindowInfo *w;
1487 char fullname[MAXPATHLEN];
1488 @@ -2097,9 +2109,11 @@ static int focusWindowMS(WindowInfo *win
1489 ** Built-in macro subroutine for getting text from the current window's text
1490 ** buffer
1492 -static int getRangeMS(WindowInfo *window, DataValue *argList, int nArgs,
1493 - DataValue *result, char **errMsg)
1494 +static int getRangeMS(RestartData *context, DataValue *argList, int nArgs,
1495 + DataValue *result)
1497 + WindowInfo *window = MacroFocusWindow();
1498 + char **errMsg = &context->errMsg;
1499 int from, to;
1500 textBuffer *buf = window->buffer;
1501 char *rangeText;
1502 @@ -2134,9 +2148,11 @@ static int getRangeMS(WindowInfo *window
1503 ** Built-in macro subroutine for getting a single character at the position
1504 ** given, from the current window
1506 -static int getCharacterMS(WindowInfo *window, DataValue *argList, int nArgs,
1507 - DataValue *result, char **errMsg)
1508 +static int getCharacterMS(RestartData *context, DataValue *argList, int nArgs,
1509 + DataValue *result)
1511 + WindowInfo *window = MacroFocusWindow();
1512 + char **errMsg = &context->errMsg;
1513 int pos;
1514 textBuffer *buf = window->buffer;
1516 @@ -2162,9 +2178,11 @@ static int getCharacterMS(WindowInfo *wi
1517 ** Built-in macro subroutine for replacing text in the current window's text
1518 ** buffer
1520 -static int replaceRangeMS(WindowInfo *window, DataValue *argList, int nArgs,
1521 - DataValue *result, char **errMsg)
1522 +static int replaceRangeMS(RestartData *context, DataValue *argList, int nArgs,
1523 + DataValue *result)
1525 + WindowInfo *window = MacroFocusWindow();
1526 + char **errMsg = &context->errMsg;
1527 int from, to;
1528 char stringStorage[TYPE_INT_STR_SIZE(int)], *string;
1529 textBuffer *buf = window->buffer;
1530 @@ -2212,9 +2230,11 @@ static int replaceRangeMS(WindowInfo *wi
1531 ** Built-in macro subroutine for replacing the primary-selection selected
1532 ** text in the current window's text buffer
1534 -static int replaceSelectionMS(WindowInfo *window, DataValue *argList, int nArgs,
1535 - DataValue *result, char **errMsg)
1536 +static int replaceSelectionMS(RestartData *context, DataValue *argList, int nArgs,
1537 + DataValue *result)
1539 + WindowInfo *window = MacroFocusWindow();
1540 + char **errMsg = &context->errMsg;
1541 char stringStorage[TYPE_INT_STR_SIZE(int)], *string;
1543 /* Validate argument and convert to string */
1544 @@ -2252,9 +2272,11 @@ static int replaceSelectionMS(WindowInfo
1545 ** the primary selection in the current window's text buffer, or in any
1546 ** part of screen if "any" argument is given
1548 -static int getSelectionMS(WindowInfo *window, DataValue *argList, int nArgs,
1549 - DataValue *result, char **errMsg)
1550 +static int getSelectionMS(RestartData *context, DataValue *argList, int nArgs,
1551 + DataValue *result)
1553 + WindowInfo *window = MacroFocusWindow();
1554 + char **errMsg = &context->errMsg;
1555 char *selText;
1557 /* Read argument list to check for "any" keyword, and get the appropriate
1558 @@ -2285,9 +2307,11 @@ static int getSelectionMS(WindowInfo *wi
1559 ** Built-in macro subroutine for determining if implicit conversion of
1560 ** a string to number will succeed or fail
1562 -static int validNumberMS(WindowInfo *window, DataValue *argList, int nArgs,
1563 - DataValue *result, char **errMsg)
1564 +static int validNumberMS(RestartData *context, DataValue *argList, int nArgs,
1565 + DataValue *result)
1567 + WindowInfo *window = MacroFocusWindow();
1568 + char **errMsg = &context->errMsg;
1569 char *string, stringStorage[TYPE_INT_STR_SIZE(int)];
1571 if (nArgs != 1) {
1572 @@ -2306,9 +2330,11 @@ static int validNumberMS(WindowInfo *win
1574 ** Built-in macro subroutine for replacing a substring within another string
1576 -static int replaceSubstringMS(WindowInfo *window, DataValue *argList, int nArgs,
1577 - DataValue *result, char **errMsg)
1578 +static int replaceSubstringMS(RestartData *context, DataValue *argList, int nArgs,
1579 + DataValue *result)
1581 + WindowInfo *window = MacroFocusWindow();
1582 + char **errMsg = &context->errMsg;
1583 int from, to, length, replaceLen, outLen;
1584 char stringStorage[2][TYPE_INT_STR_SIZE(int)], *string, *replStr;
1586 @@ -2345,9 +2371,11 @@ static int replaceSubstringMS(WindowInfo
1587 ** Built-in macro subroutine for getting a substring of a string.
1588 ** Called as substring(string, from [, to])
1590 -static int substringMS(WindowInfo *window, DataValue *argList, int nArgs,
1591 - DataValue *result, char **errMsg)
1592 +static int substringMS(RestartData *context, DataValue *argList, int nArgs,
1593 + DataValue *result)
1595 + WindowInfo *window = MacroFocusWindow();
1596 + char **errMsg = &context->errMsg;
1597 int from, to, length;
1598 char stringStorage[TYPE_INT_STR_SIZE(int)], *string;
1600 @@ -2376,9 +2404,11 @@ static int substringMS(WindowInfo *windo
1601 return True;
1604 -static int toupperMS(WindowInfo *window, DataValue *argList, int nArgs,
1605 - DataValue *result, char **errMsg)
1606 +static int toupperMS(RestartData *context, DataValue *argList, int nArgs,
1607 + DataValue *result)
1609 + WindowInfo *window = MacroFocusWindow();
1610 + char **errMsg = &context->errMsg;
1611 int i, length;
1612 char stringStorage[TYPE_INT_STR_SIZE(int)], *string;
1614 @@ -2397,9 +2427,11 @@ static int toupperMS(WindowInfo *window,
1615 return True;
1618 -static int tolowerMS(WindowInfo *window, DataValue *argList, int nArgs,
1619 - DataValue *result, char **errMsg)
1620 +static int tolowerMS(RestartData *context, DataValue *argList, int nArgs,
1621 + DataValue *result)
1623 + WindowInfo *window = MacroFocusWindow();
1624 + char **errMsg = &context->errMsg;
1625 int i, length;
1626 char stringStorage[TYPE_INT_STR_SIZE(int)], *string;
1628 @@ -2418,9 +2450,11 @@ static int tolowerMS(WindowInfo *window,
1629 return True;
1632 -static int stringToClipboardMS(WindowInfo *window, DataValue *argList, int nArgs,
1633 - DataValue *result, char **errMsg)
1634 +static int stringToClipboardMS(RestartData *context, DataValue *argList, int nArgs,
1635 + DataValue *result)
1637 + WindowInfo *window = MacroFocusWindow();
1638 + char **errMsg = &context->errMsg;
1639 long itemID = 0;
1640 XmString s;
1641 int stat;
1642 @@ -2450,9 +2484,11 @@ static int stringToClipboardMS(WindowInf
1643 return True;
1646 -static int clipboardToStringMS(WindowInfo *window, DataValue *argList, int nArgs,
1647 - DataValue *result, char **errMsg)
1648 +static int clipboardToStringMS(RestartData *context, DataValue *argList, int nArgs,
1649 + DataValue *result)
1651 + WindowInfo *window = MacroFocusWindow();
1652 + char **errMsg = &context->errMsg;
1653 unsigned long length, retLength;
1654 long id = 0;
1656 @@ -2568,9 +2604,11 @@ static char *convFilePathToAbsolute(cons
1657 ** to a full one, using the current window's directory as a base for relative
1658 ** path specifications. It does not check for file/path validity.
1660 -static int fullFileNameMS(WindowInfo *window, DataValue *argList, int nArgs,
1661 - DataValue *result, char **errMsg)
1662 +static int fullFileNameMS(RestartData *context, DataValue *argList, int nArgs,
1663 + DataValue *result)
1665 + WindowInfo *window = MacroFocusWindow();
1666 + char **errMsg = &context->errMsg;
1667 char stringStorage[TYPE_INT_STR_SIZE(int)], *name;
1668 size_t len;
1670 @@ -2603,9 +2641,11 @@ static int fullFileNameMS(WindowInfo *wi
1671 ** file as a string in the subroutine return value. On failure, returns
1672 ** the empty string "" and an 0 $readStatus.
1674 -static int readFileMS(WindowInfo *window, DataValue *argList, int nArgs,
1675 - DataValue *result, char **errMsg)
1676 +static int readFileMS(RestartData *context, DataValue *argList, int nArgs,
1677 + DataValue *result)
1679 + WindowInfo *window = MacroFocusWindow();
1680 + char **errMsg = &context->errMsg;
1681 char stringStorage[TYPE_INT_STR_SIZE(int)], *name;
1682 struct stat statbuf;
1683 FILE *fp;
1684 @@ -2672,15 +2712,19 @@ errorNoClose:
1685 ** to a file named in parameter $2. Returns 1 on successful write, or 0 if
1686 ** unsuccessful.
1688 -static int writeFileMS(WindowInfo *window, DataValue *argList, int nArgs,
1689 - DataValue *result, char **errMsg)
1690 +static int writeFileMS(RestartData *context, DataValue *argList, int nArgs,
1691 + DataValue *result)
1693 + WindowInfo *window = MacroFocusWindow();
1694 + char **errMsg = &context->errMsg;
1695 return writeOrAppendFile(False, window, argList, nArgs, result, errMsg);
1698 -static int appendFileMS(WindowInfo *window, DataValue *argList, int nArgs,
1699 - DataValue *result, char **errMsg)
1700 +static int appendFileMS(RestartData *context, DataValue *argList, int nArgs,
1701 + DataValue *result)
1703 + WindowInfo *window = MacroFocusWindow();
1704 + char **errMsg = &context->errMsg;
1705 return writeOrAppendFile(True, window, argList, nArgs, result, errMsg);
1708 @@ -2735,9 +2779,11 @@ static int writeOrAppendFile(int append,
1709 ** Returns the starting position of the match, or -1 if nothing matched.
1710 ** also returns the ending position of the match in $searchEndPos
1712 -static int searchMS(WindowInfo *window, DataValue *argList, int nArgs,
1713 - DataValue *result, char **errMsg)
1714 +static int searchMS(RestartData *context, DataValue *argList, int nArgs,
1715 + DataValue *result)
1717 + WindowInfo *window = MacroFocusWindow();
1718 + char **errMsg = &context->errMsg;
1719 DataValue newArgList[9];
1721 /* Use the search string routine, by adding the buffer contents as
1722 @@ -2754,7 +2800,7 @@ static int searchMS(WindowInfo *window,
1723 /* copy other arguments to the new argument list */
1724 memcpy(&newArgList[1], argList, nArgs * sizeof(DataValue));
1726 - return searchStringMS(window, newArgList, nArgs+1, result, errMsg);
1727 + return searchStringMS(context, newArgList, nArgs+1, result);
1731 @@ -2768,9 +2814,11 @@ static int searchMS(WindowInfo *window,
1732 ** Returns the starting position of the match, or -1 if nothing matched.
1733 ** also returns the ending position of the match in $searchEndPos
1735 -static int searchStringMS(WindowInfo *window, DataValue *argList, int nArgs,
1736 - DataValue *result, char **errMsg)
1737 +static int searchStringMS(RestartData *context, DataValue *argList, int nArgs,
1738 + DataValue *result)
1740 + WindowInfo *window = MacroFocusWindow();
1741 + char **errMsg = &context->errMsg;
1742 int beginPos, wrap, direction, found = False, foundStart, foundEnd, type;
1743 int skipSearch = False, len;
1744 char stringStorage[2][TYPE_INT_STR_SIZE(int)], *string, *searchStr;
1745 @@ -2835,9 +2883,11 @@ static int searchStringMS(WindowInfo *wi
1746 ** were performed and "copy" was specified, returns a copy of the original
1747 ** string. Otherwise returns an empty string ("").
1749 -static int replaceInStringMS(WindowInfo *window, DataValue *argList, int nArgs,
1750 - DataValue *result, char **errMsg)
1751 +static int replaceInStringMS(RestartData *context, DataValue *argList, int nArgs,
1752 + DataValue *result)
1754 + WindowInfo *window = MacroFocusWindow();
1755 + char **errMsg = &context->errMsg;
1756 char stringStorage[3][TYPE_INT_STR_SIZE(int)], *string, *searchStr, *replaceStr;
1757 char *argStr, *replacedStr;
1758 int searchType = SEARCH_LITERAL, copyStart, copyEnd;
1759 @@ -2929,9 +2979,11 @@ static int readSearchArgs(DataValue *arg
1760 return True;
1763 -static int setCursorPosMS(WindowInfo *window, DataValue *argList, int nArgs,
1764 - DataValue *result, char **errMsg)
1765 +static int setCursorPosMS(RestartData *context, DataValue *argList, int nArgs,
1766 + DataValue *result)
1768 + WindowInfo *window = MacroFocusWindow();
1769 + char **errMsg = &context->errMsg;
1770 int pos;
1772 /* Get argument and convert to int */
1773 @@ -2946,9 +2998,11 @@ static int setCursorPosMS(WindowInfo *wi
1774 return True;
1777 -static int selectMS(WindowInfo *window, DataValue *argList, int nArgs,
1778 - DataValue *result, char **errMsg)
1779 +static int selectMS(RestartData *context, DataValue *argList, int nArgs,
1780 + DataValue *result)
1782 + WindowInfo *window = MacroFocusWindow();
1783 + char **errMsg = &context->errMsg;
1784 int start, end, startTmp;
1786 /* Get arguments and convert to int */
1787 @@ -2976,9 +3030,11 @@ static int selectMS(WindowInfo *window,
1788 return True;
1791 -static int selectRectangleMS(WindowInfo *window, DataValue *argList, int nArgs,
1792 - DataValue *result, char **errMsg)
1793 +static int selectRectangleMS(RestartData *context, DataValue *argList, int nArgs,
1794 + DataValue *result)
1796 + WindowInfo *window = MacroFocusWindow();
1797 + char **errMsg = &context->errMsg;
1798 int start, end, left, right;
1800 /* Get arguments and convert to int */
1801 @@ -3002,9 +3058,11 @@ static int selectRectangleMS(WindowInfo
1803 ** Macro subroutine to ring the bell
1805 -static int beepMS(WindowInfo *window, DataValue *argList, int nArgs,
1806 - DataValue *result, char **errMsg)
1807 +static int beepMS(RestartData *context, DataValue *argList, int nArgs,
1808 + DataValue *result)
1810 + WindowInfo *window = MacroFocusWindow();
1811 + char **errMsg = &context->errMsg;
1812 if (nArgs != 0)
1813 return wrongNArgsErr(errMsg);
1814 XBell(XtDisplay(window->shell), 0);
1815 @@ -3012,9 +3070,11 @@ static int beepMS(WindowInfo *window, Da
1816 return True;
1819 -static int tPrintMS(WindowInfo *window, DataValue *argList, int nArgs,
1820 - DataValue *result, char **errMsg)
1821 +static int tPrintMS(RestartData *context, DataValue *argList, int nArgs,
1822 + DataValue *result)
1824 + WindowInfo *window = MacroFocusWindow();
1825 + char **errMsg = &context->errMsg;
1826 char stringStorage[TYPE_INT_STR_SIZE(int)], *string;
1827 int i;
1829 @@ -3033,9 +3093,11 @@ static int tPrintMS(WindowInfo *window,
1831 ** Built-in macro subroutine for getting the value of an environment variable
1833 -static int getenvMS(WindowInfo *window, DataValue *argList, int nArgs,
1834 - DataValue *result, char **errMsg)
1835 +static int getenvMS(RestartData *context, DataValue *argList, int nArgs,
1836 + DataValue *result)
1838 + WindowInfo *window = MacroFocusWindow();
1839 + char **errMsg = &context->errMsg;
1840 char stringStorage[1][TYPE_INT_STR_SIZE(int)];
1841 char *name;
1842 char *value;
1843 @@ -3057,9 +3119,11 @@ static int getenvMS(WindowInfo *window,
1844 return True;
1847 -static int shellCmdMS(WindowInfo *window, DataValue *argList, int nArgs,
1848 - DataValue *result, char **errMsg)
1849 +static int shellCmdMS(RestartData *context, DataValue *argList, int nArgs,
1850 + DataValue *result)
1852 + WindowInfo *window = MacroFocusWindow();
1853 + char **errMsg = &context->errMsg;
1854 char stringStorage[2][TYPE_INT_STR_SIZE(int)], *cmdString, *inputString = "";
1856 if (nArgs != 1 && nArgs != 2)
1857 @@ -3109,9 +3173,11 @@ void ReturnShellCommandOutput(WindowInfo
1858 ReturnGlobals[SHELL_CMD_STATUS]->value.val.n = status;
1861 -static int dialogMS(WindowInfo *window, DataValue *argList, int nArgs,
1862 - DataValue *result, char **errMsg)
1863 +static int dialogMS(RestartData *context, DataValue *argList, int nArgs,
1864 + DataValue *result)
1866 + WindowInfo *window = MacroFocusWindow();
1867 + char **errMsg = &context->errMsg;
1868 macroCmdInfo *cmdData;
1869 char stringStorage[TYPE_INT_STR_SIZE(int)];
1870 char btnStorage[TYPE_INT_STR_SIZE(int)];
1871 @@ -3286,9 +3352,11 @@ static void dialogEscCB(Widget w, XtPoin
1873 #endif /* LESSTIF_VERSION */
1875 -static int stringDialogMS(WindowInfo *window, DataValue *argList, int nArgs,
1876 - DataValue *result, char **errMsg)
1877 +static int stringDialogMS(RestartData *context, DataValue *argList, int nArgs,
1878 + DataValue *result)
1880 + WindowInfo *window = MacroFocusWindow();
1881 + char **errMsg = &context->errMsg;
1882 macroCmdInfo *cmdData;
1883 char stringStorage[TYPE_INT_STR_SIZE(int)];
1884 char btnStorage[TYPE_INT_STR_SIZE(int)];
1885 @@ -3512,9 +3580,11 @@ static void stringDialogEscCB(Widget w,
1886 ** Does this need to go on IgnoredActions? I don't think so, since
1887 ** showing a calltip may be part of the action you want to learn.
1889 -static int calltipMS(WindowInfo *window, DataValue *argList, int nArgs,
1890 - DataValue *result, char **errMsg)
1891 +static int calltipMS(RestartData *context, DataValue *argList, int nArgs,
1892 + DataValue *result)
1894 + WindowInfo *window = MacroFocusWindow();
1895 + char **errMsg = &context->errMsg;
1896 char stringStorage[TYPE_INT_STR_SIZE(int)], *tipText, *txtArg;
1897 Boolean anchored = False, lookup = True;
1898 int mode = -1, i;
1899 @@ -3605,9 +3675,11 @@ bad_arg:
1901 ** A subroutine to kill the current calltip
1903 -static int killCalltipMS(WindowInfo *window, DataValue *argList, int nArgs,
1904 - DataValue *result, char **errMsg)
1905 +static int killCalltipMS(RestartData *context, DataValue *argList, int nArgs,
1906 + DataValue *result)
1908 + WindowInfo *window = MacroFocusWindow();
1909 + char **errMsg = &context->errMsg;
1910 int calltipID = 0;
1912 if (nArgs > 1) {
1913 @@ -3628,9 +3700,11 @@ static int killCalltipMS(WindowInfo *win
1915 ** highlight_calltip_line(ctID, line)
1917 -static int highlightCTLineMS(WindowInfo *window, DataValue *argList, int nArgs,
1918 - DataValue *result, char **errMsg)
1919 +static int highlightCTLineMS(RestartData *context, DataValue *argList, int nArgs,
1920 + DataValue *result)
1922 + WindowInfo *window = MacroFocusWindow();
1923 + char **errMsg = &context->errMsg;
1924 int calltipID = 0;
1925 int line;
1926 int highlightResult;
1927 @@ -3679,9 +3753,11 @@ static int highlightCTLineMS(WindowInfo
1929 * A subroutine to get the ID of the current calltip, or 0 if there is none.
1931 -static int calltipIDMV(WindowInfo *window, DataValue *argList,
1932 - int nArgs, DataValue *result, char **errMsg)
1933 +static int calltipIDMV(RestartData *context, DataValue *argList, int nArgs,
1934 + DataValue *result)
1936 + WindowInfo *window = MacroFocusWindow();
1937 + char **errMsg = &context->errMsg;
1938 result->tag = INT_TAG;
1939 result->val.n = GetCalltipID(window, 0);
1940 return True;
1941 @@ -3708,9 +3784,11 @@ static int calltipIDMV(WindowInfo *windo
1943 ** Note that defaultName doesn't work on all *tifs. :-(
1945 -static int filenameDialogMS(WindowInfo* window, DataValue* argList, int nArgs,
1946 - DataValue* result, char** errMsg)
1947 +static int filenameDialogMS(RestartData *context, DataValue *argList, int nArgs,
1948 + DataValue *result)
1950 + WindowInfo *window = MacroFocusWindow();
1951 + char **errMsg = &context->errMsg;
1952 char stringStorage[5][TYPE_INT_STR_SIZE(int)];
1953 char filename[MAXPATHLEN + 1];
1954 char* title = "Choose Filename";
1955 @@ -3811,9 +3889,11 @@ static int filenameDialogMS(WindowInfo*
1957 * call(fnname, arg, ...)
1959 -static int callMS(WindowInfo *window, DataValue *argList,
1960 - int nArgs, DataValue *result, char **errMsg)
1961 +static int callMS(RestartData *context, DataValue *argList, int nArgs,
1962 + DataValue *result)
1964 + WindowInfo *window = MacroFocusWindow();
1965 + char **errMsg = &context->errMsg;
1966 Symbol *sym;
1968 if (nArgs < 1) {
1969 @@ -3838,15 +3918,17 @@ static int callMS(WindowInfo *window, Da
1970 return False;
1973 - return OverlayRoutineFromSymbol(sym, nArgs, 1);
1974 + return OverlayRoutineFromSymbol(context, sym, nArgs, 1);
1978 * subr = define(func_name, func_body[, "override"])
1980 -static int defineMS(WindowInfo *window, DataValue *argList, int nArgs,
1981 - DataValue *result, char **errMsg)
1982 +static int defineMS(RestartData *context, DataValue *argList, int nArgs,
1983 + DataValue *result)
1985 + WindowInfo *window = MacroFocusWindow();
1986 + char **errMsg = &context->errMsg;
1987 char stringStorage[3][TYPE_INT_STR_SIZE(int)];
1988 char *name = NULL;
1989 char *body = NULL;
1990 @@ -3940,9 +4022,11 @@ static int defineMS(WindowInfo *window,
1992 * set_window_title(format[, ("text"|"format")])
1994 -static int setWindowTitleMS(WindowInfo *window, DataValue *argList,
1995 - int nArgs, DataValue *result, char **errMsg)
1996 +static int setWindowTitleMS(RestartData *context, DataValue *argList, int nArgs,
1997 + DataValue *result)
1999 + WindowInfo *window = MacroFocusWindow();
2000 + char **errMsg = &context->errMsg;
2001 char stringStorage[2][TYPE_INT_STR_SIZE(int)];
2002 char *fmt = NULL;
2003 char *type = NULL;
2004 @@ -4064,9 +4148,11 @@ out:
2006 * timer_ID = timer_add(macro_name, timeout[, "global"])
2008 -static int timerAddMS(WindowInfo *window, DataValue *argList, int nArgs,
2009 - DataValue *result, char **errMsg)
2010 +static int timerAddMS(RestartData *context, DataValue *argList, int nArgs,
2011 + DataValue *result)
2013 + WindowInfo *window = MacroFocusWindow();
2014 + char **errMsg = &context->errMsg;
2015 int timeout;
2016 char stringStorage[2][TYPE_INT_STR_SIZE(int)];
2017 char *name = NULL;
2018 @@ -4132,9 +4218,11 @@ static int timerAddMS(WindowInfo *window
2020 * timer_remove(timer_ID)
2022 -static int timerRemoveMS(WindowInfo *window, DataValue *argList, int nArgs,
2023 - DataValue *result, char **errMsg)
2024 +static int timerRemoveMS(RestartData *context, DataValue *argList, int nArgs,
2025 + DataValue *result)
2027 + WindowInfo *window = MacroFocusWindow();
2028 + char **errMsg = &context->errMsg;
2029 int timerid;
2030 XtIntervalId id;
2031 TimerProcData *data, **s;
2032 @@ -4175,9 +4263,11 @@ static int timerRemoveMS(WindowInfo *win
2034 * escaped_string = escape_literal(string)
2036 -static int escapeLiteralMS(WindowInfo *window, DataValue *argList, int nArgs,
2037 - DataValue *result, char **errMsg)
2038 +static int escapeLiteralMS(RestartData *context, DataValue *argList, int nArgs,
2039 + DataValue *result)
2041 + WindowInfo *window = MacroFocusWindow();
2042 + char **errMsg = &context->errMsg;
2043 static const char chars_to_escape[] = "()[]<>{}.\\|^$*+?&";
2044 char stringStorage[TYPE_INT_STR_SIZE(int)];
2045 char *string = NULL;
2046 @@ -4221,9 +4311,11 @@ static int escapeLiteralMS(WindowInfo *w
2049 /* T Balinski */
2050 -static int listDialogMS(WindowInfo *window, DataValue *argList, int nArgs,
2051 - DataValue *result, char **errMsg)
2052 +static int listDialogMS(RestartData *context, DataValue *argList, int nArgs,
2053 + DataValue *result)
2055 + WindowInfo *window = MacroFocusWindow();
2056 + char **errMsg = &context->errMsg;
2057 macroCmdInfo *cmdData;
2058 char stringStorage[TYPE_INT_STR_SIZE(int)];
2059 char textStorage[TYPE_INT_STR_SIZE(int)];
2060 @@ -4568,9 +4660,11 @@ static void listDialogEscCB(Widget w, Xt
2061 #endif /* LESSTIF_VERSION */
2064 -static int stringCompareMS(WindowInfo *window, DataValue *argList, int nArgs,
2065 - DataValue *result, char **errMsg)
2066 +static int stringCompareMS(RestartData *context, DataValue *argList, int nArgs,
2067 + DataValue *result)
2069 + WindowInfo *window = MacroFocusWindow();
2070 + char **errMsg = &context->errMsg;
2071 char stringStorage[3][TYPE_INT_STR_SIZE(int)];
2072 char *leftStr, *rightStr, *argStr;
2073 int considerCase = True;
2074 @@ -4644,9 +4738,11 @@ static int stringCompareMS(WindowInfo *w
2075 ** array sub-scripts (unless "lastnotnull" is present)
2078 -static int splitMS(WindowInfo *window, DataValue *argList, int nArgs,
2079 - DataValue *result, char **errMsg)
2080 +static int splitMS(RestartData *context, DataValue *argList, int nArgs,
2081 + DataValue *result)
2083 + WindowInfo *window = MacroFocusWindow();
2084 + char **errMsg = &context->errMsg;
2085 char stringStorage[3][TYPE_INT_STR_SIZE(int)];
2086 char *sourceStr, *splitStr, *typeSplitStr;
2087 int searchType, beginPos, foundStart, foundEnd, strLength, lastEnd;
2088 @@ -4835,9 +4931,11 @@ static int splitMS(WindowInfo *window, D
2089 ** end will be one beyond the last valid integer index of a contiguous sequence
2090 ** starting at start.
2092 -static int joinMS(WindowInfo *window, DataValue *argList, int nArgs,
2093 - DataValue *result, char **errMsg)
2094 +static int joinMS(RestartData *context, DataValue *argList, int nArgs,
2095 + DataValue *result)
2097 + WindowInfo *window = MacroFocusWindow();
2098 + char **errMsg = &context->errMsg;
2099 char stringStorage[TYPE_INT_STR_SIZE(int)];
2100 char *sepStr;
2101 int start, end, index;
2102 @@ -4950,8 +5048,8 @@ static int joinMS(WindowInfo *window, Da
2103 ** will be cleared, turning off backlighting.
2105 /* DISABLED for 5.4
2106 -static int setBacklightStringMS(WindowInfo *window, DataValue *argList,
2107 - int nArgs, DataValue *result, char **errMsg)
2108 +static int setBacklightStringMS(RestartData *context, DataValue *argList,
2109 + int nArgs, DataValue *result)
2111 char *backlightString;
2113 @@ -4977,17 +5075,21 @@ static int setBacklightStringMS(WindowIn
2114 return True;
2115 } */
2117 -static int cursorMV(WindowInfo *window, DataValue *argList, int nArgs,
2118 - DataValue *result, char **errMsg)
2119 +static int cursorMV(RestartData *context, DataValue *argList, int nArgs,
2120 + DataValue *result)
2122 + WindowInfo *window = MacroFocusWindow();
2123 + char **errMsg = &context->errMsg;
2124 result->tag = INT_TAG;
2125 result->val.n = TextGetCursorPos(window->lastFocus);
2126 return True;
2129 -static int lineMV(WindowInfo *window, DataValue *argList, int nArgs,
2130 - DataValue *result, char **errMsg)
2131 +static int lineMV(RestartData *context, DataValue *argList, int nArgs,
2132 + DataValue *result)
2134 + WindowInfo *window = MacroFocusWindow();
2135 + char **errMsg = &context->errMsg;
2136 int line, cursorPos, colNum;
2138 result->tag = INT_TAG;
2139 @@ -4998,9 +5100,11 @@ static int lineMV(WindowInfo *window, Da
2140 return True;
2143 -static int columnMV(WindowInfo *window, DataValue *argList, int nArgs,
2144 - DataValue *result, char **errMsg)
2145 +static int columnMV(RestartData *context, DataValue *argList, int nArgs,
2146 + DataValue *result)
2148 + WindowInfo *window = MacroFocusWindow();
2149 + char **errMsg = &context->errMsg;
2150 textBuffer *buf = window->buffer;
2151 int cursorPos;
2153 @@ -5011,51 +5115,63 @@ static int columnMV(WindowInfo *window,
2154 return True;
2157 -static int fileNameMV(WindowInfo *window, DataValue *argList, int nArgs,
2158 - DataValue *result, char **errMsg)
2159 +static int fileNameMV(RestartData *context, DataValue *argList, int nArgs,
2160 + DataValue *result)
2162 + WindowInfo *window = MacroFocusWindow();
2163 + char **errMsg = &context->errMsg;
2164 result->tag = STRING_TAG;
2165 AllocNStringCpy(&result->val.str, window->filename);
2166 return True;
2169 -static int filePathMV(WindowInfo *window, DataValue *argList, int nArgs,
2170 - DataValue *result, char **errMsg)
2171 +static int filePathMV(RestartData *context, DataValue *argList, int nArgs,
2172 + DataValue *result)
2174 + WindowInfo *window = MacroFocusWindow();
2175 + char **errMsg = &context->errMsg;
2176 result->tag = STRING_TAG;
2177 AllocNStringCpy(&result->val.str, window->path);
2178 return True;
2181 -static int lengthMV(WindowInfo *window, DataValue *argList, int nArgs,
2182 - DataValue *result, char **errMsg)
2183 +static int lengthMV(RestartData *context, DataValue *argList, int nArgs,
2184 + DataValue *result)
2186 + WindowInfo *window = MacroFocusWindow();
2187 + char **errMsg = &context->errMsg;
2188 result->tag = INT_TAG;
2189 result->val.n = window->buffer->length;
2190 return True;
2193 -static int selectionStartMV(WindowInfo *window, DataValue *argList, int nArgs,
2194 - DataValue *result, char **errMsg)
2195 +static int selectionStartMV(RestartData *context, DataValue *argList, int nArgs,
2196 + DataValue *result)
2198 + WindowInfo *window = MacroFocusWindow();
2199 + char **errMsg = &context->errMsg;
2200 result->tag = INT_TAG;
2201 result->val.n = window->buffer->primary.selected ?
2202 window->buffer->primary.start : -1;
2203 return True;
2206 -static int selectionEndMV(WindowInfo *window, DataValue *argList, int nArgs,
2207 - DataValue *result, char **errMsg)
2208 +static int selectionEndMV(RestartData *context, DataValue *argList, int nArgs,
2209 + DataValue *result)
2211 + WindowInfo *window = MacroFocusWindow();
2212 + char **errMsg = &context->errMsg;
2213 result->tag = INT_TAG;
2214 result->val.n = window->buffer->primary.selected ?
2215 window->buffer->primary.end : -1;
2216 return True;
2219 -static int selectionLeftMV(WindowInfo *window, DataValue *argList, int nArgs,
2220 - DataValue *result, char **errMsg)
2221 +static int selectionLeftMV(RestartData *context, DataValue *argList, int nArgs,
2222 + DataValue *result)
2224 + WindowInfo *window = MacroFocusWindow();
2225 + char **errMsg = &context->errMsg;
2226 selection *sel = &window->buffer->primary;
2228 result->tag = INT_TAG;
2229 @@ -5063,9 +5179,11 @@ static int selectionLeftMV(WindowInfo *w
2230 return True;
2233 -static int selectionRightMV(WindowInfo *window, DataValue *argList, int nArgs,
2234 - DataValue *result, char **errMsg)
2235 +static int selectionRightMV(RestartData *context, DataValue *argList, int nArgs,
2236 + DataValue *result)
2238 + WindowInfo *window = MacroFocusWindow();
2239 + char **errMsg = &context->errMsg;
2240 selection *sel = &window->buffer->primary;
2242 result->tag = INT_TAG;
2243 @@ -5073,9 +5191,11 @@ static int selectionRightMV(WindowInfo *
2244 return True;
2247 -static int wrapMarginMV(WindowInfo *window, DataValue *argList, int nArgs,
2248 - DataValue *result, char **errMsg)
2249 +static int wrapMarginMV(RestartData *context, DataValue *argList, int nArgs,
2250 + DataValue *result)
2252 + WindowInfo *window = MacroFocusWindow();
2253 + char **errMsg = &context->errMsg;
2254 int margin, nCols;
2256 XtVaGetValues(window->textArea, textNcolumns, &nCols,
2257 @@ -5085,33 +5205,41 @@ static int wrapMarginMV(WindowInfo *wind
2258 return True;
2261 -static int statisticsLineMV(WindowInfo *window, DataValue *argList, int nArgs,
2262 - DataValue *result, char **errMsg)
2263 +static int statisticsLineMV(RestartData *context, DataValue *argList, int nArgs,
2264 + DataValue *result)
2266 + WindowInfo *window = MacroFocusWindow();
2267 + char **errMsg = &context->errMsg;
2268 result->tag = INT_TAG;
2269 result->val.n = window->showStats ? 1 : 0;
2270 return True;
2273 -static int incSearchLineMV(WindowInfo *window, DataValue *argList, int nArgs,
2274 - DataValue *result, char **errMsg)
2275 +static int incSearchLineMV(RestartData *context, DataValue *argList, int nArgs,
2276 + DataValue *result)
2278 + WindowInfo *window = MacroFocusWindow();
2279 + char **errMsg = &context->errMsg;
2280 result->tag = INT_TAG;
2281 result->val.n = window->showISearchLine ? 1 : 0;
2282 return True;
2285 -static int showLineNumbersMV(WindowInfo *window, DataValue *argList, int nArgs,
2286 - DataValue *result, char **errMsg)
2287 +static int showLineNumbersMV(RestartData *context, DataValue *argList, int nArgs,
2288 + DataValue *result)
2290 + WindowInfo *window = MacroFocusWindow();
2291 + char **errMsg = &context->errMsg;
2292 result->tag = INT_TAG;
2293 result->val.n = window->showLineNumbers ? 1 : 0;
2294 return True;
2297 -static int autoIndentMV(WindowInfo *window, DataValue *argList, int nArgs,
2298 - DataValue *result, char **errMsg)
2299 +static int autoIndentMV(RestartData *context, DataValue *argList, int nArgs,
2300 + DataValue *result)
2302 + WindowInfo *window = MacroFocusWindow();
2303 + char **errMsg = &context->errMsg;
2304 char *res = NULL;
2306 switch (window->indentStyle) {
2307 @@ -5135,9 +5263,11 @@ static int autoIndentMV(WindowInfo *wind
2308 return True;
2311 -static int wrapTextMV(WindowInfo *window, DataValue *argList, int nArgs,
2312 - DataValue *result, char **errMsg)
2313 +static int wrapTextMV(RestartData *context, DataValue *argList, int nArgs,
2314 + DataValue *result)
2316 + WindowInfo *window = MacroFocusWindow();
2317 + char **errMsg = &context->errMsg;
2318 char *res = NULL;
2320 switch (window->wrapMode) {
2321 @@ -5161,33 +5291,41 @@ static int wrapTextMV(WindowInfo *window
2322 return True;
2325 -static int highlightSyntaxMV(WindowInfo *window, DataValue *argList, int nArgs,
2326 - DataValue *result, char **errMsg)
2327 +static int highlightSyntaxMV(RestartData *context, DataValue *argList, int nArgs,
2328 + DataValue *result)
2330 + WindowInfo *window = MacroFocusWindow();
2331 + char **errMsg = &context->errMsg;
2332 result->tag = INT_TAG;
2333 result->val.n = window->highlightSyntax ? 1 : 0;
2334 return True;
2337 -static int makeBackupCopyMV(WindowInfo *window, DataValue *argList, int nArgs,
2338 - DataValue *result, char **errMsg)
2339 +static int makeBackupCopyMV(RestartData *context, DataValue *argList, int nArgs,
2340 + DataValue *result)
2342 + WindowInfo *window = MacroFocusWindow();
2343 + char **errMsg = &context->errMsg;
2344 result->tag = INT_TAG;
2345 result->val.n = window->saveOldVersion ? 1 : 0;
2346 return True;
2349 -static int incBackupMV(WindowInfo *window, DataValue *argList, int nArgs,
2350 - DataValue *result, char **errMsg)
2351 +static int incBackupMV(RestartData *context, DataValue *argList, int nArgs,
2352 + DataValue *result)
2354 + WindowInfo *window = MacroFocusWindow();
2355 + char **errMsg = &context->errMsg;
2356 result->tag = INT_TAG;
2357 result->val.n = window->autoSave ? 1 : 0;
2358 return True;
2361 -static int showMatchingMV(WindowInfo *window, DataValue *argList, int nArgs,
2362 - DataValue *result, char **errMsg)
2363 +static int showMatchingMV(RestartData *context, DataValue *argList, int nArgs,
2364 + DataValue *result)
2366 + WindowInfo *window = MacroFocusWindow();
2367 + char **errMsg = &context->errMsg;
2368 char *res = NULL;
2370 switch (window->showMatchingStyle) {
2371 @@ -5211,33 +5349,41 @@ static int showMatchingMV(WindowInfo *wi
2372 return True;
2375 -static int overTypeModeMV(WindowInfo *window, DataValue *argList, int nArgs,
2376 - DataValue *result, char **errMsg)
2377 +static int overTypeModeMV(RestartData *context, DataValue *argList, int nArgs,
2378 + DataValue *result)
2380 + WindowInfo *window = MacroFocusWindow();
2381 + char **errMsg = &context->errMsg;
2382 result->tag = INT_TAG;
2383 result->val.n = window->overstrike ? 1 : 0;
2384 return True;
2387 -static int readOnlyMV(WindowInfo *window, DataValue *argList, int nArgs,
2388 - DataValue *result, char **errMsg)
2389 +static int readOnlyMV(RestartData *context, DataValue *argList, int nArgs,
2390 + DataValue *result)
2392 + WindowInfo *window = MacroFocusWindow();
2393 + char **errMsg = &context->errMsg;
2394 result->tag = INT_TAG;
2395 result->val.n = (IS_ANY_LOCKED(window->lockReasons)) ? 1 : 0;
2396 return True;
2399 -static int lockedMV(WindowInfo *window, DataValue *argList, int nArgs,
2400 - DataValue *result, char **errMsg)
2401 +static int lockedMV(RestartData *context, DataValue *argList, int nArgs,
2402 + DataValue *result)
2404 + WindowInfo *window = MacroFocusWindow();
2405 + char **errMsg = &context->errMsg;
2406 result->tag = INT_TAG;
2407 result->val.n = (IS_USER_LOCKED(window->lockReasons)) ? 1 : 0;
2408 return True;
2411 -static int fileFormatMV(WindowInfo *window, DataValue *argList, int nArgs,
2412 - DataValue *result, char **errMsg)
2413 +static int fileFormatMV(RestartData *context, DataValue *argList, int nArgs,
2414 + DataValue *result)
2416 + WindowInfo *window = MacroFocusWindow();
2417 + char **errMsg = &context->errMsg;
2418 char *res = NULL;
2420 switch (window->fileFormat) {
2421 @@ -5260,130 +5406,162 @@ static int fileFormatMV(WindowInfo *wind
2422 return True;
2425 -static int fontNameMV(WindowInfo *window, DataValue *argList, int nArgs,
2426 - DataValue *result, char **errMsg)
2427 +static int fontNameMV(RestartData *context, DataValue *argList, int nArgs,
2428 + DataValue *result)
2430 + WindowInfo *window = MacroFocusWindow();
2431 + char **errMsg = &context->errMsg;
2432 result->tag = STRING_TAG;
2433 AllocNStringCpy(&result->val.str, window->fontName);
2434 return True;
2437 -static int fontNameItalicMV(WindowInfo *window, DataValue *argList, int nArgs,
2438 - DataValue *result, char **errMsg)
2439 +static int fontNameItalicMV(RestartData *context, DataValue *argList, int nArgs,
2440 + DataValue *result)
2442 + WindowInfo *window = MacroFocusWindow();
2443 + char **errMsg = &context->errMsg;
2444 result->tag = STRING_TAG;
2445 AllocNStringCpy(&result->val.str, window->italicFontName);
2446 return True;
2449 -static int fontNameBoldMV(WindowInfo *window, DataValue *argList, int nArgs,
2450 - DataValue *result, char **errMsg)
2451 +static int fontNameBoldMV(RestartData *context, DataValue *argList, int nArgs,
2452 + DataValue *result)
2454 + WindowInfo *window = MacroFocusWindow();
2455 + char **errMsg = &context->errMsg;
2456 result->tag = STRING_TAG;
2457 AllocNStringCpy(&result->val.str, window->boldFontName);
2458 return True;
2461 -static int fontNameBoldItalicMV(WindowInfo *window, DataValue *argList, int nArgs,
2462 - DataValue *result, char **errMsg)
2463 +static int fontNameBoldItalicMV(RestartData *context, DataValue *argList, int nArgs,
2464 + DataValue *result)
2466 + WindowInfo *window = MacroFocusWindow();
2467 + char **errMsg = &context->errMsg;
2468 result->tag = STRING_TAG;
2469 AllocNStringCpy(&result->val.str, window->boldItalicFontName);
2470 return True;
2473 -static int subscriptSepMV(WindowInfo *window, DataValue *argList, int nArgs,
2474 - DataValue *result, char **errMsg)
2475 +static int subscriptSepMV(RestartData *context, DataValue *argList, int nArgs,
2476 + DataValue *result)
2478 + WindowInfo *window = MacroFocusWindow();
2479 + char **errMsg = &context->errMsg;
2480 result->tag = STRING_TAG;
2481 result->val.str.rep = PERM_ALLOC_STR(ARRAY_DIM_SEP);
2482 result->val.str.len = strlen(result->val.str.rep);
2483 return True;
2486 -static int minFontWidthMV(WindowInfo *window, DataValue *argList, int nArgs,
2487 - DataValue *result, char **errMsg)
2488 +static int minFontWidthMV(RestartData *context, DataValue *argList, int nArgs,
2489 + DataValue *result)
2491 + WindowInfo *window = MacroFocusWindow();
2492 + char **errMsg = &context->errMsg;
2493 result->tag = INT_TAG;
2494 result->val.n = TextGetMinFontWidth(window->textArea, window->highlightSyntax);
2495 return True;
2498 -static int maxFontWidthMV(WindowInfo *window, DataValue *argList, int nArgs,
2499 - DataValue *result, char **errMsg)
2500 +static int maxFontWidthMV(RestartData *context, DataValue *argList, int nArgs,
2501 + DataValue *result)
2503 + WindowInfo *window = MacroFocusWindow();
2504 + char **errMsg = &context->errMsg;
2505 result->tag = INT_TAG;
2506 result->val.n = TextGetMaxFontWidth(window->textArea, window->highlightSyntax);
2507 return True;
2510 -static int topLineMV(WindowInfo *window, DataValue *argList, int nArgs,
2511 - DataValue *result, char **errMsg)
2512 +static int topLineMV(RestartData *context, DataValue *argList, int nArgs,
2513 + DataValue *result)
2515 + WindowInfo *window = MacroFocusWindow();
2516 + char **errMsg = &context->errMsg;
2517 result->tag = INT_TAG;
2518 result->val.n = TextFirstVisibleLine(window->lastFocus);
2519 return True;
2522 -static int numDisplayLinesMV(WindowInfo *window, DataValue *argList, int nArgs,
2523 - DataValue *result, char **errMsg)
2524 +static int numDisplayLinesMV(RestartData *context, DataValue *argList, int nArgs,
2525 + DataValue *result)
2527 + WindowInfo *window = MacroFocusWindow();
2528 + char **errMsg = &context->errMsg;
2529 result->tag = INT_TAG;
2530 result->val.n = TextNumVisibleLines(window->lastFocus);
2531 return True;
2534 -static int displayWidthMV(WindowInfo *window, DataValue *argList, int nArgs,
2535 - DataValue *result, char **errMsg)
2536 +static int displayWidthMV(RestartData *context, DataValue *argList, int nArgs,
2537 + DataValue *result)
2539 + WindowInfo *window = MacroFocusWindow();
2540 + char **errMsg = &context->errMsg;
2541 result->tag = INT_TAG;
2542 result->val.n = TextVisibleWidth(window->lastFocus);
2543 return True;
2546 -static int activePaneMV(WindowInfo *window, DataValue *argList, int nArgs,
2547 - DataValue *result, char **errMsg)
2548 +static int activePaneMV(RestartData *context, DataValue *argList, int nArgs,
2549 + DataValue *result)
2551 + WindowInfo *window = MacroFocusWindow();
2552 + char **errMsg = &context->errMsg;
2553 result->tag = INT_TAG;
2554 result->val.n = WidgetToPaneIndex(window, window->lastFocus) + 1;
2555 return True;
2558 -static int nPanesMV(WindowInfo *window, DataValue *argList, int nArgs,
2559 - DataValue *result, char **errMsg)
2560 +static int nPanesMV(RestartData *context, DataValue *argList, int nArgs,
2561 + DataValue *result)
2563 + WindowInfo *window = MacroFocusWindow();
2564 + char **errMsg = &context->errMsg;
2565 result->tag = INT_TAG;
2566 result->val.n = window->nPanes + 1;
2567 return True;
2570 -static int emptyArrayMV(WindowInfo *window, DataValue *argList, int nArgs,
2571 - DataValue *result, char **errMsg)
2572 +static int emptyArrayMV(RestartData *context, DataValue *argList, int nArgs,
2573 + DataValue *result)
2575 + WindowInfo *window = MacroFocusWindow();
2576 + char **errMsg = &context->errMsg;
2577 result->tag = ARRAY_TAG;
2578 result->val.arrayPtr = NULL;
2579 return True;
2582 -static int serverNameMV(WindowInfo *window, DataValue *argList, int nArgs,
2583 - DataValue *result, char **errMsg)
2584 +static int serverNameMV(RestartData *context, DataValue *argList, int nArgs,
2585 + DataValue *result)
2587 + WindowInfo *window = MacroFocusWindow();
2588 + char **errMsg = &context->errMsg;
2589 result->tag = STRING_TAG;
2590 AllocNStringCpy(&result->val.str, GetPrefServerName());
2591 return True;
2594 -static int tabDistMV(WindowInfo *window, DataValue *argList, int nArgs,
2595 - DataValue *result, char **errMsg)
2596 +static int tabDistMV(RestartData *context, DataValue *argList, int nArgs,
2597 + DataValue *result)
2599 + WindowInfo *window = MacroFocusWindow();
2600 + char **errMsg = &context->errMsg;
2601 result->tag = INT_TAG;
2602 result->val.n = window->buffer->tabDist;
2603 return True;
2606 -static int emTabDistMV(WindowInfo *window, DataValue *argList, int nArgs,
2607 - DataValue *result, char **errMsg)
2608 +static int emTabDistMV(RestartData *context, DataValue *argList, int nArgs,
2609 + DataValue *result)
2611 + WindowInfo *window = MacroFocusWindow();
2612 + char **errMsg = &context->errMsg;
2613 int dist;
2615 XtVaGetValues(window->textArea, textNemulateTabs, &dist, NULL);
2616 @@ -5392,25 +5570,31 @@ static int emTabDistMV(WindowInfo *windo
2617 return True;
2620 -static int useTabsMV(WindowInfo *window, DataValue *argList, int nArgs,
2621 - DataValue *result, char **errMsg)
2622 +static int useTabsMV(RestartData *context, DataValue *argList, int nArgs,
2623 + DataValue *result)
2625 + WindowInfo *window = MacroFocusWindow();
2626 + char **errMsg = &context->errMsg;
2627 result->tag = INT_TAG;
2628 result->val.n = window->buffer->useTabs;
2629 return True;
2632 -static int modifiedMV(WindowInfo *window, DataValue *argList, int nArgs,
2633 - DataValue *result, char **errMsg)
2634 +static int modifiedMV(RestartData *context, DataValue *argList, int nArgs,
2635 + DataValue *result)
2637 + WindowInfo *window = MacroFocusWindow();
2638 + char **errMsg = &context->errMsg;
2639 result->tag = INT_TAG;
2640 result->val.n = window->fileChanged;
2641 return True;
2644 -static int languageModeMV(WindowInfo *window, DataValue *argList, int nArgs,
2645 - DataValue *result, char **errMsg)
2646 +static int languageModeMV(RestartData *context, DataValue *argList, int nArgs,
2647 + DataValue *result)
2649 + WindowInfo *window = MacroFocusWindow();
2650 + char **errMsg = &context->errMsg;
2651 char *lmName = LanguageModeName(window->languageMode);
2653 if (lmName == NULL)
2654 @@ -5421,8 +5605,8 @@ static int languageModeMV(WindowInfo *wi
2657 /* DISABLED for 5.4
2658 -static int backlightStringMV(WindowInfo *window, DataValue *argList,
2659 - int nArgs, DataValue *result, char **errMsg)
2660 +static int backlightStringMV(RestartData *context, DataValue *argList,
2661 + int nArgs, DataValue *result)
2663 char *backlightString = window->backlightCharTypes;
2665 @@ -5438,9 +5622,11 @@ static int backlightStringMV(WindowInfo
2667 ** Range set macro variables and functions
2669 -static int rangesetListMV(WindowInfo *window, DataValue *argList, int nArgs,
2670 - DataValue *result, char **errMsg)
2671 +static int rangesetListMV(RestartData *context, DataValue *argList, int nArgs,
2672 + DataValue *result)
2674 + WindowInfo *window = MacroFocusWindow();
2675 + char **errMsg = &context->errMsg;
2676 RangesetTable *rangesetTable = window->buffer->rangesetTable;
2677 unsigned char *rangesetList;
2678 char *allocIndexStr;
2679 @@ -5484,9 +5670,11 @@ static int rangesetListMV(WindowInfo *wi
2680 ** different point revisions. This is done because the macro interface
2681 ** does not change for the same version.
2683 -static int versionMV(WindowInfo* window, DataValue* argList, int nArgs,
2684 - DataValue* result, char** errMsg)
2685 +static int versionMV(RestartData *context, DataValue *argList, int nArgs,
2686 + DataValue *result)
2688 + WindowInfo *window = MacroFocusWindow();
2689 + char **errMsg = &context->errMsg;
2690 static unsigned version = NEDIT_VERSION * 1000 + NEDIT_REVISION;
2692 result->tag = INT_TAG;
2693 @@ -5500,9 +5688,11 @@ static int versionMV(WindowInfo* window,
2694 ** default of ~/.nedit or $HOME. (See the online documentation for details
2695 ** about the algorithm.)
2697 -static int neditHomeMV(WindowInfo *window, DataValue *argList, int nArgs,
2698 - DataValue *result, char **errMsg)
2699 +static int neditHomeMV(RestartData *context, DataValue *argList, int nArgs,
2700 + DataValue *result)
2702 + WindowInfo *window = MacroFocusWindow();
2703 + char **errMsg = &context->errMsg;
2704 const char *neditRCName = GetRCFileName(NEDIT_RC);
2705 char neditHome[MAXPATHLEN];
2707 @@ -5519,9 +5709,11 @@ static int neditHomeMV(WindowInfo *windo
2709 ** Returns the transient status of the current window
2711 -static int transientMV(WindowInfo *window, DataValue *argList, int nArgs,
2712 - DataValue *result, char **errMsg)
2713 +static int transientMV(RestartData *context, DataValue *argList, int nArgs,
2714 + DataValue *result)
2716 + WindowInfo *window = MacroFocusWindow();
2717 + char **errMsg = &context->errMsg;
2718 result->tag = INT_TAG;
2719 result->val.n = !!window->transient;
2720 return True;
2721 @@ -5535,9 +5727,11 @@ static int transientMV(WindowInfo *windo
2722 ** If called with no arguments, returns a single rangeset label (not an array),
2723 ** or an empty string if there are no rangesets available.
2725 -static int rangesetCreateMS(WindowInfo *window, DataValue *argList, int nArgs,
2726 - DataValue *result, char **errMsg)
2727 +static int rangesetCreateMS(RestartData *context, DataValue *argList, int nArgs,
2728 + DataValue *result)
2730 + WindowInfo *window = MacroFocusWindow();
2731 + char **errMsg = &context->errMsg;
2732 int label;
2733 int i, nRangesetsRequired;
2734 DataValue element;
2735 @@ -5591,9 +5785,11 @@ static int rangesetCreateMS(WindowInfo *
2737 ** Built-in macro subroutine for forgetting a range set.
2739 -static int rangesetDestroyMS(WindowInfo *window, DataValue *argList, int nArgs,
2740 - DataValue *result, char **errMsg)
2741 +static int rangesetDestroyMS(RestartData *context, DataValue *argList, int nArgs,
2742 + DataValue *result)
2744 + WindowInfo *window = MacroFocusWindow();
2745 + char **errMsg = &context->errMsg;
2746 RangesetTable *rangesetTable = window->buffer->rangesetTable;
2747 DataValue *array;
2748 DataValue element;
2749 @@ -5654,9 +5850,11 @@ static int rangesetDestroyMS(WindowInfo
2750 ** Arguments are $1: range set name.
2751 ** return value is an array indexed 0 to n, with the rangeset labels as values;
2753 -static int rangesetGetByNameMS(WindowInfo *window, DataValue *argList, int nArgs,
2754 - DataValue *result, char **errMsg)
2755 +static int rangesetGetByNameMS(RestartData *context, DataValue *argList, int nArgs,
2756 + DataValue *result)
2758 + WindowInfo *window = MacroFocusWindow();
2759 + char **errMsg = &context->errMsg;
2760 char stringStorage[1][TYPE_INT_STR_SIZE(int)];
2761 Rangeset *rangeset;
2762 int label;
2763 @@ -5719,9 +5917,11 @@ static int rangesetGetByNameMS(WindowInf
2764 ** if any to specify range to add - must not be rectangular). Returns the
2765 ** index of the newly added range (cases b and c), or 0 (case a).
2767 -static int rangesetAddMS(WindowInfo *window, DataValue *argList, int nArgs,
2768 - DataValue *result, char **errMsg)
2769 +static int rangesetAddMS(RestartData *context, DataValue *argList, int nArgs,
2770 + DataValue *result)
2772 + WindowInfo *window = MacroFocusWindow();
2773 + char **errMsg = &context->errMsg;
2774 textBuffer *buffer = window->buffer;
2775 RangesetTable *rangesetTable = buffer->rangesetTable;
2776 Rangeset *targetRangeset, *sourceRangeset;
2777 @@ -5818,9 +6018,11 @@ static int rangesetAddMS(WindowInfo *win
2778 ** to RangesetSubtract()/RangesetSubtractBetween(), the handling of an
2779 ** undefined destination range, and that it returns no value.
2781 -static int rangesetSubtractMS(WindowInfo *window, DataValue *argList, int nArgs,
2782 - DataValue *result, char **errMsg)
2783 +static int rangesetSubtractMS(RestartData *context, DataValue *argList, int nArgs,
2784 + DataValue *result)
2786 + WindowInfo *window = MacroFocusWindow();
2787 + char **errMsg = &context->errMsg;
2788 textBuffer *buffer = window->buffer;
2789 RangesetTable *rangesetTable = buffer->rangesetTable;
2790 Rangeset *targetRangeset, *sourceRangeset;
2791 @@ -5897,9 +6099,11 @@ static int rangesetSubtractMS(WindowInfo
2792 ** label (one alphabetic character). Returns nothing. Fails if range set
2793 ** undefined.
2795 -static int rangesetInvertMS(WindowInfo *window, DataValue *argList, int nArgs,
2796 - DataValue *result, char **errMsg)
2797 +static int rangesetInvertMS(RestartData *context, DataValue *argList, int nArgs,
2798 + DataValue *result)
2800 + WindowInfo *window = MacroFocusWindow();
2801 + char **errMsg = &context->errMsg;
2803 RangesetTable *rangesetTable = window->buffer->rangesetTable;
2804 Rangeset *rangeset;
2805 @@ -5937,9 +6141,11 @@ static int rangesetInvertMS(WindowInfo *
2806 ** argument of a rangeset label. Returns an array with the following keys:
2807 ** defined, count, color, mode.
2809 -static int rangesetInfoMS(WindowInfo *window, DataValue *argList, int nArgs,
2810 - DataValue *result, char **errMsg)
2811 +static int rangesetInfoMS(RestartData *context, DataValue *argList, int nArgs,
2812 + DataValue *result)
2814 + WindowInfo *window = MacroFocusWindow();
2815 + char **errMsg = &context->errMsg;
2816 RangesetTable *rangesetTable = window->buffer->rangesetTable;
2817 Rangeset *rangeset = NULL;
2818 int count, defined, uline;
2819 @@ -6012,9 +6218,11 @@ static int rangesetInfoMS(WindowInfo *wi
2820 ** ranges, otherwise select the individual range specified. Returns
2821 ** an array with the keys "start" and "end" and values
2823 -static int rangesetRangeMS(WindowInfo *window, DataValue *argList, int nArgs,
2824 - DataValue *result, char **errMsg)
2825 +static int rangesetRangeMS(RestartData *context, DataValue *argList, int nArgs,
2826 + DataValue *result)
2828 + WindowInfo *window = MacroFocusWindow();
2829 + char **errMsg = &context->errMsg;
2830 textBuffer *buffer = window->buffer;
2831 RangesetTable *rangesetTable = buffer->rangesetTable;
2832 Rangeset *rangeset;
2833 @@ -6078,9 +6286,11 @@ static int rangesetRangeMS(WindowInfo *w
2834 ** false (zero) if not in a range, range index (1-based) if in a range;
2835 ** fails if parameters were bad.
2837 -static int rangesetIncludesPosMS(WindowInfo *window, DataValue *argList,
2838 - int nArgs, DataValue *result, char **errMsg)
2839 +static int rangesetIncludesPosMS(RestartData *context, DataValue *argList,
2840 + int nArgs, DataValue *result)
2842 + WindowInfo *window = MacroFocusWindow();
2843 + char **errMsg = &context->errMsg;
2844 textBuffer *buffer = window->buffer;
2845 RangesetTable *rangesetTable = buffer->rangesetTable;
2846 Rangeset *rangeset;
2847 @@ -6132,9 +6342,11 @@ static int rangesetIncludesPosMS(WindowI
2848 ** found/applied. If no color is applied, any current color is removed. Returns
2849 ** true if the rangeset is valid.
2851 -static int rangesetSetColorMS(WindowInfo *window, DataValue *argList,
2852 - int nArgs, DataValue *result, char **errMsg)
2853 +static int rangesetSetColorMS(RestartData *context, DataValue *argList,
2854 + int nArgs, DataValue *result)
2856 + WindowInfo *window = MacroFocusWindow();
2857 + char **errMsg = &context->errMsg;
2858 char stringStorage[1][TYPE_INT_STR_SIZE(int)];
2859 textBuffer *buffer = window->buffer;
2860 RangesetTable *rangesetTable = buffer->rangesetTable;
2861 @@ -6180,9 +6392,11 @@ static int rangesetSetColorMS(WindowInfo
2862 ** the underlineMode string, which should be specified as "leave" (let any
2863 ** syntax highlighting underlines to appear as undisturbed), "add" or "remove".
2865 -static int rangesetSetUnderlineMS(WindowInfo *window, DataValue *argList,
2866 - int nArgs, DataValue *result, char **errMsg)
2867 +static int rangesetSetUnderlineMS(RestartData *context, DataValue *argList,
2868 + int nArgs, DataValue *result)
2870 + WindowInfo *window = MacroFocusWindow();
2871 + char **errMsg = &context->errMsg;
2872 char stringStorage[1][TYPE_INT_STR_SIZE(int)];
2873 textBuffer *buffer = window->buffer;
2874 RangesetTable *rangesetTable = buffer->rangesetTable;
2875 @@ -6232,9 +6446,11 @@ static int rangesetSetUnderlineMS(Window
2876 ** Set the name of a range set's ranges. Returns
2877 ** true if the rangeset is valid.
2879 -static int rangesetSetNameMS(WindowInfo *window, DataValue *argList,
2880 - int nArgs, DataValue *result, char **errMsg)
2881 +static int rangesetSetNameMS(RestartData *context, DataValue *argList,
2882 + int nArgs, DataValue *result)
2884 + WindowInfo *window = MacroFocusWindow();
2885 + char **errMsg = &context->errMsg;
2886 char stringStorage[1][TYPE_INT_STR_SIZE(int)];
2887 textBuffer *buffer = window->buffer;
2888 RangesetTable *rangesetTable = buffer->rangesetTable;
2889 @@ -6278,9 +6494,11 @@ static int rangesetSetNameMS(WindowInfo
2890 ** Change a range's modification response. Returns true if the rangeset is
2891 ** valid and the response type name is valid.
2893 -static int rangesetSetModeMS(WindowInfo *window, DataValue *argList,
2894 - int nArgs, DataValue *result, char **errMsg)
2895 +static int rangesetSetModeMS(RestartData *context, DataValue *argList,
2896 + int nArgs, DataValue *result)
2898 + WindowInfo *window = MacroFocusWindow();
2899 + char **errMsg = &context->errMsg;
2900 char stringStorage[1][TYPE_INT_STR_SIZE(int)];
2901 textBuffer *buffer = window->buffer;
2902 RangesetTable *rangesetTable = buffer->rangesetTable;
2903 @@ -6462,9 +6680,11 @@ static int fillStyleResult(DataValue *re
2904 ** ["italic"] '1' if style is italic, '0' otherwise
2907 -static int getStyleByNameMS(WindowInfo *window, DataValue *argList, int nArgs,
2908 - DataValue *result, char **errMsg)
2909 +static int getStyleByNameMS(RestartData *context, DataValue *argList, int nArgs,
2910 + DataValue *result)
2912 + WindowInfo *window = MacroFocusWindow();
2913 + char **errMsg = &context->errMsg;
2914 char stringStorage[1][TYPE_INT_STR_SIZE(int)];
2915 char *styleName;
2917 @@ -6502,9 +6722,11 @@ static int getStyleByNameMS(WindowInfo *
2918 ** ["extent"] Forward distance from position over which style applies
2921 -static int getStyleAtPosMS(WindowInfo *window, DataValue *argList, int nArgs,
2922 - DataValue *result, char **errMsg)
2923 +static int getStyleAtPosMS(RestartData *context, DataValue *argList, int nArgs,
2924 + DataValue *result)
2926 + WindowInfo *window = MacroFocusWindow();
2927 + char **errMsg = &context->errMsg;
2928 int patCode;
2929 int bufferPos;
2930 textBuffer *buf = window->buffer;
2931 @@ -6607,9 +6829,11 @@ static int fillPatternResult(DataValue *
2932 ** The returned array looks like this:
2933 ** ["style"] Name of style
2935 -static int getPatternByNameMS(WindowInfo *window, DataValue *argList, int nArgs,
2936 - DataValue *result, char **errMsg)
2937 +static int getPatternByNameMS(RestartData *context, DataValue *argList, int nArgs,
2938 + DataValue *result)
2940 + WindowInfo *window = MacroFocusWindow();
2941 + char **errMsg = &context->errMsg;
2942 char stringStorage[1][TYPE_INT_STR_SIZE(int)];
2943 char *patternName = NULL;
2944 highlightPattern *pattern;
2945 @@ -6645,9 +6869,11 @@ static int getPatternByNameMS(WindowInfo
2946 ** ["style"] Name of style
2947 ** ["extent"] Distance from position over which this pattern applies
2949 -static int getPatternAtPosMS(WindowInfo *window, DataValue *argList, int nArgs,
2950 - DataValue *result, char **errMsg)
2951 +static int getPatternAtPosMS(RestartData *context, DataValue *argList, int nArgs,
2952 + DataValue *result)
2954 + WindowInfo *window = MacroFocusWindow();
2955 + char **errMsg = &context->errMsg;
2956 int bufferPos = -1;
2957 textBuffer *buffer = window->buffer;
2958 int patCode = 0;
2959 @@ -6703,9 +6929,11 @@ static int getPatternAtPosMS(WindowInfo
2960 ** of "pos" holds "-1", "len" holds "0" and "direction" holds "-1".
2963 -static int getMatchingMS(WindowInfo *window, DataValue *argList, int nArgs,
2964 - DataValue *result, char **errMsg)
2965 +static int getMatchingMS(RestartData *context, DataValue *argList, int nArgs,
2966 + DataValue *result)
2968 + WindowInfo *window = MacroFocusWindow();
2969 + char **errMsg = &context->errMsg;
2970 int startPos;
2971 int matchPos, matchLen;
2972 int direction;
2973 @@ -6780,9 +7008,11 @@ static int getMatchingMS(WindowInfo *win
2974 /* Insert a string into the acutal dictionary */
2975 /* Syntax : dictinsert(string) % assuming weight = 1 */
2976 /* dictinsert(string, weight) */
2977 -static int dictinsertMS(WindowInfo *window, DataValue *argList, int nArgs,
2978 - DataValue *result, char **errMsg)
2979 +static int dictinsertMS(RestartData *context, DataValue *argList, int nArgs,
2980 + DataValue *result)
2982 + WindowInfo *window = MacroFocusWindow();
2983 + char **errMsg = &context->errMsg;
2984 static long nr_insertions = 0;
2985 int weight = 1;
2987 @@ -6830,9 +7060,11 @@ static int dictinsertMS(WindowInfo *wind
2988 /* Test if string is an element of the acutal dictionary */
2989 /* Syntax : weight = dictiselement(string) */
2990 /* Output argument : (integer) weight of element */
2991 -static int dictiselementMS(WindowInfo *window, DataValue *argList, int nArgs,
2992 - DataValue *result, char **errMsg)
2993 +static int dictiselementMS(RestartData *context, DataValue *argList, int nArgs,
2994 + DataValue *result)
2996 + WindowInfo *window = MacroFocusWindow();
2997 + char **errMsg = &context->errMsg;
2998 char stringStorage[25], *string;
2999 unsigned long weight;
3001 @@ -6862,9 +7094,11 @@ static int dictiselementMS(WindowInfo *w
3003 /* Load/append file to current dictionary */
3004 /* Syntax : dict_append(filename) */
3005 -static int dictappendMS(WindowInfo *window, DataValue *argList, int nArgs,
3006 - DataValue *result, char **errMsg)
3007 +static int dictappendMS(RestartData *context, DataValue *argList, int nArgs,
3008 + DataValue *result)
3010 + WindowInfo *window = MacroFocusWindow();
3011 + char **errMsg = &context->errMsg;
3012 char stringStorage[25], *string;
3014 /* Validate arguments and convert to int */
3015 @@ -6887,9 +7121,11 @@ static int dictappendMS(WindowInfo *wind
3016 /* dict_save(filename) => set dictionary filename (otherwise default filename is used) */
3017 /* dict_save("") => return current filename as string */
3018 /* dict_save(autoSave, cumulSave) => autoSave = "on"/"off"/"flush", cumulSave=0,1,2,3,... */
3019 -static int dictsaveMS(WindowInfo *window, DataValue *argList, int nArgs,
3020 - DataValue *result, char **errMsg)
3021 +static int dictsaveMS(RestartData *context, DataValue *argList, int nArgs,
3022 + DataValue *result)
3024 + WindowInfo *window = MacroFocusWindow();
3025 + char **errMsg = &context->errMsg;
3026 int cumulSave = 0;
3028 char stringStorage[25], *string;
3029 @@ -6957,9 +7193,11 @@ static int dictsaveMS(WindowInfo *window
3031 #define MAXMATCHES 128
3033 -static int dictcompleteMS(WindowInfo *window, DataValue *argList, int nArgs,
3034 - DataValue *result, char **errMsg)
3035 +static int dictcompleteMS(RestartData *context, DataValue *argList, int nArgs,
3036 + DataValue *result)
3038 + WindowInfo *window = MacroFocusWindow();
3039 + char **errMsg = &context->errMsg;
3040 int minchars = 0;
3041 int maxmatches = 1;
3042 static char *s2[MAXMATCHES]; /* at max, 128 possible completions can be returned */
3043 @@ -7028,9 +7266,11 @@ static int dictcompleteMS(WindowInfo *wi
3044 ** UL convertPos patch:
3045 ** translate given line / column parameter to text buffer position.
3047 -static int toPosMS(WindowInfo *window, DataValue *argList, int nArgs,
3048 - DataValue *result, char **errMsg)
3049 +static int toPosMS(RestartData *context, DataValue *argList, int nArgs,
3050 + DataValue *result)
3052 + WindowInfo *window = MacroFocusWindow();
3053 + char **errMsg = &context->errMsg;
3054 char *lineStr, stringStorage1[TYPE_INT_STR_SIZE(int)];
3055 char *colStr , stringStorage2[TYPE_INT_STR_SIZE(int)];
3056 char *lineColString;
3057 @@ -7129,9 +7369,11 @@ static int toPosMS(WindowInfo *window, D
3058 ** UL convertPos patch:
3059 ** translate given text buffer position to line number.
3061 -static int toLineMS(WindowInfo *window, DataValue *argList, int nArgs,
3062 - DataValue *result, char **errMsg)
3063 +static int toLineMS(RestartData *context, DataValue *argList, int nArgs,
3064 + DataValue *result)
3066 + WindowInfo *window = MacroFocusWindow();
3067 + char **errMsg = &context->errMsg;
3068 int line, column;
3069 int pos;
3071 @@ -7174,9 +7416,11 @@ static int toLineMS(WindowInfo *window,
3072 ** UL convertPos patch:
3073 ** translate given text buffer position to column number.
3075 -static int toColumnMS(WindowInfo *window, DataValue *argList, int nArgs,
3076 - DataValue *result, char **errMsg)
3077 +static int toColumnMS(RestartData *context, DataValue *argList, int nArgs,
3078 + DataValue *result)
3080 + WindowInfo *window = MacroFocusWindow();
3081 + char **errMsg = &context->errMsg;
3082 int line, column;
3083 int pos;
3084 textBuffer *buf = window->buffer;
3085 diff --quilt old/source/macro.h new/source/macro.h
3086 --- old/source/macro.h
3087 +++ new/source/macro.h
3088 @@ -37,7 +37,7 @@
3090 typedef struct BuiltInSubrNameTag {
3091 const char *name; /* its macro identifier */
3092 - BuiltInSubr macroSubr; /* pointer to the function to call */
3093 + BuiltInSubr *macroSubr; /* pointer to the function to call */
3094 } BuiltInSubrName;
3096 /* Structure used to build an initialized static array, each entry describing a