diff options
author | lukeg <lukeg> | 2003-02-21 19:01:14 +0000 |
---|---|---|
committer | lukeg <lukeg> | 2003-02-21 19:01:14 +0000 |
commit | e7d48fe500f6ed676ee1b212ebd61408bced1c5b (patch) | |
tree | 11a756c7bb4906f3e186c1cb8331cb7ed27bc69c /src/file_gl.erl | |
download | ermacs-fork-e7d48fe500f6ed676ee1b212ebd61408bced1c5b.tar.gz |
*** empty log message ***
Diffstat (limited to 'src/file_gl.erl')
-rw-r--r-- | src/file_gl.erl | 62 |
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}. + |