Fix indentation in GPL headers
[hcoop/domtool2.git] / src / domain.sml
index e38ea4a..32b7ecf 100644 (file)
@@ -14,7 +14,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*)
+ *)
 
 (* Domain-related primitive actions *)
 
@@ -40,9 +40,37 @@ fun registerAfter f =
     end
 
 val current = ref ""
+val currentPath = ref ""
+
+fun currentDomain () = !current
+
+fun domainFile name = TextIO.openOut (!currentPath ^ name)
+
+fun getPath domain =
+    let
+       val toks = String.fields (fn ch => ch = #".") domain
+
+       val elems = foldr (fn (piece, elems) =>
+                             let
+                                 val elems = piece :: elems
+                                 val path = String.concatWith "/" (Config.configRoot :: rev elems)
+                             in
+                                 (if Posix.FileSys.ST.isDir
+                                         (Posix.FileSys.stat path) then
+                                      ()
+                                  else
+                                      (OS.FileSys.remove path;
+                                       OS.FileSys.mkDir path))
+                                 handle OS.SysErr _ => OS.FileSys.mkDir path;
+                                 elems
+                             end) [] toks
+    in
+       String.concatWith "/" (Config.configRoot :: rev elems)
+    end
 
 val _ = Env.registerContainer ("domain",
                            fn (_, [(EString dom, _)]) => (current := dom;
+                                                          currentPath := getPath dom;
                                                           !befores dom;
                                                           StringMap.empty)
                             | _ => Env.badArgs "domain",