unsigned char odata[16];
unsigned char data[16];
int ndata;
unsigned long addr;
int repeats;
int le; /* little endian */
int flush;
int abase=2;
int xd(char *, int);
void xprint(char *, ...);
void initarg(void), swizz(void);
enum{
Narg=10
};
typedef struct Arg Arg;
typedef void fmtfn(char *);
struct Arg
{
int ascii; /* 0==none, 1==ascii */
int loglen; /* 0==1, 1==2, 2==4, 3==8 */
int base; /* 0==8, 1==10, 2==16 */
fmtfn *fn; /* function to call with data */
char *afmt; /* format to use to print address */
char *fmt; /* format to use to print data */
}arg[Narg];
int narg;
void
fmt1(char *f)
{
int i;
for(i=0; i<ndata; i+=sizeof(unsigned short))
xprint(f, le ? (data[i+1]<<8)|data[i]
: (data[i]<<8)|data[i+1]);
}
void
fmt2(char *f)
{
int i;
for(i=0; i<ndata; i+=sizeof(unsigned long))
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
fmt3(char *f)
{
int i;
unsigned long long v;
for(i=0; i<ndata; i+=sizeof(unsigned long long)){
if(le){
v = (data[i+3+4]<<24)|(data[i+2+4]<<16)|(data[i+1+4]<<8)|data[i+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){
fprint(2, "xd: i/o error\n");
exits("i/o error");
}
}
}
void
fmtc(char *f)
{
int i;
USED(f);
for(i=0; i<ndata; i++)
switch(data[i]){
case '\t':
xprint(cfmt[1][2], "\\t");
break;
case '\r':
xprint(cfmt[1][2], "\\r");
break;
case '\n':
xprint(cfmt[1][2], "\\n");
break;
case '\b':
xprint(cfmt[1][2], "\\b");
break;
default:
if(data[i]>=0x7F || ' '>data[i])
xprint(cfmt[2][2], data[i]);
else
xprint(cfmt[0][2], data[i]);
break;
}
}