0,0 → 1,85 |
(* |
Copyright 2021 Anton Krotov |
|
This file is part of CEdit. |
|
CEdit is free software: you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation, either version 3 of the License, or |
(at your option) any later version. |
|
CEdit is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with CEdit. If not, see <http://www.gnu.org/licenses/>. |
*) |
|
MODULE Timer; |
|
IMPORT SYSTEM, K := KolibriOS, KOSAPI, Ini; |
|
VAR |
stack: ARRAY 1024*64 OF INTEGER; |
ID*, time, cnt: INTEGER; |
paused: BOOLEAN; |
|
|
PROCEDURE reset*; |
BEGIN |
cnt := time; |
paused := FALSE |
END reset; |
|
|
PROCEDURE stop*; |
BEGIN |
cnt := time; |
paused := TRUE |
END stop; |
|
|
PROCEDURE kill*; |
BEGIN |
ID := 0; |
K.ExitID(ID) |
END kill; |
|
|
PROCEDURE [stdcall] main (mainTID: INTEGER); |
CONST |
step = 5; |
BEGIN |
WHILE TRUE DO |
K.Pause(step); |
IF KOSAPI.sysfunc3(18, 21, mainTID) = 0 THEN |
ID := 0; |
K.Exit |
END; |
IF ~paused THEN |
DEC(cnt, step); |
IF cnt <= 0 THEN |
cnt := time; |
IF time > 0 THEN |
K.SendIPC(mainTID, ID) |
END |
END |
END |
END |
END main; |
|
|
PROCEDURE create* (mainTID: INTEGER); |
BEGIN |
time := Ini.blink; |
reset; |
stack[LEN(stack) - 1] := mainTID; |
ID := K.CreateThread(SYSTEM.ADR(main), stack) |
END create; |
|
|
BEGIN |
ID := 0 |
END Timer. |