UNIT UTimer; {Unit to provide timing functions for applications such as the Clock} INTERFACE USES {$U -#BOOT-Syscall} Syscall; CONST clockTickType = 11; {event type that you receive when the clock ticks} VAR timerIsStarted: BOOLEAN; {must be called once at startup time} PROCEDURE InitTimer(VAR osErr: INTEGER); PROCEDURE StartTimer(VAR osErr: INTEGER); PROCEDURE StopTimer(VAR osErr: INTEGER); {must be called from TMyProcess.Complete} PROCEDURE KillTimer(VAR osErr: INTEGER); IMPLEMENTATION VAR timerProcID: LONGINT; PROCEDURE InitTimer(VAR osErr: INTEGER); VAR clockInfo: ProcInfoRec; timerPath: Pathname; entryName: NameString; BEGIN Info_Process(osErr, My_ID, clockInfo); IF osErr <= 0 THEN BEGIN timerPath := CONCAT(clockInfo.progPathname, '1'); entryName := ''; Make_Process(osErr, timerProcID, timerPath, entryName, 0); IF osErr <= 0 THEN StopTimer(osErr); END; END; PROCEDURE StartTimer(VAR osErr: INTEGER); BEGIN Activate_Process(osErr, timerProcID, FALSE); timerIsStarted := TRUE; END; PROCEDURE StopTimer(VAR osErr: INTEGER); BEGIN Suspend_Process(osErr, timerProcID, FALSE); timerIsStarted := FALSE; END; PROCEDURE KillTimer(VAR osErr: INTEGER); VAR clockInfo: ProcInfoRec; otherErr: INTEGER; BEGIN Activate_Process(osErr, timerProcID, FALSE); IF osErr <= 0 THEN Kill_Process(osErr, timerProcID); timerProcID := -1; timerIsStarted := FALSE; END; END.