xd: changed -s option to switch to little-endian units
This commit is contained in:
parent
1225ebec71
commit
cd27c0cca2
2 changed files with 16 additions and 33 deletions
|
@ -73,7 +73,7 @@ Print file addresses in the given style (and size 4).
|
||||||
(Unbuffered) Flush the output buffer after each 16-byte sequence.
|
(Unbuffered) Flush the output buffer after each 16-byte sequence.
|
||||||
.TP
|
.TP
|
||||||
.B -s
|
.B -s
|
||||||
Reverse (swab) the order of bytes in each group of 4 before printing.
|
Switch to little-endian units.
|
||||||
.TP
|
.TP
|
||||||
.B -r
|
.B -r
|
||||||
Print repeating groups of identical 16-byte sequences as the first group
|
Print repeating groups of identical 16-byte sequences as the first group
|
||||||
|
|
|
@ -7,7 +7,7 @@ unsigned char data[16];
|
||||||
int ndata;
|
int ndata;
|
||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
int repeats;
|
int repeats;
|
||||||
int swizzle;
|
int le; /* little endian */
|
||||||
int flush;
|
int flush;
|
||||||
int abase=2;
|
int abase=2;
|
||||||
int xd(char *, int);
|
int xd(char *, int);
|
||||||
|
@ -79,7 +79,7 @@ main(int argc, char *argv[])
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(argv[0][0] == 's'){
|
if(argv[0][0] == 's'){
|
||||||
swizzle = 1;
|
le = 1;
|
||||||
if(argv[0][1])
|
if(argv[0][1])
|
||||||
goto Usage;
|
goto Usage;
|
||||||
continue;
|
continue;
|
||||||
|
@ -215,8 +215,6 @@ xd(char *name, int title)
|
||||||
if(ndata < 16)
|
if(ndata < 16)
|
||||||
for(i=ndata; i<16; i++)
|
for(i=ndata; i<16; i++)
|
||||||
data[i] = 0;
|
data[i] = 0;
|
||||||
if(swizzle)
|
|
||||||
swizz();
|
|
||||||
if(ndata==16 && repeats){
|
if(ndata==16 && repeats){
|
||||||
if(addr>0 && data[0]==odata[0]){
|
if(addr>0 && data[0]==odata[0]){
|
||||||
for(i=1; i<16; i++)
|
for(i=1; i<16; i++)
|
||||||
|
@ -255,29 +253,6 @@ xd(char *name, int title)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
swizz(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<4; i++){
|
|
||||||
p[0] = q[3];
|
|
||||||
p[1] = q[2];
|
|
||||||
p[2] = q[1];
|
|
||||||
p[3] = q[0];
|
|
||||||
p += 4;
|
|
||||||
q += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
fmt0(char *f)
|
fmt0(char *f)
|
||||||
{
|
{
|
||||||
|
@ -291,7 +266,8 @@ fmt1(char *f)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for(i=0; i<ndata; i+=sizeof(unsigned short))
|
for(i=0; i<ndata; i+=sizeof(unsigned short))
|
||||||
xprint(f, (data[i]<<8)|data[i+1]);
|
xprint(f, le ? (data[i+1]<<8)|data[i]
|
||||||
|
: (data[i]<<8)|data[i+1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -299,7 +275,8 @@ fmt2(char *f)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for(i=0; i<ndata; i+=sizeof(unsigned long))
|
for(i=0; i<ndata; i+=sizeof(unsigned long))
|
||||||
xprint(f, (data[i]<<24)|(data[i+1]<<16)|(data[i+2]<<8)|data[i+3]);
|
xprint(f, le ? (data[i+3]<<24)|(data[i+2]<<16)|(data[i+1]<<8)|data[i]
|
||||||
|
: (data[i]<<24)|(data[i+1]<<16)|(data[i+2]<<8)|data[i+3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -308,9 +285,15 @@ fmt3(char *f)
|
||||||
int i;
|
int i;
|
||||||
unsigned long long v;
|
unsigned long long v;
|
||||||
for(i=0; i<ndata; i+=sizeof(unsigned long long)){
|
for(i=0; i<ndata; i+=sizeof(unsigned long long)){
|
||||||
v = (data[i]<<24)|(data[i+1]<<16)|(data[i+2]<<8)|data[i+3];
|
if(le){
|
||||||
v <<= 32;
|
v = (data[i+3+4]<<24)|(data[i+2+4]<<16)|(data[i+1+4]<<8)|data[i+4];
|
||||||
v |= (data[i+4]<<24)|(data[i+1+4]<<16)|(data[i+2+4]<<8)|data[i+3+4];
|
v <<= 32;
|
||||||
|
v |= (data[i+3]<<24)|(data[i+2]<<16)|(data[i+1]<<8)|data[i];
|
||||||
|
}else{
|
||||||
|
v = (data[i]<<24)|(data[i+1]<<16)|(data[i+2]<<8)|data[i+3];
|
||||||
|
v <<= 32;
|
||||||
|
v |= (data[i+4]<<24)|(data[i+1+4]<<16)|(data[i+2+4]<<8)|data[i+3+4];
|
||||||
|
}
|
||||||
if(Bprint(&bout, f, v)<0){
|
if(Bprint(&bout, f, v)<0){
|
||||||
fprint(2, "xd: i/o error\n");
|
fprint(2, "xd: i/o error\n");
|
||||||
exits("i/o error");
|
exits("i/o error");
|
||||||
|
|
Loading…
Reference in a new issue