document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/pygment_trac.css" />');
document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/embed.css" />');
document.write('<div class="flowcoder_post flowcoder_clearfix">');
document.write('<div class="flowcoder_posttitle"><a href=\"http://flowcoder.com/45\">Generic Web Server/RESTful Router<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"p\">-<\/span><span class=\"ni\">module<\/span><span class=\"p\">(<\/span><span class=\"n\">web_server<\/span><span class=\"p\">).<\/span>\n\n<span class=\"p\">-<\/span><span class=\"ni\">behaviour<\/span><span class=\"p\">(<\/span><span class=\"n\">gen_server<\/span><span class=\"p\">).<\/span>\n\n<span class=\"p\">-<\/span><span class=\"ni\">define<\/span><span class=\"p\">(<\/span><span class=\"no\">SERVER<\/span><span class=\"p\">,<\/span> <span class=\"no\">?MODULE<\/span><span class=\"p\">).<\/span>\n<span class=\"p\">-<\/span><span class=\"ni\">define<\/span><span class=\"p\">(<\/span><span class=\"no\">OK<\/span><span class=\"p\">,<\/span> <span class=\"o\">&lt;&lt;<\/span><span class=\"s\">&quot;ok&quot;<\/span><span class=\"o\">&gt;&gt;<\/span><span class=\"p\">).<\/span>\n\n<span class=\"c\">%% API<\/span>\n<span class=\"p\">-<\/span><span class=\"ni\">export<\/span><span class=\"p\">([<\/span><span class=\"n\">start_link<\/span><span class=\"o\">/<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">dispatch_requests<\/span><span class=\"o\">/<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">stop<\/span><span class=\"o\">/<\/span><span class=\"mi\">0<\/span><span class=\"p\">]).<\/span>\n\n<span class=\"c\">%% gen_server callbacks<\/span>\n<span class=\"c\">%% (Same old, same old. You can skip down to the handle/2 function...)<\/span>\n<span class=\"p\">-<\/span><span class=\"ni\">export<\/span><span class=\"p\">([<\/span><span class=\"n\">init<\/span><span class=\"o\">/<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">handle_call<\/span><span class=\"o\">/<\/span><span class=\"mi\">3<\/span><span class=\"p\">,<\/span> <span class=\"n\">handle_cast<\/span><span class=\"o\">/<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"n\">handle_info<\/span><span class=\"o\">/<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">terminate<\/span><span class=\"o\">/<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"n\">code_change<\/span><span class=\"o\">/<\/span><span class=\"mi\">3<\/span><span class=\"p\">]).<\/span>\n\n<span class=\"nf\">start_link<\/span><span class=\"p\">(<\/span><span class=\"nv\">Port<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"nn\">gen_server<\/span><span class=\"p\">:<\/span><span class=\"n\">start_link<\/span><span class=\"p\">({<\/span><span class=\"n\">local<\/span><span class=\"p\">,<\/span> <span class=\"no\">?SERVER<\/span><span class=\"p\">},<\/span> <span class=\"no\">?MODULE<\/span><span class=\"p\">,<\/span> <span class=\"p\">[<\/span><span class=\"nv\">Port<\/span><span class=\"p\">],<\/span> <span class=\"p\">[]).<\/span>\n\n<span class=\"nf\">init<\/span><span class=\"p\">([<\/span><span class=\"nv\">Port<\/span><span class=\"p\">])<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"nn\">mochiweb_http<\/span><span class=\"p\">:<\/span><span class=\"n\">start<\/span><span class=\"p\">(<\/span>\n        <span class=\"p\">[{<\/span><span class=\"n\">port<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Port<\/span><span class=\"p\">},<\/span>\n         <span class=\"p\">{<\/span><span class=\"n\">loop<\/span><span class=\"p\">,<\/span> <span class=\"k\">fun<\/span><span class=\"p\">(<\/span><span class=\"nv\">Req<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">dispatch_requests<\/span><span class=\"p\">(<\/span><span class=\"nv\">Req<\/span><span class=\"p\">)<\/span> <span class=\"k\">end<\/span><span class=\"p\">}]),<\/span>\n    <span class=\"nn\">erlang<\/span><span class=\"p\">:<\/span><span class=\"nb\">monitor<\/span><span class=\"p\">(<\/span><span class=\"n\">process<\/span><span class=\"p\">,<\/span> <span class=\"n\">mochiweb_http<\/span><span class=\"p\">),<\/span>\n    <span class=\"p\">{<\/span><span class=\"n\">ok<\/span><span class=\"p\">,<\/span> <span class=\"p\">[]}.<\/span>\n\n<span class=\"nf\">stop<\/span><span class=\"p\">()<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"nn\">gen_server<\/span><span class=\"p\">:<\/span><span class=\"n\">cast<\/span><span class=\"p\">(<\/span><span class=\"no\">?SERVER<\/span><span class=\"p\">,<\/span> <span class=\"n\">stop<\/span><span class=\"p\">).<\/span>\n\n<span class=\"nf\">dispatch_requests<\/span><span class=\"p\">(<\/span><span class=\"nv\">Req<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"nv\">Path<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">Req<\/span><span class=\"p\">:<\/span><span class=\"nb\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">path<\/span><span class=\"p\">),<\/span>\n    <span class=\"nv\">Action<\/span> <span class=\"o\">=<\/span> <span class=\"n\">clean_path<\/span><span class=\"p\">(<\/span><span class=\"nv\">Path<\/span><span class=\"p\">),<\/span>\n    <span class=\"n\">handle<\/span><span class=\"p\">(<\/span><span class=\"nv\">Action<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Req<\/span><span class=\"p\">).<\/span>\n\n<span class=\"nf\">handle_call<\/span><span class=\"p\">(_<\/span><span class=\"nv\">Request<\/span><span class=\"p\">,<\/span> <span class=\"p\">_<\/span><span class=\"nv\">From<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"nv\">Reply<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ok<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">{<\/span><span class=\"n\">reply<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Reply<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">}.<\/span>\n\n<span class=\"nf\">handle_cast<\/span><span class=\"p\">(<\/span><span class=\"n\">stop<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"p\">{<\/span><span class=\"n\">stop<\/span><span class=\"p\">,<\/span> <span class=\"n\">normal<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">};<\/span>\n\n<span class=\"nf\">handle_cast<\/span><span class=\"p\">(_<\/span><span class=\"nv\">Msg<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"p\">{<\/span><span class=\"n\">noreply<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">}.<\/span>\n\n<span class=\"nf\">handle_info<\/span><span class=\"p\">({<\/span><span class=\"n\">&#39;DOWN&#39;<\/span><span class=\"p\">,<\/span> <span class=\"p\">_,<\/span> <span class=\"p\">_,<\/span> <span class=\"p\">{<\/span><span class=\"n\">mochiweb_http<\/span><span class=\"p\">,<\/span> <span class=\"p\">_},<\/span> <span class=\"p\">_},<\/span> <span class=\"nv\">State<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"p\">{<\/span><span class=\"n\">stop<\/span><span class=\"p\">,<\/span> <span class=\"n\">normal<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">};<\/span>\n\n<span class=\"nf\">handle_info<\/span><span class=\"p\">(_<\/span><span class=\"nv\">Info<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"p\">{<\/span><span class=\"n\">noreply<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">}.<\/span>\n\n<span class=\"nf\">terminate<\/span><span class=\"p\">(_<\/span><span class=\"nv\">Reason<\/span><span class=\"p\">,<\/span> <span class=\"p\">_<\/span><span class=\"nv\">State<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"nn\">mochiweb_http<\/span><span class=\"p\">:<\/span><span class=\"n\">stop<\/span><span class=\"p\">(),<\/span>\n    <span class=\"n\">ok<\/span><span class=\"p\">.<\/span>\n\n<span class=\"nf\">code_change<\/span><span class=\"p\">(_<\/span><span class=\"nv\">OldVsn<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">,<\/span> <span class=\"p\">_<\/span><span class=\"nv\">Extra<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"p\">{<\/span><span class=\"n\">ok<\/span><span class=\"p\">,<\/span> <span class=\"nv\">State<\/span><span class=\"p\">}.<\/span>\n\n\n<span class=\"c\">%% This was ripped off from the following blog:<\/span>\n<span class=\"c\">%% http://willcodeforfoo.com/2009/07/29/using-mochiweb-to-create-a-webframework-in-erlang/<\/span>\n\n<span class=\"nf\">handle<\/span><span class=\"p\">(<\/span><span class=\"nv\">Path<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Req<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"nv\">CleanPath<\/span> <span class=\"o\">=<\/span> <span class=\"n\">clean_path<\/span><span class=\"p\">(<\/span><span class=\"nv\">Path<\/span><span class=\"p\">),<\/span>\n    <span class=\"nv\">CAtom<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">erlang<\/span><span class=\"p\">:<\/span><span class=\"nb\">list_to_atom<\/span><span class=\"p\">(<\/span><span class=\"n\">top_level_request<\/span><span class=\"p\">(<\/span><span class=\"nv\">CleanPath<\/span><span class=\"p\">)),<\/span>    \n    <span class=\"nv\">ControllerPath<\/span> <span class=\"o\">=<\/span> <span class=\"n\">parse_controller_path<\/span><span class=\"p\">(<\/span><span class=\"nv\">CleanPath<\/span><span class=\"p\">),<\/span>\n    <span class=\"k\">case<\/span> <span class=\"nv\">CAtom<\/span> <span class=\"k\">of<\/span>\n        <span class=\"n\">home<\/span> <span class=\"o\">-&gt;<\/span> \n            <span class=\"nv\">IndexContents<\/span> <span class=\"o\">=<\/span> <span class=\"k\">case<\/span> <span class=\"nn\">file<\/span><span class=\"p\">:<\/span><span class=\"n\">read_file<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;www/index.html&quot;<\/span><span class=\"p\">)<\/span> <span class=\"k\">of<\/span>\n                <span class=\"p\">{<\/span><span class=\"n\">ok<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Contents<\/span><span class=\"p\">}<\/span> <span class=\"o\">-&gt;<\/span> \n                    <span class=\"nv\">Contents<\/span><span class=\"p\">;<\/span>\n                <span class=\"p\">_<\/span> <span class=\"o\">-&gt;<\/span> \n                    <span class=\"s\">&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;Error&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;Uh oh&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&quot;<\/span>\n            <span class=\"k\">end<\/span><span class=\"p\">,<\/span>\n            <span class=\"nv\">Req<\/span><span class=\"p\">:<\/span><span class=\"n\">ok<\/span><span class=\"p\">({<\/span><span class=\"s\">&quot;text/html&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">IndexContents<\/span><span class=\"p\">});<\/span>\n        <span class=\"n\">assets<\/span> <span class=\"o\">-&gt;<\/span> \n            <span class=\"nv\">Req<\/span><span class=\"p\">:<\/span><span class=\"n\">ok<\/span><span class=\"p\">(<\/span><span class=\"nn\">assets<\/span><span class=\"p\">:<\/span><span class=\"nb\">get<\/span><span class=\"p\">(<\/span><span class=\"nv\">ControllerPath<\/span><span class=\"p\">));<\/span>\n        <span class=\"nv\">ControllerAtom<\/span> <span class=\"o\">-&gt;<\/span>\n            <span class=\"nv\">Body<\/span> <span class=\"o\">=<\/span> <span class=\"k\">case<\/span> <span class=\"nv\">Req<\/span><span class=\"p\">:<\/span><span class=\"nb\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">method<\/span><span class=\"p\">)<\/span> <span class=\"k\">of<\/span>\n                <span class=\"n\">&#39;GET&#39;<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nv\">ControllerAtom<\/span><span class=\"p\">:<\/span><span class=\"nb\">get<\/span><span class=\"p\">(<\/span><span class=\"nv\">ControllerPath<\/span><span class=\"p\">);<\/span>\n                <span class=\"n\">&#39;POST&#39;<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nv\">ControllerAtom<\/span><span class=\"p\">:<\/span><span class=\"n\">post<\/span><span class=\"p\">(<\/span><span class=\"nv\">ControllerPath<\/span><span class=\"p\">,<\/span> <span class=\"n\">decode_data_from_request<\/span><span class=\"p\">(<\/span><span class=\"nv\">Req<\/span><span class=\"p\">));<\/span>\n                <span class=\"n\">&#39;PUT&#39;<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nv\">ControllerAtom<\/span><span class=\"p\">:<\/span><span class=\"nb\">put<\/span><span class=\"p\">(<\/span><span class=\"nv\">ControllerPath<\/span><span class=\"p\">,<\/span> <span class=\"n\">decode_data_from_request<\/span><span class=\"p\">(<\/span><span class=\"nv\">Req<\/span><span class=\"p\">));<\/span>\n                <span class=\"n\">&#39;DELETE&#39;<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nv\">ControllerAtom<\/span><span class=\"p\">:<\/span><span class=\"n\">delete<\/span><span class=\"p\">(<\/span><span class=\"nv\">ControllerPath<\/span><span class=\"p\">,<\/span> <span class=\"n\">decode_data_from_request<\/span><span class=\"p\">(<\/span><span class=\"nv\">Req<\/span><span class=\"p\">));<\/span>\n                <span class=\"nv\">Other<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">subst<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;Other <\/span><span class=\"si\">~p<\/span><span class=\"s\"> on: <\/span><span class=\"si\">~s~n<\/span><span class=\"s\">&quot;<\/span><span class=\"p\">,<\/span> <span class=\"p\">[<\/span><span class=\"n\">users<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Other<\/span><span class=\"p\">])<\/span>\n            <span class=\"k\">end<\/span><span class=\"p\">,<\/span>\n            <span class=\"nv\">Req<\/span><span class=\"p\">:<\/span><span class=\"n\">ok<\/span><span class=\"p\">({<\/span><span class=\"s\">&quot;text/html&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Body<\/span><span class=\"p\">})<\/span>\n    <span class=\"k\">end<\/span><span class=\"p\">.<\/span>\n\n<span class=\"c\">%% Helper methods:<\/span>\n\n<span class=\"c\">%% Parse the request body as JSON<\/span>\n<span class=\"nf\">decode_data_from_request<\/span><span class=\"p\">(<\/span><span class=\"nv\">Req<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"nv\">RecvBody<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">Req<\/span><span class=\"p\">:<\/span><span class=\"n\">recv_body<\/span><span class=\"p\">(),<\/span>\n    <span class=\"nv\">Data<\/span> <span class=\"o\">=<\/span> <span class=\"k\">case<\/span> <span class=\"nv\">RecvBody<\/span> <span class=\"k\">of<\/span>\n        <span class=\"o\">&lt;&lt;&gt;&gt;<\/span> <span class=\"o\">-&gt;<\/span> \n            <span class=\"nn\">erlang<\/span><span class=\"p\">:<\/span><span class=\"nb\">list_to_binary<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;{}&quot;<\/span><span class=\"p\">);<\/span>\n        <span class=\"nv\">Bin<\/span> <span class=\"o\">-&gt;<\/span> \n            <span class=\"nv\">Bin<\/span>\n    <span class=\"k\">end<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">{<\/span><span class=\"n\">struct<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Struct<\/span><span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">mochijson2<\/span><span class=\"p\">:<\/span><span class=\"n\">decode<\/span><span class=\"p\">(<\/span><span class=\"nv\">Data<\/span><span class=\"p\">),<\/span>\n    <span class=\"nv\">Struct<\/span><span class=\"p\">.<\/span>\n\n<span class=\"c\">% Parse the URL path<\/span>\n<span class=\"nf\">parse_controller_path<\/span><span class=\"p\">(<\/span><span class=\"nv\">CleanPath<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"k\">case<\/span> <span class=\"nn\">string<\/span><span class=\"p\">:<\/span><span class=\"n\">tokens<\/span><span class=\"p\">(<\/span><span class=\"nv\">CleanPath<\/span><span class=\"p\">,<\/span> <span class=\"s\">&quot;/&quot;<\/span><span class=\"p\">)<\/span> <span class=\"k\">of<\/span>\n        <span class=\"p\">[]<\/span> <span class=\"o\">-&gt;<\/span> \n            <span class=\"p\">[];<\/span>\n        <span class=\"p\">[_<\/span><span class=\"nv\">RootPath<\/span><span class=\"p\">|<\/span><span class=\"nv\">Rest<\/span><span class=\"p\">]<\/span> <span class=\"o\">-&gt;<\/span> \n            <span class=\"nv\">Rest<\/span>\n    <span class=\"k\">end<\/span><span class=\"p\">.<\/span>\n\n<span class=\"c\">%% Strip off the query string off the URL<\/span>\n<span class=\"nf\">clean_path<\/span><span class=\"p\">(<\/span><span class=\"nv\">Path<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"k\">case<\/span> <span class=\"nn\">string<\/span><span class=\"p\">:<\/span><span class=\"n\">str<\/span><span class=\"p\">(<\/span><span class=\"nv\">Path<\/span><span class=\"p\">,<\/span> <span class=\"s\">&quot;?&quot;<\/span><span class=\"p\">)<\/span> <span class=\"k\">of<\/span>\n        <span class=\"mi\">0<\/span> <span class=\"o\">-&gt;<\/span> \n            <span class=\"nv\">Path<\/span><span class=\"p\">;<\/span>\n        <span class=\"nv\">N<\/span> <span class=\"o\">-&gt;<\/span> \n            <span class=\"nn\">string<\/span><span class=\"p\">:<\/span><span class=\"n\">substr<\/span><span class=\"p\">(<\/span><span class=\"nv\">Path<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"nn\">string<\/span><span class=\"p\">:<\/span><span class=\"n\">len<\/span><span class=\"p\">(<\/span><span class=\"nv\">Path<\/span><span class=\"p\">)<\/span> <span class=\"o\">-<\/span> <span class=\"p\">(<\/span><span class=\"nv\">N<\/span><span class=\"o\">+<\/span><span class=\"mi\">1<\/span><span class=\"p\">))<\/span>\n    <span class=\"k\">end<\/span><span class=\"p\">.<\/span>\n\n<span class=\"nf\">top_level_request<\/span><span class=\"p\">(<\/span><span class=\"nv\">Path<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"k\">case<\/span> <span class=\"nn\">string<\/span><span class=\"p\">:<\/span><span class=\"n\">tokens<\/span><span class=\"p\">(<\/span><span class=\"nv\">Path<\/span><span class=\"p\">,<\/span> <span class=\"s\">&quot;/&quot;<\/span><span class=\"p\">)<\/span> <span class=\"k\">of<\/span>\n        <span class=\"p\">[<\/span><span class=\"nv\">CleanPath<\/span><span class=\"p\">|_<\/span><span class=\"nv\">Others<\/span><span class=\"p\">]<\/span> <span class=\"o\">-&gt;<\/span> \n            <span class=\"nv\">CleanPath<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">[]<\/span> <span class=\"o\">-&gt;<\/span> \n            <span class=\"s\">&quot;home&quot;<\/span>\n    <span class=\"k\">end<\/span><span class=\"p\">.<\/span>\n<\/pre><\/div>\n</div>');
document.write('<div class="flowcoder_bottombar flowcoder_clearfix">');
document.write('<div class="flowcoder_postedby">Posted by <a href=\"http://flowcoder.com/zdzolton\">zdzolton<\/a> on <a href=\"http://flowcoder.com/\">Flowcoder<\/a></div>');
document.write('<div class="flowcoder_viewraw"><a href=\"http://flowcoder.com/45.txt\">view raw<\/a></div>');
document.write('</div></div>');
