diff options
-rw-r--r-- | man/man1/xd.1 | 3 | ||||
-rw-r--r-- | src/cmd/xd.c | 36 |
2 files changed, 39 insertions, 0 deletions
diff --git a/man/man1/xd.1 b/man/man1/xd.1 index 10307aa0..9d43a750 100644 --- a/man/man1/xd.1 +++ b/man/man1/xd.1 @@ -75,6 +75,9 @@ Print file addresses in the given style (and size 4). .B -s Reverse (swab) the order of bytes in each group of 4 before printing. .TP +.B -S +Reverse the order of bytes in each group of 8 before printing. +.TP .B -r Print repeating groups of identical 16-byte sequences as the first group followed by an asterisk. diff --git a/src/cmd/xd.c b/src/cmd/xd.c index 3e8ba5d3..7be55b21 100644 --- a/src/cmd/xd.c +++ b/src/cmd/xd.c @@ -8,6 +8,7 @@ int ndata; unsigned long addr; int repeats; int swizzle; +int swizzle8; int flush; int abase=2; int xd(char *, int); @@ -83,6 +84,12 @@ main(int argc, char *argv[]) goto Usage; continue; } + if(argv[0][0] == 'S'){ + swizzle8 = 1; + if(argv[0][1]) + goto Usage; + continue; + } if(argv[0][0] == 'u'){ flush = 1; if(argv[0][1]) @@ -215,6 +222,8 @@ xd(char *name, int title) data[i] = 0; if(swizzle) swizz(); + if(swizzle8) + swizz8(); if(ndata==16 && repeats){ if(addr>0 && data[0]==odata[0]){ for(i=1; i<16; i++) @@ -277,6 +286,33 @@ swizz(void) } void +swizz8(void) +{ + uchar *p, *q; + int i; + uchar swdata[16]; + + p = data; + q = swdata; + for(i=0; i<16; i++) + *q++ = *p++; + p = data; + q = swdata; + for(i=0; i<8; i++){ + p[0] = q[7]; + p[1] = q[6]; + p[2] = q[5]; + p[3] = q[4]; + p[4] = q[3]; + p[5] = q[2]; + p[6] = q[1]; + p[7] = q[0]; + p += 8; + q += 8; + } +} + +void fmt0(char *f) { int i; |