home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Moscow ML 1.42 / e_SML / cgi / cgi-echo.sml < prev    next >
Encoding:
Text File  |  1997-07-25  |  1.7 KB  |  69 lines  |  [TEXT/Moml]

  1. (* A very simple cgi echo test. *)
  2. (* 14May1997 e *)
  3.  
  4. (* build with:
  5.  
  6. load "Path";
  7. load "Process";
  8.  
  9. val home =
  10.   case Process.getEnv "PATH_TRANSLATED" of
  11.     SOME n => Path.dir n
  12.   | NONE => ":"
  13. ;
  14.  
  15. let val base = home ^ "e_SML:cgi:"
  16. in
  17.   make "default" (home ^ "lib") [] base;
  18.   chDir base;
  19.   link "cgi-echo.image"
  20.        (true,true) (* -g -noheader *)
  21.        (true,"")   (* -autolink -P *)
  22.        (home ^ "lib") []
  23.        ["cgi-echo.uo"]
  24. end;
  25.  
  26. *)
  27.  
  28. fun echo _ = 
  29.     let open FileSys TextIO Process
  30.         fun maybe_echo s =
  31.           case getEnv s of
  32.             SOME x => output(stdOut, s ^ ": " ^ x ^ "<BR>\r\n")
  33.           | NONE => ()
  34.         fun maybe_echo_list (hd::tl) = (maybe_echo hd; maybe_echo_list tl)
  35.           | maybe_echo_list _ = ()
  36.         fun maybe_echo_post NONE = ()
  37.           | maybe_echo_post (SOME x) =
  38.              (case Int.fromString x of
  39.                 NONE => ()
  40.               | SOME i =>
  41.                  (output(stdOut, "Input: ");
  42.                   output(stdOut, (inputN (stdIn,i)))))
  43.     in
  44.         (* Print the header *)
  45.         output(stdOut, "HTTP/1.0 200 OK\r\n");
  46.         output(stdOut, "MIME-version: 1.0\r\n");
  47.         output(stdOut, "Content-type: text/html\r\n\r\n<P>");
  48.         maybe_echo_list
  49.           ["PATH_TRANSLATED",
  50.            "PATH_INFO",
  51.            "QUERY_STRING",
  52.            "REMOTE_USER",
  53.            "REMOTE_PASS",
  54.            "REQUEST_METHOD",
  55.            "REMOTE_HOST",
  56.            "REMOTE_ADDR",
  57.            "SERVER_NAME",
  58.            "SERVER_PORT",
  59.            "SCRIPT_NAME",
  60.            "HTTP_REFERER",
  61.            "HTTP_USER_AGENT",
  62.            "CONTENT_TYPE",
  63.            "GATEWAY_INTERFACE",
  64.            "CONTENT_LENGTH"];
  65.         maybe_echo_post (getEnv "CONTENT_LENGTH")
  66.     end;
  67.  
  68. val _ = echo ()
  69.