aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/edit_mod.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/edit_mod.erl')
-rw-r--r--src/edit_mod.erl42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/edit_mod.erl b/src/edit_mod.erl
new file mode 100644
index 0000000..ae5be54
--- /dev/null
+++ b/src/edit_mod.erl
@@ -0,0 +1,42 @@
+%%%----------------------------------------------------------------------
+%%% File : edit_mod.erl
+%%% Author : Luke Gorrie <luke@bluetail.com>
+%%% Purpose : Module loader
+%%% Created : 28 Apr 2001 by Luke Gorrie <luke@bluetail.com>
+%%%----------------------------------------------------------------------
+
+-module(edit_mod).
+-author('luke@bluetail.com').
+
+-export([init/0, require/1, load/1]).
+
+init() ->
+ ets:new(?MODULE, [set, named_table, public]),
+ ok.
+
+require(Mod) ->
+ case ets:lookup(?MODULE, Mod) of
+ [] -> % not initialised
+ case load(Mod) of
+ ok ->
+ ok;
+ {error, Reason} ->
+ {error, Reason}
+ end;
+ [_] -> % already initialised
+ ok
+ end.
+
+load(Mod) ->
+ case catch Mod:mod_init() of
+ ok ->
+ ets:insert(?MODULE, {Mod}),
+ ok;
+ {'EXIT', {undef, _}} ->
+ {error, {missing, Mod, mod_init, 0}};
+ {error, Reason} ->
+ {error, Reason};
+ Unexpected ->
+ {error, {unexpected, Unexpected}}
+ end.
+