AdvancedTimer.borg

AdvancedTimer.borg


{
`times functie die tijd in seconden weergeeft
times()::
    {
    t:time();
    t[1]+t[2]*60+t[3]*3600
    };

`moment van het eerste alarm
firstalarm:0;
resetalarm()::firstalarm:=0;
loweralarm(a)::if ((firstalarm=0) | (aalarms:[];

` wait wordt opgeroepen om de timer te starten
` hier controleren we of hij voor een reeds bestaande tijd
` valt of niet.
wait(s,to,msg,par)::
    {
    alarmat:times()+s;
    alarms:=[[alarmat,to,msg,par],alarms];
    loweralarm(alarmat);
    checkalarms();
    void
    };

doalarm(a)::sendmessage(a[2],0,a[2],a[3],a[4]);
docontinue()::agentname->checkalarms();
checkalarms()::
    {
    now:times();
    checkit(lst)::
        if (lst ~ empty, empty,
            {
            alarm:lst[1];
            alarmat:alarm[1];
            if (alarmat2])
                },
                {
                loweralarm(alarmat);
                [alarm,checkit(lst[2])]
                })
            });
    if ((now>firstalarm) & (firstalarm>0),
        {
        resetalarm();
        alarms:=checkit(alarms)
        });
    if (alarms ~ empty, void, docontinue())
    };

example()::
    {
    wait(10,agent("cubical/Alice"),"display",'--blab--'+eoln);
    wait(5,agent("cubical/Bob"),"display",'--blos--'+eoln);
    wait(10,agent("cubical/Christine"),"display",'--trog--'+eoln);
    wait(3,agent("cubical/Dirk"),"display",'--kroch--'+eoln);
    wait(15,agent("cubical/Erica"),"display",'--woch--'+eoln)
    };

display("example()"+eoln)
}