27 #ifndef __CONSOLE_MENU__
28 #define __CONSOLE_MENU__
34 #ifdef __USINGCONSOLEMENU
42 int lines2print, linesprinted;
43 int currentMenuIndex, currentUserLevel, cursorIndex, viewFormatIndex;
44 int parseIndex, readIndex;
45 UI_8 clearScreen, showHelp, showPrompt;
47 struct uiStruct createuiStruct();
55 struct logStruct createlogStruct();
63 struct configStruct createconfigStruct();
67 UI_8 isASCIIchar(
char inChar);
68 UI_8 isLetterchar(
char inChar);
69 UI_8 isNumberchar(
char inChar);
70 UI_8 isIntegerchar(
char inChar);
71 UI_8 isUnsignedIntegerchar(
char inChar);
72 UI_8 isDelimiterchar(
char inChar);
73 UI_8 isTerminatorchar(
char inChar);
74 UI_8 isASCIIString(
char* inStringPtr);
75 UI_8 isLetterString(
char* inStringPtr);
76 UI_8 isNumberString(
char* inStringPtr);
77 UI_8 isIntegerString(
char* inStringPtr);
78 UI_8 isUnsignedIntegerString(
char* inStringPtr);
79 UI_8 stringMatchCaseSensitive(
char* inStringPtr,
const char* matchString);
80 void stringInit(
char* stringPtr,
const char* initString);
81 UI_16 stringLength(
const char* stringPtr);
82 const char* cursorString(UI_8 showCursor);
83 const char* terminalClearString();
87 const char* terminalSlashes();
97 int SN_PrintF(
char*
str,
unsigned int size,
const char* format, ...);
98 UI_8
ATO_F(
const char*
str,
float* val);
99 UI_8 ATO_D(
const char*
str,
double* val);
101 UI_8 ATO_I8(
const char*
str, I_8* val);
102 UI_8 ATO_I16(
const char*
str, I_16* val);
103 UI_8 ATO_I32(
const char*
str, I_32* val);
104 UI_8 ATO_I64(
const char*
str, I_64* val);
105 UI_8 ATO_U8(
const char*
str, UI_8* val);
106 UI_8 ATO_U16(
const char*
str, UI_16* val);
107 UI_8 ATO_U32(
const char*
str, UI_32* val);
108 UI_8 ATO_U64(
const char*
str, UI_64* val);
110 #define PlatformAPIFuncsTemplate(SizePlusOne) \
111 int SN_PrintF(char* str, unsigned int size, const char* format, ...)\
114 va_start(argptr, format);\
115 int chars = vsnprintf(str, SizePlusOne, format, argptr);\
119 UI_8 ATO_F(const char* str, float* val)\
121 if (isNumberString((char*)str))\
123 *val = (float)atof(str);\
129 UI_8 ATO_D(const char* str, double* val)\
131 if (isNumberString((char*)str))\
139 UI_8 ATO_I8(const char* str, I_8* val)\
141 if (isIntegerString((char*)str))\
143 *val = (I_8)atoi(str);\
149 UI_8 ATO_I16(const char* str, I_16* val)\
151 if (isIntegerString((char*)str))\
153 *val = (I_16)atoi(str);\
159 UI_8 ATO_I32(const char* str, I_32* val)\
161 if (isIntegerString((char*)str))\
163 *val = (I_32)atol(str);\
169 UI_8 ATO_I64(const char* str, I_64* val)\
171 if (isIntegerString((char*)str))\
173 *val = (I_64)atol(str);\
179 UI_8 ATO_U8(const char* str, UI_8* val)\
181 if (isUnsignedIntegerString((char*)str))\
183 *val = (UI_8)atol(str);\
189 UI_8 ATO_U16(const char* str, UI_16* val)\
191 if (isUnsignedIntegerString((char*)str))\
193 *val = (UI_16)atol(str);\
199 UI_8 ATO_U32(const char* str, UI_32* val)\
201 if (isUnsignedIntegerString((char*)str))\
203 *val = (UI_32)atol(str);\
209 UI_8 ATO_U64(const char* str, UI_64* val)\
211 if (isUnsignedIntegerString((char*)str))\
213 *val = (UI_64)atol(str);\
222 #define ASCII_space 32
229 #define ASCII_plus 43
230 #define ASCII_minus 45
232 #define ASCII_colon 58
233 #define ASCII_semicolon 59
234 #define ASCII_tilda 126
239 #define __INIT_MENU_VARS(CHARS_PER_LINE, CHAR_PTR) char * linebuff = CHAR_PTR; \
240 int charsWritten = 0; \
241 int maxChars = CHARS_PER_LINE
243 #define INIT_MENU_VARS(CHARS_PER_LINE, CHAR_PTR) __INIT_MENU_VARS(CHARS_PER_LINE, CHAR_PTR)
245 #define __PRINT_MENU_LN SN_PrintF( linebuff, maxChars,
246 #define PRINT_MENU_LN __PRINT_MENU_LN
248 #define __END_MENU_LN ); break
249 #define END_MENU_LN __END_MENU_LN
251 #define __OPENSWITCH(NAMEEE) INIT_MENU_VARS(charBuffMax, &NAMEEE->devptr->outbuff.charbuff[0]); \
253 switch (NAMEEE->linesprinted){
256 #define OPENSWITCH(NAMEEE) __OPENSWITCH(NAMEEE)
258 #define __CLOSESWITCH(NAMEEE) \
259 NAMEEE->lines2print = 0;\
262 if (NAMEEE->lines2print > 0)\
264 WriteMenuLine(NAMEEE);\
265 NAMEEE->linesprinted++;\
267 } while (NAMEEE->lines2print > 0);
271 #define CLOSESWITCH(NAMEEE) __CLOSESWITCH(NAMEEE)
274 #define __OPENIF(tNAME, mNAME) \
275 if (uiStructPtrIn->devptr->newDataReadIn) \
277 if (stringMatchCaseSensitive(&uiStructPtrIn->devptr->inbuff.charbuff[uiStructPtrIn->parseIndex], tNAME) == ui8TRUE) \
279 uiStructPtrIn->parseIndex += stringLength( tNAME ); \
280 if (uiStructPtrIn->devptr->inbuff.charbuff[uiStructPtrIn->parseIndex] == ';') \
282 uiStructPtrIn->currentMenuIndex = mNAME; \
284 else if (uiStructPtrIn->devptr->inbuff.charbuff[uiStructPtrIn->parseIndex] == ':') \
286 uiStructPtrIn->parseIndex++;
288 #define OPENIF(tNAME, mNAME) __OPENIF(tNAME, mNAME)
291 #define __CLOSEIF(tNAME, mNAME) \
293 uiStructPtrIn->devptr->newDataReadIn = ui8FALSE; \
297 #define CLOSEIF(tNAME, mNAME) __CLOSEIF(tNAME, mNAME)
301 #define __KEYIF(tNAME, mNAME) \
302 if (uiStructPtrIn->devptr->newDataReadIn) \
304 if (stringMatchCaseSensitive(&uiStructPtrIn->devptr->inbuff.charbuff[uiStructPtrIn->parseIndex], tNAME) == ui8TRUE) \
306 uiStructPtrIn->parseIndex++; \
307 theCurrentAction = mNAME; \
308 uiStructPtrIn->devptr->newDataReadIn = ui8FALSE; \
312 #define KEYIF(tNAME, mNAME) __KEYIF(tNAME, mNAME)
319 class consoleMenuClass
325 #endif // !__cplusplus
326 #endif // !__USINGCONSOLEMENU
327 #endif // ! __CONSOLE_MENU__