shrub/i/n/j.h

133 lines
4.4 KiB
C
Raw Normal View History

2014-11-08 01:54:59 +03:00
/* include/n/j.h
2014-09-04 07:44:53 +04:00
**
** This file is in the public domain.
*/
/** Noun semantics.
**/
#if 0
++ bane ,@tas :: battery name
2014-11-28 23:29:10 +03:00
++ bash ,@uvH :: label hash
++ bosh ,@uvH :: battery hash
++ batt ,* :: battery
2014-11-18 01:57:05 +03:00
++ calf ::
2014-11-18 13:49:03 +03:00
$: jax=,@ud :: hot core index
hap=(map ,@ud ,@ud) :: axis/hot arm index
2014-11-28 23:29:10 +03:00
lab=path :: label as path
2014-11-19 02:17:56 +03:00
jit=* :: arbitrary data
== ::
2014-11-18 23:59:59 +03:00
++ calx (trel calf (pair bash cope) club) :: cached by battery
2014-11-28 23:29:10 +03:00
++ clog (pair cope (map batt club)) :: label record
2014-11-18 02:24:40 +03:00
++ club (pair corp (map term nock)) :: battery pattern
++ cope (trel bane axis (each bash noun)) :: core pattern
++ core ,*
2014-11-19 02:17:56 +03:00
++ corp (each core batt) :: parent or static
2014-11-20 22:58:55 +03:00
++ dash (map bash clog) :: jet system
#endif
/** Data structures.
***
2014-11-18 01:12:11 +03:00
*** All of these are transient structures allocated with malloc.
**/
2014-11-08 01:54:59 +03:00
/* u3j_harm: jet arm.
*/
2014-11-08 01:54:59 +03:00
typedef struct _u3j_harm {
2014-11-18 13:49:03 +03:00
c3_c* fcs_c; // `.axe` or name
2014-11-18 01:12:11 +03:00
u3_noun (*fun_f)(u3_noun); // compute or 0 / semitransfer
// c3_o (*val_f)(u3_noun); // validate or 0 / retain
2014-11-18 13:49:03 +03:00
c3_o ice; // perfect (don't test)
c3_o tot; // total (never punts)
c3_o liv; // live (enabled)
c3_l axe_l; // computed/discovered axis
struct _u3j_core* cop_u; // containing core
2014-11-08 01:54:59 +03:00
} u3j_harm;
2014-11-08 01:54:59 +03:00
/* u3j_core: driver definition.
*/
2014-11-08 01:54:59 +03:00
typedef struct _u3j_core {
2014-11-18 01:12:11 +03:00
c3_c* cos_c; // control string
2014-11-18 13:49:03 +03:00
struct _u3j_harm* arm_u; // blank-terminated static list
struct _u3j_core* dev_u; // blank-terminated static list
struct _u3j_core* par_u; // dynamic parent pointer
c3_l axe_l; // axis to parent
c3_l jax_l; // index in global dashboard
2014-11-08 01:54:59 +03:00
} u3j_core;
2014-11-06 03:20:01 +03:00
/* u3e_dash, u3_Dash, u3D: jet dashboard singleton
*/
2014-11-06 03:20:01 +03:00
typedef struct _u3e_dash {
2014-11-18 01:12:11 +03:00
u3j_core* dev_u; // null-terminated static list
2014-11-18 13:49:03 +03:00
c3_l len_l; // dynamic array length
c3_l all_l; // allocated length
2014-11-18 01:12:11 +03:00
u3j_core* ray_u; // dynamic array by axis
2014-11-08 01:54:59 +03:00
} u3j_dash;
/** Globals.
**/
/* u3_Dash: jet dashboard.
*/
2014-11-08 01:54:59 +03:00
extern u3j_dash u3j_Dash;
# define u3D u3j_Dash
/** Functions.
2014-09-04 07:44:53 +04:00
**/
2014-11-06 03:20:01 +03:00
/* u3j_boot(): initialize jet system.
2014-09-04 07:44:53 +04:00
*/
void
2014-11-06 03:20:01 +03:00
u3j_boot(void);
2014-09-04 07:44:53 +04:00
2014-11-18 01:12:11 +03:00
/* u3j_clear(): clear jet table to re-register.
*/
void
u3j_clear(void);
2014-11-06 03:20:01 +03:00
/* u3j_hook():
2014-09-04 07:44:53 +04:00
**
** Execute hook from core.
*/
2014-09-06 00:13:24 +04:00
u3_noun
2014-11-06 03:20:01 +03:00
u3j_hook(u3_noun cor,
2014-09-04 07:44:53 +04:00
const c3_c* tam_c);
2014-11-06 03:20:01 +03:00
/* u3j_soft():
2014-09-17 23:56:55 +04:00
**
** Execute hook from core, without jet.
*/
u3_noun
2014-11-06 03:20:01 +03:00
u3j_soft(u3_noun cor,
2014-09-17 23:56:55 +04:00
const c3_c* tam_c);
2014-11-29 05:19:11 +03:00
/* u3j_find(): in warm state, return u3_none or calx. RETAINS.
2014-09-04 07:44:53 +04:00
*/
2014-11-29 05:19:11 +03:00
u3_weak
2014-11-06 03:20:01 +03:00
u3j_find(u3_noun bat);
2014-09-04 07:44:53 +04:00
2014-11-06 03:20:01 +03:00
/* u3j_kick(): try to kick by jet. If no kick, produce u3_none.
2014-09-04 07:44:53 +04:00
**
** `axe` is RETAINED by the caller; `cor` is RETAINED iff there
** is no kick, TRANSFERRED if one.
*/
2014-09-06 00:13:24 +04:00
u3_weak
2014-11-26 22:00:50 +03:00
u3j_kick(u3_noun cor, u3_noun axe);
2014-09-04 07:44:53 +04:00
2014-11-06 03:20:01 +03:00
/* u3j_kink(): kick either by jet or by nock.
2014-09-04 07:44:53 +04:00
*/
2014-09-06 00:13:24 +04:00
u3_noun
2014-11-18 01:12:11 +03:00
u3j_kink(u3_noun cor,
u3_noun axe);
2014-09-27 04:27:35 +04:00
2014-11-06 03:20:01 +03:00
/* u3j_mine(): register core for jets.
2014-09-04 07:44:53 +04:00
*/
2014-10-25 01:04:44 +04:00
void
2014-11-18 01:12:11 +03:00
u3j_mine(u3_noun clu,
u3_noun cor);
2014-10-28 20:36:22 +03:00
2014-11-06 03:20:01 +03:00
/* u3j_ream(): refresh after restoring from checkpoint.
2014-10-28 20:36:22 +03:00
*/
void
2014-11-06 03:20:01 +03:00
u3j_ream(void);
2014-10-31 00:40:05 +03:00
2014-11-06 03:20:01 +03:00
/* u3j_reap(): promote jet state. RETAINS.
2014-10-31 00:40:05 +03:00
*/
void
2014-11-06 03:20:01 +03:00
u3j_reap(u3_noun das, u3p(u3h_root) har_p);