diff options
Diffstat (limited to 'csim/util.c')
-rw-r--r-- | csim/util.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/csim/util.c b/csim/util.c new file mode 100644 index 0000000..a09e959 --- /dev/null +++ b/csim/util.c @@ -0,0 +1,48 @@ +/* + Système Digital + 2013-2014 + Alex AUVOLAT + + util.c Various utility functions used elsewhere +*/ + + +#include "sim.h" + +int pow2(int exp) { + if (exp == 0) return 1; + if (exp == 1) return 2; + int k = pow2(exp / 2); + return (exp % 2 == 0 ? k * k : 2 * k * k); +} + +t_value read_bool(FILE *stream, t_value *mask) { + t_value r = 0; + t_value pow = 1; + + char c; + if (mask != NULL) *mask = 0; + + for(;;) { + fscanf(stream, "%c", &c); + if (c == '1') { + r |= pow; + } else if (c != '0') { + break; + } + if (mask != NULL) (*mask) |= pow; + + pow *= 2; + } + + return r; +} + +int is_prefix(char *prefix, char *str) { + while (*prefix) { + if (*prefix != *str) return 0; + prefix++; + str++; + } + return 1; +} |