| /* ----------------------------------------------------------------------- * |
| * |
| * Copyright 2007-2008 H. Peter Anvin - All Rights Reserved |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation, Inc., 53 Temple Place Ste 330, |
| * Boston MA 02111-1307, USA; either version 2 of the License, or |
| * (at your option) any later version; incorporated herein by reference. |
| * |
| * ----------------------------------------------------------------------- */ |
| |
| /* |
| * advdump.c |
| * |
| * Dump the contents of the syslinux ADV |
| */ |
| |
| #include <stdio.h> |
| #include <console.h> |
| #include <syslinux/adv.h> |
| #include <string.h> |
| |
| int main(void) |
| { |
| uint8_t *p, *ep; |
| size_t s = syslinux_adv_size(); |
| char buf[256]; |
| |
| #if 0 |
| /* this hangs! */ |
| openconsole(&dev_stdcon_r, &dev_stdcon_w); |
| #else |
| /* this works */ |
| openconsole(&dev_rawcon_r, &dev_ansiserial_w); |
| #endif |
| |
| p = syslinux_adv_ptr(); |
| |
| printf("ADV size: %zd bytes at %p\n", s, p); |
| |
| ep = p + s; /* Need at least opcode+len */ |
| while (p < ep - 1 && *p) { |
| int t = *p++; |
| int l = *p++; |
| |
| if (p + l > ep) |
| break; |
| |
| memcpy(buf, p, l); |
| buf[l] = '\0'; |
| |
| printf("ADV %3d: \"%s\"\n", t, buf); |
| |
| p += l; |
| } |
| |
| return 0; |
| } |