diff --git a/dotscape b/dotscape index 22f50f8..06f7705 100755 Binary files a/dotscape and b/dotscape differ diff --git a/dotscape.mlb b/dotscape.mlb index 85cd649..ae51337 100644 --- a/dotscape.mlb +++ b/dotscape.mlb @@ -46,6 +46,7 @@ end imperative-shell/input-callbacks.sml imperative-shell/update-thread.sml +imperative-shell/file-thread.sml imperative-shell/draw-thread.sml imperative-shell/shell.sml diff --git a/imperative-shell/file-thread.sml b/imperative-shell/file-thread.sml new file mode 100644 index 0000000..ee18b80 --- /dev/null +++ b/imperative-shell/file-thread.sml @@ -0,0 +1,20 @@ +signature FILE_THREAD = +sig + val run: FileMessage.t Mailbox.mbox -> unit +end + +structure FileThread :> FILE_THREAD = +struct + open FileMessage + + fun run fileMailbox = + let + val _ = + case Mailbox.recv fileMailbox of + SAVE_TRIANGLES triangles => () + | EXPORT_TRIANGLES triangles => () + | IMPORT_TRIANGLES => () + in + run fileMailbox + end +end diff --git a/imperative-shell/shell.sml b/imperative-shell/shell.sml index f6fd18c..67c2560 100644 --- a/imperative-shell/shell.sml +++ b/imperative-shell/shell.sml @@ -28,11 +28,13 @@ struct val inputMailbox = Mailbox.mailbox () val drawMailbox = Mailbox.mailbox () + val fileMailbox = Mailbox.mailbox () + + val _ = InputCallbacks.registerCallbacks (window, inputMailbox) val _ = CML.spawn (fn () => - InputCallbacks.registerCallbacks (window, inputMailbox)) - val _ = CML.spawn (fn () => - UpdateThread.run (inputMailbox, drawMailbox, initialModel)) + UpdateThread.run (inputMailbox, drawMailbox, fileMailbox, initialModel)) + val _ = CML.spawn (fn () => DrawThread.run ( drawMailbox @@ -44,6 +46,8 @@ struct , triangleDrawObject , 0 )) + + val _ = CML.spawn (fn () => FileThread.run fileMailbox) in () end diff --git a/imperative-shell/update-thread.sml b/imperative-shell/update-thread.sml index 9a2a3d7..f12b82c 100644 --- a/imperative-shell/update-thread.sml +++ b/imperative-shell/update-thread.sml @@ -3,6 +3,7 @@ sig val run: InputMessage.t Mailbox.mbox * DrawMessage.t Mailbox.mbox + * FileMessage.t Mailbox.mbox * AppType.app_type -> unit end @@ -12,21 +13,21 @@ struct open CML open UpdateMessage - fun handleMsg (drawMailbox, updateMsg) = + fun handleMsg (drawMailbox, fileMailbox, updateMsg) = case updateMsg of DRAW drawMsg => Mailbox.send (drawMailbox, drawMsg) - | FILE fileMsg => () + | FILE fileMsg => Mailbox.send (fileMailbox, fileMsg) | NO_MAILBOX => () - fun loop (inputMailbox, drawMailbox, model) = + fun loop (inputMailbox, drawMailbox, fileMailbox, model) = let val inputMsg = Mailbox.recv inputMailbox val (model, updateMsg) = AppUpdate.update (model, inputMsg) - val _ = handleMsg (drawMailbox, updateMsg) + val _ = handleMsg (drawMailbox, fileMailbox, updateMsg) in - loop (inputMailbox, drawMailbox, model) + loop (inputMailbox, drawMailbox, fileMailbox, model) end - fun run (inputMailbox, drawMailbox, initial) = - loop (inputMailbox, drawMailbox, initial) + fun run (inputMailbox, drawMailbox, fileMailbox, initial) = + loop (inputMailbox, drawMailbox, fileMailbox, initial) end diff --git a/message-types/file-msg.sml b/message-types/file-msg.sml index 6b1e462..46deb3b 100644 --- a/message-types/file-msg.sml +++ b/message-types/file-msg.sml @@ -2,14 +2,14 @@ signature FILE_MESSAGE = sig datatype t = SAVE_TRIANGLES of AppType.triangle list - | EXPORT_FILE of AppType.triangle list - | IMPORT_FILE + | EXPORT_TRIANGLES of AppType.triangle list + | IMPORT_TRIANGLES end structure FileMessage :> FILE_MESSAGE = struct datatype t = SAVE_TRIANGLES of AppType.triangle list - | EXPORT_FILE of AppType.triangle list - | IMPORT_FILE + | EXPORT_TRIANGLES of AppType.triangle list + | IMPORT_TRIANGLES end