mirror of
				https://github.com/Proxmark/proxmark3.git
				synced 2025-11-04 20:34:00 +08:00 
			
		
		
		
	Provide option -m for markdown help dump, -h for text dump
This commit is contained in:
		
							parent
							
								
									6f5dd6010e
								
							
						
					
					
						commit
						dec8e8bd9f
					
				
					 3 changed files with 48 additions and 34 deletions
				
			
		| 
						 | 
				
			
			@ -36,12 +36,15 @@ void CmdsHelp(const command_t Commands[])
 | 
			
		|||
void CmdsParse(const command_t Commands[], const char *Cmd)
 | 
			
		||||
{
 | 
			
		||||
  if(strcmp( Cmd, "XX_internal_command_dump_XX") == 0)
 | 
			
		||||
  {// Markdown dump children
 | 
			
		||||
      dumpCommandsRecursive(Commands);
 | 
			
		||||
  {// Help dump children
 | 
			
		||||
      dumpCommandsRecursive(Commands, 0);
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
  if(strcmp( Cmd, "XX_internal_command_dump_markdown_XX") == 0)
 | 
			
		||||
  {// Markdown help dump children
 | 
			
		||||
      dumpCommandsRecursive(Commands, 1);
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  char cmd_name[32];
 | 
			
		||||
  int len = 0;
 | 
			
		||||
  memset(cmd_name, 0, 32);
 | 
			
		||||
| 
						 | 
				
			
			@ -73,30 +76,38 @@ void CmdsParse(const command_t Commands[], const char *Cmd)
 | 
			
		|||
    CmdsHelp(Commands);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
//static int tablevel = 0;
 | 
			
		||||
 | 
			
		||||
char pparent[512] = {0};
 | 
			
		||||
char *parent = pparent;
 | 
			
		||||
 | 
			
		||||
void dumpCommandsRecursive(const command_t cmds[])
 | 
			
		||||
void dumpCommandsRecursive(const command_t cmds[], int markdown)
 | 
			
		||||
{
 | 
			
		||||
   if (cmds[0].Name == NULL)
 | 
			
		||||
  if (cmds[0].Name == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  int i = 0;
 | 
			
		||||
  char* tabulation = "###";
 | 
			
		||||
  int w_cmd=25;
 | 
			
		||||
  int w_off=8;
 | 
			
		||||
  // First, dump all single commands, which are not a container for 
 | 
			
		||||
  // other commands
 | 
			
		||||
  printf("command|offline|description\n");
 | 
			
		||||
  printf("-------|-------|-----------\n");
 | 
			
		||||
  if (markdown) {
 | 
			
		||||
    printf("command|offline|description\n");
 | 
			
		||||
    printf("-------|-------|-----------\n");
 | 
			
		||||
  } else {
 | 
			
		||||
    printf("%-*s|%-*s|%s\n",w_cmd,"command",w_off,"offline","description");
 | 
			
		||||
    printf("%-*s|%-*s|%s\n",w_cmd,"-------",w_off,"-------","-----------");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  while (cmds[i].Name)
 | 
			
		||||
  {
 | 
			
		||||
    char* offline = "N";
 | 
			
		||||
    char* cmd_offline = "N";
 | 
			
		||||
    if(cmds[i].Help[0] == '{' && ++i) continue;
 | 
			
		||||
 | 
			
		||||
    if ( cmds[i].Offline) offline = "Y";
 | 
			
		||||
    printf("|`%s%s`|%s|`%s`|\n", parent, cmds[i].Name,offline, cmds[i].Help);
 | 
			
		||||
    if ( cmds[i].Offline) cmd_offline = "Y";
 | 
			
		||||
    if (markdown)
 | 
			
		||||
      printf("|`%s%s`|%s|`%s`|\n", parent, cmds[i].Name,cmd_offline, cmds[i].Help);
 | 
			
		||||
    else
 | 
			
		||||
      printf("%s%-*s|%-*s|%s\n", parent, w_cmd-(int)strlen(parent), cmds[i].Name, w_off, cmd_offline, cmds[i].Help);
 | 
			
		||||
    ++i;
 | 
			
		||||
  }
 | 
			
		||||
  printf("\n\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -107,17 +118,18 @@ void dumpCommandsRecursive(const command_t cmds[])
 | 
			
		|||
  {
 | 
			
		||||
    if(cmds[i].Help[0] != '{' && ++i)  continue;
 | 
			
		||||
 | 
			
		||||
    printf("%s %s%s\n\n %s\n\n", tabulation, parent, cmds[i].Name, cmds[i].Help);        
 | 
			
		||||
    printf("### %s%s\n\n %s\n\n", parent, cmds[i].Name, cmds[i].Help);
 | 
			
		||||
 | 
			
		||||
    char currentparent[512] = {0};
 | 
			
		||||
    snprintf(currentparent, sizeof currentparent, "%s%s ", parent, cmds[i].Name);
 | 
			
		||||
    char *old_parent = parent;
 | 
			
		||||
    parent = currentparent;
 | 
			
		||||
//    tablevel++;
 | 
			
		||||
    // This is what causes the recursion, since commands Parse-implementation
 | 
			
		||||
    // in turn calls the CmdsParse above. 
 | 
			
		||||
    cmds[i].Parse("XX_internal_command_dump_XX");
 | 
			
		||||
//    tablevel--;
 | 
			
		||||
    if (markdown)
 | 
			
		||||
      cmds[i].Parse("XX_internal_command_dump_markdown_XX");
 | 
			
		||||
    else
 | 
			
		||||
      cmds[i].Parse("XX_internal_command_dump_XX");
 | 
			
		||||
    parent = old_parent;
 | 
			
		||||
    ++i;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,6 +25,6 @@ typedef struct command_s
 | 
			
		|||
void CmdsHelp(const command_t Commands[]);
 | 
			
		||||
// Parse a command line
 | 
			
		||||
void CmdsParse(const command_t Commands[], const char *Cmd);
 | 
			
		||||
void dumpCommandsRecursive(const command_t cmds[]);
 | 
			
		||||
void dumpCommandsRecursive(const command_t cmds[], int markdown);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -215,17 +215,14 @@ static void *main_loop(void *targ) {
 | 
			
		|||
//  printf("\n");
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
static void dumpAllHelp()
 | 
			
		||||
static void dumpAllHelp(int markdown)
 | 
			
		||||
{
 | 
			
		||||
  offline=3;
 | 
			
		||||
  printf("\n# Proxmark3 command dump\n\n");
 | 
			
		||||
  printf("Some commands are available only if a Proxmark is actually connected.\n");
 | 
			
		||||
  printf("\n%sProxmark3 command dump%s\n\n",markdown?"# ":"",markdown?"":"\n======================");
 | 
			
		||||
  printf("Some commands are available only if a Proxmark is actually connected.%s\n",markdown?"  ":"");
 | 
			
		||||
  printf("Check column \"offline\" for their availability.\n");
 | 
			
		||||
  printf("\n");
 | 
			
		||||
  command_t *cmds = getTopLevelCommandTable();
 | 
			
		||||
 | 
			
		||||
  dumpCommandsRecursive(cmds);
 | 
			
		||||
 | 
			
		||||
  dumpCommandsRecursive(cmds, markdown);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char* argv[]) {
 | 
			
		||||
| 
						 | 
				
			
			@ -234,17 +231,22 @@ int main(int argc, char* argv[]) {
 | 
			
		|||
	if (argc < 2) {
 | 
			
		||||
		printf("syntax: %s <port>\n\n",argv[0]);
 | 
			
		||||
		printf("\tLinux example:'%s /dev/ttyACM0'\n\n", argv[0]);
 | 
			
		||||
    printf("help:   %s -h\n\n", argv[0]);
 | 
			
		||||
    printf("\tDump all interactive help at once\n");
 | 
			
		||||
		printf("help:   %s -h\n\n", argv[0]);
 | 
			
		||||
		printf("\tDump all interactive help at once\n");
 | 
			
		||||
		printf("markdown:   %s -m\n\n", argv[0]);
 | 
			
		||||
		printf("\tDump all interactive help at once in markdown syntax\n");
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
  
 | 
			
		||||
  if (strcmp(argv[1], "-h") == 0) {
 | 
			
		||||
    printf("syntax: %s <port>\n\n",argv[0]);
 | 
			
		||||
    printf("\tLinux example:'%s /dev/ttyACM0'\n\n", argv[0]);
 | 
			
		||||
    dumpAllHelp();
 | 
			
		||||
    return 0;
 | 
			
		||||
  }  
 | 
			
		||||
	if (strcmp(argv[1], "-h") == 0) {
 | 
			
		||||
		printf("syntax: %s <port>\n\n",argv[0]);
 | 
			
		||||
		printf("\tLinux example:'%s /dev/ttyACM0'\n\n", argv[0]);
 | 
			
		||||
		dumpAllHelp(0);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	if (strcmp(argv[1], "-m") == 0) {
 | 
			
		||||
		dumpAllHelp(1);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	// Make sure to initialize
 | 
			
		||||
	struct main_loop_arg marg = {
 | 
			
		||||
		.usb_present = 0,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue