#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <jsapi.h>
#include <eggdrop/eggdrop.h>
Go to the source code of this file.
Data Structures | |
struct | my_callback_cd_t |
struct | my_args_data_t |
Defines | |
#define | XP_UNIX |
Functions | |
static int | my_command_handler (JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval *rval) |
static int | c_to_js_var (JSContext *cx, script_var_t *v, jsval *result) |
static int | js_to_c_var (JSContext *cx, JSObject *obj, jsval val, script_var_t *var, int type) |
static int | my_js_cb_delete (event_owner_t *owner, script_callback_t *me) |
static int | my_load_script (void *ignore, char *fname) |
static int | my_link_var (void *ignore, script_linked_var_t *var) |
static int | my_unlink_var (void *ignore, script_linked_var_t *var) |
static int | my_create_command (void *ignore, script_raw_command_t *info) |
static int | my_delete_command (void *ignore, script_raw_command_t *info) |
static int | my_get_arg (void *ignore, script_args_t *args, int num, script_var_t *var, int type) |
static void | linked_var_to_jsval (JSContext *cx, script_linked_var_t *var, jsval *val, script_var_t *script_val) |
static int | my_eggvar_set (JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval *rval) |
static int | my_eggvar_value_of (JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval *rval) |
static int | my_js_callbacker (script_callback_t *me,...) |
static int | javascript_init () |
static int | party_js (int pid, char *nick, user_t *u, char *cmd, char *text) |
EXPORT_SCOPE int | javascript_LTX_start (egg_module_t *modinfo) |
static char * | javascript_close () |
Variables | |
static const char | rcsid [] = "$Id: javascript.c,v 1.27 2005-12-28 17:27:31 sven Exp $" |
static script_module_t | my_script_interface |
static event_owner_t | js_owner |
static JSRuntime * | global_js_runtime |
static JSContext * | global_js_context |
static JSObject * | global_js_object |
static char * | error_logfile = NULL |
static JSClass | eggvar_class |
static JSClass | eggfunc_class |
static JSClass | global_class |
static bind_list_t | party_commands [] |
#define XP_UNIX |
Definition at line 28 of file javascript.c.
static int c_to_js_var | ( | JSContext * | cx, | |
script_var_t * | v, | |||
jsval * | result | |||
) | [static] |
Definition at line 357 of file javascript.c.
References byte_array_b::bytes, byte_array_b::do_free, user::handle, byte_array_b::len, script_var_b::len, SCRIPT_ARRAY, SCRIPT_BYTES, SCRIPT_FREE, SCRIPT_FREE_VAR, SCRIPT_INTEGER, SCRIPT_POINTER, SCRIPT_STRING, SCRIPT_STRING_LIST, SCRIPT_TYPE_MASK, SCRIPT_UNSIGNED, SCRIPT_USER, SCRIPT_VAR, script_var_b::type, and script_var_b::value.
Referenced by linked_var_to_jsval(), my_command_handler(), my_eggvar_set(), and my_js_callbacker().
00358 { 00359 *result = JSVAL_VOID; 00360 00361 /* If it's an array, we call ourselves recursively. */ 00362 if (v->type & SCRIPT_ARRAY) { 00363 JSObject *js_array; 00364 jsval element; 00365 int i; 00366 00367 js_array = JS_NewArrayObject(cx, 0, NULL); 00368 00369 /* If it's an array of script_var_t's, then it's easy. */ 00370 if ((v->type & SCRIPT_TYPE_MASK) == SCRIPT_VAR) { 00371 script_var_t **v_list; 00372 00373 v_list = (script_var_t **)v->value; 00374 for (i = 0; i < v->len; i++) { 00375 c_to_js_var(cx, v_list[i], &element); 00376 JS_SetElement(cx, js_array, i, &element); 00377 } 00378 } 00379 else { 00380 /* Otherwise, we have to turn them into fake script_var_t's. */ 00381 script_var_t v_sub; 00382 void **values; 00383 00384 v_sub.type = v->type & (~SCRIPT_ARRAY); 00385 values = (void **)v->value; 00386 for (i = 0; i < v->len; i++) { 00387 v_sub.value = values[i]; 00388 v_sub.len = -1; 00389 c_to_js_var(cx, &v_sub, &element); 00390 JS_SetElement(cx, js_array, i, &element); 00391 } 00392 } 00393 /* Whew */ 00394 if (v->type & SCRIPT_FREE) free(v->value); 00395 if (v->type & SCRIPT_FREE_VAR) free(v); 00396 *result = OBJECT_TO_JSVAL(js_array); 00397 return(0); 00398 } 00399 00400 /* Here is where we handle the basic types. */ 00401 switch (v->type & SCRIPT_TYPE_MASK) { 00402 case SCRIPT_INTEGER: 00403 case SCRIPT_UNSIGNED: 00404 *result = INT_TO_JSVAL(((int) v->value)); 00405 break; 00406 case SCRIPT_STRING: { 00407 char *str = v->value; 00408 00409 if (!str) str = ""; 00410 if (v->len == -1) v->len = strlen(str); 00411 *result = STRING_TO_JSVAL(JS_NewStringCopyN(cx, str, v->len)); 00412 00413 if (v->value && v->type & SCRIPT_FREE) free((char *)v->value); 00414 break; 00415 } 00416 case SCRIPT_STRING_LIST: { 00417 JSObject *js_array; 00418 jsval element; 00419 char **str = v->value; 00420 int i; 00421 00422 js_array = JS_NewArrayObject(cx, 0, NULL); 00423 00424 i = 0; 00425 while (str && *str) { 00426 element = STRING_TO_JSVAL(JS_NewStringCopyN(cx, *str, strlen(*str))); 00427 JS_SetElement(cx, js_array, i, &element); 00428 i++; 00429 str++; 00430 } 00431 *result = OBJECT_TO_JSVAL(js_array); 00432 break; 00433 } 00434 case SCRIPT_BYTES: { 00435 byte_array_t *bytes = v->value; 00436 00437 *result = STRING_TO_JSVAL(JS_NewStringCopyN(cx, bytes->bytes, bytes->len)); 00438 if (bytes->do_free) free(bytes->bytes); 00439 if (v->type & SCRIPT_FREE) free(bytes); 00440 break; 00441 } 00442 case SCRIPT_POINTER: { 00443 char str[32]; 00444 00445 sprintf(str, "#%u", (unsigned int) v->value); 00446 *result = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, str)); 00447 break; 00448 } 00449 case SCRIPT_USER: { 00450 /* An eggdrop user record (struct userrec *). */ 00451 char *handle; 00452 user_t *u = v->value; 00453 00454 if (u) handle = u->handle; 00455 else handle = "*"; 00456 *result = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, handle)); 00457 break; 00458 } 00459 default: 00460 /* Default: just pass a string with an error message. */ 00461 *result = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, "Unsupported type")); 00462 } 00463 if (v->type & SCRIPT_FREE_VAR) free(v); 00464 return(0); 00465 }
static int javascript_close | ( | ) | [static] |
Definition at line 705 of file javascript.c.
References bind_rem_list(), and script_unregister_module().
Referenced by javascript_LTX_start().
00706 { 00707 script_unregister_module(&my_script_interface); 00708 bind_rem_list("party", party_commands); 00709 module_undepend("javascript"); 00710 return(0); 00711 }
static int javascript_init | ( | ) | [static] |
Definition at line 610 of file javascript.c.
References eggfunc_class, eggvar_class, global_js_context, global_js_object, and global_js_runtime.
Referenced by javascript_LTX_start().
00611 { 00612 /* Create a new runtime environment. */ 00613 global_js_runtime = JS_NewRuntime(0x100000); 00614 if (!global_js_runtime) return(1); 00615 00616 /* Create a new context. */ 00617 global_js_context = JS_NewContext(global_js_runtime, 0x1000); 00618 if (!global_js_context) return(1); 00619 00620 /* Create the global object here */ 00621 global_js_object = JS_NewObject(global_js_context, &global_class, NULL, NULL); 00622 00623 /* Initialize the built-in JS objects and the global object */ 00624 JS_InitStandardClasses(global_js_context, global_js_object); 00625 00626 /* Now initialize our eggvar class. */ 00627 JS_InitClass(global_js_context, global_js_object, NULL, &eggvar_class, NULL, 0, NULL, NULL, NULL, NULL); 00628 00629 /* And eggfunc as well. */ 00630 JS_InitClass(global_js_context, global_js_object, NULL, &eggfunc_class, NULL, 0, NULL, NULL, NULL, NULL); 00631 00632 return(0); 00633 }
int javascript_LTX_start | ( | egg_module_t * | modinfo | ) |
Definition at line 685 of file javascript.c.
References egg_module::author, bind_add_list(), egg_module::close_func, egg_module::description, error_logfile, javascript_close(), javascript_init(), event_owner_b::module, egg_module::name, script_playback(), script_register_module(), and egg_module::version.
00686 { 00687 js_owner.module = modinfo; 00688 00689 modinfo->name = "javascript"; 00690 modinfo->author = "eggdev"; 00691 modinfo->version = "1.0.0"; 00692 modinfo->description = "provides javascript scripting support"; 00693 modinfo->close_func = javascript_close; 00694 javascript_init(); 00695 00696 error_logfile = strdup("logs/javascript_errors.log"); 00697 00698 script_register_module(&my_script_interface); 00699 script_playback(&my_script_interface); 00700 00701 bind_add_list("party", party_commands); 00702 return(0); 00703 }
static int js_to_c_var | ( | JSContext * | cx, | |
JSObject * | obj, | |||
jsval | val, | |||
script_var_t * | var, | |||
int | type | |||
) | [static] |
Definition at line 470 of file javascript.c.
References _, byte_array_b::bytes, script_callback_b::callback, script_callback_b::callback_data, my_callback_cd_t::command, byte_array_b::len, script_var_b::len, LOG_MISC, my_js_callbacker(), my_callback_cd_t::mycx, my_callback_cd_t::myobj, script_callback_b::name, script_callback_b::owner, putlog(), SCRIPT_BYTES, SCRIPT_CALLBACK, SCRIPT_FREE, SCRIPT_INTEGER, SCRIPT_STRING, SCRIPT_UNSIGNED, SCRIPT_USER, script_var_b::type, user_lookup_by_handle(), and script_var_b::value.
Referenced by my_eggvar_set(), and my_get_arg().
00471 { 00472 int err = 0; 00473 00474 var->type = type; 00475 var->len = -1; 00476 var->value = NULL; 00477 00478 switch (type) { 00479 case SCRIPT_STRING: { 00480 JSString *str; 00481 00482 str = JS_ValueToString(cx, val); 00483 var->value = JS_GetStringBytes(str); 00484 var->len = JS_GetStringLength(str); 00485 break; 00486 } 00487 case SCRIPT_BYTES: { 00488 byte_array_t *byte_array; 00489 JSString *str; 00490 00491 byte_array = (byte_array_t *)malloc(sizeof(*byte_array)); 00492 00493 str = JS_ValueToString(cx, val); 00494 byte_array->bytes = JS_GetStringBytes(str); 00495 byte_array->len = JS_GetStringLength(str); 00496 00497 var->value = byte_array; 00498 var->type |= SCRIPT_FREE; 00499 break; 00500 } 00501 case SCRIPT_UNSIGNED: 00502 case SCRIPT_INTEGER: { 00503 int32 intval; 00504 00505 err = !JS_ValueToInt32(cx, val, &intval); 00506 var->value = (void *)intval; 00507 break; 00508 } 00509 case SCRIPT_CALLBACK: { 00510 JSFunction *func; 00511 script_callback_t *cback; /* Callback struct */ 00512 my_callback_cd_t *cdata; /* Our client data */ 00513 00514 func = JS_ValueToFunction(cx, val); 00515 if (!func) { 00516 err = 1; 00517 break; 00518 } 00519 00520 cback = (script_callback_t *)calloc(1, sizeof(*cback)); 00521 cdata = (my_callback_cd_t *)calloc(1, sizeof(*cdata)); 00522 cback->callback = (Function) my_js_callbacker; 00523 cback->callback_data = (void *)cdata; 00524 cback->name = strdup(JS_GetFunctionName(func)); 00525 cback->owner = &js_owner; 00526 00527 cdata->mycx = cx; 00528 cdata->myobj = obj; 00529 cdata->command = func; 00530 00531 var->value = cback; 00532 break; 00533 } 00534 case SCRIPT_USER: { 00535 user_t *u; 00536 char *handle; 00537 00538 handle = JS_GetStringBytes(JS_ValueToString(cx, val)); 00539 u = user_lookup_by_handle(handle); 00540 var->value = u; 00541 if (!u) { 00542 JS_ReportError(cx, _("User not found: %s"), handle); 00543 err = 1; 00544 } 00545 break; 00546 } 00547 default: { 00548 char vartype[2]; 00549 00550 putlog(LOG_MISC, "*", _("Converting unknown! '%c'"), type); 00551 vartype[0] = type; 00552 vartype[1] = 0; 00553 JS_ReportError(cx, _("Cannot convert JS object to unknown variable type '%s'."), vartype); 00554 err = 1; 00555 } 00556 } 00557 00558 return(err); 00559 }
static void linked_var_to_jsval | ( | JSContext * | cx, | |
script_linked_var_t * | var, | |||
jsval * | val, | |||
script_var_t * | script_val | |||
) | [static] |
Definition at line 159 of file javascript.c.
References c_to_js_var(), script_var_b::len, SCRIPT_TYPE_MASK, script_linked_var_b::type, script_var_b::type, script_linked_var_b::value, and script_var_b::value.
Referenced by my_eggvar_value_of().
00160 { 00161 script_var_t script_var; 00162 00163 if (!script_val || !script_val->type) { 00164 script_var.type = var->type & SCRIPT_TYPE_MASK; 00165 script_var.len = -1; 00166 script_var.value = *(void **)var->value; 00167 script_val = &script_var; 00168 } 00169 00170 c_to_js_var(cx, script_val, val); 00171 }
static int my_command_handler | ( | JSContext * | cx, | |
JSObject * | obj, | |||
int | argc, | |||
jsval * | argv, | |||
jsval * | rval | |||
) | [static] |
Definition at line 562 of file javascript.c.
References my_args_data_t::argv, c_to_js_var(), script_raw_command_t::callback, script_raw_command_t::client_data, script_args_b::client_data, cmd, my_args_data_t::cx, script_var_b::len, script_args_b::len, script_args_b::module, my_args_data_t::obj, SCRIPT_ERROR, script_var_b::type, and script_var_b::value.
00563 { 00564 script_raw_command_t *cmd; 00565 script_var_t retval; 00566 int err; 00567 JSObject *this_obj; 00568 script_args_t args; 00569 my_args_data_t argdata; 00570 00571 /* Start off with a void value. */ 00572 *rval = JSVAL_VOID; 00573 00574 /* Get a pointer to the function object, so we can access the 00575 private data. */ 00576 this_obj = JSVAL_TO_OBJECT(argv[-2]); 00577 00578 /* Get the associated command structure stored in the object. */ 00579 cmd = (script_raw_command_t *)JS_GetPrivate(cx, this_obj); 00580 00581 argdata.cx = cx; 00582 argdata.obj = obj; 00583 argdata.argv = argv; 00584 args.module = &my_script_interface; 00585 args.client_data = &argdata; 00586 args.len = argc; 00587 00588 retval.type = 0; 00589 retval.value = NULL; 00590 retval.len = -1; 00591 00592 cmd->callback(cmd->client_data, &args, &retval); 00593 00594 err = retval.type & SCRIPT_ERROR; 00595 c_to_js_var(cx, &retval, rval); 00596 00597 if (err) return JS_FALSE; 00598 return JS_TRUE; 00599 }
static int my_create_command | ( | void * | ignore, | |
script_raw_command_t * | info | |||
) | [static] |
Definition at line 329 of file javascript.c.
References script_raw_command_t::class, egg_mprintf(), eggfunc_class, global_js_context, global_js_object, and script_raw_command_t::name.
Referenced by pythonscript_LTX_start().
00330 { 00331 char *cmdname; 00332 JSObject *obj; 00333 00334 if (info->class && strlen(info->class)) cmdname = egg_mprintf("%s_%s", info->class, info->name); 00335 else cmdname = strdup(info->name); 00336 00337 obj = JS_DefineObject(global_js_context, global_js_object, cmdname, &eggfunc_class, NULL, JSPROP_ENUMERATE|JSPROP_EXPORTED|JSPROP_READONLY); 00338 if (!obj) return(0); 00339 free(cmdname); 00340 JS_SetPrivate(global_js_context, obj, info); 00341 return(0); 00342 }
static int my_delete_command | ( | void * | ignore, | |
script_raw_command_t * | info | |||
) | [static] |
Definition at line 345 of file javascript.c.
References script_raw_command_t::class, egg_mprintf(), global_js_context, global_js_object, and script_raw_command_t::name.
00346 { 00347 char *cmdname; 00348 00349 if (info->class && strlen(info->class)) cmdname = egg_mprintf("%s_%s", info->class, info->name); 00350 else cmdname = strdup(info->name); 00351 JS_DeleteProperty(global_js_context, global_js_object, cmdname); 00352 free(cmdname); 00353 return(0); 00354 }
static int my_eggvar_set | ( | JSContext * | cx, | |
JSObject * | obj, | |||
int | argc, | |||
jsval * | argv, | |||
jsval * | rval | |||
) | [static] |
Definition at line 174 of file javascript.c.
References _, c_to_js_var(), js_to_c_var(), LOG_MISC, putlog(), script_linked_var_on_write(), and script_linked_var_b::type.
Referenced by my_link_var().
00175 { 00176 script_linked_var_t *linked_var; 00177 script_var_t script_var = {0}; 00178 00179 if (argc != 1) return JS_FALSE; 00180 00181 linked_var = JS_GetPrivate(cx, obj); 00182 if (!linked_var) { 00183 putlog(LOG_MISC, "*", _("Don't create your own eggvars!")); 00184 return JS_FALSE; 00185 } 00186 00187 js_to_c_var(cx, obj, argv[0], &script_var, linked_var->type); 00188 script_linked_var_on_write(linked_var, &script_var); 00189 c_to_js_var(cx, &script_var, rval); 00190 return JS_TRUE; 00191 }
static int my_eggvar_value_of | ( | JSContext * | cx, | |
JSObject * | obj, | |||
int | argc, | |||
jsval * | argv, | |||
jsval * | rval | |||
) | [static] |
Definition at line 195 of file javascript.c.
References script_linked_var_b::callbacks, linked_var_to_jsval(), and script_var_callbacks_b::on_read.
Referenced by my_link_var().
00196 { 00197 script_linked_var_t *linked_var; 00198 00199 linked_var = JS_GetPrivate(cx, obj); 00200 if (linked_var->callbacks && linked_var->callbacks->on_read) { 00201 script_var_t newval = {0}; 00202 int r = (linked_var->callbacks->on_read)(linked_var, &newval); 00203 if (r) return JS_FALSE; 00204 linked_var_to_jsval(cx, linked_var, rval, &newval); 00205 } 00206 else linked_var_to_jsval(cx, linked_var, rval, NULL); 00207 return(JS_TRUE); 00208 }
static int my_get_arg | ( | void * | ignore, | |
script_args_t * | args, | |||
int | num, | |||
script_var_t * | var, | |||
int | type | |||
) | [static] |
Definition at line 601 of file javascript.c.
References my_args_data_t::argv, script_args_b::client_data, my_args_data_t::cx, js_to_c_var(), and my_args_data_t::obj.
00602 { 00603 my_args_data_t *argdata; 00604 00605 argdata = args->client_data; 00606 return js_to_c_var(argdata->cx, argdata->obj, argdata->argv[num], var, type); 00607 00608 }
static int my_js_callbacker | ( | script_callback_t * | me, | |
... | ||||
) | [static] |
Definition at line 272 of file javascript.c.
References c_to_js_var(), script_callback_b::callback_data, my_callback_cd_t::command, script_var_b::len, my_callback_cd_t::mycx, my_callback_cd_t::myobj, SCRIPT_INTEGER, SCRIPT_UNSIGNED, script_callback_b::syntax, script_var_b::type, and script_var_b::value.
Referenced by js_to_c_var().
00273 { 00274 jsval *argv, result = 0; 00275 JSObject *myobj; 00276 JSContext *mycx; 00277 JSFunction *command; 00278 script_var_t var; 00279 my_callback_cd_t *cd; /* My callback client data */ 00280 int i, n, retval = 0; 00281 va_list va; 00282 00283 /* This struct contains the interp and the obj command. */ 00284 cd = (my_callback_cd_t *)me->callback_data; 00285 00286 if (me->syntax) n = strlen(me->syntax); 00287 else n = 0; 00288 00289 argv = (jsval *)malloc(n * sizeof(jsval)); 00290 va_start(va, me); 00291 for (i = 0; i < n; i++) { 00292 var.type = me->syntax[i]; 00293 if (var.type == SCRIPT_INTEGER || var.type == SCRIPT_UNSIGNED) var.value = (void *) (va_arg(va, int)); 00294 else var.value = va_arg(va, void *); 00295 var.len = -1; 00296 c_to_js_var(cd->mycx, &var, argv+i); 00297 } 00298 va_end(va); 00299 00300 mycx = cd->mycx; 00301 myobj = cd->myobj; 00302 command = cd->command; 00303 00304 n = JS_CallFunction(mycx, myobj, command, n, argv, &result); 00305 free(argv); 00306 if (n) { 00307 int32 intval; 00308 00309 if (JS_ValueToInt32(mycx, result, &intval)) retval = intval; 00310 } 00311 00312 return(retval); 00313 }
static int my_js_cb_delete | ( | event_owner_t * | owner, | |
script_callback_t * | me | |||
) | [static] |
Definition at line 316 of file javascript.c.
References script_callback_b::callback_data, my_callback_cd_t::name, and script_callback_b::syntax.
00317 { 00318 my_callback_cd_t *cd; 00319 00320 cd = (my_callback_cd_t *)me->callback_data; 00321 if (cd->name) free(cd->name); 00322 if (me->syntax) free(me->syntax); 00323 free(cd); 00324 free(me); 00325 return(0); 00326 }
static int my_link_var | ( | void * | ignore, | |
script_linked_var_t * | var | |||
) | [static] |
Definition at line 211 of file javascript.c.
References script_linked_var_b::class, egg_mprintf(), eggvar_class, global_js_context, global_js_object, LOG_MISC, my_eggvar_set(), my_eggvar_value_of(), script_linked_var_b::name, and putlog().
Referenced by my_trace_callback().
00212 { 00213 char *varname; 00214 JSObject *obj; 00215 00216 if (var->class && strlen(var->class)) varname = egg_mprintf("%s(%s)", var->class, var->name); 00217 else varname = strdup(var->name); 00218 00219 obj = JS_DefineObject(global_js_context, global_js_object, varname, &eggvar_class, NULL, JSPROP_ENUMERATE|JSPROP_EXPORTED|JSPROP_READONLY); 00220 if (!obj) { 00221 putlog(LOG_MISC, "*", "failed 1"); 00222 return(0); 00223 } 00224 JS_SetPrivate(global_js_context, obj, var); 00225 JS_DefineFunction(global_js_context, obj, "toString", (JSNative) my_eggvar_value_of, 0, 0); 00226 JS_DefineFunction(global_js_context, obj, "valueOf", (JSNative) my_eggvar_value_of, 0, 0); 00227 JS_DefineFunction(global_js_context, obj, "set", (JSNative) my_eggvar_set, 0, 0); 00228 return(0); 00229 }
static int my_load_script | ( | void * | ignore, | |
char * | fname | |||
) | [static] |
Definition at line 129 of file javascript.c.
References global_js_context, and global_js_object.
Referenced by mls().
00130 { 00131 FILE *fp; 00132 int len; 00133 jsval rval; 00134 char *script; 00135 00136 /* Check the filename and make sure it ends in .js */ 00137 len = strlen(fname); 00138 if (len < 3 || fname[len-1] != 's' || fname[len-2] != 'j' || fname[len-3] != '.') { 00139 /* Nope, let someone else load it. */ 00140 return(0); 00141 } 00142 00143 fp = fopen(fname, "r"); 00144 if (!fp) return(0); 00145 00146 fseek(fp, 0, SEEK_END); 00147 len = ftell(fp); 00148 fseek(fp, 0, SEEK_SET); 00149 script = (char *)malloc(len+1); 00150 fread(script, len, 1, fp); 00151 fclose(fp); 00152 script[len] = 0; 00153 JS_EvaluateScript(global_js_context, global_js_object, script, len, fname, 1, &rval); 00154 free(script); 00155 00156 return(0); 00157 }
static int my_unlink_var | ( | void * | ignore, | |
script_linked_var_t * | var | |||
) | [static] |
Definition at line 232 of file javascript.c.
References script_linked_var_b::class, egg_mprintf(), global_js_context, global_js_object, and script_linked_var_b::name.
00233 { 00234 char *varname; 00235 00236 if (var->class && strlen(var->class)) varname = egg_mprintf("%s(%s)", var->class, var->name); 00237 else varname = strdup(var->name); 00238 00239 JS_DeleteProperty(global_js_context, global_js_object, varname); 00240 00241 free(varname); 00242 return(0); 00243 }
static int party_js | ( | int | pid, | |
char * | nick, | |||
user_t * | u, | |||
char * | cmd, | |||
char * | text | |||
) | [static] |
Definition at line 636 of file javascript.c.
References _, BIND_RET_LOG, global_js_context, global_js_object, and user::handle.
00637 { 00638 static int curline = 1; 00639 int retval; 00640 jsval js_rval; 00641 00642 if (!u || owner_check(u->handle)) { 00643 partyline_write(pid, _("You must be a permanent owner (defined in the config file) to use this command.\n")); 00644 return(BIND_RET_LOG); 00645 } 00646 00647 retval = JS_EvaluateScript(global_js_context, global_js_object, text, strlen(text), "console", curline++, &js_rval); 00648 if (!retval) partyline_printf(pid, _("JS Error: unknown for now\n")); 00649 else { 00650 JSString *str; 00651 00652 str = JS_ValueToString(global_js_context, js_rval); 00653 if (!str) partyline_printf(pid, "JS:\n"); 00654 else partyline_printf(pid, "JS: %s\n", JS_GetStringBytes(str)); 00655 } 00656 return(0); 00657 }
JSClass eggfunc_class [static] |
Initial value:
{ "EggdropFunction", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub, NULL, NULL, (JSNative) my_command_handler }
Definition at line 115 of file javascript.c.
Referenced by javascript_init(), and my_create_command().
JSClass eggvar_class [static] |
Initial value:
{
"EggdropVariable", JSCLASS_HAS_PRIVATE,
JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub
}
Definition at line 109 of file javascript.c.
Referenced by javascript_init(), and my_link_var().
char* error_logfile = NULL [static] |
Definition at line 79 of file javascript.c.
Referenced by javascript_LTX_start(), log_error_message(), and tclscript_LTX_start().
JSClass global_class [static] |
Initial value:
{"global", JSCLASS_HAS_PRIVATE,
JS_PropertyStub,JS_PropertyStub,JS_PropertyStub,JS_PropertyStub,
JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub
}
Definition at line 123 of file javascript.c.
JSContext* global_js_context [static] |
Definition at line 76 of file javascript.c.
Referenced by javascript_init(), my_create_command(), my_delete_command(), my_link_var(), my_load_script(), my_unlink_var(), and party_js().
JSObject* global_js_object [static] |
Definition at line 77 of file javascript.c.
Referenced by javascript_init(), my_create_command(), my_delete_command(), my_link_var(), my_load_script(), my_unlink_var(), and party_js().
JSRuntime* global_js_runtime [static] |
event_owner_t js_owner [static] |
script_module_t my_script_interface [static] |
Initial value:
{ "JavaScript", NULL, my_load_script, my_link_var, my_unlink_var, my_create_command, my_delete_command, my_get_arg }
Definition at line 55 of file javascript.c.
Referenced by my_command_handler().
bind_list_t party_commands[] [static] |
const char rcsid[] = "$Id: javascript.c,v 1.27 2005-12-28 17:27:31 sven Exp $" [static] |
Definition at line 21 of file javascript.c.