aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/file_gl.erl
diff options
context:
space:
mode:
authorlukeg <lukeg>2003-02-21 19:01:14 +0000
committerlukeg <lukeg>2003-02-21 19:01:14 +0000
commite7d48fe500f6ed676ee1b212ebd61408bced1c5b (patch)
tree11a756c7bb4906f3e186c1cb8331cb7ed27bc69c /src/file_gl.erl
downloadermacs-fork-e7d48fe500f6ed676ee1b212ebd61408bced1c5b.tar.gz
*** empty log message ***
Diffstat (limited to 'src/file_gl.erl')
-rw-r--r--src/file_gl.erl62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/file_gl.erl b/src/file_gl.erl
new file mode 100644
index 0000000..832df73
--- /dev/null
+++ b/src/file_gl.erl
@@ -0,0 +1,62 @@
+%%%----------------------------------------------------------------------
+%%% File : file_gl.erl
+%%% Author : Luke Gorrie <luke@bluetail.com>
+%%% Purpose : Group leader server for writing to a file
+%%% Created : 22 Oct 2000 by Luke Gorrie <luke@bluetail.com>
+%%%----------------------------------------------------------------------
+
+-module(file_gl).
+-author('luke@bluetail.com').
+
+-behaviour(gen_server).
+
+%% External exports
+-export([start_link/1]).
+
+%% gen_server callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3,
+ handle_call/3, handle_cast/2]).
+
+-record(state, {fd}).
+
+%%%----------------------------------------------------------------------
+%%% API
+%%%----------------------------------------------------------------------
+start_link(Filename) ->
+ gen_server:start_link({local, file_gl}, file_gl, Filename, []).
+
+%%%----------------------------------------------------------------------
+%%% Callback functions from gen_server
+%%%----------------------------------------------------------------------
+
+init(Filename) ->
+ {ok, Fd} = file:open(Filename, [write]),
+ {ok, #state{fd=Fd}}.
+
+handle_info({io_request, From, ReplyAs, {put_chars, C}}, State) ->
+ file:write(State#state.fd, C),
+ From ! {io_reply, ReplyAs, ok},
+ {noreply, State};
+handle_info({io_request, From, ReplyAs, {put_chars, M, F, A}}, State) ->
+ file:write(State#state.fd, apply(M, F, A)),
+ From ! {io_reply, ReplyAs, ok},
+ {noreply, State};
+handle_info({io_request, From, ReplyAs, {get_until, _, _, _}}, State) ->
+ From ! {io_reply, ReplyAs, eof},
+ {noreply, State};
+handle_info(Info, State) ->
+ {noreply, State}.
+
+handle_call(_, _, _) ->
+ exit(no_such_callback).
+
+handle_cast(_, _) ->
+ exit(no_such_callback).
+
+terminate(Reason, State) ->
+ file:close(State#state.fd),
+ ok.
+
+code_change(OldVsn, State, Extra) ->
+ {ok, State}.
+