xref: /inferno-os/appl/lib/itslib.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsythimplement Itslib;
2*37da2899SCharles.Forsyth
3*37da2899SCharles.Forsythinclude "sys.m";
4*37da2899SCharles.Forsyth	sys: Sys;
5*37da2899SCharles.Forsythinclude "itslib.m";
6*37da2899SCharles.Forsythinclude "env.m";
7*37da2899SCharles.Forsyth	env: Env;
8*37da2899SCharles.Forsyth
9*37da2899SCharles.Forsyth
10*37da2899SCharles.Forsythinit(): ref Tconfig
11*37da2899SCharles.Forsyth{
12*37da2899SCharles.Forsyth	sys = load Sys Sys->PATH;
13*37da2899SCharles.Forsyth	tc := ref Tconfig(-1, sys->fildes(2));
14*37da2899SCharles.Forsyth	env = load Env Env->PATH;
15*37da2899SCharles.Forsyth	if (env == nil)
16*37da2899SCharles.Forsyth		sys->fprint(sys->fildes(2), "Failed to load %s\n", Env->PATH);
17*37da2899SCharles.Forsyth	else {
18*37da2899SCharles.Forsyth		vstr := env->getenv(ENV_VERBOSITY);
19*37da2899SCharles.Forsyth		mstr := env->getenv(ENV_MFD);
20*37da2899SCharles.Forsyth		if (vstr != nil && mstr != nil) {
21*37da2899SCharles.Forsyth			tc.verbosity = int vstr;
22*37da2899SCharles.Forsyth			tc.mfd = sys->fildes(int mstr);
23*37da2899SCharles.Forsyth		}
24*37da2899SCharles.Forsyth	}
25*37da2899SCharles.Forsyth	if (tc.verbosity >= 0)
26*37da2899SCharles.Forsyth		tc.report(S_STIME, 0, sys->sprint("%d", sys->millisec()));
27*37da2899SCharles.Forsyth	else
28*37da2899SCharles.Forsyth		sys->fprint(sys->fildes(2), "Test is running standalone\n");
29*37da2899SCharles.Forsyth	return tc;
30*37da2899SCharles.Forsyth}
31*37da2899SCharles.Forsyth
32*37da2899SCharles.ForsythTconfig.report(tc: self ref Tconfig, sev: int, verb: int, msg: string)
33*37da2899SCharles.Forsyth{
34*37da2899SCharles.Forsyth	if (sev < 0 || sev > S_ETIME) {
35*37da2899SCharles.Forsyth		sys->fprint(sys->fildes(2), "Tconfig.report: Bad severity code: %d\n", sev);
36*37da2899SCharles.Forsyth		sev = 0;
37*37da2899SCharles.Forsyth	}
38*37da2899SCharles.Forsyth	if (tc.mfd != nil && sys->fprint(tc.mfd, "%d%d%s\n", sev, verb, msg) <=0)
39*37da2899SCharles.Forsyth		tc.mfd = nil;		# Master test process was probably killed
40*37da2899SCharles.Forsyth}
41*37da2899SCharles.Forsyth
42*37da2899SCharles.ForsythTconfig.done(tc: self ref Tconfig)
43*37da2899SCharles.Forsyth{
44*37da2899SCharles.Forsyth	tc.report(S_ETIME, 0, sys->sprint("%d", sys->millisec()));
45*37da2899SCharles.Forsyth}
46