structure SM = DataStructures.StringMap
-val aliases : TextIO.outstream SM.map ref = ref SM.empty
+val aliases : Domain.files SM.map ref = ref SM.empty
fun aliasesF node = valOf (SM.find (!aliases, node))
-val aliasesD : TextIO.outstream SM.map ref = ref SM.empty
+val aliasesD : Domain.files SM.map ref = ref SM.empty
fun aliasesDF node = valOf (SM.find (!aliasesD, node))
fun write nodes =
let
val files = map (fn node => aliasesF node) nodes
in
- fn s => app (fn file => TextIO.output (file, s)) files
+ (fn s => app (fn file => #write file s) files,
+ fn () => app (fn file => #writeDom file ()) files)
end
fun writeD nodes =
let
val files = map (fn node => aliasesDF node) nodes
in
- fn s => app (fn file => TextIO.output (file, s)) files
+ (fn s => app (fn file => #write file s) files,
+ fn () => app (fn file => #writeDom file ()) files)
end
fun openInAll base = foldl (fn (node, r) =>
SM.insert (r,
node,
- Domain.domainFile {node = node, name = base}))
- SM.empty Config.nodes
+ Domain.domainsFile {node = node, name = base}))
+ SM.empty Domain.nodes
val _ = Domain.registerBefore
(fn _ => (aliases := openInAll "aliases";
aliasesD := openInAll "aliases.default"))
val _ = Domain.registerAfter
- (fn _ => (SM.app TextIO.closeOut (!aliases);
- SM.app TextIO.closeOut (!aliasesD)))
+ (fn _ => (SM.app (fn file => #close file ()) (!aliases);
+ SM.app (fn file => #close file ()) (!aliasesD)))
fun validEmailUser s =
size s > 0 andalso size s < 50
datatype aliasSource =
User of string
| Default
- | CatchAll
val source = fn (EApp ((EVar "userSource", _), e), _) =>
Option.map User (Env.string e)
| (EVar "defaultSource", _) => SOME Default
- | (EVar "catchAllSource", _) => SOME CatchAll
| _ => NONE
datatype aliasTarget =
let
val nodes = Env.env (Env.list Env.string) (env, "MailNodes")
- val write = write nodes
- val writeD = writeD nodes
+ val (write, writeDom) = write nodes
+ val (writeD, writeDomD) = writeD nodes
fun writeTarget (writer, t) =
case t of
case s of
User s => (write s;
write "@";
- write (Domain.currentDomain ());
+ writeDom ();
write ": ";
writeTarget (write, t);
write "\n")
- | Default => (write "*@";
- write (Domain.currentDomain ());
- write ": ";
- writeTarget (write, t);
- write "\n")
- | CatchAll => (writeD "*@";
- writeD (Domain.currentDomain ());
- writeD ": ";
- writeTarget (writeD, t);
- writeD "\n")
+ | Default => (writeD "*@";
+ writeDomD ();
+ writeD ": ";
+ writeTarget (writeD, t);
+ writeD "\n")
end
val _ = Env.actionV_two "aliasPrim"