File: graphViewer.sml

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (46 lines) | stat: -rw-r--r-- 1,411 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
(*
 * This module starts a graph viewer.
 *
 * -- Allen 
 *)

functor GraphViewer(D : GRAPH_DISPLAY) : GRAPH_VIEWER =
struct

   structure L = GraphLayout
   structure G = Graph
   structure FileSys = OS.FileSys
   
   val tmpName = MLRiscControl.getString "tmpName"

   fun display exec (layout as G.GRAPH l) filename = 
      let val filename  = filename ^ D.suffix()
	  val _     = print("[ "^ #name l^": "^ 
                            D.program() ^ " " ^ filename ^ 
                            " "^Int.toString(#order l ())^" nodes"^
                            " "^Int.toString(#size l ())^" edges");
          val file  = TextIO.openOut filename
          val out   = fn s => TextIO.output(file,s)
          val _     = D.visualize out layout
          val _     = TextIO.closeOut file
          val _     = print(" ]\n")
          val _     = exec filename
      in  
          ()
      end handle e => 
        (print("[Uncaught exception in "^exnName e^" graph viewer]\n"); raise e)

   fun system filename = (OS.Process.system 
			   ((D.program()) ^ " " ^ filename);
                          FileSys.remove filename)

   fun fork filename = (OS.Process.system(
			  "(" ^ (D.program()) ^ " " ^ filename ^ 
			      "; /bin/rm " ^ filename ^ ") &"))

   fun getTmpName() =
       if !tmpName = "" then FileSys.tmpName() else !tmpName

   fun view layout = display system layout (getTmpName())
end