Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] View of /branches/vis12/src/compiler/nrrd/run-dnorm_sml.in
ViewVC logotype

View of /branches/vis12/src/compiler/nrrd/run-dnorm_sml.in

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2430 - (download) (annotate)
Thu Sep 19 21:41:27 2013 UTC (8 years, 2 months ago) by jhr
File size: 1591 byte(s)
  Replace dnorm with the new "unu dnorm" command from teem.  We also dynamically
  search for teem so that the location of teem at runtime can be different from
  the location of teem at compile time.
(* run-dnorm_sml.in
 *
 * COPYRIGHT (c) 2012 The Diderot Project (http://diderot-language.cs.uchicago.edu)
 * All rights reserved.
 *
 * This module supports running the teem command "unu dnorm" on a nrrd file.
 *)

structure RunDNorm : sig

    val run : string -> {
	    version : string,
	    header : (string * string) list
	  }

  end = struct

    structure SS = Substring

    fun run srcFile = if OS.FileSys.access(srcFile, [OS.FileSys.A_READ])
	  then let
            val unuCmd = OS.Path.concat(Paths.teemBin(), "unu")
	    val proc = Unix.execute (unuCmd, ["dnorm", "-h", "-i", srcFile])
	    val inS = Unix.textInstreamOf proc
	    fun stripWS ss = SS.string (SS.dropl Char.isSpace (SS.dropr Char.isSpace ss))
	    fun read content = (case TextIO.inputLine inS
		   of SOME "\n" => read content (* dnorm outputs an extra blank line at the end *)
		    | SOME ln => (
			case SS.fields (fn #":" => true | _ => false) (SS.full ln)
			 of [name, value] =>
			      read((SS.string name, stripWS value)::content)
			  | _ => raise Fail(concat["bogus nrrd header line \"", String.toString ln, "\""])
			(* end case *))
		    | NONE => List.rev content
		  (* end case *))
	    val info = (case TextIO.inputLine inS
		   of SOME version => {
			  version = stripWS(SS.full version),
			  header = read []
			}
		    | NONE => raise Fail "bogus nrrd file"
		  (* end case *))
	    val sts = Unix.reap proc
	    in
	      if OS.Process.isSuccess sts
		then info
		else raise Fail "error running dnorm"
	    end
	  else raise Fail(concat["image file \"", srcFile, "\" not found"])

  end

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0