forked from aniani/vim
patch 9.0.0008: cannot specify the variable name for "xxd -i"
Problem: Cannot specify the variable name for "xxd -i". Solution: Add the "-name" argument. (David Gow, closes #10599)
This commit is contained in:
committed by
Bram Moolenaar
parent
84f5463630
commit
83e11800cc
@@ -113,6 +113,10 @@ Stop after writing
|
|||||||
.RI < len >
|
.RI < len >
|
||||||
octets.
|
octets.
|
||||||
.TP
|
.TP
|
||||||
|
.I "\-n name " | " \-name name"
|
||||||
|
Override the variable name output when \-i is used. The array is named
|
||||||
|
\fIname\fP and the length is named \fIname\fP_len.
|
||||||
|
.TP
|
||||||
.I \-o offset
|
.I \-o offset
|
||||||
Add
|
Add
|
||||||
.RI < offset >
|
.RI < offset >
|
||||||
|
@@ -219,6 +219,53 @@ func Test_xxd()
|
|||||||
call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
|
call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
" Test 17: Print C include with custom variable name
|
||||||
|
let s:test += 1
|
||||||
|
call writefile(['TESTabcd09'], 'XXDfile')
|
||||||
|
for arg in ['-nvarName', '-n varName', '-name varName']
|
||||||
|
%d
|
||||||
|
exe '0r! ' . s:xxd_cmd . ' -i ' . arg . ' XXDfile'
|
||||||
|
$d
|
||||||
|
let expected =<< trim [CODE]
|
||||||
|
unsigned char varName[] = {
|
||||||
|
0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a
|
||||||
|
};
|
||||||
|
unsigned int varName_len = 11;
|
||||||
|
[CODE]
|
||||||
|
|
||||||
|
call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" using "-n name" reading from stdin
|
||||||
|
%d
|
||||||
|
exe '0r! ' . s:xxd_cmd . ' -i < XXDfile -n StdIn'
|
||||||
|
$d
|
||||||
|
let expected =<< trim [CODE]
|
||||||
|
unsigned char StdIn[] = {
|
||||||
|
0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a
|
||||||
|
};
|
||||||
|
unsigned int StdIn_len = 11;
|
||||||
|
[CODE]
|
||||||
|
call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
|
||||||
|
|
||||||
|
|
||||||
|
" Test 18: Print C include: custom variable names can be capitalized
|
||||||
|
let s:test += 1
|
||||||
|
for arg in ['-C', '-capitalize']
|
||||||
|
call writefile(['TESTabcd09'], 'XXDfile')
|
||||||
|
%d
|
||||||
|
exe '0r! ' . s:xxd_cmd . ' -i ' . arg . ' -n varName XXDfile'
|
||||||
|
$d
|
||||||
|
let expected =<< trim [CODE]
|
||||||
|
unsigned char VARNAME[] = {
|
||||||
|
0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a
|
||||||
|
};
|
||||||
|
unsigned int VARNAME_LEN = 11;
|
||||||
|
[CODE]
|
||||||
|
call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
|
||||||
|
endfor
|
||||||
|
|
||||||
|
|
||||||
%d
|
%d
|
||||||
bwipe!
|
bwipe!
|
||||||
call delete('XXDfile')
|
call delete('XXDfile')
|
||||||
|
@@ -735,6 +735,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
8,
|
||||||
/**/
|
/**/
|
||||||
7,
|
7,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -55,6 +55,7 @@
|
|||||||
* 11.01.2019 Add full 64/32 bit range to -o and output by Christer Jensen.
|
* 11.01.2019 Add full 64/32 bit range to -o and output by Christer Jensen.
|
||||||
* 04.02.2020 Add -d for decimal offsets by Aapo Rantalainen
|
* 04.02.2020 Add -d for decimal offsets by Aapo Rantalainen
|
||||||
* 14.01.2022 Disable extra newlines with -c0 -p by Erik Auerswald.
|
* 14.01.2022 Disable extra newlines with -c0 -p by Erik Auerswald.
|
||||||
|
* 20.06.2022 Permit setting the variable names used by -i by David Gow
|
||||||
*
|
*
|
||||||
* (c) 1990-1998 by Juergen Weigert (jnweiger@gmail.com)
|
* (c) 1990-1998 by Juergen Weigert (jnweiger@gmail.com)
|
||||||
*
|
*
|
||||||
@@ -226,6 +227,7 @@ exit_with_usage(void)
|
|||||||
fprintf(stderr, " -h print this summary.\n");
|
fprintf(stderr, " -h print this summary.\n");
|
||||||
fprintf(stderr, " -i output in C include file style.\n");
|
fprintf(stderr, " -i output in C include file style.\n");
|
||||||
fprintf(stderr, " -l len stop after <len> octets.\n");
|
fprintf(stderr, " -l len stop after <len> octets.\n");
|
||||||
|
fprintf(stderr, " -n name set the variable name used in C include output (-i).\n");
|
||||||
fprintf(stderr, " -o off add <off> to the displayed file position.\n");
|
fprintf(stderr, " -o off add <off> to the displayed file position.\n");
|
||||||
fprintf(stderr, " -ps output in postscript plain hexdump style.\n");
|
fprintf(stderr, " -ps output in postscript plain hexdump style.\n");
|
||||||
fprintf(stderr, " -r reverse operation: convert (or patch) hexdump into binary.\n");
|
fprintf(stderr, " -r reverse operation: convert (or patch) hexdump into binary.\n");
|
||||||
@@ -497,6 +499,7 @@ main(int argc, char *argv[])
|
|||||||
unsigned long displayoff = 0;
|
unsigned long displayoff = 0;
|
||||||
static char l[LLEN+1]; /* static because it may be too big for stack */
|
static char l[LLEN+1]; /* static because it may be too big for stack */
|
||||||
char *pp;
|
char *pp;
|
||||||
|
char *varname = NULL;
|
||||||
int addrlen = 9;
|
int addrlen = 9;
|
||||||
|
|
||||||
#ifdef AMIGA
|
#ifdef AMIGA
|
||||||
@@ -635,6 +638,19 @@ main(int argc, char *argv[])
|
|||||||
argc--;
|
argc--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (!STRNCMP(pp, "-n", 2))
|
||||||
|
{
|
||||||
|
if (pp[2] && STRNCMP("ame", pp + 2, 3))
|
||||||
|
varname = pp + 2;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!argv[2])
|
||||||
|
exit_with_usage();
|
||||||
|
varname = argv[2];
|
||||||
|
argv++;
|
||||||
|
argc--;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (!strcmp(pp, "--")) /* end of options */
|
else if (!strcmp(pp, "--")) /* end of options */
|
||||||
{
|
{
|
||||||
argv++;
|
argv++;
|
||||||
@@ -753,10 +769,14 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (hextype == HEX_CINCLUDE)
|
if (hextype == HEX_CINCLUDE)
|
||||||
{
|
{
|
||||||
if (fp != stdin)
|
/* A user-set variable name overrides fp == stdin */
|
||||||
|
if (varname == NULL && fp != stdin)
|
||||||
|
varname = argv[1];
|
||||||
|
|
||||||
|
if (varname != NULL)
|
||||||
{
|
{
|
||||||
FPRINTF_OR_DIE((fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : ""));
|
FPRINTF_OR_DIE((fpo, "unsigned char %s", isdigit((int)varname[0]) ? "__" : ""));
|
||||||
for (e = 0; (c = argv[1][e]) != 0; e++)
|
for (e = 0; (c = varname[e]) != 0; e++)
|
||||||
putc_or_die(isalnum(c) ? CONDITIONAL_CAPITALIZE(c) : '_', fpo);
|
putc_or_die(isalnum(c) ? CONDITIONAL_CAPITALIZE(c) : '_', fpo);
|
||||||
fputs_or_die("[] = {\n", fpo);
|
fputs_or_die("[] = {\n", fpo);
|
||||||
}
|
}
|
||||||
@@ -773,11 +793,11 @@ main(int argc, char *argv[])
|
|||||||
if (p)
|
if (p)
|
||||||
fputs_or_die("\n", fpo);
|
fputs_or_die("\n", fpo);
|
||||||
|
|
||||||
if (fp != stdin)
|
if (varname != NULL)
|
||||||
{
|
{
|
||||||
fputs_or_die("};\n", fpo);
|
fputs_or_die("};\n", fpo);
|
||||||
FPRINTF_OR_DIE((fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : ""));
|
FPRINTF_OR_DIE((fpo, "unsigned int %s", isdigit((int)varname[0]) ? "__" : ""));
|
||||||
for (e = 0; (c = argv[1][e]) != 0; e++)
|
for (e = 0; (c = varname[e]) != 0; e++)
|
||||||
putc_or_die(isalnum(c) ? CONDITIONAL_CAPITALIZE(c) : '_', fpo);
|
putc_or_die(isalnum(c) ? CONDITIONAL_CAPITALIZE(c) : '_', fpo);
|
||||||
FPRINTF_OR_DIE((fpo, "_%s = %d;\n", capitalize ? "LEN" : "len", p));
|
FPRINTF_OR_DIE((fpo, "_%s = %d;\n", capitalize ? "LEN" : "len", p));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user