<> <> <> <<>> DIRECTORY BasicTime USING [ GMT, Now ], Commander USING [ Register ], CommandTool USING [ ArgumentVector, Parse ], IO USING [ card, PutFR, rope, STREAM, time ], <> Rope USING [ ROPE ], SystemNames USING [ UserName ], <> UXIO USING [ CreateFileStream ], CasabaPlatform; CasabaPlatformImpl: CEDAR MONITOR IMPORTS BasicTime, Commander, CommandTool, IO, SystemNames, UXIO EXPORTS CasabaPlatform ~ { OPEN CasabaPlatform; ROPE: TYPE ~ Rope.ROPE; <> Register: PUBLIC PROC [ key: Rope.ROPE, proc: CommandProc _ NIL, doc: Rope.ROPE _ NIL, clientData: REF _ NIL, interpreted: BOOL _ TRUE ] ~ { Commander.Register[key, proc, doc, clientData, interpreted]; }; GetArgument: PUBLIC PROC [ cmd: Handle, index: NAT ] RETURNS [ arg: Rope.ROPE _ NIL ] ~ { args: CommandTool.ArgumentVector ~ CommandTool.Parse[cmd]; arg _ args[index]; }; <> Error: PUBLIC ERROR [ code: ATOM, explanation: Rope.ROPE ] ~ CODE; StreamOpen: PUBLIC PROC [ fileName: Rope.ROPE, accessOptions: AccessOptions _ $read ] RETURNS [ s: IO.STREAM _ NIL ] ~ { SELECT accessOptions FROM read => { s _ UXIO.CreateFileStream[fileName, read] }; append => { s _ UXIO.CreateFileStream[fileName, append] }; write => { s _ UXIO.CreateFileStream[fileName, write] }; create => { s _ UXIO.CreateFileStream[fileName, write] }; ENDCASE => { ERROR }; }; <> ToolVersion: PUBLIC PROC [ name: Rope.ROPE, version: Version, p: PROC ANY RETURNS ANY ] RETURNS [ v: Rope.ROPE _ NIL ] ~ { date: BasicTime.GMT ~ BasicTime.Now[]; -- eventually: Loader.BCDBuildTime[p]; patch: Rope.ROPE ~ IF ( version.patch # 0 ) THEN IO.PutFR[".%g", IO.card[version.patch] ] ELSE NIL; v _ IO.PutFR["%g [%g.%g%g] of %g", IO.rope[name], IO.card[version.major], IO.card[version.minor], IO.rope[patch], IO.time[date] ]; }; BuildTime: PUBLIC PROC [ p: PROC ANY RETURNS ANY ] RETURNS [ date: BasicTime.GMT ] ~ { date _ BasicTime.Now[]; -- eventually: Loader.BCDBuildTime[p]; }; UserName: PUBLIC PROC RETURNS [ user: Rope.ROPE _ NIL ] ~ { somebody: Rope.ROPE ~ "somebody"; <> user _ SystemNames.UserName[]; }; }. <<>>