You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
#include <config.h>
#include "error.h"
#include "alloc.h"
#include "dictionary.h"
#include "error.h"
+#include "glob.h"
#include "getline.h"
#include "lexer.h"
#include "main.h"
int (*func) (void); /* Function to call. */
int skip_entire_name; /* If zero, we don't skip the
final token in the command name. */
+ short debug; /* Set if this cmd available only in test mode*/
};
/* Define the command array. */
#define DEFCMD(NAME, T1, T2, T3, T4, FUNC) \
- {NAME, {T1, T2, T3, T4}, FUNC, 1},
+ {NAME, {T1, T2, T3, T4}, FUNC, 1, 0},
+#define DBGCMD(NAME, T1, T2, T3, T4, FUNC) \
+ {NAME, {T1, T2, T3, T4}, FUNC, 1, 1},
#define SPCCMD(NAME, T1, T2, T3, T4, FUNC) \
- {NAME, {T1, T2, T3, T4}, FUNC, 0},
+ {NAME, {T1, T2, T3, T4}, FUNC, 0, 0},
#define UNIMPL(NAME, T1, T2, T3, T4) \
- {NAME, {T1, T2, T3, T4}, NULL, 1},
+ {NAME, {T1, T2, T3, T4}, NULL, 1, 0},
static const struct command commands[] =
{
#include "command.def"
};
#undef DEFCMD
+#undef DBGCMD
#undef UNIMPL
cmd = &commands[state + skip];
- if ( cmd->transition[pgm_state] == STATE_ERROR )
+ if ( cmd->transition[pgm_state] == STATE_ERROR || ( cmd->debug && ! test_mode ) )
{
skip++;
continue;
return CMD_SUCCESS;
/* Parse comments. */
- if ((token == T_ID && !strcmp (tokid, "COMMENT"))
+ if ((token == T_ID && !strcasecmp (tokid, "COMMENT"))
|| token == T_EXP || token == '*' || token == '[')
{
lex_skip_comment ();
while (a_len > 0 && b_len > 0)
{
/* Mismatch always returns zero. */
- if (*a++ != *b++)
+ if (toupper ((unsigned char) *a++) != toupper ((unsigned char) *b++))
return 0;
/* Advance. */
assert (aw != NULL && bw != NULL);
/* Words that are the same don't conflict. */
- if (aw_len == bw_len && !memcmp (aw, bw, aw_len))
+ if (aw_len == bw_len && !mm_case_compare (aw, bw, aw_len))
return 0;
/* Words that are otherwise the same in the first three letters
do conflict. */
return ((aw_len > 3 && bw_len > 3)
|| (aw_len == 3 && bw_len > 3)
- || (bw_len == 3 && aw_len > 3)) && !memcmp (aw, bw, 3);
+ || (bw_len == 3 && aw_len > 3)) && !mm_case_compare (aw, bw, 3);
}
/* Returns nonzero if CMD can be confused with another command
word != NULL && word_idx < word_cnt;
word = find_word (word + word_len, &word_len), word_idx++)
if (word_len != strlen (words[word_idx])
- || memcmp (word, words[word_idx], word_len))
+ || mm_case_compare (word, words[word_idx], word_len))
{
size_t match_chars = match_strings (word, word_len,
words[word_idx],
{
if (command->skip_entire_name)
lex_get ();
+ if ( command->debug & !test_mode )
+ goto error;
free_words (words, word_cnt);
return command;
}
free (words[word_cnt]);
}
+ if ( command->debug && !test_mode )
+ goto error;
+
free_words (words, word_cnt);
return command;
}
+error:
unknown_command_error (words, word_cnt);
free_words (words, word_cnt);
return NULL;