]>
git.zerfleddert.de Git - proxmark3-svn/blob - client/cmdparser.c
c971092b2363256d69e3655788c25799c6cfde22
1 //-----------------------------------------------------------------------------
2 // Copyright (C) 2010 iZsh <izsh at fail0verflow.com>
4 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
5 // at your option, any later version. See the LICENSE.txt file for the text of
7 //-----------------------------------------------------------------------------
9 //-----------------------------------------------------------------------------
15 #include "cmdparser.h"
16 #include "proxmark3.h"
18 void CmdsHelp(const command_t Commands
[])
20 if (Commands
[0].Name
== NULL
)
23 while (Commands
[i
].Name
)
25 if(Commands
[i
].Offline
)
27 PrintAndLog("%-16s \t%s", Commands
[i
].Name
, Commands
[i
].Help
);
30 PrintAndLog("%-16s @\t%s", Commands
[i
].Name
, Commands
[i
].Help
);
36 void CmdsParse(const command_t Commands
[], const char *Cmd
)
38 if(strcmp( Cmd
, "XX_internal_command_dump_XX") == 0)
39 {// Markdown dump children
40 dumpCommandsRecursive(Commands
);
47 memset(cmd_name
, 0, 32);
48 sscanf(Cmd
, "%31s%n", cmd_name
, &len
);
50 while (Commands
[i
].Name
&& strcmp(Commands
[i
].Name
, cmd_name
))
53 /* try to find exactly one prefix-match */
54 if(!Commands
[i
].Name
) {
58 for(i
=0;Commands
[i
].Name
;i
++) {
59 if( !strncmp(Commands
[i
].Name
, cmd_name
, strlen(cmd_name
)) ) {
64 if(matches
== 1) i
=last_match
;
67 if (Commands
[i
].Name
) {
68 while (Cmd
[len
] == ' ')
70 Commands
[i
].Parse(Cmd
+ len
);
72 // show help for selected hierarchy or if command not recognised
76 //static int tablevel = 0;
78 char pparent
[512] = {0};
79 char *parent
= pparent
;
81 void dumpCommandsRecursive(const command_t cmds
[])
83 if (cmds
[0].Name
== NULL
)
87 char* tabulation
= "###";
89 // First, dump all single commands, which are not a container for
91 printf("command|offline|description\n");
92 printf("-------|-------|-----------\n");
96 if(cmds
[i
].Help
[0] == '{' && ++i
) continue;
98 if ( cmds
[i
].Offline
) offline
= "Y";
99 printf("|`%s%s`|%s|`%s`|\n", parent
, cmds
[i
].Name
,offline
, cmds
[i
].Help
);
104 // Then, print the categories. These will go into subsections with their own tables
108 if(cmds
[i
].Help
[0] != '{' && ++i
) continue;
110 printf("%s %s%s\n\n %s\n\n", tabulation
, parent
, cmds
[i
].Name
, cmds
[i
].Help
);
112 char currentparent
[512] = {0};
113 snprintf(currentparent
, sizeof currentparent
, "%s%s ", parent
, cmds
[i
].Name
);
114 char *old_parent
= parent
;
115 parent
= currentparent
;
117 // This is what causes the recursion, since commands Parse-implementation
118 // in turn calls the CmdsParse above.
119 cmds
[i
].Parse("XX_internal_command_dump_XX");