A Command Interpreter with support for used defined commands, subsystems, macros, help and parameter parsing.

Committer:
wvd_vegt
Date:
Thu Feb 10 18:30:04 2011 +0000
Revision:
0:4d95ee0b4c37
Child:
1:6627eed48db5
Alpha

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wvd_vegt 0:4d95ee0b4c37 1 /* mbed Command Interpreter Library
wvd_vegt 0:4d95ee0b4c37 2 00002 * Copyright (c) 2007-2010 sford, cstyles
wvd_vegt 0:4d95ee0b4c37 3 00003 *
wvd_vegt 0:4d95ee0b4c37 4 00004 * Permission is hereby granted, free of charge, to any person obtaining a copy
wvd_vegt 0:4d95ee0b4c37 5 00005 * of this software and associated documentation files (the "Software"), to deal
wvd_vegt 0:4d95ee0b4c37 6 00006 * in the Software without restriction, including without limitation the rights
wvd_vegt 0:4d95ee0b4c37 7 00007 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wvd_vegt 0:4d95ee0b4c37 8 00008 * copies of the Software, and to permit persons to whom the Software is
wvd_vegt 0:4d95ee0b4c37 9 00009 * furnished to do so, subject to the following conditions:
wvd_vegt 0:4d95ee0b4c37 10 00010 *
wvd_vegt 0:4d95ee0b4c37 11 00011 * The above copyright notice and this permission notice shall be included in
wvd_vegt 0:4d95ee0b4c37 12 00012 * all copies or substantial portions of the Software.
wvd_vegt 0:4d95ee0b4c37 13 00013 *
wvd_vegt 0:4d95ee0b4c37 14 00014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wvd_vegt 0:4d95ee0b4c37 15 00015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wvd_vegt 0:4d95ee0b4c37 16 00016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wvd_vegt 0:4d95ee0b4c37 17 00017 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wvd_vegt 0:4d95ee0b4c37 18 00018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wvd_vegt 0:4d95ee0b4c37 19 00019 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wvd_vegt 0:4d95ee0b4c37 20 00020 * THE SOFTWARE.
wvd_vegt 0:4d95ee0b4c37 21 00021 */
wvd_vegt 0:4d95ee0b4c37 22
wvd_vegt 0:4d95ee0b4c37 23 #ifndef MBED_CMDB_H
wvd_vegt 0:4d95ee0b4c37 24 #define MBED_CMDB_H
wvd_vegt 0:4d95ee0b4c37 25
wvd_vegt 0:4d95ee0b4c37 26 #include "mbed.h"
wvd_vegt 0:4d95ee0b4c37 27
wvd_vegt 0:4d95ee0b4c37 28 #include <vector>
wvd_vegt 0:4d95ee0b4c37 29
wvd_vegt 0:4d95ee0b4c37 30 //Max size of an Ansi escape code.
wvd_vegt 0:4d95ee0b4c37 31 #define MAX_ESC_LEN 5
wvd_vegt 0:4d95ee0b4c37 32
wvd_vegt 0:4d95ee0b4c37 33 //Max (strlen) of a Param.
wvd_vegt 0:4d95ee0b4c37 34 #define MAX_PARM_LEN 32
wvd_vegt 0:4d95ee0b4c37 35
wvd_vegt 0:4d95ee0b4c37 36 //Max eight parms.
wvd_vegt 0:4d95ee0b4c37 37 #define MAX_ARGS 8
wvd_vegt 0:4d95ee0b4c37 38
wvd_vegt 0:4d95ee0b4c37 39 //Max 132 characters commandline.
wvd_vegt 0:4d95ee0b4c37 40 #define MAX_CMD_LEN 132
wvd_vegt 0:4d95ee0b4c37 41
wvd_vegt 0:4d95ee0b4c37 42 //'Show' hidden subsystems and commands.
wvd_vegt 0:4d95ee0b4c37 43 #define SHOWHIDDEN
wvd_vegt 0:4d95ee0b4c37 44
wvd_vegt 0:4d95ee0b4c37 45 #define MIN_BYTE -128
wvd_vegt 0:4d95ee0b4c37 46 #define MAX_BYTE +127
wvd_vegt 0:4d95ee0b4c37 47
wvd_vegt 0:4d95ee0b4c37 48 #define MIN_SHORT -32768
wvd_vegt 0:4d95ee0b4c37 49 #define MAX_SHORT +32767
wvd_vegt 0:4d95ee0b4c37 50
wvd_vegt 0:4d95ee0b4c37 51 #define MIN_INT -32768
wvd_vegt 0:4d95ee0b4c37 52 #define MAX_INT +32767
wvd_vegt 0:4d95ee0b4c37 53
wvd_vegt 0:4d95ee0b4c37 54 //TODO Make sure we use id and array index properly!!
wvd_vegt 0:4d95ee0b4c37 55
wvd_vegt 0:4d95ee0b4c37 56 struct cmdb_cmd {
wvd_vegt 0:4d95ee0b4c37 57 char *cmdstr;
wvd_vegt 0:4d95ee0b4c37 58 int subs;
wvd_vegt 0:4d95ee0b4c37 59 int id; //Changed to int as signed char won't compile
wvd_vegt 0:4d95ee0b4c37 60 char *parms;
wvd_vegt 0:4d95ee0b4c37 61 char *cmddescr;
wvd_vegt 0:4d95ee0b4c37 62 char *parmdescr;
wvd_vegt 0:4d95ee0b4c37 63 };
wvd_vegt 0:4d95ee0b4c37 64
wvd_vegt 0:4d95ee0b4c37 65 //----Escape Codes and Strings
wvd_vegt 0:4d95ee0b4c37 66
wvd_vegt 0:4d95ee0b4c37 67 const char cr = '\r';
wvd_vegt 0:4d95ee0b4c37 68 const char lf = '\n';
wvd_vegt 0:4d95ee0b4c37 69 const char bell = '\7';
wvd_vegt 0:4d95ee0b4c37 70 const char esc = '\033';
wvd_vegt 0:4d95ee0b4c37 71 const char sp = ' ';
wvd_vegt 0:4d95ee0b4c37 72 const char crlf[] = "\r\n\0";
wvd_vegt 0:4d95ee0b4c37 73
wvd_vegt 0:4d95ee0b4c37 74 const char bs[] = "\b \b\0";
wvd_vegt 0:4d95ee0b4c37 75
wvd_vegt 0:4d95ee0b4c37 76 const char boldon[] = "\033[1m\0";
wvd_vegt 0:4d95ee0b4c37 77 const char boldoff[] = "\033[0m\0";
wvd_vegt 0:4d95ee0b4c37 78 const char cls[] = "\033[2J\0";
wvd_vegt 0:4d95ee0b4c37 79 const char home[] = "\033[H\0";
wvd_vegt 0:4d95ee0b4c37 80
wvd_vegt 0:4d95ee0b4c37 81 const char prompt[] = "CMD>";
wvd_vegt 0:4d95ee0b4c37 82
wvd_vegt 0:4d95ee0b4c37 83 //Before including this file, define CID_LAST as the last value from the enum with commands.
wvd_vegt 0:4d95ee0b4c37 84
wvd_vegt 0:4d95ee0b4c37 85 //#define CMD_TBL_LEN CID_LAST
wvd_vegt 0:4d95ee0b4c37 86
wvd_vegt 0:4d95ee0b4c37 87 #define SUBSYSTEM -1
wvd_vegt 0:4d95ee0b4c37 88 #define GLOBALCMD -2
wvd_vegt 0:4d95ee0b4c37 89 #define HIDDENSUB -3
wvd_vegt 0:4d95ee0b4c37 90
wvd_vegt 0:4d95ee0b4c37 91 #define CID_BOOT 9991
wvd_vegt 0:4d95ee0b4c37 92 #define CID_MACRO 9992
wvd_vegt 0:4d95ee0b4c37 93 #define CID_RUN 9993
wvd_vegt 0:4d95ee0b4c37 94 #define CID_MACROS 9994
wvd_vegt 0:4d95ee0b4c37 95
wvd_vegt 0:4d95ee0b4c37 96 #define CID_ECHO 9995
wvd_vegt 0:4d95ee0b4c37 97 #define CID_BOLD 9996
wvd_vegt 0:4d95ee0b4c37 98 #define CID_CLS 9997
wvd_vegt 0:4d95ee0b4c37 99 #define CID_IDLE 9998
wvd_vegt 0:4d95ee0b4c37 100 #define CID_HELP 9999
wvd_vegt 0:4d95ee0b4c37 101
wvd_vegt 0:4d95ee0b4c37 102 //You need to add the following commands to your command table.
wvd_vegt 0:4d95ee0b4c37 103
wvd_vegt 0:4d95ee0b4c37 104 //Optional
wvd_vegt 0:4d95ee0b4c37 105 cmdb_cmd BOOT = { "Boot", GLOBALCMD ,CID_BOOT ,"" ,"Boot" ,""};
wvd_vegt 0:4d95ee0b4c37 106
wvd_vegt 0:4d95ee0b4c37 107 //Optional
wvd_vegt 0:4d95ee0b4c37 108 cmdb_cmd MACRO = { "Macro", GLOBALCMD ,CID_MACRO ,"%s" ,"Define macro (sp->_, cr->|)" ,"command(s)"};
wvd_vegt 0:4d95ee0b4c37 109 cmdb_cmd RUN = { "Run", GLOBALCMD ,CID_RUN ,"" ,"Run a macro" ,""};
wvd_vegt 0:4d95ee0b4c37 110 cmdb_cmd MACROS = { "Macros", GLOBALCMD ,CID_MACROS ,"" ,"List macro(s)" ,""};
wvd_vegt 0:4d95ee0b4c37 111
wvd_vegt 0:4d95ee0b4c37 112 //Optional
wvd_vegt 0:4d95ee0b4c37 113 cmdb_cmd ECHO = { "Echo", GLOBALCMD ,CID_ECHO ,"%bu" ,"Echo On|Off (1|0)" ,"state"};
wvd_vegt 0:4d95ee0b4c37 114 cmdb_cmd BOLD = { "Bold", GLOBALCMD ,CID_BOLD ,"%bu" ,"Bold On|Off (1|0)" ,"state"};
wvd_vegt 0:4d95ee0b4c37 115 cmdb_cmd CLS = { "Cls", GLOBALCMD ,CID_CLS ,"" ,"Clears the terminal screen" ,""};
wvd_vegt 0:4d95ee0b4c37 116
wvd_vegt 0:4d95ee0b4c37 117 //Mandatory!
wvd_vegt 0:4d95ee0b4c37 118 cmdb_cmd IDLE = { "Idle", GLOBALCMD ,CID_IDLE ,"" ,"Deselect Subsystems" ,""};
wvd_vegt 0:4d95ee0b4c37 119
wvd_vegt 0:4d95ee0b4c37 120 //Mandatory!
wvd_vegt 0:4d95ee0b4c37 121 cmdb_cmd HELP = { "Help", GLOBALCMD ,CID_HELP ,"%s" ,"Help" ,""};
wvd_vegt 0:4d95ee0b4c37 122
wvd_vegt 0:4d95ee0b4c37 123 #define ESC_TBL_LEN 4
wvd_vegt 0:4d95ee0b4c37 124
wvd_vegt 0:4d95ee0b4c37 125 struct esc_st {
wvd_vegt 0:4d95ee0b4c37 126 char *escstr;
wvd_vegt 0:4d95ee0b4c37 127 int id;
wvd_vegt 0:4d95ee0b4c37 128 };
wvd_vegt 0:4d95ee0b4c37 129
wvd_vegt 0:4d95ee0b4c37 130 enum {
wvd_vegt 0:4d95ee0b4c37 131 EID_CURSOR_UP,
wvd_vegt 0:4d95ee0b4c37 132 EID_CURSOR_DOWN,
wvd_vegt 0:4d95ee0b4c37 133 EID_CURSOR_RIGHT,
wvd_vegt 0:4d95ee0b4c37 134 EID_CURSOR_LEFT,
wvd_vegt 0:4d95ee0b4c37 135 EID_LAST
wvd_vegt 0:4d95ee0b4c37 136 };
wvd_vegt 0:4d95ee0b4c37 137
wvd_vegt 0:4d95ee0b4c37 138 const struct esc_st esc_tbl [ESC_TBL_LEN] = {
wvd_vegt 0:4d95ee0b4c37 139 { "\033[A", EID_CURSOR_UP },
wvd_vegt 0:4d95ee0b4c37 140 { "\033[B", EID_CURSOR_DOWN },
wvd_vegt 0:4d95ee0b4c37 141 { "\033[C", EID_CURSOR_RIGHT },
wvd_vegt 0:4d95ee0b4c37 142 { "\033[D", EID_CURSOR_LEFT },
wvd_vegt 0:4d95ee0b4c37 143 };
wvd_vegt 0:4d95ee0b4c37 144
wvd_vegt 0:4d95ee0b4c37 145 //Define a const struct cmbd_cmd cmdb_tbl [CMD_TBL_LEN] {}; that is passed into the constructor.
wvd_vegt 0:4d95ee0b4c37 146
wvd_vegt 0:4d95ee0b4c37 147 /** Command Interpreter class.
wvd_vegt 0:4d95ee0b4c37 148 *
wvd_vegt 0:4d95ee0b4c37 149 * Steps to take:
wvd_vegt 0:4d95ee0b4c37 150 *
wvd_vegt 0:4d95ee0b4c37 151 * 1) Create a std::vector<cmdb_cmd> and fill it with at least
wvd_vegt 0:4d95ee0b4c37 152 * the mandatory commands IDLE and HELP.
wvd_vegt 0:4d95ee0b4c37 153 * 2) Create an Cmdb class instance and pass it both the vector and
wvd_vegt 0:4d95ee0b4c37 154 * a Serial port object like Serial serial(USBTX, USBRX);
wvd_vegt 0:4d95ee0b4c37 155 * 3) Feed the interpreter with characters received from your serial port.
wvd_vegt 0:4d95ee0b4c37 156 * Note Cmdb self does not retrieve input it must be handed to it
wvd_vegt 0:4d95ee0b4c37 157 * 4) Handle commands added by the application by the Id and parameters passed.
wvd_vegt 0:4d95ee0b4c37 158 *
wvd_vegt 0:4d95ee0b4c37 159 */
wvd_vegt 0:4d95ee0b4c37 160 class Cmdb {
wvd_vegt 0:4d95ee0b4c37 161 public:
wvd_vegt 0:4d95ee0b4c37 162 /** Create a Command Interpreter.
wvd_vegt 0:4d95ee0b4c37 163 *
wvd_vegt 0:4d95ee0b4c37 164 * @param serial a Serial port used for communication.
wvd_vegt 0:4d95ee0b4c37 165 * @param cmds a vector with the command table.
wvd_vegt 0:4d95ee0b4c37 166 */
wvd_vegt 0:4d95ee0b4c37 167 Cmdb(const Serial serial, const std::vector<cmdb_cmd>& cmds);
wvd_vegt 0:4d95ee0b4c37 168
wvd_vegt 0:4d95ee0b4c37 169 /** Checks if the macro buffer has any characters left.
wvd_vegt 0:4d95ee0b4c37 170 *
wvd_vegt 0:4d95ee0b4c37 171 * @returns true if any characters left.
wvd_vegt 0:4d95ee0b4c37 172 */
wvd_vegt 0:4d95ee0b4c37 173 bool cmdb_macro_hasnext();
wvd_vegt 0:4d95ee0b4c37 174 char cmdb_macro_next();
wvd_vegt 0:4d95ee0b4c37 175 char cmdb_macro_peek();
wvd_vegt 0:4d95ee0b4c37 176 void cmdb_macro_reset();
wvd_vegt 0:4d95ee0b4c37 177
wvd_vegt 0:4d95ee0b4c37 178 //Char Input.
wvd_vegt 0:4d95ee0b4c37 179 bool cmdb_hasnext();
wvd_vegt 0:4d95ee0b4c37 180 char cmdb_next();
wvd_vegt 0:4d95ee0b4c37 181
wvd_vegt 0:4d95ee0b4c37 182 private:
wvd_vegt 0:4d95ee0b4c37 183 //Utilities.
wvd_vegt 0:4d95ee0b4c37 184 /** Checks if the macro buffer has any characters left.
wvd_vegt 0:4d95ee0b4c37 185 *
wvd_vegt 0:4d95ee0b4c37 186 * @param char* escstr the escape code to lookup.
wvd_vegt 0:4d95ee0b4c37 187 *
wvd_vegt 0:4d95ee0b4c37 188 * @returns the index of the escape code or -1.
wvd_vegt 0:4d95ee0b4c37 189 */
wvd_vegt 0:4d95ee0b4c37 190 int cmdb_escid_search(char *escstr);
wvd_vegt 0:4d95ee0b4c37 191 int cmdb_cmdid_search(char *cmdstr);
wvd_vegt 0:4d95ee0b4c37 192 int cmdb_cmdid_index(int cmdid);
wvd_vegt 0:4d95ee0b4c37 193
wvd_vegt 0:4d95ee0b4c37 194 //Parser.
wvd_vegt 0:4d95ee0b4c37 195 void cmdb_init(const char full);
wvd_vegt 0:4d95ee0b4c37 196 void cmdb_prompt(void);
wvd_vegt 0:4d95ee0b4c37 197 bool cmdb_scan(const char c);
wvd_vegt 0:4d95ee0b4c37 198 int cmdb_parse(char *cmd);
wvd_vegt 0:4d95ee0b4c37 199
wvd_vegt 0:4d95ee0b4c37 200 //Command Processor.
wvd_vegt 0:4d95ee0b4c37 201 //TODO Must call Callback function.
wvd_vegt 0:4d95ee0b4c37 202 void cmdb_cmd_proc(char *cmd);
wvd_vegt 0:4d95ee0b4c37 203
wvd_vegt 0:4d95ee0b4c37 204 //Help
wvd_vegt 0:4d95ee0b4c37 205 void cmdb_cmdhelp(char *pre, int ndx, char *post);
wvd_vegt 0:4d95ee0b4c37 206
wvd_vegt 0:4d95ee0b4c37 207 //Output.
wvd_vegt 0:4d95ee0b4c37 208 int cmdb_printf(const char *format, ...);
wvd_vegt 0:4d95ee0b4c37 209 int cmdb_print(const char *msg);
wvd_vegt 0:4d95ee0b4c37 210 char cmdb_printch(const char ch);
wvd_vegt 0:4d95ee0b4c37 211
wvd_vegt 0:4d95ee0b4c37 212 //Utilities.
wvd_vegt 0:4d95ee0b4c37 213 void zeromemory(char *p,unsigned int siz);
wvd_vegt 0:4d95ee0b4c37 214 int stricmp (char *s1, char *s2);
wvd_vegt 0:4d95ee0b4c37 215
wvd_vegt 0:4d95ee0b4c37 216
wvd_vegt 0:4d95ee0b4c37 217 //Storage, see http://www.cplusplus.com/reference/stl/vector/
wvd_vegt 0:4d95ee0b4c37 218 std::vector<cmdb_cmd> _cmds;
wvd_vegt 0:4d95ee0b4c37 219 Serial _serial;
wvd_vegt 0:4d95ee0b4c37 220 bool echo;
wvd_vegt 0:4d95ee0b4c37 221 bool bold;
wvd_vegt 0:4d95ee0b4c37 222
wvd_vegt 0:4d95ee0b4c37 223 int CID_LAST;
wvd_vegt 0:4d95ee0b4c37 224 int CMD_TBL_LEN;
wvd_vegt 0:4d95ee0b4c37 225
wvd_vegt 0:4d95ee0b4c37 226 //Macro's.
wvd_vegt 0:4d95ee0b4c37 227 int macro_ptr;
wvd_vegt 0:4d95ee0b4c37 228 char macro_buf[1 + MAX_CMD_LEN];
wvd_vegt 0:4d95ee0b4c37 229
wvd_vegt 0:4d95ee0b4c37 230 enum parmtype {
wvd_vegt 0:4d95ee0b4c37 231 PARM_UNUSED, //0
wvd_vegt 0:4d95ee0b4c37 232
wvd_vegt 0:4d95ee0b4c37 233 PARM_FLOAT, //1 (f)
wvd_vegt 0:4d95ee0b4c37 234
wvd_vegt 0:4d95ee0b4c37 235 PARM_LONG, //2 (l/ul)
wvd_vegt 0:4d95ee0b4c37 236 PARM_INT, //3 (i/ui)
wvd_vegt 0:4d95ee0b4c37 237 PARM_SHORT, //4 (w/uw)
wvd_vegt 0:4d95ee0b4c37 238
wvd_vegt 0:4d95ee0b4c37 239 PARM_CHAR, //5 (c/uc)
wvd_vegt 0:4d95ee0b4c37 240 PARM_STRING //6 (s)
wvd_vegt 0:4d95ee0b4c37 241 };
wvd_vegt 0:4d95ee0b4c37 242
wvd_vegt 0:4d95ee0b4c37 243 union value {
wvd_vegt 0:4d95ee0b4c37 244 float f;
wvd_vegt 0:4d95ee0b4c37 245
wvd_vegt 0:4d95ee0b4c37 246 unsigned long ul;
wvd_vegt 0:4d95ee0b4c37 247 long l;
wvd_vegt 0:4d95ee0b4c37 248
wvd_vegt 0:4d95ee0b4c37 249 int i;
wvd_vegt 0:4d95ee0b4c37 250 unsigned int ui;
wvd_vegt 0:4d95ee0b4c37 251
wvd_vegt 0:4d95ee0b4c37 252 short w;
wvd_vegt 0:4d95ee0b4c37 253 unsigned short uw;
wvd_vegt 0:4d95ee0b4c37 254
wvd_vegt 0:4d95ee0b4c37 255 char c;
wvd_vegt 0:4d95ee0b4c37 256 unsigned char uc;
wvd_vegt 0:4d95ee0b4c37 257
wvd_vegt 0:4d95ee0b4c37 258 char s[MAX_PARM_LEN];
wvd_vegt 0:4d95ee0b4c37 259 };
wvd_vegt 0:4d95ee0b4c37 260
wvd_vegt 0:4d95ee0b4c37 261 struct parm {
wvd_vegt 0:4d95ee0b4c37 262 enum parmtype type;
wvd_vegt 0:4d95ee0b4c37 263 union value val;
wvd_vegt 0:4d95ee0b4c37 264 };
wvd_vegt 0:4d95ee0b4c37 265
wvd_vegt 0:4d95ee0b4c37 266 //------------------------------------------------------------------------------
wvd_vegt 0:4d95ee0b4c37 267 //----These helper functions retieve parameters in the correct format.
wvd_vegt 0:4d95ee0b4c37 268 //------------------------------------------------------------------------------
wvd_vegt 0:4d95ee0b4c37 269
wvd_vegt 0:4d95ee0b4c37 270 //TODO Add tests for correct type of parameter.
wvd_vegt 0:4d95ee0b4c37 271
wvd_vegt 0:4d95ee0b4c37 272 bool BOOLPARM(int ndx) {
wvd_vegt 0:4d95ee0b4c37 273 return parms[ndx].val.uc!=0;
wvd_vegt 0:4d95ee0b4c37 274 }
wvd_vegt 0:4d95ee0b4c37 275
wvd_vegt 0:4d95ee0b4c37 276 unsigned char BYTEPARM(int ndx) {
wvd_vegt 0:4d95ee0b4c37 277 return parms[ndx].val.uc;
wvd_vegt 0:4d95ee0b4c37 278 }
wvd_vegt 0:4d95ee0b4c37 279
wvd_vegt 0:4d95ee0b4c37 280 char CHARPARM(int ndx) {
wvd_vegt 0:4d95ee0b4c37 281 return parms[ndx].val.c;
wvd_vegt 0:4d95ee0b4c37 282 }
wvd_vegt 0:4d95ee0b4c37 283
wvd_vegt 0:4d95ee0b4c37 284 unsigned int WORDPARM(int ndx) {
wvd_vegt 0:4d95ee0b4c37 285 return parms[ndx].val.ui;
wvd_vegt 0:4d95ee0b4c37 286 }
wvd_vegt 0:4d95ee0b4c37 287
wvd_vegt 0:4d95ee0b4c37 288 unsigned int UINTPARM(int ndx) {
wvd_vegt 0:4d95ee0b4c37 289 return parms[ndx].val.ui;
wvd_vegt 0:4d95ee0b4c37 290 }
wvd_vegt 0:4d95ee0b4c37 291
wvd_vegt 0:4d95ee0b4c37 292 int INTPARM(int ndx) {
wvd_vegt 0:4d95ee0b4c37 293 return parms[ndx].val.i;
wvd_vegt 0:4d95ee0b4c37 294 }
wvd_vegt 0:4d95ee0b4c37 295
wvd_vegt 0:4d95ee0b4c37 296 unsigned long DWORDPARM(int ndx) {
wvd_vegt 0:4d95ee0b4c37 297 return parms[ndx].val.ul;
wvd_vegt 0:4d95ee0b4c37 298 }
wvd_vegt 0:4d95ee0b4c37 299
wvd_vegt 0:4d95ee0b4c37 300 long LONGPARM(int ndx) {
wvd_vegt 0:4d95ee0b4c37 301 return parms[ndx].val.l;
wvd_vegt 0:4d95ee0b4c37 302 }
wvd_vegt 0:4d95ee0b4c37 303
wvd_vegt 0:4d95ee0b4c37 304 float FLOATPARM(int ndx) {
wvd_vegt 0:4d95ee0b4c37 305 return parms[ndx].val.f;
wvd_vegt 0:4d95ee0b4c37 306 }
wvd_vegt 0:4d95ee0b4c37 307
wvd_vegt 0:4d95ee0b4c37 308 char* STRINGPARM(int ndx) {
wvd_vegt 0:4d95ee0b4c37 309 return parms[ndx].val.s;
wvd_vegt 0:4d95ee0b4c37 310 }
wvd_vegt 0:4d95ee0b4c37 311
wvd_vegt 0:4d95ee0b4c37 312 //------------------------------------------------------------------------------
wvd_vegt 0:4d95ee0b4c37 313 //----Buffers
wvd_vegt 0:4d95ee0b4c37 314 //------------------------------------------------------------------------------
wvd_vegt 0:4d95ee0b4c37 315
wvd_vegt 0:4d95ee0b4c37 316 char cmdbuf [1 + MAX_CMD_LEN]; // command buffer
wvd_vegt 0:4d95ee0b4c37 317 char cmdndx; // command index
wvd_vegt 0:4d95ee0b4c37 318
wvd_vegt 0:4d95ee0b4c37 319 char lstbuf [1 + MAX_CMD_LEN]; // last command buffer
wvd_vegt 0:4d95ee0b4c37 320
wvd_vegt 0:4d95ee0b4c37 321 char escbuf [1 + MAX_ESC_LEN]; // command buffer
wvd_vegt 0:4d95ee0b4c37 322 unsigned char escndx; // command index
wvd_vegt 0:4d95ee0b4c37 323
wvd_vegt 0:4d95ee0b4c37 324 struct parm parms[MAX_ARGS];
wvd_vegt 0:4d95ee0b4c37 325 int noparms;
wvd_vegt 0:4d95ee0b4c37 326
wvd_vegt 0:4d95ee0b4c37 327 int subsystem;
wvd_vegt 0:4d95ee0b4c37 328
wvd_vegt 0:4d95ee0b4c37 329 int argcnt; //No of arguments found in command
wvd_vegt 0:4d95ee0b4c37 330 int argfnd; //No of arguments to find in parameter definition.
wvd_vegt 0:4d95ee0b4c37 331 int error; //strtoXX() Error detection
wvd_vegt 0:4d95ee0b4c37 332
wvd_vegt 0:4d95ee0b4c37 333 };
wvd_vegt 0:4d95ee0b4c37 334
wvd_vegt 0:4d95ee0b4c37 335 #endif