#include "os.h"
#include "common/get.h"
#include "common/print.h"
#include "common/mopdef.h"
void
mopDumpDL(FILE *fd, u_char *pkt, int trans)
{
int i, idx = 0;
long tmpl;
u_char tmpc, c, program[17], code, *ucp;
u_short len, tmps, moplen;
len = mopGetLength(pkt, trans);
switch (trans) {
case TRANS_8023:
idx = 22;
moplen = len - 8;
break;
default:
idx = 16;
moplen = len;
}
code = mopGetChar(pkt, &idx);
switch (code) {
case MOP_K_CODE_MLT:
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Load Number : %02x\n", tmpc);
if (moplen > 6) {
tmpl = mopGetLong(pkt, &idx);
fprintf(fd, "Load Address : %08lx\n", tmpl);
}
if (moplen > 10) {
for (i = 0; i < (moplen - 10); i++) {
if ((i % 16) == 0) {
if ((i / 16) == 0)
fprintf(fd,
"Image Data : %04x ",
moplen-10);
else
fprintf(fd,
" ");
}
fprintf(fd, "%02x ", mopGetChar(pkt, &idx));
if ((i % 16) == 15)
fprintf(fd, "\n");
}
if ((i % 16) != 15)
fprintf(fd, "\n");
}
tmpl = mopGetLong(pkt, &idx);
fprintf(fd, "Xfer Address : %08lx\n", tmpl);
break;
case MOP_K_CODE_DCM:
break;
case MOP_K_CODE_MLD:
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Load Number : %02x\n", tmpc);
tmpl = mopGetLong(pkt, &idx);
fprintf(fd, "Load Address : %08lx\n", tmpl);
if (moplen > 6) {
for (i = 0; i < (moplen - 6); i++) {
if ((i % 16) == 0) {
if ((i / 16) == 0)
fprintf(fd,
"Image Data : %04x ",
moplen-6);
else
fprintf(fd,
" ");
}
fprintf(fd, "%02x ", mopGetChar(pkt, &idx));
if ((i % 16) == 15)
fprintf(fd, "\n");
}
if ((i % 16) != 15)
fprintf(fd, "\n");
}
break;
case MOP_K_CODE_ASV:
break;
case MOP_K_CODE_RMD:
tmpl = mopGetLong(pkt, &idx);
fprintf(fd, "Mem Address : %08lx\n", tmpl);
tmps = mopGetShort(pkt, &idx);
fprintf(fd, "Count : %04x (%d)\n", tmps, tmps);
break;
case MOP_K_CODE_RPR:
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Device Type : %02x ", tmpc);
mopPrintDevice(fd, tmpc);
fprintf(fd, "\n");
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Format : %02x\n", tmpc);
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Program Type : %02x ", tmpc);
mopPrintPGTY(fd, tmpc);
fprintf(fd, "\n");
program[0] = 0;
tmpc = mopGetChar(pkt, &idx);
for (i = 0; i < tmpc; i++) {
program[i] = mopGetChar(pkt, &idx);
program[i + 1] = '\0';
}
fprintf(fd, "Software : %02x '%s'\n", tmpc, program);
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Processor : %02x ", tmpc);
mopPrintBPTY(fd, tmpc);
fprintf(fd, "\n");
mopPrintInfo(fd, pkt, &idx, moplen, code, trans);
break;
case MOP_K_CODE_RML:
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Load Number : %02x\n", tmpc);
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Error : %02x (", tmpc);
if (tmpc == 0)
fprintf(fd, "no error)\n");
else
fprintf(fd, "error)\n");
break;
case MOP_K_CODE_RDS:
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Device Type : %02x ", tmpc);
mopPrintDevice(fd, tmpc);
fprintf(fd, "\n");
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Format : %02x\n", tmpc);
tmpl = mopGetLong(pkt, &idx);
fprintf(fd, "Memory Size : %08lx\n", tmpl);
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Bits : %02x\n", tmpc);
mopPrintInfo(fd, pkt, &idx, moplen, code, trans);
break;
case MOP_K_CODE_MDD:
tmpl = mopGetLong(pkt, &idx);
fprintf(fd, "Mem Address : %08lx\n", tmpl);
if (moplen > 5) {
for (i = 0; i < (moplen - 5); i++) {
if ((i % 16) == 0) {
if ((i / 16) == 0)
fprintf(fd,
"Image Data : %04x ",
moplen-5);
else
fprintf(fd,
" ");
}
fprintf(fd, "%02x ", mopGetChar(pkt, &idx));
if ((i % 16) == 15)
fprintf(fd, "\n");
}
if ((i % 16) != 15)
fprintf(fd, "\n");
}
break;
case MOP_K_CODE_PLT:
tmpc = mopGetChar(pkt, &idx);
fprintf(fd, "Load Number : %02x\n", tmpc);
tmpc = mopGetChar(pkt, &idx);
while (tmpc != MOP_K_PLTP_END) {
c = mopGetChar(pkt, &idx);
switch (tmpc) {
case MOP_K_PLTP_TSN:
fprintf(fd, "Target Name : %02x '", c);
for (i = 0; i < c; i++)
fprintf(fd, "%c",
mopGetChar(pkt, &idx));
fprintf(fd, "'\n");
break;
case MOP_K_PLTP_TSA:
fprintf(fd, "Target Addr : %02x ", c);
for (i = 0; i < c; i++)
fprintf(fd, "%02x ",
mopGetChar(pkt, &idx));
fprintf(fd, "\n");
break;
case MOP_K_PLTP_HSN:
fprintf(fd, "Host Name : %02x '", c);
for (i = 0; i < c; i++)
fprintf(fd, "%c",
mopGetChar(pkt, &idx));
fprintf(fd, "'\n");
break;
case MOP_K_PLTP_HSA:
fprintf(fd, "Host Addr : %02x ", c);
for (i = 0; i < c; i++)
fprintf(fd, "%02x ",
mopGetChar(pkt, &idx));
fprintf(fd, "\n");
break;
case MOP_K_PLTP_HST:
ucp = pkt + idx; idx = idx + 10;
fprintf(fd, "Host Time : ");
mopPrintTime(fd, ucp);
fprintf(fd, "\n");
break;
default:
break;
}
tmpc = mopGetChar(pkt, &idx);
}
tmpl = mopGetLong(pkt, &idx);
fprintf(fd, "Transfer Addr: %08lx\n", tmpl);
break;
default:
break;
}
}