core.c
来自「elinks下lynx是最重要的二个文本浏览器, 在linux下非常实用, el」· C语言 代码 · 共 108 行
C
108 行
/* Perl scripting engine */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <stdio.h>#include <stdlib.h>#include "elinks.h"#include "config/home.h"#include "main/module.h"#include "scripting/perl/core.h"#include "util/file.h"#define PERL_HOOKS_FILENAME "hooks.pl"PerlInterpreter *my_perl;#ifdef PERL_SYS_INIT3extern char **environ;#endifstatic char *get_global_hook_file(void){ static char buf[] = CONFDIR "/" PERL_HOOKS_FILENAME; if (file_exists(buf)) return buf; return NULL;}static char *get_local_hook_file(void){ static char buf[1024]; /* TODO: MAX_PATH ??? --Zas */ if (!elinks_home) return NULL; snprintf(buf, sizeof(buf), "%s%s", elinks_home, PERL_HOOKS_FILENAME); if (file_exists(buf)) return buf; return NULL;}static voidprecleanup_perl(struct module *module){ if (!my_perl) return; perl_destruct(my_perl); perl_free(my_perl); my_perl = NULL;}voidcleanup_perl(struct module *module){ precleanup_perl(module);#ifdef PERL_SYS_TERM PERL_SYS_TERM();#endif}voidinit_perl(struct module *module){ /* FIXME: it seems that some systems like OS/2 requires PERL_SYS_INIT3 * and PERL_SYS_TERM to open/close the same block, at least regarding * some ml messages. * * Is passing @environ strictly needed ? --Zas */ /* PERL_SYS_INIT3 may not be defined, it depends on the system. */#ifdef PERL_SYS_INIT3 char *my_argv[] = { NULL }; int my_argc = 0; /* A hack to prevent unused variables warnings. */ my_argv[my_argc++] = ""; PERL_SYS_INIT3(&my_argc, &my_argv, &environ);#endif my_perl = perl_alloc(); if (my_perl) { char *hook_global = get_global_hook_file(); char *hook_local = get_local_hook_file(); char *global_argv[] = { "", hook_global}; char *local_argv[] = { "", hook_local}; int err = 1; perl_construct(my_perl); if (hook_local) err = perl_parse(my_perl, NULL, 2, local_argv, NULL); else if (hook_global) err = perl_parse(my_perl, NULL, 2, global_argv, NULL);#ifdef PERL_EXIT_DESTRUCT_END PL_exit_flags |= PERL_EXIT_DESTRUCT_END;#endif if (!err) err = perl_run(my_perl); if (err) precleanup_perl(module); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?