MODULE WrapProg; // Smoke test for the new wrapper/time modules: StdChans, TimeString, // wrapclock, wraptime, wrapc. Exit 42. IMPORT StdChans, TimeString, wrapclock, wraptime, wrapc; IMPORT IOChan; FROM SYSTEM IMPORT ADDRESS; VAR ExitCode : INTEGER; VAR s, t : ARRAY [0..63] OF CHAR; VAR ts : wrapclock.timespec; VAR tv : wraptime.timeval; VAR tm : wraptime.tm; VAR sec, nano : LONGCARD; VAR ok : INTEGER; VAR n : INTEGER; VAR out : IOChan.ChanId; BEGIN (* StdChans: the current output channel is the standard one *) out := StdChans.OutChan(); IOChan.WriteString(out, "wrappers "); IOChan.WriteLn(out); (* TimeString: a non-empty time string *) TimeString.GetTimeString(s); ok := 0; IF s[0] # CHR(0) THEN INC(ok) END; (* wrapclock: a timespec, read back *) ts := wrapclock.InitTimespec(); ok := ok + wrapclock.GetTimeRealtime(ts); ok := ok + wrapclock.GetTimespec(ts, sec, nano); ok := ok + wrapclock.SetTimespec(ts, 5, 7); ok := ok + wrapclock.GetTimespec(ts, sec, nano); IF (sec = 5) AND (nano = 7) THEN INC(ok) END; ts := wrapclock.KillTimespec(ts); (* wraptime: timeval + localtime + field accessors *) tv := wraptime.InitTimeval(); tm := wraptime.InitTM(); ok := ok + wraptime.gettimeofday(tv, NIL); wraptime.SetTimeval(tv, 0, 0); IF wraptime.LocalTime(tv, tm) # NIL THEN INC(ok) END; IF wraptime.GetYear(tm) >= 1970 THEN INC(ok) END; tm := wraptime.KillTM(tm); tv := wraptime.KillTimeval(tv); (* wrapc: rand range, signbit, isfinite *) n := wrapc.getrand(10); IF (n >= 0) AND (n < 10) THEN INC(ok) END; IF wrapc.signbit(-1.0) = 1 THEN INC(ok) END; IF wrapc.isfinite(1.0) = 1 THEN INC(ok) END; IF ok >= 7 THEN ExitCode := 42 ELSE ExitCode := ok END END WrapProg.