/* * (C) Copyright 2014 Leo C. * * SPDX-License-Identifier: GPL-2.0+ */ #include "common.h" #include "background.h" #define BG_FUNC_MAX 5 static struct { bg_func fct; int param; } func_tab[BG_FUNC_MAX]; static int_fast8_t fcount; int bg_register(bg_func f, int initval) { if (fcount < BG_FUNC_MAX) { func_tab[fcount].fct = f; func_tab[fcount].param = initval; return ++fcount - 1; } return -1; } int bg_setstat(int handle, int val) { if (handle < fcount) { func_tab[handle].param = val; return 1; } return 0; } int bg_getstat(int handle) { if (handle < fcount) { return func_tab[handle].param; } return 0; } void bg_shed(void) { static int_fast8_t current; if (func_tab[current].fct) { int v = func_tab[current].fct(func_tab[current].param); func_tab[current].param = v; } if (++current >= fcount) current = 0; }