From ed986db5898bcfac0ca30f17f59dcd1e92d6ea26 Mon Sep 17 00:00:00 2001 From: rofl0r Date: Mon, 28 Mar 2022 18:55:28 +0000 Subject: [PATCH] rc: add ability to define and use float variables this may eventually be used for things like scale, to allow scales with fractional parts, or stretch factors. it's currently unused, but since it only adds like 20-30 opcodes to the binary, i'm adding it anyway. --- rc.h | 4 ++++ rcvars.c | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/rc.h b/rc.h index 2f398d7..835f627 100644 --- a/rc.h +++ b/rc.h @@ -10,6 +10,7 @@ typedef enum rctype { rcv_end, rcv_int, + rcv_float, rcv_string, rcv_vector, rcv_bool @@ -27,6 +28,7 @@ typedef struct rcvar_s #define RCV_END { 0, 0, rcv_end, 0, 0 } #define RCV_INT(n,v,h) { (n), (h), rcv_int, 1, (v) } +#define RCV_FLOAT(n,v,h) { (n), (h), rcv_float, 1, (v) } #define RCV_STRING(n,v,h) { (n), (h), rcv_string, 0, (v) } #define RCV_VECTOR(n,v,l,h) { (n), (h), rcv_vector, (l), (v) } #define RCV_BOOL(n,v,h) { (n), (h), rcv_bool, 1, (v) } @@ -49,10 +51,12 @@ int rc_setvar_n(int i, int c, char **v); int rc_setvar(char *name, int c, char **v); int rc_getint_n(int i); +float rc_getfloat_n(int i); int *rc_getvec_n(int i); char *rc_getstr_n(int i); int rc_getint(char *name); +float rc_getfloat(char *name); int *rc_getvec(char *name); char *rc_getstr(char *name); diff --git a/rcvars.c b/rcvars.c index 027d24d..95a9d27 100644 --- a/rcvars.c +++ b/rcvars.c @@ -117,6 +117,7 @@ int rc_setvar_n(int i, int c, char **v) { int j; int *n; + float *f; char **s; switch (rcvars[i].type) @@ -126,6 +127,11 @@ int rc_setvar_n(int i, int c, char **v) n = (int *)rcvars[i].mem; *n = my_atoi(v[0]); return 0; + case rcv_float: + if (c < 1) return -1; + f = (float *)rcvars[i].mem; + *f = atof(v[0]); + return 0; case rcv_string: if (c < 1) return -1; s = (char **)rcvars[i].mem; @@ -190,6 +196,17 @@ int rc_getint_n(int i) return 0; } +float rc_getfloat_n(int i) +{ + if (i < 0) return 0.0; + switch (rcvars[i].type) + { + case rcv_float: + return *(float *)rcvars[i].mem; + } + return 0.0; +} + int *rc_getvec_n(int i) { if (i < 0) return NULL; @@ -219,6 +236,11 @@ int rc_getint(char *name) return rc_getint_n(rc_findvar(name)); } +float rc_getfloat(char *name) +{ + return rc_getfloat_n(rc_findvar(name)); +} + int *rc_getvec(char *name) { return rc_getvec_n(rc_findvar(name)); @@ -232,6 +254,7 @@ char *rc_getstr(char *name) const char *rc_type_to_string(rcvtype_t type) { switch (type) { case rcv_int: return "int"; + case rcv_float: return "float"; case rcv_string: return "str"; case rcv_vector: return "vec"; case rcv_bool: return "bool"; -- 2.11.4.GIT