There are no available options for this view.

Parent Directory Parent Directory | Revision <a href="/cvs/aolserver/aolserver/nsd/log.c#A_Log">Log</a> Revision <a href="/cvs/aolserver/aolserver/nsd/log.c#A_Log">Log</a>

Revision 1.7 - (show annotations) (download) (as text)
Mon Jul 18 23:32:12 2005 UTC (12 years, 5 months ago) by jgdavidson
Branch: MAIN
CVS Tags: aolserver_v45_r0, aolserver_v45_r2_rc0, HEAD
Branch point for: aolserver_v45_r1, aolserver_v45_r2, aolserver_v45_bp
Changes since 1.6: +17 -17 lines
File MIME type: text/x-chdr
Updated some file-scope function names to avoid inter-module clashes for the benefit of ctags.
1 /*
2 * The contents of this file are subject to the AOLserver Public License
3 * Version 1.1 (the "License"); you may not use this file except in
4 * compliance with the License. You may obtain a copy of the License at
5 * http://aolserver.com/.
6 *
7 * Software distributed under the License is distributed on an "AS IS"
8 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
9 * the License for the specific language governing rights and limitations
10 * under the License.
11 *
12 * The Original Code is AOLserver Code and related documentation
13 * distributed by AOL.
14 *
15 * The Initial Developer of the Original Code is America Online,
16 * Inc. Portions created by AOL are Copyright (C) 1999 America Online,
17 * Inc. All Rights Reserved.
18 *
19 * Alternatively, the contents of this file may be used under the terms
20 * of the GNU General Public License (the "GPL"), in which case the
21 * provisions of GPL are applicable instead of those above. If you wish
22 * to allow use of your version of this file only under the terms of the
23 * GPL and not to allow others to use your version of this file under the
24 * License, indicate your decision by deleting the provisions above and
25 * replace them with the notice and other provisions required by the GPL.
26 * If you do not delete the provisions above, a recipient may use your
27 * version of this file under either the License or the GPL.
28 */
29
30
31 /*
32 * tclsched.c --
33 *
34 * Implement scheduled procs in Tcl.
35 */
36
37 static const char *RCSID = "@(#) $Header: /cvsroot-fuse/aolserver/aolserver/nsd/tclsched.c,v 1.7 2005/07/18 23:32:12 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__;
38
39 #include "nsd.h"
40
41 typedef void *(AtProc)(Ns_Callback *, void *);
42
43 typedef struct TclCallback {
44 char *server;
45 char *script;
46 } TclCallback;
47
48 /*
49 * Local functions defined in this file
50 */
51
52 static TclCallback *<a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NewCallback">NewCallback</a>(Tcl_Interp *interp, char *proc, char *arg);
53 static Ns_Callback <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_EvalCallback">EvalCallback</a>;
54 static Ns_Callback <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeCallback">FreeCallback</a>;
55 static Ns_SchedProc <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeSched">FreeSched</a>;
56 static int <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_ReturnValidId">ReturnValidId</a>(Tcl_Interp *interp, int id, TclCallback *cbPtr);
57 static int <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_AtCmd">AtCmd</a>(AtProc *procPtr, Tcl_Interp *interp, int argc, char **argv);
58
59
60 /*
61 *----------------------------------------------------------------------
62 *
63 * NsTclAt --
64 *
65 * Implements ns_atsignal, ns_atshutdown, and ns_atexit commands.
66 *
67 * Results:
68 * Tcl result.
69 *
70 * Side effects:
71 * See docs.
72 *
73 *----------------------------------------------------------------------
74 */
75
76 static int
77 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_AtCmd">AtCmd</a>(AtProc *procPtr, Tcl_Interp *interp, int argc, char **argv)
78 {
79 TclCallback *cbPtr;
80
81 if (argc != 2 && argc != 3) {
82 Tcl_AppendResult(interp, "wrong # args: should be \"",
83 argv[0], " script | procname ?arg?\"", NULL);
84 return TCL_ERROR;
85 }
86 cbPtr = <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NewCallback">NewCallback</a>(interp, argv[1], argv[2]);
87 if (procPtr == <a href="/cvs/aolserver/aolserver/nsd/callbacks.c#A_Ns_RegisterAtSignal">Ns_RegisterAtSignal</a>) {
88 (*procPtr) (<a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSignalProc">NsTclSignalProc</a>, cbPtr);
89 } else {
90 (*procPtr) (<a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclCallback">NsTclCallback</a>, cbPtr);
91 }
92 return TCL_OK;
93 }
94
95 int
96 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclAtSignalCmd">NsTclAtSignalCmd</a>(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
97 {
98 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_AtCmd">AtCmd</a>(<a href="/cvs/aolserver/aolserver/nsd/callbacks.c#A_Ns_RegisterAtSignal">Ns_RegisterAtSignal</a>, interp, argc, argv);
99 }
100
101 int
102 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclAtShutdownCmd">NsTclAtShutdownCmd</a>(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
103 {
104 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_AtCmd">AtCmd</a>(<a href="/cvs/aolserver/aolserver/nsd/callbacks.c#A_Ns_RegisterShutdown">Ns_RegisterShutdown</a>, interp, argc, argv);
105 }
106
107 int
108 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclAtExitCmd">NsTclAtExitCmd</a>(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
109 {
110 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_AtCmd">AtCmd</a>(<a href="/cvs/aolserver/aolserver/nsd/callbacks.c#A_Ns_RegisterAtExit">Ns_RegisterAtExit</a>, interp, argc, argv);
111 }
112
113
114 /*
115 *----------------------------------------------------------------------
116 *
117 * NsAfterCmd --
118 *
119 * Implements ns_after.
120 *
121 * Results:
122 * Tcl result.
123 *
124 * Side effects:
125 * See docs.
126 *
127 *----------------------------------------------------------------------
128 */
129
130 int
131 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclAfterCmd">NsTclAfterCmd</a>(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
132 {
133 int id, seconds;
134 TclCallback *cbPtr;
135
136 if (argc != 3) {
137 Tcl_AppendResult(interp, "wrong # args: should be \"",
138 argv[0], " seconds script\"", NULL);
139 return TCL_ERROR;
140 }
141 if (Tcl_GetInt(interp, argv[1], &seconds) != TCL_OK) {
142 return TCL_ERROR;
143 }
144 cbPtr = <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NewCallback">NewCallback</a>(interp, argv[2], NULL);
145 id = <a href="/cvs/aolserver/aolserver/nsd/sched.c#A_Ns_After">Ns_After</a>(seconds, (Ns_Callback *) <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedProc">NsTclSchedProc</a>, cbPtr, <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeCallback">FreeCallback</a>);
146 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_ReturnValidId">ReturnValidId</a>(interp, id, cbPtr);
147 }
148
149
150 /*
151 *----------------------------------------------------------------------
152 *
153 * <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_SchedCmd">SchedCmd</a> --
154 *
155 * Implements ns_unschedule_proc, ns_cancel, ns_pause, and
156 * ns_resume commands.
157 *
158 * Results:
159 * Tcl result.
160 *
161 * Side effects:
162 * See docs.
163 *
164 *----------------------------------------------------------------------
165 */
166
167 static int
168 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_SchedCmd">SchedCmd</a>(Tcl_Interp *interp, int argc, char **argv, int cmd)
169 {
170 int id, ok;
171 char buf[10];
172
173 if (argc != 2) {
174 Tcl_AppendResult(interp, "wrong # args: should be \"",
175 argv[0], " id\"", NULL);
176 return TCL_ERROR;
177 }
178 if (Tcl_GetInt(interp, argv[1], &id) != TCL_OK) {
179 return TCL_ERROR;
180 }
181 switch (cmd) {
182 case 'u':
183 case 'c':
184 ok = <a href="/cvs/aolserver/aolserver/nsd/sched.c#A_Ns_Cancel">Ns_Cancel</a>(id);
185 break;
186 case 'p':
187 ok = <a href="/cvs/aolserver/aolserver/nsd/sched.c#A_Ns_Pause">Ns_Pause</a>(id);
188 break;
189 case 'r':
190 ok = <a href="/cvs/aolserver/aolserver/nsd/sched.c#A_Ns_Resume">Ns_Resume</a>(id);
191 break;
192 default:
193 ok = -1;
194 }
195 if (cmd != 'u') {
196 sprintf(buf, "%d", ok);
197 Tcl_SetResult(interp, buf, TCL_VOLATILE);
198 }
199 return TCL_OK;
200 }
201
202 int
203 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclCancelCmd">NsTclCancelCmd</a>(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
204 {
205 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_SchedCmd">SchedCmd</a>(interp, argc, argv, 'c');
206 }
207
208 int
209 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclPauseCmd">NsTclPauseCmd</a>(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
210 {
211 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_SchedCmd">SchedCmd</a>(interp, argc, argv, 'p');
212 }
213
214 int
215 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclResumeCmd">NsTclResumeCmd</a>(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
216 {
217 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_SchedCmd">SchedCmd</a>(interp, argc, argv, 'r');
218 }
219
220 int
221 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclUnscheduleCmd">NsTclUnscheduleCmd</a>(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
222 {
223 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_SchedCmd">SchedCmd</a>(interp, argc, argv, 'u');
224 }
225
226
227 /*
228 *----------------------------------------------------------------------
229 *
230 * <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedDailyCmd">NsTclSchedDailyCmd</a> --
231 *
232 * Implements ns_schedule_daily.
233 *
234 * Results:
235 * Tcl result.
236 *
237 * Side effects:
238 * See docs.
239 *
240 *----------------------------------------------------------------------
241 */
242
243 int
244 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedDailyCmd">NsTclSchedDailyCmd</a>(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
245 {
246 TclCallback *cbPtr;
247 int flags;
248 int first;
249 int id;
250 int hour, minute;
251
252 /* 12 cases (arg count & number after cmd and -options are handled):
253 * 0 1 2 3 4 5 6
254 * * cmd hour minute script (4 args)/3
255 * * cmd hour minute procname (4 args)/3
256 * * cmd hour minute procname arg (5 args)/4
257 * * cmd -once hour minute script (5 args)/3
258 * * cmd -once hour minute procname (5 args)/3
259 * * cmd -once hour minute procname arg (6 args)/4
260 * * cmd -thread hour minute script (5 args)/3
261 * * cmd -thread hour minute procname (5 args)/3
262 * * cmd -thread hour minute procname arg (6 args)/4
263 * * cmd -once -thread hour minute script (6 args)/3
264 * * cmd -once -thread hour minute procname (6 args)/3
265 * * cmd -once -thread hour minute procname arg (7 args)/4
266 */
267
268 first = 1;
269 flags = 0;
270
271 while (argc-- && argv[first] != NULL) {
272 if (strcmp(argv[first], "-thread") == 0) {
273 flags |= NS_SCHED_THREAD;
274 } else if (strcmp(argv[first], "-once") == 0) {
275 flags |= NS_SCHED_ONCE;
276 } else {
277 break;
278 }
279 first++;
280 }
281
282 if (argc < 3 || argc > 4) {
283 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
284 " ?-once? ?-thread? hour minute "
285 "{ script | procname ?arg? }\"", (char *) NULL);
286 return TCL_ERROR;
287 }
288
289
290 /*
291 * First is now the first argument that is not a switch.
292 */
293
294 if (Tcl_GetInt(interp, argv[first++], &hour) != TCL_OK) {
295 return TCL_ERROR;
296 }
297 if (hour < 0 || hour > 23) {
298 Tcl_AppendResult(interp, "invalid hour \"", argv[first - 1],
299 "\": should be >= 0 and <= 23", NULL);
300 return TCL_ERROR;
301 }
302
303 if (Tcl_GetInt(interp, argv[first++], &minute) != TCL_OK) {
304 return TCL_ERROR;
305 }
306 if (minute < 0 || minute > 59) {
307 Tcl_AppendResult(interp, "invalid minute \"", argv[first - 1],
308 "\": should be >= 0 and <= 59", NULL);
309 return TCL_ERROR;
310 }
311
312 /*
313 * Bear in mind that argc has been changed when counting switches,
314 * so assume that there are no switches when reading the 4 here.
315 */
316
317 cbPtr = <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NewCallback">NewCallback</a>(interp, argv[first], argv[first+1]);
318 id = <a href="/cvs/aolserver/aolserver/nsd/sched.c#A_Ns_ScheduleDaily">Ns_ScheduleDaily</a>(<a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedProc">NsTclSchedProc</a>, cbPtr, flags,
319 hour, minute, <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeSched">FreeSched</a>);
320 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_ReturnValidId">ReturnValidId</a>(interp, id, cbPtr);
321 }
322
323
324 /*
325 *----------------------------------------------------------------------
326 *
327 * <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedWeeklyCmd">NsTclSchedWeeklyCmd</a> --
328 *
329 * Implements ns_sched_weekly.
330 *
331 * Results:
332 * Tcl result.
333 *
334 * Side effects:
335 * See docs.
336 *
337 *----------------------------------------------------------------------
338 */
339
340 int
341 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedWeeklyCmd">NsTclSchedWeeklyCmd</a>(ClientData arg, Tcl_Interp *interp, int argc,
342 char **argv)
343 {
344 TclCallback *cbPtr;
345 int flags;
346 int first;
347 int id;
348 int day, hour, minute;
349
350 /* 12 cases (arg count & number after cmd and -options are handled):
351 * 0 1 2 3 4 5 6 7
352 * * cmd day hour minute script (5 args)/4
353 * * cmd day hour minute proc (5 args)/4
354 * * cmd day hour minute proc arg (6 args)/5
355 * * cmd -once day hour minute script (6 args)/4
356 * * cmd -once day hour minute proc (6 args)/4
357 * * cmd -once day hour minute proc arg (7 args)/5
358 * * cmd -thread day hour minute script (6 args)/4
359 * * cmd -thread day hour minute proc (6 args)/4
360 * * cmd -thread day hour minute proc arg (7 args)/5
361 * * cmd -once -thread day hour minute script (7 args)/4
362 * * cmd -once -thread day hour minute proc (7 args)/4
363 * * cmd -once -thread day hour minute proc arg (8 args)/5
364 */
365
366 first = 1;
367 flags = 0;
368
369 while (argc-- && argv[first] != NULL) {
370 if (strcmp(argv[first], "-thread") == 0) {
371 flags |= NS_SCHED_THREAD;
372 } else if (strcmp(argv[first], "-once") == 0) {
373 flags |= NS_SCHED_ONCE;
374 } else {
375 break;
376 }
377 first++;
378 }
379
380 if (argc < 4 || argc > 5) {
381 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
382 " ?-once? ?-thread? day hour minute "
383 "{ script | procname ?arg? }\"", (char *) NULL);
384 return TCL_ERROR;
385 }
386
387
388 /*
389 * First is now the first argument that is not a switch.
390 */
391
392 if (Tcl_GetInt(interp, argv[first++], &day) != TCL_OK) {
393 return TCL_ERROR;
394 }
395 if (day < 0 || day > 6) {
396 Tcl_AppendResult(interp, "invalid day \"", argv[first - 1],
397 "\": should be >= 0 and <= 6", NULL);
398 return TCL_ERROR;
399 }
400
401 if (Tcl_GetInt(interp, argv[first++], &hour) != TCL_OK) {
402 return TCL_ERROR;
403 }
404 if (hour < 0 || hour > 23) {
405 Tcl_AppendResult(interp, "invalid hour \"", argv[first - 1],
406 "\": should be >= 0 and <= 23", NULL);
407 return TCL_ERROR;
408 }
409
410 if (Tcl_GetInt(interp, argv[first++], &minute) != TCL_OK) {
411 return TCL_ERROR;
412 }
413 if (minute < 0 || minute > 59) {
414 Tcl_AppendResult(interp, "invalid minute \"", argv[first - 1],
415 "\": should be >= 0 and <= 59", NULL);
416 return TCL_ERROR;
417 }
418 cbPtr = <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NewCallback">NewCallback</a>(interp, argv[first], argv[first+1]);
419 id = <a href="/cvs/aolserver/aolserver/nsd/sched.c#A_Ns_ScheduleWeekly">Ns_ScheduleWeekly</a>(<a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedProc">NsTclSchedProc</a>, cbPtr, flags,
420 day, hour, minute, <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeSched">FreeSched</a>);
421 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_ReturnValidId">ReturnValidId</a>(interp, id, cbPtr);
422 }
423
424
425 /*
426 *----------------------------------------------------------------------
427 *
428 * <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedCmd">NsTclSchedCmd</a> --
429 *
430 * Implements ns_schedule_proc.
431 *
432 * Results:
433 * Tcl result.
434 *
435 * Side effects:
436 * See docs.
437 *
438 *----------------------------------------------------------------------
439 */
440
441 int
442 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedCmd">NsTclSchedCmd</a>(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
443 {
444 TclCallback *cbPtr;
445 int interval;
446 int flags;
447 int first;
448 int id;
449
450 /* 12 cases (arg count & number after cmd and -options are handled):
451 * 0 1 2 3 4
452 * * cmd interval script (3 args)/2
453 * * cmd interval procname (3 args)/2
454 * * cmd interval procname arg (4 args)/3
455 * * cmd -once interval script (4 args)/2
456 * * cmd -once interval procname (4 args)/2
457 * * cmd -once interval procname arg (5 args)/3
458 * * cmd -thread interval script (4 args)/2
459 * * cmd -thread interval procname (4 args)/2
460 * * cmd -thread interval procname arg (5 args)/3
461 * * cmd -once -thread interval script (5 args)/2
462 * * cmd -once -thread interval procname (5 args)/2
463 * * cmd -once -thread interval procname arg (6 args)/3
464 */
465
466 first = 1;
467 flags = 0;
468
469 while (argc-- && argv[first] != NULL) {
470 if (strcmp(argv[first], "-thread") == 0) {
471 flags |= NS_SCHED_THREAD;
472 } else if (strcmp(argv[first], "-once") == 0) {
473 flags |= NS_SCHED_ONCE;
474 } else {
475 break;
476 }
477 first++;
478 }
479
480 if (argc < 2 || argc > 3) {
481 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
482 " ?-once? ?-thread? interval { script | procname ?arg? }\"",
483 (char *) NULL);
484 return TCL_ERROR;
485 }
486
487 /*
488 * First is now the first argument that is not a switch.
489 */
490
491 if (Tcl_GetInt(interp, argv[first++], &interval) != TCL_OK) {
492 return TCL_ERROR;
493 }
494 cbPtr = <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NewCallback">NewCallback</a>(interp, argv[first], argv[first+1]);
495 id = <a href="/cvs/aolserver/aolserver/nsd/sched.c#A_Ns_ScheduleProcEx">Ns_ScheduleProcEx</a>(<a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedProc">NsTclSchedProc</a>, cbPtr, flags, interval, <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeSched">FreeSched</a>);
496 return <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_ReturnValidId">ReturnValidId</a>(interp, id, cbPtr);
497 }
498
499
500 /*
501 *----------------------------------------------------------------------
502 *
503 * <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_ReturnValidId">ReturnValidId</a> --
504 *
505 * Update the interp result with the given schedule id if valid.
506 * Otherwise, free the script and leave an error in the interp.
507 *
508 * Results:
509 * TCL_OK or TCL_ERROR.
510 *
511 * Side effects:
512 * None.
513 *
514 *----------------------------------------------------------------------
515 */
516
517 static int
518 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_ReturnValidId">ReturnValidId</a>(Tcl_Interp *interp, int id, TclCallback *cbPtr)
519 {
520 char buf[10];
521
522 if (id == NS_ERROR) {
523 Tcl_SetResult(interp, "could not schedule procedure", TCL_STATIC);
524 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeCallback">FreeCallback</a>(cbPtr);
525 return TCL_ERROR;
526 }
527 sprintf(buf, "%d", id);
528 Tcl_SetResult(interp, buf, TCL_VOLATILE);
529 return TCL_OK;
530 }
531
532
533 /*
534 *----------------------------------------------------------------------
535 *
536 * <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_EvalCallback">EvalCallback</a> --
537 *
538 * This is a callback function that runs scheduled tcl
539 * procedures registered with ns_schedule_*.
540 *
541 * Results:
542 * None.
543 *
544 * Side effects:
545 * Will run a Tcl proc/script.
546 *
547 *----------------------------------------------------------------------
548 */
549
550 static void
551 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_EvalCallback">EvalCallback</a>(void *arg)
552 {
553 TclCallback *cbPtr = arg;
554
555 (void) <a href="/cvs/aolserver/aolserver/nsd/tclinit.c#A_Ns_TclEval">Ns_TclEval</a>(NULL, cbPtr->server, cbPtr->script);
556 }
557
558
559 /*
560 *----------------------------------------------------------------------
561 *
562 * <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NewCallback">NewCallback</a> --
563 *
564 * Create a new script callback.
565 *
566 * Results:
567 * Pointer to Callback.
568 *
569 * Side effects:
570 * None.
571 *
572 *----------------------------------------------------------------------
573 */
574
575 static TclCallback *
576 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NewCallback">NewCallback</a>(Tcl_Interp *interp, char *proc, char *arg)
577 {
578 TclCallback *cbPtr;
579 char *argv[2];
580
581 argv[0] = proc;
582 argv[1] = arg;
583 cbPtr = ns_malloc(sizeof(TclCallback));
584 cbPtr->server = <a href="/cvs/aolserver/aolserver/nsd/tclinit.c#A_Ns_TclInterpServer">Ns_TclInterpServer</a>(interp);
585 cbPtr->script = Tcl_Concat(arg ? 2 : 1, argv);
586 return cbPtr;
587 }
588
589
590 /*
591 *----------------------------------------------------------------------
592 *
593 * <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeCallback">FreeCallback</a> --
594 *
595 * Free a Callback created with <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NewCallback">NewCallback</a>.
596 *
597 * Results:
598 * None.
599 *
600 * Side effects:
601 * None.
602 *
603 *----------------------------------------------------------------------
604 */
605
606 static void
607 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeCallback">FreeCallback</a>(void *arg)
608 {
609 TclCallback *cbPtr = arg;
610
611 ckfree(cbPtr->script);
612 ns_free(cbPtr);
613 }
614
615 static void
616 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeSched">FreeSched</a>(void *arg, int id)
617 {
618 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeCallback">FreeCallback</a>(arg);
619 }
620
621
622 /*
623 *----------------------------------------------------------------------
624 *
625 * <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedProc">NsTclSchedProc</a>, <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSignalProc">NsTclSignalProc</a>, <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclCallback">NsTclCallback</a> --
626 *
627 * External wrapper for various Tcl callbacks.
628 *
629 * Results:
630 * None.
631 *
632 * Side effects:
633 * None.
634 *
635 *----------------------------------------------------------------------
636 */
637
638 void
639 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSchedProc">NsTclSchedProc</a>(void *arg, int id)
640 {
641 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_EvalCallback">EvalCallback</a>(arg);
642 }
643
644 void
645 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclSignalProc">NsTclSignalProc</a>(void *arg)
646 {
647 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_EvalCallback">EvalCallback</a>(arg);
648 }
649
650 void
651 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclCallback">NsTclCallback</a>(void *arg)
652 {
653 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_EvalCallback">EvalCallback</a>(arg);
654 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_FreeCallback">FreeCallback</a>(arg);
655 }
656
657
658 /*
659 *----------------------------------------------------------------------
660 *
661 * <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclArgProc">NsTclArgProc</a> --
662 *
663 * Proc info routine to copy Tcl callback script.
664 *
665 * Results:
666 * None.
667 *
668 * Side effects:
669 * Will copy script to given dstring.
670 *
671 *----------------------------------------------------------------------
672 */
673
674 void
675 <a href="/cvs/aolserver/aolserver/nsd/tclsched.c#A_NsTclArgProc">NsTclArgProc</a>(Tcl_DString *dsPtr, void *arg)
676 {
677 TclCallback *cbPtr = arg;
678
679 Tcl_DStringAppendElement(dsPtr, cbPtr->script);
680 }