pilgrim@daimi.aau.dk (Jakob G}rdsted) (05/12/91)
I've been trying to read the clock from a M2Amiga program, but I cannot find any information in the manual on doing this. I've looked in various c programs(all those clock programs...) and it seems, that in c there is a routine called getclk or something like that. I would have thought, that there was a library or an inclusion module; on I*M PC Modula and on Sun, it's an inclusion module - you say something like FROM SystemTimer IMPORT Getdate,Setdate END But I find no such thing. What simple thing is it that I've overlooked? Thanks in advance, replies by E-mail. -- From the notorious Jakob Gaardsted, Computer Science Department Bed og arbejd ! University of Aarhus, Jylland (!) (Pray and work!) AMIGA! pilgrim@daimi.aau.dk | I'd rather play Moria.
dac@prolix.pub.uu.oz.au (Andrew Clayton) (05/13/91)
In article <1991May12.042713.4925@daimi.aau.dk>, Jakob G}rdsted writes: > I've been trying to read the clock from a M2Amiga program, > but I cannot find any information in the manual on doing > this. I've looked in various c programs(all those clock > programs...) and it seems, that in c there is a routine > called getclk or something like that. I would have What is so difficult? MODULE TimerDemo; (*======================================================================*) (* M2Sprint Demo Program *) (*======================================================================*) (* Copyright (c) 1988 Martin Taillefer, All Rights Reserved *) (* This is freely redistributable *) (*======================================================================*) (* Version: 1.00 Author : Martin Taillefer *) (* Date : 16-Dec-88 Changes: Original *) (*======================================================================*) (* References: Rom Kernel Manual *) (*======================================================================*) FROM SYSTEM IMPORT ADR, ADDRESS, BYTE, TSIZE; FROM DOSLoader IMPORT Execute; FROM Devices IMPORT OpenDevice, CloseDevice, DevicePtr; FROM IO IMPORT DoIO; FROM IOUtils IMPORT CreateExtIO, DeleteExtIO; FROM Ports IMPORT MsgPortPtr; FROM PortUtils IMPORT CreatePort, DeletePort; FROM TimerDevice IMPORT TimerBase, TimerName, TimeVal, TimeRequestPtr, TimeRequest, TRAddRequest, TRGetSysTime, TRSetSysTime, UnitMicroHz, UnitVBlank; FROM TermOut IMPORT WriteLongCard, WriteString, WriteLn; PROCEDURE DeleteTimer(tr:TimeRequestPtr); VAR tp : MsgPortPtr; BEGIN tp:=tr^.trNode.ioMessage.mnReplyPort; IF tr # NIL THEN CloseDevice(tr); DeleteExtIO(tr,TSIZE(TimeRequest)); END; IF tp # NIL THEN DeletePort(tp); END; END DeleteTimer; PROCEDURE PrepareTimer(precision:INTEGER): TimeRequestPtr; VAR whichunit : LONGINT; timerport : MsgPortPtr; timermsg : TimeRequestPtr; BEGIN timerport:=CreatePort(NIL,0); IF timerport=NIL THEN RETURN NIL; END; timermsg:=CreateExtIO(timerport,TSIZE(TimeRequest)); IF timermsg=NIL THEN DeletePort(timerport); RETURN NIL; END; whichunit:=UnitVBlank; IF precision # 0 THEN whichunit:=UnitMicroHz; END; IF OpenDevice(ADR(TimerName),whichunit,timermsg,LONGBITSET{}) # 0 THEN DeleteExtIO(timermsg,TSIZE(TimeRequest)); DeletePort(timerport); RETURN NIL; END; RETURN timermsg; END PrepareTimer; PROCEDURE GetTimerBase(): DevicePtr; VAR tbase : DevicePtr; tr : TimeRequestPtr; BEGIN tr:=PrepareTimer(0); tbase:=tr^.trNode.ioDevice; DeleteTimer(tr); RETURN tbase; END GetTimerBase; PROCEDURE WaitForTimer(tr:TimeRequestPtr; seconds,microseconds:LONGCARD); VAR x : LONGINT; BEGIN WITH tr^ DO trNode.ioCommand := TRAddRequest; trTime.tvSecs := seconds; trTime.tvMicro := microseconds; END; x:=DoIO(tr); END WaitForTimer; PROCEDURE SetNewTime(day,min,sec:LONGCARD); VAR tr : TimeRequestPtr; x : LONGINT; BEGIN tr:=PrepareTimer(1); IF tr=NIL THEN RETURN; END; WITH tr^ DO trNode.ioCommand := TRSetSysTime; trTime.tvSecs := (24D*60*60*day) + (60*min) + sec; trTime.tvMicro := 0; END; x:=DoIO(tr); DeleteTimer(tr); END SetNewTime; PROCEDURE GetSysTime(VAR tv:TimeVal); VAR tr : TimeRequestPtr; x : LONGINT; BEGIN tr:=PrepareTimer(1); IF tr=NIL THEN RETURN; END; tr^.trNode.ioCommand:=TRGetSysTime; x:=DoIO(tr); tv:=tr^.trTime; DeleteTimer(tr); END GetSysTime; PROCEDURE TimeDelay(seconds,microseconds: LONGCARD; precision: INTEGER); VAR precise : INTEGER; tr : TimeRequestPtr; BEGIN precise:=0; IF (seconds<0) OR (precision # 0) THEN precise:=1; END; tr:=PrepareTimer(precise); IF tr=NIL THEN RETURN; END; WaitForTimer(tr,seconds,microseconds); DeleteTimer(tr); END TimeDelay; VAR dummy : BOOLEAN; days,minutes,seconds : LONGINT; mytimeval, oldtimeval: TimeVal; BEGIN WriteString("Asleep for 2 seconds...\n"); TimeDelay(2,0,0); WriteString("Asleep for 4 seconds...\n"); TimeDelay(4,0,0); WriteString("Asleep for 1/2 second...\n"); TimeDelay(0,500000,0); WriteLn; WriteString("Current system date: "); dummy:=Execute(ADR("date"),0,0); WriteString("Current system time in seconds: "); GetSysTime(oldtimeval); WriteLongCard(oldtimeval.tvSecs,1); WriteLn; WriteLn; WriteString("Setting a new system time\n"); days := 1000 + oldtimeval.tvSecs DIV (24D*60*60); minutes := (oldtimeval.tvSecs MOD (24D*60*60)) DIV 60; seconds := (oldtimeval.tvSecs MOD (24D*60*60)) MOD 60; SetNewTime(days, minutes, seconds); WriteLn; WriteString("Current system date: "); dummy:=Execute(ADR("date"),0,0); WriteString("Current system time in seconds: "); GetSysTime(mytimeval); WriteLongCard(mytimeval.tvSecs,1); WriteLn; WriteLn; WriteString("Current system time: "); GetSysTime(mytimeval); WriteLongCard(mytimeval.tvSecs,1); WriteString("."); WriteLongCard(mytimeval.tvMicro,1); WriteLn; WriteString("Current system time: "); GetSysTime(mytimeval); WriteLongCard(mytimeval.tvSecs,1); WriteString("."); WriteLongCard(mytimeval.tvMicro,1); WriteLn; WriteString("Current system time: "); GetSysTime(mytimeval); WriteLongCard(mytimeval.tvSecs,1); WriteString("."); WriteLongCard(mytimeval.tvMicro,1); WriteLn; WriteLn; WriteString("Resetting to former time\n"); days := oldtimeval.tvSecs DIV (24D*60*60); minutes := (oldtimeval.tvSecs MOD (24D*60*60)) DIV 60; seconds := (oldtimeval.tvSecs MOD (24D*60*60)) MOD 60; SetNewTime(days,minutes,seconds); WriteLn; WriteString("Current system time: "); GetSysTime(mytimeval); WriteLongCard(mytimeval.tvSecs,1); WriteString("."); WriteLongCard(mytimeval.tvMicro,1); WriteLn; TimerBase:=GetTimerBase(); END TimerDemo. -------------------------------------------------------------- Dac -- David Andrew Clayton. // _l _ _|Normally a resident at dac@prolix.pub.uu.oz.au Canberra, Australia.\X/ (_](_l(_|But, due to circumstances beyond my control, I /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\|don't RECEIVE mail at the moment. You could try prolix!dac%eyrie@labtam.oz.au or ...!munnari!labtam!eyrie!prolix!dac |Post.Am