1*37da2899SCharles.Forsythimplement Timestamp; 2*37da2899SCharles.Forsythinclude "sys.m"; 3*37da2899SCharles.Forsyth sys: Sys; 4*37da2899SCharles.Forsythinclude "draw.m"; 5*37da2899SCharles.Forsythinclude "bufio.m"; 6*37da2899SCharles.Forsyth bufio: Bufio; 7*37da2899SCharles.Forsyth Iobuf: import bufio; 8*37da2899SCharles.Forsyth 9*37da2899SCharles.ForsythTimestamp: module { 10*37da2899SCharles.Forsyth init: fn(nil: ref Draw->Context, argv: list of string); 11*37da2899SCharles.Forsyth}; 12*37da2899SCharles.Forsyth 13*37da2899SCharles.Forsythtimefd: ref Sys->FD; 14*37da2899SCharles.Forsythstarttime: big; 15*37da2899SCharles.Forsyth 16*37da2899SCharles.Forsythinit(nil: ref Draw->Context, argv: list of string) 17*37da2899SCharles.Forsyth{ 18*37da2899SCharles.Forsyth sys = load Sys Sys->PATH; 19*37da2899SCharles.Forsyth bufio = load Bufio Bufio->PATH; 20*37da2899SCharles.Forsyth 21*37da2899SCharles.Forsyth note: string; 22*37da2899SCharles.Forsyth if(len argv > 1) 23*37da2899SCharles.Forsyth note = hd tl argv + " "; 24*37da2899SCharles.Forsyth 25*37da2899SCharles.Forsyth timefd = sys->open("/dev/time", Sys->OREAD); 26*37da2899SCharles.Forsyth starttime = now(); 27*37da2899SCharles.Forsyth 28*37da2899SCharles.Forsyth sys->print("%.10bd %sstart %bd\n", now(), note, starttime); 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth iob := bufio->fopen(sys->fildes(0), Sys->OREAD); 31*37da2899SCharles.Forsyth while((s := iob.gets('\n')) != nil) 32*37da2899SCharles.Forsyth sys->print("%.10bd %s%s", now(), note, s); 33*37da2899SCharles.Forsyth} 34*37da2899SCharles.Forsyth 35*37da2899SCharles.Forsythnow(): big 36*37da2899SCharles.Forsyth{ 37*37da2899SCharles.Forsyth buf := array[24] of byte; 38*37da2899SCharles.Forsyth n := sys->pread(timefd, buf, len buf, big 0); 39*37da2899SCharles.Forsyth if(n <= 0) 40*37da2899SCharles.Forsyth return big 0; 41*37da2899SCharles.Forsyth return big string buf[0:n] / big 1000 - starttime; 42*37da2899SCharles.Forsyth} 43