urbit/vere/behn.c

97 lines
1.6 KiB
C
Raw Normal View History

/* v/behn.c
2014-10-15 06:25:23 +04:00
**
** This file is in the public domain.
*/
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <setjmp.h>
#include <gmp.h>
#include <dirent.h>
#include <stdint.h>
#include <uv.h>
#include <curses.h>
#include <termios.h>
#include <term.h>
#include <errno.h>
#include "all.h"
#include "vere/vere.h"
2014-10-15 06:25:23 +04:00
/* u3_behn(): initialize time timer.
2014-10-15 06:25:23 +04:00
*/
void
u3_behn_io_init(void)
2014-10-15 06:25:23 +04:00
{
u3_behn* teh_u = &u3_Host.teh_u;
2014-10-15 06:25:23 +04:00
uv_timer_init(u3L, &teh_u->tim_u);
2014-11-05 04:18:47 +03:00
teh_u->alm = c3n;
2014-10-15 06:25:23 +04:00
}
/* u3_behn_io_exit(): terminate timer.
2014-10-15 06:25:23 +04:00
*/
void
u3_behn_io_exit(void)
2014-10-15 06:25:23 +04:00
{
}
/* _behn_time_cb(): timer callback.
2014-10-15 06:25:23 +04:00
*/
static void
_behn_time_cb(uv_timer_t* tim_u)
2014-10-15 06:25:23 +04:00
{
u3_behn* teh_u = &u3_Host.teh_u;
2018-11-26 20:22:13 +03:00
teh_u->alm = c3n;
2014-10-15 06:25:23 +04:00
u3_lo_open();
2014-10-15 06:25:23 +04:00
{
2014-11-06 03:20:01 +03:00
u3v_plan
(u3nt(u3_blip, c3__behn, u3_nul),
u3nc(c3__wake, u3_nul));
2014-10-15 06:25:23 +04:00
}
2014-11-05 04:18:47 +03:00
u3_lo_shut(c3n);
2014-10-15 06:25:23 +04:00
}
/* u3_behn_ef_doze(): set or cancel timer
*/
void
u3_behn_ef_doze(u3_noun wen)
2014-10-15 06:25:23 +04:00
{
u3_behn* teh_u = &u3_Host.teh_u;
if ( c3y == teh_u->alm ) {
uv_timer_stop(&teh_u->tim_u);
teh_u->alm = c3n;
}
2014-10-15 06:25:23 +04:00
if ( (u3_nul != wen) &&
2014-11-05 04:18:47 +03:00
(c3y == u3du(wen)) &&
(c3y == u3ud(u3t(wen))) )
2014-10-15 06:25:23 +04:00
{
2018-11-26 11:03:03 +03:00
struct timeval tim_tv;
gettimeofday(&tim_tv, 0);
u3_noun now = u3_time_in_tv(&tim_tv);
c3_d gap_d = u3_time_gap_ms(now, u3k(u3t(wen)));
2018-12-12 05:42:38 +03:00
2018-12-12 01:26:57 +03:00
teh_u->alm = c3y;
uv_timer_start(&teh_u->tim_u, _behn_time_cb, gap_d, 0);
2014-10-15 06:25:23 +04:00
}
u3z(wen);
2014-10-15 06:25:23 +04:00
}
/* u3_behn_ef_bake(): notify %behn that we're live
*/
void
u3_behn_ef_bake(void)
{
u3_noun pax = u3nq(u3_blip, c3__behn, u3k(u3A->sen), u3_nul);
u3v_plan(pax, u3nc(c3__born, u3_nul));
}