pike.git/
src/
module.c
Branch:
Tag:
Non-build tags
All tags
No tags
1997-02-07
1997-02-07 01:31:52 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>
db3e138549b1f535c25dd8615ff70dc7455911b0 (
62
lines) (+
45
/-
17
)
[
Show
|
Annotate
]
Branch:
7.9
new more or less rewritten..
Rev: src/module.c:1.2
Rev: src/module.h:1.2
3:
||| Pike is distributed as GPL (General Public License) ||| See the files COPYING and DISCLAIMER for more information. \*/
+
#include "global.h"
#include "module.h" #include "macros.h" #include "error.h"
-
+
#include "builtin_functions.h"
+
#include "main.h"
+
#include "svalue.h"
+
#include "interpret.h"
+
#include "stralloc.h"
+
#include "object.h"
+
#include "mapping.h"
-
#include "modlist.h"
+
#include "
modules/
modlist
_headers
.h"
-
struct
module
*
current_module=module_list
;
+
typedef
void
(
*
modfun)(void)
;
-
void
init
_
modules_efuns()
+
struct
static
_
module
{
-
unsigned
int e
;
-
for(e=0;e<NELEM(module_list);e++)
-
{
-
current_module=module_list+e;
-
module_list[e].
init
_efuns()
;
-
}
-
current_module=module_list
;
-
}
+
char
*name
;
+
modfun
init
;
+
modfun
exit
;
+
};
-
void
init_modules_
programs
()
+
static struct static_module module_list[] = {
+
{ "builtin", init_main, exit_main }
+
#include "modules/modlist.h"
+
};
+
+
void init_modules(
void
)
{ unsigned int e;
-
+
struct mapping *m = allocate_mapping(10);
+
m->refs++;
+
push_text("_static_modules");
+
push_mapping(m);
+
f_add_constant(2);
+
for(e=0;e<NELEM(module_list);e++) {
-
current
_module=
module
_
list+e
;
-
module_list[e].
init
_
programs
();
+
struct program *p;
+
struct object *o;
+
struct pike
_
string *s;
+
start_new_program();
+
module
_list[e].init();
+
p
=
end
_
program()
;
+
+
o=clone(p,0);
+
free_program(p);
+
+
push_text(
module_list[e].
name);
+
push
_
object
(
o
);
+
mapping_insert(m, sp-2, sp-1);
+
pop_n_elems(2);
}
-
current_module=module_list;
+
}
-
void exit_modules()
+
void exit_modules(
void
)
{ int e;
-
for(e=NELEM(module_list)-1;e>=0;e--) module_list[e].exit();
+
for(e=NELEM(module_list)-1;e>=0;e--)
+
module_list[e].exit();
}