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