dl.c revision 1.1
1/* 2 * Copyright (c) 1993-95 Mats O Jansson. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 3. All advertising materials mentioning features or use of this software 13 * must display the following acknowledgement: 14 * This product includes software developed by Mats O Jansson. 15 * 4. The name of the author may not be used to endorse or promote products 16 * derived from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30#ifndef LINT 31static char rcsid[] = "$Id: dl.c,v 1.1 1997/03/16 22:23:36 cjs Exp $"; 32#endif 33 34#include "os.h" 35#include "common/get.h" 36#include "common/print.h" 37#include "common/mopdef.h" 38 39void 40mopDumpDL(fd, pkt, trans) 41 FILE *fd; 42 u_char *pkt; 43 int trans; 44{ 45 int i,index = 0; 46 long tmpl; 47 u_char tmpc,c,program[17],code,*ucp; 48 u_short len,tmps,moplen; 49 50 len = mopGetLength(pkt, trans); 51 52 switch (trans) { 53 case TRANS_8023: 54 index = 22; 55 moplen = len - 8; 56 break; 57 default: 58 index = 16; 59 moplen = len; 60 } 61 code = mopGetChar(pkt,&index); 62 63 switch (code) { 64 case MOP_K_CODE_MLT: 65 66 tmpc = mopGetChar(pkt,&index); /* Load Number */ 67 (void)fprintf(fd,"Load Number : %02x\n",tmpc); 68 69 if (moplen > 6) { 70 tmpl = mopGetLong(pkt,&index);/* Load Address */ 71 (void)fprintf(fd,"Load Address : %08x\n",tmpl); 72 } 73 74 if (moplen > 10) { 75#ifndef SHORT_PRINT 76 for (i = 0; i < (moplen - 10); i++) { 77 if ((i % 16) == 0) { 78 if ((i / 16) == 0) { 79 (void)fprintf(fd, 80 "Image Data : %04x ", 81 moplen-10); 82 } else { 83 (void)fprintf(fd, 84 " "); 85 } 86 } 87 88 (void)fprintf(fd, "%02x ", 89 mopGetChar(pkt,&index)); 90 if ((i % 16) == 15) 91 (void)fprintf(fd,"\n"); 92 } 93 94 if ((i % 16) != 15) 95 (void)fprintf(fd,"\n"); 96#else 97 index = index + moplen - 10; 98#endif 99 } 100 101 tmpl = mopGetLong(pkt,&index); /* Load Address */ 102 (void)fprintf(fd,"Xfer Address : %08x\n",tmpl); 103 104 break; 105 case MOP_K_CODE_DCM: 106 107 /* Empty Message */ 108 109 break; 110 case MOP_K_CODE_MLD: 111 112 tmpc = mopGetChar(pkt,&index); /* Load Number */ 113 (void)fprintf(fd,"Load Number : %02x\n",tmpc); 114 115 tmpl = mopGetLong(pkt,&index); /* Load Address */ 116 (void)fprintf(fd,"Load Address : %08x\n",tmpl); 117 118 if (moplen > 6) { 119#ifndef SHORT_PRINT 120 for (i = 0; i < (moplen - 6); i++) { 121 if ((i % 16) == 0) { 122 if ((i / 16) == 0) { 123 (void)fprintf(fd, 124 "Image Data : %04x ", 125 moplen-6); 126 } else { 127 (void)fprintf(fd, 128 " "); 129 } 130 } 131 (void)fprintf(fd,"%02x ", 132 mopGetChar(pkt,&index)); 133 if ((i % 16) == 15) 134 (void)fprintf(fd,"\n"); 135 } 136 137 if ((i % 16) != 15) 138 (void)fprintf(fd,"\n"); 139#else 140 index = index + moplen - 6; 141#endif 142 } 143 144 break; 145 case MOP_K_CODE_ASV: 146 147 /* Empty Message */ 148 149 break; 150 case MOP_K_CODE_RMD: 151 152 tmpl = mopGetLong(pkt,&index); /* Memory Address */ 153 (void)fprintf(fd,"Mem Address : %08x\n",tmpl); 154 155 tmps = mopGetShort(pkt,&index); /* Count */ 156 (void)fprintf(fd,"Count : %04x (%d)\n",tmps,tmps); 157 158 break; 159 case MOP_K_CODE_RPR: 160 161 tmpc = mopGetChar(pkt,&index); /* Device Type */ 162 (void)fprintf(fd, "Device Type : %02x ",tmpc); 163 mopPrintDevice(fd, tmpc); (void)fprintf(fd, "\n"); 164 165 tmpc = mopGetChar(pkt,&index); /* Format Version */ 166 (void)fprintf(fd,"Format : %02x\n",tmpc); 167 168 tmpc = mopGetChar(pkt,&index); /* Program Type */ 169 (void)fprintf(fd,"Program Type : %02x ",tmpc); 170 mopPrintPGTY(fd, tmpc); (void)fprintf(fd, "\n"); 171 172 program[0] = 0; 173 tmpc = mopGetChar(pkt,&index); /* Software ID Len */ 174 for (i = 0; i < tmpc; i++) { 175 program[i] = mopGetChar(pkt,&index); 176 program[i+1] = '\0'; 177 } 178 179 (void)fprintf(fd,"Software : %02x '%s'\n",tmpc,program); 180 181 tmpc = mopGetChar(pkt,&index); /* Processor */ 182 (void)fprintf(fd,"Processor : %02x ",tmpc); 183 mopPrintBPTY(fd, tmpc); (void)fprintf(fd, "\n"); 184 185 mopPrintInfo(fd, pkt, &index, moplen, code, trans); 186 187 break; 188 case MOP_K_CODE_RML: 189 190 tmpc = mopGetChar(pkt,&index); /* Load Number */ 191 (void)fprintf(fd,"Load Number : %02x\n",tmpc); 192 193 tmpc = mopGetChar(pkt,&index); /* Error */ 194 (void)fprintf(fd,"Error : %02x (",tmpc); 195 if ((tmpc == 0)) { 196 (void)fprintf(fd,"no error)\n"); 197 } else { 198 (void)fprintf(fd,"error)\n"); 199 } 200 201 break; 202 case MOP_K_CODE_RDS: 203 204 tmpc = mopGetChar(pkt,&index); /* Device Type */ 205 (void)fprintf(fd, "Device Type : %02x ",tmpc); 206 mopPrintDevice(fd, tmpc); (void)fprintf(fd, "\n"); 207 208 tmpc = mopGetChar(pkt,&index); /* Format Version */ 209 (void)fprintf(fd,"Format : %02x\n",tmpc); 210 211 tmpl = mopGetLong(pkt,&index); /* Memory Size */ 212 (void)fprintf(fd,"Memory Size : %08x\n",tmpl); 213 214 tmpc = mopGetChar(pkt,&index); /* Bits */ 215 (void)fprintf(fd,"Bits : %02x\n",tmpc); 216 217 mopPrintInfo(fd, pkt, &index, moplen, code, trans); 218 219 break; 220 case MOP_K_CODE_MDD: 221 222 tmpl = mopGetLong(pkt,&index); /* Memory Address */ 223 (void)fprintf(fd,"Mem Address : %08x\n",tmpl); 224 225 if (moplen > 5) { 226#ifndef SHORT_PRINT 227 for (i = 0; i < (moplen - 5); i++) { 228 if ((i % 16) == 0) { 229 if ((i / 16) == 0) { 230 (void)fprintf(fd, 231 "Image Data : %04x ", 232 moplen-5); 233 } else { 234 (void)fprintf(fd, 235 " "); 236 } 237 } 238 (void)fprintf(fd,"%02x ", 239 mopGetChar(pkt,&index)); 240 if ((i % 16) == 15) 241 (void)fprintf(fd,"\n"); 242 } 243 if ((i % 16) != 15) 244 (void)fprintf(fd,"\n"); 245#else 246 index = index + moplen - 5; 247#endif 248 } 249 250 break; 251 case MOP_K_CODE_PLT: 252 253 tmpc = mopGetChar(pkt,&index); /* Load Number */ 254 (void)fprintf(fd,"Load Number : %02x\n",tmpc); 255 256 tmpc = mopGetChar(pkt,&index); /* Parameter Type */ 257 while (tmpc != MOP_K_PLTP_END) { 258 c = mopGetChar(pkt,&index); /* Parameter Length */ 259 switch(tmpc) { 260 case MOP_K_PLTP_TSN: /* Target Name */ 261 (void)fprintf(fd,"Target Name : %02x '", 262 tmpc); 263 for (i = 0; i < ((int) c); i++) { 264 (void)fprintf(fd,"%c", 265 mopGetChar(pkt,&index)); 266 } 267 (void)fprintf(fd,"'\n"); 268 break; 269 case MOP_K_PLTP_TSA: /* Target Address */ 270 (void)fprintf(fd,"Target Addr : %02x ",c); 271 for (i = 0; i < ((int) c); i++) { 272 (void)fprintf(fd,"%02x ", 273 mopGetChar(pkt,&index)); 274 } 275 (void)fprintf(fd,"\n"); 276 break; 277 case MOP_K_PLTP_HSN: /* Host Name */ 278 (void)fprintf(fd,"Host Name : %02x '", 279 tmpc); 280 for (i = 0; i < ((int) c); i++) { 281 (void)fprintf(fd,"%c", 282 mopGetChar(pkt,&index)); 283 } 284 (void)fprintf(fd,"'\n"); 285 break; 286 case MOP_K_PLTP_HSA: /* Host Address */ 287 (void)fprintf(fd,"Host Addr : %02x ",c); 288 for (i = 0; i < ((int) c); i++) { 289 (void)fprintf(fd,"%02x ", 290 mopGetChar(pkt,&index)); 291 } 292 (void)fprintf(fd,"\n"); 293 break; 294 case MOP_K_PLTP_HST: /* Host Time */ 295 ucp = pkt + index; index = index + 10; 296 (void)fprintf(fd,"Host Time : "); 297 mopPrintTime(fd, ucp); 298 (void)fprintf(fd,"\n"); 299 break; 300 default: 301 break; 302 } 303 tmpc = mopGetChar(pkt,&index);/* Parameter Type */ 304 } 305 306 tmpl = mopGetLong(pkt,&index); /* Transfer Address */ 307 (void)fprintf(fd,"Transfer Addr: %08x\n",tmpl); 308 309 break; 310 default: 311 break; 312 } 313} 314 315 316