From b691e286722b9bd06f9199a47c07f12675822c2e Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Wed, 24 Jul 2013 10:06:38 -0500 Subject: [PATCH] Implement some basic mode tracking --- Makefile | 5 +++-- abCalcExpr.h | 2 +- abCalcExprReal.h | 8 ++++++++ abCalcMode.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ abCalcMode.h | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 abCalcExprReal.h create mode 100644 abCalcMode.c create mode 100644 abCalcMode.h diff --git a/Makefile b/Makefile index b639fb5..d54236f 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,12 @@ -OBJS=abCalc.o abCalcExpr.o abCalcExprReal.o abCalcExprInt.o abCalcStack.o +OBJS=abCalc.o abCalcExpr.o abCalcExprReal.o abCalcExprInt.o abCalcStack.o abCalcMode.o NAME=abCalc all: $(NAME) abCalcExpr.o: abCalcExpr.h -abCalcExprReal.o: abCalcExpr.h +abCalcExprReal.o: abCalcExpr.h abCalcExprReal.h abCalcStack.o: abCalcExpr.h abCalcStack.h +abCalcMode.o: abCalcMode.h abCalcExpr.h $(NAME): $(OBJS) cc -o $(NAME) $(OBJS) diff --git a/abCalcExpr.h b/abCalcExpr.h index 0f039ab..b04a3c3 100644 --- a/abCalcExpr.h +++ b/abCalcExpr.h @@ -14,7 +14,7 @@ typedef enum abCalcExprType { typedef double abCalcRealType; -typedef long abCalcIntType; +typedef unsigned long abCalcIntType; typedef struct abCalcExpr { diff --git a/abCalcExprReal.h b/abCalcExprReal.h new file mode 100644 index 0000000..7493c7a --- /dev/null +++ b/abCalcExprReal.h @@ -0,0 +1,8 @@ +/* + abCalcExprReal.h + By: Jeremy Rand + */ + + +void abCalcExprRealInit(void); + diff --git a/abCalcMode.c b/abCalcMode.c new file mode 100644 index 0000000..1f04da1 --- /dev/null +++ b/abCalcMode.c @@ -0,0 +1,47 @@ +/* + abCalcMode.c + By: Jeremy Rand + */ + + +#include "abCalcMode.h" + + + +static abCalcModeIntBase gBase = abCalcModeDecBase; +static int gIntWidth = AB_CALC_MODE_MAX_INT_WIDTH; + + +void abCalcModeInit(void) +{ +} + + +abCalcModeIntBase abCalcModeGetBase(void) +{ + return gBase; +} + + +void abCalcModeSetBase(abCalcModeIntBase base) +{ + if ((base >= abCalcModeIntBaseMin) && + (base < abCalcModeIntBaseMax)) { + gBase = base; + } +} + + +int abCalcModeGetIntWidth(void) +{ + return gIntWidth; +} + + +void abCalcModeSetIntWidth(int width) +{ + if ((width > 0) && + (width <= AB_CALC_MODE_MAX_INT_WIDTH)) { + gIntWidth = width; + } +} diff --git a/abCalcMode.h b/abCalcMode.h new file mode 100644 index 0000000..84eaa75 --- /dev/null +++ b/abCalcMode.h @@ -0,0 +1,33 @@ +/* + abCalcMode.h + By: Jeremy Rand + */ + + +#include "abCalcExpr.h" + + +typedef enum abCalcModeIntBase +{ + abCalcModeIntBaseMin = 0, + abCalcModeBinBase = 0, + abCalcModeOctBase, + abCalcModeDecBase, + abCalcModeHexBase, + + abCalcModeIntBaseMax +} abCalcModeIntBase; + + +#define AB_CALC_MODE_MAX_INT_WIDTH ((sizeof(abCalcIntType) * 8)) + + +void abCalcModeInit(void); + +abCalcModeIntBase abCalcModeGetBase(void); + +void abCalcModeSetBase(abCalcModeIntBase base); + +int abCalcModeGetIntWidth(void); + +void abCalcModeSetIntWidth(int width);