diff options
Diffstat (limited to 'main/coclmain.icl')
-rw-r--r-- | main/coclmain.icl | 63 |
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] |