1 /* ----------------------------------------------------------------------- * 2 * 3 * Copyright 2007-2008 H. Peter Anvin - All Rights Reserved 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, Inc., 53 Temple Place Ste 330, 8 * Boston MA 02111-1307, USA; either version 2 of the License, or 9 * (at your option) any later version; incorporated herein by reference. 10 * 11 * ----------------------------------------------------------------------- */ 12 13 /* 14 * advdump.c 15 * 16 * Dump the contents of the syslinux ADV 17 */ 18 19 #include <stdio.h> 20 #include <console.h> 21 #include <syslinux/adv.h> 22 #include <string.h> 23 24 int main(void) 25 { 26 uint8_t *p, *ep; 27 size_t s = syslinux_adv_size(); 28 char buf[256]; 29 30 #if 0 31 /* this hangs! */ 32 openconsole(&dev_stdcon_r, &dev_stdcon_w); 33 #else 34 /* this works */ 35 openconsole(&dev_rawcon_r, &dev_ansiserial_w); 36 #endif 37 38 p = syslinux_adv_ptr(); 39 40 printf("ADV size: %zd bytes at %p\n", s, p); 41 42 ep = p + s; /* Need at least opcode+len */ 43 while (p < ep - 1 && *p) { 44 int t = *p++; 45 int l = *p++; 46 47 if (p + l > ep) 48 break; 49 50 memcpy(buf, p, l); 51 buf[l] = '\0'; 52 53 printf("ADV %3d: \"%s\"\n", t, buf); 54 55 p += l; 56 } 57 58 return 0; 59 } 60