aboutsummaryrefslogtreecommitdiff
path: root/main/coclmain.icl
diff options
context:
space:
mode:
Diffstat (limited to 'main/coclmain.icl')
-rw-r--r--main/coclmain.icl63
1 files changed, 63 insertions, 0 deletions
diff --git a/main/coclmain.icl b/main/coclmain.icl
new file mode 100644
index 0000000..811f76d
--- /dev/null
+++ b/main/coclmain.icl
@@ -0,0 +1,63 @@
+implementation module coclmain
+
+CoclMainVersion :== 0
+
+import StdEnv
+import ArgEnv
+import Version
+import set_return_code
+
+import compile
+
+// coclMain :: ![{#Char}] !*World -> *World
+// testArgs world
+coclMain :== coclMainWithVersionCheck CoclMainVersionCurrent CoclMainVersionLatestDef CoclMainVersionLatestImp
+
+CoclMainVersionCurrent
+ :== 0x02000205
+CoclMainVersionLatestDef
+ :== 0x02000205
+CoclMainVersionLatestImp
+ :== 0x02000205
+
+checkVersion :: VersionsCompatability *File -> (!Bool, !*File)
+checkVersion VersionsAreCompatible errorFile
+ = (True, errorFile)
+checkVersion VersionObservedIsTooNew errorFile
+ # errorFile
+ = fwrites "[Coclmain] the library is too new\n" errorFile
+ = (False, errorFile)
+checkVersion VersionObservedIsTooOld errorFile
+ # errorFile
+ = fwrites "[Coclmain] the library is too old\n" errorFile
+ = (False, errorFile)
+
+coclMainWithVersionCheck :: !Int !Int !Int ![{#Char}] !*World -> *World
+// currentVersion latestDefVersion latestImpVersion testArgs world
+coclMainWithVersionCheck currentVersion latestDefVersion latestImpVersion testArgs world
+ # observedVersion =
+ { versionCurrent
+ = CoclMainVersionCurrent
+ , versionOldestDefinition
+ = CoclMainVersionLatestDef
+ , versionOldestImplementation
+ = CoclMainVersionLatestImp
+ }
+ expectedVersion =
+ { versionCurrent
+ = currentVersion
+ , versionOldestDefinition
+ = latestDefVersion
+ , versionOldestImplementation
+ = latestImpVersion
+ }
+ | not (fst (checkVersion (versionCompare expectedVersion observedVersion) stderr))
+ = set_return_code (-1) world
+ # (success, world)
+ = accFiles (compile commandArgs) world
+ = set_return_code (if success 0(-1)) world
+ where
+ commandArgs
+ = if (length realArgs == 0) testArgs realArgs
+ realArgs
+ = tl [arg \\ arg <-: getCommandLine]