2 * Dynamic web page generation
with Standard ML
3 * Copyright (C
) 2003 Adam Chlipala
5 * This library is free software
; you can redistribute it
and/or
6 * modify it under the terms
of the GNU Lesser General Public
7 * License
as published by the Free Software Foundation
; either
8 * version
2.1 of the License
, or (at your option
) any later version
.
10 * This library is distributed
in the hope that it will be useful
,
11 * but WITHOUT ANY WARRANTY
; without even the implied warranty
of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
. See the GNU
13 * Lesser General Public License for more details
.
15 * You should have received a copy
of the GNU Lesser General Public
16 * License along
with this library
; if not
, write to the Free Software
17 * Foundation
, Inc
., 59 Temple Place
, Suite
330, Boston
, MA
02111-1307 USA
20 (* Main CGI program interface
*)
22 functor MainFn (Templates
: TEMPLATES
) :> MAIN
=
24 val templates
= foldl StringMap
.insert
' StringMap
.empty Templates
.templates
29 val cgiFields
= Cgi
.cgi_fieldnames ()
30 fun mapper name
= (name
, Cgi
.cgi_field_strings name
)
32 Web
.pushParams (map mapper cgiFields
);
34 [] => (print
"Status: 500\nContent-type: text/html\n\n<html><head><title>500 error</title></head><body><h2>500 error</h2>No template was specified</body></html>\n";
37 (case StringMap
.find (templates
, name
) of
38 NONE
=> (print
"Status: 404\nContent-type: text/html\n\n<html><head><title>404 error</title></head><body><h2>404 error</h2>Template not found</body></html>\n";
43 end handle Fail msg
=> (print
"Status: 500\nContent-type: text/plain\n\nFatal error: \n\n";
46 | ex
=> (print
"Status: 500\nContent-type: text/plain\n\nAn exception!\n\n";
47 app (fn s
=> print (s ^
"\n")) (SMLofNJ
.exnHistory ex
);