syslinux-3.08-2 sources from FC4 fedora fedora
Mark Huang [Mon, 3 Apr 2006 19:33:23 +0000 (19:33 +0000)]
465 files changed:
syslinux/.depend [new file with mode: 0644]
syslinux/BUGS [new file with mode: 0644]
syslinux/COPYING [new file with mode: 0644]
syslinux/Makefile [new file with mode: 0644]
syslinux/NEWS [new file with mode: 0644]
syslinux/README [new file with mode: 0644]
syslinux/README.menu [new file with mode: 0644]
syslinux/README.usbkey [new file with mode: 0644]
syslinux/TODO [new file with mode: 0644]
syslinux/bcopy32.inc [new file with mode: 0644]
syslinux/bin2c.pl [new file with mode: 0644]
syslinux/bin2hex.pl [new file with mode: 0755]
syslinux/bios.inc [new file with mode: 0644]
syslinux/bootsect.inc [new file with mode: 0644]
syslinux/cache.inc [new file with mode: 0644]
syslinux/checksumiso.pl [new file with mode: 0755]
syslinux/cmdline.inc [new file with mode: 0644]
syslinux/com32.inc [new file with mode: 0644]
syslinux/com32/LICENCE [new file with mode: 0644]
syslinux/com32/Makefile [new file with mode: 0644]
syslinux/com32/include/bitsize/limits.h [new file with mode: 0644]
syslinux/com32/include/bitsize/stddef.h [new file with mode: 0644]
syslinux/com32/include/bitsize/stdint.h [new file with mode: 0644]
syslinux/com32/include/bitsize/stdintconst.h [new file with mode: 0644]
syslinux/com32/include/bitsize/stdintlimits.h [new file with mode: 0644]
syslinux/com32/include/com32.h [new file with mode: 0644]
syslinux/com32/include/console.h [new file with mode: 0644]
syslinux/com32/include/ctype.h [new file with mode: 0644]
syslinux/com32/include/dev.h [new file with mode: 0644]
syslinux/com32/include/errno.h [new file with mode: 0644]
syslinux/com32/include/fcntl.h [new file with mode: 0644]
syslinux/com32/include/inttypes.h [new file with mode: 0644]
syslinux/com32/include/klibc/compiler.h [new file with mode: 0644]
syslinux/com32/include/klibc/diverr.h [new file with mode: 0644]
syslinux/com32/include/klibc/extern.h [new file with mode: 0644]
syslinux/com32/include/klibc/sysconfig.h [new file with mode: 0644]
syslinux/com32/include/limits.h [new file with mode: 0644]
syslinux/com32/include/minmax.h [new file with mode: 0644]
syslinux/com32/include/netinet/in.h [new file with mode: 0644]
syslinux/com32/include/png.h [new file with mode: 0644]
syslinux/com32/include/pngconf.h [new file with mode: 0644]
syslinux/com32/include/stdarg.h [new file with mode: 0644]
syslinux/com32/include/stdbool.h [new file with mode: 0644]
syslinux/com32/include/stddef.h [new file with mode: 0644]
syslinux/com32/include/stdint.h [new file with mode: 0644]
syslinux/com32/include/stdio.h [new file with mode: 0644]
syslinux/com32/include/stdlib.h [new file with mode: 0644]
syslinux/com32/include/string.h [new file with mode: 0644]
syslinux/com32/include/sys/cpu.h [new file with mode: 0644]
syslinux/com32/include/sys/io.h [new file with mode: 0644]
syslinux/com32/include/sys/pci.h [new file with mode: 0644]
syslinux/com32/include/sys/stat.h [new file with mode: 0644]
syslinux/com32/include/sys/times.h [new file with mode: 0644]
syslinux/com32/include/sys/types.h [new file with mode: 0644]
syslinux/com32/include/syslinux.h [new file with mode: 0644]
syslinux/com32/include/time.h [new file with mode: 0644]
syslinux/com32/include/unistd.h [new file with mode: 0644]
syslinux/com32/include/zconf.h [new file with mode: 0644]
syslinux/com32/include/zlib.h [new file with mode: 0644]
syslinux/com32/lib/MCONFIG [new file with mode: 0644]
syslinux/com32/lib/Makefile [new file with mode: 0644]
syslinux/com32/lib/abort.c [new file with mode: 0644]
syslinux/com32/lib/asprintf.c [new file with mode: 0644]
syslinux/com32/lib/atexit.c [new file with mode: 0644]
syslinux/com32/lib/atexit.h [new file with mode: 0644]
syslinux/com32/lib/atoi.c [new file with mode: 0644]
syslinux/com32/lib/atol.c [new file with mode: 0644]
syslinux/com32/lib/atoll.c [new file with mode: 0644]
syslinux/com32/lib/atox.c [new file with mode: 0644]
syslinux/com32/lib/calloc.c [new file with mode: 0644]
syslinux/com32/lib/com32.ld [new file with mode: 0644]
syslinux/com32/lib/creat.c [new file with mode: 0644]
syslinux/com32/lib/ctypes.c [new file with mode: 0644]
syslinux/com32/lib/errno.c [new file with mode: 0644]
syslinux/com32/lib/exit.c [new file with mode: 0644]
syslinux/com32/lib/fgetc.c [new file with mode: 0644]
syslinux/com32/lib/fgets.c [new file with mode: 0644]
syslinux/com32/lib/fopen.c [new file with mode: 0644]
syslinux/com32/lib/fopendev.c [new file with mode: 0644]
syslinux/com32/lib/fprintf.c [new file with mode: 0644]
syslinux/com32/lib/fputc.c [new file with mode: 0644]
syslinux/com32/lib/fputs.c [new file with mode: 0644]
syslinux/com32/lib/fread.c [new file with mode: 0644]
syslinux/com32/lib/fread2.c [new file with mode: 0644]
syslinux/com32/lib/free.c [new file with mode: 0644]
syslinux/com32/lib/fwrite.c [new file with mode: 0644]
syslinux/com32/lib/fwrite2.c [new file with mode: 0644]
syslinux/com32/lib/getopt.c [new file with mode: 0644]
syslinux/com32/lib/init.h [new file with mode: 0644]
syslinux/com32/lib/libgcc/__ashldi3.S [new file with mode: 0644]
syslinux/com32/lib/libgcc/__ashrdi3.S [new file with mode: 0644]
syslinux/com32/lib/libgcc/__divdi3.c [new file with mode: 0644]
syslinux/com32/lib/libgcc/__lshrdi3.S [new file with mode: 0644]
syslinux/com32/lib/libgcc/__moddi3.c [new file with mode: 0644]
syslinux/com32/lib/libgcc/__muldi3.S [new file with mode: 0644]
syslinux/com32/lib/libgcc/__negdi2.S [new file with mode: 0644]
syslinux/com32/lib/libgcc/__udivdi3.c [new file with mode: 0644]
syslinux/com32/lib/libgcc/__udivmoddi4.c [new file with mode: 0644]
syslinux/com32/lib/libgcc/__umoddi3.c [new file with mode: 0644]
syslinux/com32/lib/libpng/ANNOUNCE [new file with mode: 0644]
syslinux/com32/lib/libpng/CHANGES [new file with mode: 0644]
syslinux/com32/lib/libpng/KNOWNBUG [new file with mode: 0644]
syslinux/com32/lib/libpng/LICENSE [new file with mode: 0644]
syslinux/com32/lib/libpng/README [new file with mode: 0644]
syslinux/com32/lib/libpng/TODO [new file with mode: 0644]
syslinux/com32/lib/libpng/Y2KINFO [new file with mode: 0644]
syslinux/com32/lib/libpng/example.c [new file with mode: 0644]
syslinux/com32/lib/libpng/libpng.3 [new file with mode: 0644]
syslinux/com32/lib/libpng/libpng.txt [new file with mode: 0644]
syslinux/com32/lib/libpng/libpngpf.3 [new file with mode: 0644]
syslinux/com32/lib/libpng/png.5 [new file with mode: 0644]
syslinux/com32/lib/libpng/png.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngerror.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pnggccrd.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngget.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngmem.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngpread.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngread.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngrio.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngrtran.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngrutil.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngset.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngtest.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngtrans.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngvcrd.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngwio.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngwrite.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngwtran.c [new file with mode: 0644]
syslinux/com32/lib/libpng/pngwutil.c [new file with mode: 0644]
syslinux/com32/lib/lrand48.c [new file with mode: 0644]
syslinux/com32/lib/malloc.c [new file with mode: 0644]
syslinux/com32/lib/malloc.h [new file with mode: 0644]
syslinux/com32/lib/memccpy.c [new file with mode: 0644]
syslinux/com32/lib/memchr.c [new file with mode: 0644]
syslinux/com32/lib/memcmp.c [new file with mode: 0644]
syslinux/com32/lib/memcpy.c [new file with mode: 0644]
syslinux/com32/lib/memmem.c [new file with mode: 0644]
syslinux/com32/lib/memmove.c [new file with mode: 0644]
syslinux/com32/lib/memset.c [new file with mode: 0644]
syslinux/com32/lib/memswap.c [new file with mode: 0644]
syslinux/com32/lib/onexit.c [new file with mode: 0644]
syslinux/com32/lib/pci/cfgtype.c [new file with mode: 0644]
syslinux/com32/lib/pci/pci.h [new file with mode: 0644]
syslinux/com32/lib/pci/readb.c [new file with mode: 0644]
syslinux/com32/lib/pci/readl.c [new file with mode: 0644]
syslinux/com32/lib/pci/readw.c [new file with mode: 0644]
syslinux/com32/lib/pci/readx.c [new file with mode: 0644]
syslinux/com32/lib/pci/writeb.c [new file with mode: 0644]
syslinux/com32/lib/pci/writel.c [new file with mode: 0644]
syslinux/com32/lib/pci/writew.c [new file with mode: 0644]
syslinux/com32/lib/pci/writex.c [new file with mode: 0644]
syslinux/com32/lib/perror.c [new file with mode: 0644]
syslinux/com32/lib/printf.c [new file with mode: 0644]
syslinux/com32/lib/putchar.c [new file with mode: 0644]
syslinux/com32/lib/puts.c [new file with mode: 0644]
syslinux/com32/lib/qsort.c [new file with mode: 0644]
syslinux/com32/lib/realloc.c [new file with mode: 0644]
syslinux/com32/lib/seed48.c [new file with mode: 0644]
syslinux/com32/lib/setjmp.S [new file with mode: 0644]
syslinux/com32/lib/snprintf.c [new file with mode: 0644]
syslinux/com32/lib/sprintf.c [new file with mode: 0644]
syslinux/com32/lib/srand48.c [new file with mode: 0644]
syslinux/com32/lib/sscanf.c [new file with mode: 0644]
syslinux/com32/lib/stack.c [new file with mode: 0644]
syslinux/com32/lib/strcasecmp.c [new file with mode: 0644]
syslinux/com32/lib/strcat.c [new file with mode: 0644]
syslinux/com32/lib/strchr.c [new file with mode: 0644]
syslinux/com32/lib/strcmp.c [new file with mode: 0644]
syslinux/com32/lib/strcpy.c [new file with mode: 0644]
syslinux/com32/lib/strdup.c [new file with mode: 0644]
syslinux/com32/lib/strerror.c [new file with mode: 0644]
syslinux/com32/lib/strlcat.c [new file with mode: 0644]
syslinux/com32/lib/strlcpy.c [new file with mode: 0644]
syslinux/com32/lib/strlen.c [new file with mode: 0644]
syslinux/com32/lib/strncasecmp.c [new file with mode: 0644]
syslinux/com32/lib/strncat.c [new file with mode: 0644]
syslinux/com32/lib/strncmp.c [new file with mode: 0644]
syslinux/com32/lib/strncpy.c [new file with mode: 0644]
syslinux/com32/lib/strndup.c [new file with mode: 0644]
syslinux/com32/lib/strntoimax.c [new file with mode: 0644]
syslinux/com32/lib/strntoumax.c [new file with mode: 0644]
syslinux/com32/lib/strrchr.c [new file with mode: 0644]
syslinux/com32/lib/strsep.c [new file with mode: 0644]
syslinux/com32/lib/strspn.c [new file with mode: 0644]
syslinux/com32/lib/strstr.c [new file with mode: 0644]
syslinux/com32/lib/strtoimax.c [new file with mode: 0644]
syslinux/com32/lib/strtok.c [new file with mode: 0644]
syslinux/com32/lib/strtol.c [new file with mode: 0644]
syslinux/com32/lib/strtoll.c [new file with mode: 0644]
syslinux/com32/lib/strtoul.c [new file with mode: 0644]
syslinux/com32/lib/strtoull.c [new file with mode: 0644]
syslinux/com32/lib/strtoumax.c [new file with mode: 0644]
syslinux/com32/lib/strtox.c [new file with mode: 0644]
syslinux/com32/lib/sys/ansicon_write.c [new file with mode: 0644]
syslinux/com32/lib/sys/ansiserial_write.c [new file with mode: 0644]
syslinux/com32/lib/sys/argv.c [new file with mode: 0644]
syslinux/com32/lib/sys/close.c [new file with mode: 0644]
syslinux/com32/lib/sys/entry.S [new file with mode: 0644]
syslinux/com32/lib/sys/err_read.c [new file with mode: 0644]
syslinux/com32/lib/sys/err_write.c [new file with mode: 0644]
syslinux/com32/lib/sys/exit.S [new file with mode: 0644]
syslinux/com32/lib/sys/file.h [new file with mode: 0644]
syslinux/com32/lib/sys/fileclose.c [new file with mode: 0644]
syslinux/com32/lib/sys/fileinfo.c [new file with mode: 0644]
syslinux/com32/lib/sys/fileread.c [new file with mode: 0644]
syslinux/com32/lib/sys/ftell.c [new file with mode: 0644]
syslinux/com32/lib/sys/idle.c [new file with mode: 0644]
syslinux/com32/lib/sys/isatty.c [new file with mode: 0644]
syslinux/com32/lib/sys/line_input.c [new file with mode: 0644]
syslinux/com32/lib/sys/null_read.c [new file with mode: 0644]
syslinux/com32/lib/sys/null_write.c [new file with mode: 0644]
syslinux/com32/lib/sys/open.c [new file with mode: 0644]
syslinux/com32/lib/sys/openconsole.c [new file with mode: 0644]
syslinux/com32/lib/sys/opendev.c [new file with mode: 0644]
syslinux/com32/lib/sys/rawcon_read.c [new file with mode: 0644]
syslinux/com32/lib/sys/rawcon_write.c [new file with mode: 0644]
syslinux/com32/lib/sys/read.c [new file with mode: 0644]
syslinux/com32/lib/sys/serial_write.c [new file with mode: 0644]
syslinux/com32/lib/sys/stdcon_read.c [new file with mode: 0644]
syslinux/com32/lib/sys/stdcon_write.c [new file with mode: 0644]
syslinux/com32/lib/sys/times.c [new file with mode: 0644]
syslinux/com32/lib/sys/write.c [new file with mode: 0644]
syslinux/com32/lib/vasprintf.c [new file with mode: 0644]
syslinux/com32/lib/vfprintf.c [new file with mode: 0644]
syslinux/com32/lib/vprintf.c [new file with mode: 0644]
syslinux/com32/lib/vsnprintf.c [new file with mode: 0644]
syslinux/com32/lib/vsprintf.c [new file with mode: 0644]
syslinux/com32/lib/vsscanf.c [new file with mode: 0644]
syslinux/com32/lib/zlib/FAQ [new file with mode: 0644]
syslinux/com32/lib/zlib/README [new file with mode: 0644]
syslinux/com32/lib/zlib/adler32.c [new file with mode: 0644]
syslinux/com32/lib/zlib/algorithm.txt [new file with mode: 0644]
syslinux/com32/lib/zlib/compress.c [new file with mode: 0644]
syslinux/com32/lib/zlib/crc32.c [new file with mode: 0644]
syslinux/com32/lib/zlib/crc32.h [new file with mode: 0644]
syslinux/com32/lib/zlib/deflate.c [new file with mode: 0644]
syslinux/com32/lib/zlib/deflate.h [new file with mode: 0644]
syslinux/com32/lib/zlib/example.c [new file with mode: 0644]
syslinux/com32/lib/zlib/gzio.c [new file with mode: 0644]
syslinux/com32/lib/zlib/infback.c [new file with mode: 0644]
syslinux/com32/lib/zlib/inffast.c [new file with mode: 0644]
syslinux/com32/lib/zlib/inffast.h [new file with mode: 0644]
syslinux/com32/lib/zlib/inffixed.h [new file with mode: 0644]
syslinux/com32/lib/zlib/inflate.c [new file with mode: 0644]
syslinux/com32/lib/zlib/inflate.h [new file with mode: 0644]
syslinux/com32/lib/zlib/inftrees.c [new file with mode: 0644]
syslinux/com32/lib/zlib/inftrees.h [new file with mode: 0644]
syslinux/com32/lib/zlib/minigzip.c [new file with mode: 0644]
syslinux/com32/lib/zlib/trees.c [new file with mode: 0644]
syslinux/com32/lib/zlib/trees.h [new file with mode: 0644]
syslinux/com32/lib/zlib/uncompr.c [new file with mode: 0644]
syslinux/com32/lib/zlib/zconf.in.h [new file with mode: 0644]
syslinux/com32/lib/zlib/zlib.3 [new file with mode: 0644]
syslinux/com32/lib/zlib/zutil.c [new file with mode: 0644]
syslinux/com32/lib/zlib/zutil.h [new file with mode: 0644]
syslinux/com32/libutil/Makefile [new file with mode: 0644]
syslinux/com32/libutil/ansiline.c [new file with mode: 0644]
syslinux/com32/libutil/ansiraw.c [new file with mode: 0644]
syslinux/com32/libutil/get_key.c [new file with mode: 0644]
syslinux/com32/libutil/idle.c [new file with mode: 0644]
syslinux/com32/libutil/include/base64.h [new file with mode: 0644]
syslinux/com32/libutil/include/consoles.h [new file with mode: 0644]
syslinux/com32/libutil/include/getkey.h [new file with mode: 0644]
syslinux/com32/libutil/include/libutil.h [new file with mode: 0644]
syslinux/com32/libutil/include/minmax.h [new file with mode: 0644]
syslinux/com32/libutil/include/sha1.h [new file with mode: 0644]
syslinux/com32/libutil/sha1hash.c [new file with mode: 0644]
syslinux/com32/libutil/unbase64.c [new file with mode: 0644]
syslinux/com32/modules/Makefile [new file with mode: 0644]
syslinux/com32/modules/chain.c [new file with mode: 0644]
syslinux/com32/modules/ethersel.c [new file with mode: 0644]
syslinux/com32/modules/i386-elf.h [new file with mode: 0644]
syslinux/com32/modules/mb_header.h [new file with mode: 0644]
syslinux/com32/modules/mb_info.h [new file with mode: 0644]
syslinux/com32/modules/mboot.c [new file with mode: 0644]
syslinux/com32/modules/mboot.doc [new file with mode: 0644]
syslinux/com32/modules/menu.c [new file with mode: 0644]
syslinux/com32/modules/menu.h [new file with mode: 0644]
syslinux/com32/modules/readconfig.c [new file with mode: 0644]
syslinux/com32/samples/Makefile [new file with mode: 0644]
syslinux/com32/samples/cat.c [new file with mode: 0644]
syslinux/com32/samples/fancyhello.c [new file with mode: 0644]
syslinux/com32/samples/hello.c [new file with mode: 0644]
syslinux/com32/samples/keytest.c [new file with mode: 0644]
syslinux/com32/samples/resolv.c [new file with mode: 0644]
syslinux/comboot.doc [new file with mode: 0644]
syslinux/comboot.inc [new file with mode: 0644]
syslinux/config.inc [new file with mode: 0644]
syslinux/conio.inc [new file with mode: 0644]
syslinux/copybs.asm [new file with mode: 0644]
syslinux/cpuinit.inc [new file with mode: 0644]
syslinux/distrib.doc [new file with mode: 0644]
syslinux/dnsresolv.inc [new file with mode: 0644]
syslinux/dos/Makefile [new file with mode: 0644]
syslinux/dos/__divdi3.c [new file with mode: 0644]
syslinux/dos/__udivmoddi4.c [new file with mode: 0644]
syslinux/dos/argv.c [new file with mode: 0644]
syslinux/dos/atou.c [new file with mode: 0644]
syslinux/dos/code16.h [new file with mode: 0644]
syslinux/dos/com16.ld [new file with mode: 0644]
syslinux/dos/conio.c [new file with mode: 0644]
syslinux/dos/crt0.S [new file with mode: 0644]
syslinux/dos/errno.h [new file with mode: 0644]
syslinux/dos/free.c [new file with mode: 0644]
syslinux/dos/malloc.c [new file with mode: 0644]
syslinux/dos/malloc.h [new file with mode: 0644]
syslinux/dos/memcpy.S [new file with mode: 0644]
syslinux/dos/memset.S [new file with mode: 0644]
syslinux/dos/mystuff.h [new file with mode: 0644]
syslinux/dos/perror.c [new file with mode: 0644]
syslinux/dos/printf.c [new file with mode: 0644]
syslinux/dos/skipatou.c [new file with mode: 0644]
syslinux/dos/stdio.h [new file with mode: 0644]
syslinux/dos/stdlib.h [new file with mode: 0644]
syslinux/dos/string.h [new file with mode: 0644]
syslinux/dos/syslinux.c [new file with mode: 0644]
syslinux/dos/syslinux.com [new file with mode: 0755]
syslinux/ext2_fs.inc [new file with mode: 0644]
syslinux/extlinux.asm [new file with mode: 0644]
syslinux/extlinux.bin [new file with mode: 0644]
syslinux/extlinux.bss [new file with mode: 0644]
syslinux/extlinux.doc [new file with mode: 0644]
syslinux/extlinux.sys [new file with mode: 0644]
syslinux/extlinux/Makefile [new file with mode: 0644]
syslinux/extlinux/ext2_fs.h [new file with mode: 0644]
syslinux/extlinux/extlinux.c [new file with mode: 0644]
syslinux/font.inc [new file with mode: 0644]
syslinux/genhash.pl [new file with mode: 0755]
syslinux/getc.inc [new file with mode: 0644]
syslinux/gethostip.c [new file with mode: 0644]
syslinux/graphics.inc [new file with mode: 0644]
syslinux/highmem.inc [new file with mode: 0644]
syslinux/init.inc [new file with mode: 0644]
syslinux/isolinux-debug.bin [new file with mode: 0644]
syslinux/isolinux.asm [new file with mode: 0644]
syslinux/isolinux.bin [new file with mode: 0644]
syslinux/isolinux.doc [new file with mode: 0644]
syslinux/kernel.inc [new file with mode: 0644]
syslinux/keytab-lilo.doc [new file with mode: 0644]
syslinux/keytab-lilo.pl [new file with mode: 0755]
syslinux/keywords [new file with mode: 0644]
syslinux/keywords.inc [new file with mode: 0644]
syslinux/kwdhash.gen [new file with mode: 0644]
syslinux/layout.inc [new file with mode: 0644]
syslinux/ldlinux.asm [new file with mode: 0644]
syslinux/ldlinux.bin [new file with mode: 0644]
syslinux/ldlinux.bss [new file with mode: 0644]
syslinux/ldlinux.sys [new file with mode: 0644]
syslinux/libfat/cache.c [new file with mode: 0644]
syslinux/libfat/fat.h [new file with mode: 0644]
syslinux/libfat/fatchain.c [new file with mode: 0644]
syslinux/libfat/libfat.h [new file with mode: 0644]
syslinux/libfat/libfatint.h [new file with mode: 0644]
syslinux/libfat/open.c [new file with mode: 0644]
syslinux/libfat/searchdir.c [new file with mode: 0644]
syslinux/libfat/ulint.h [new file with mode: 0644]
syslinux/loadhigh.inc [new file with mode: 0644]
syslinux/lss16toppm [new file with mode: 0755]
syslinux/macros.inc [new file with mode: 0644]
syslinux/mbr.asm [new file with mode: 0644]
syslinux/mbr.bin [new file with mode: 0644]
syslinux/memdisk/.depend [new file with mode: 0644]
syslinux/memdisk/Makefile [new file with mode: 0644]
syslinux/memdisk/conio.c [new file with mode: 0644]
syslinux/memdisk/conio.h [new file with mode: 0644]
syslinux/memdisk/e820.h [new file with mode: 0644]
syslinux/memdisk/e820data [new file with mode: 0644]
syslinux/memdisk/e820func.c [new file with mode: 0644]
syslinux/memdisk/e820test.c [new file with mode: 0644]
syslinux/memdisk/inflate.c [new file with mode: 0644]
syslinux/memdisk/memcpy.S [new file with mode: 0644]
syslinux/memdisk/memdisk [new file with mode: 0644]
syslinux/memdisk/memdisk.asm [new file with mode: 0644]
syslinux/memdisk/memdisk.doc [new file with mode: 0644]
syslinux/memdisk/memdisk.h [new file with mode: 0644]
syslinux/memdisk/memdisk16.asm [new file with mode: 0644]
syslinux/memdisk/memset.S [new file with mode: 0644]
syslinux/memdisk/msetup.c [new file with mode: 0644]
syslinux/memdisk/postprocess.pl [new file with mode: 0755]
syslinux/memdisk/setup.c [new file with mode: 0644]
syslinux/memdisk/start32.S [new file with mode: 0644]
syslinux/memdisk/testdata1 [new file with mode: 0644]
syslinux/memdisk/testdata2 [new file with mode: 0644]
syslinux/memdisk/testdata3 [new file with mode: 0644]
syslinux/memdisk/unzip.c [new file with mode: 0644]
syslinux/memdisk/version.h [new file with mode: 0644]
syslinux/menu/CHANGES [new file with mode: 0644]
syslinux/menu/HISTORY [new file with mode: 0644]
syslinux/menu/MANUAL [new file with mode: 0644]
syslinux/menu/Makefile [new file with mode: 0644]
syslinux/menu/README [new file with mode: 0644]
syslinux/menu/TODO [new file with mode: 0644]
syslinux/menu/complex.c [new file with mode: 0644]
syslinux/menu/libmenu/com32io.c [new file with mode: 0644]
syslinux/menu/libmenu/com32io.h [new file with mode: 0644]
syslinux/menu/libmenu/des.c [new file with mode: 0644]
syslinux/menu/libmenu/des.h [new file with mode: 0644]
syslinux/menu/libmenu/help.c [new file with mode: 0644]
syslinux/menu/libmenu/help.h [new file with mode: 0644]
syslinux/menu/libmenu/menu.c [new file with mode: 0644]
syslinux/menu/libmenu/menu.h [new file with mode: 0644]
syslinux/menu/libmenu/passwords.c [new file with mode: 0644]
syslinux/menu/libmenu/passwords.h [new file with mode: 0644]
syslinux/menu/libmenu/scancodes.h [new file with mode: 0644]
syslinux/menu/libmenu/syslnx.c [new file with mode: 0644]
syslinux/menu/libmenu/syslnx.h [new file with mode: 0644]
syslinux/menu/libmenu/tui.c [new file with mode: 0644]
syslinux/menu/libmenu/tui.h [new file with mode: 0644]
syslinux/menu/password [new file with mode: 0644]
syslinux/menu/simple.c [new file with mode: 0644]
syslinux/mkdiskimage.in [new file with mode: 0755]
syslinux/mtools/Makefile [new file with mode: 0644]
syslinux/mtools/syslinux.c [new file with mode: 0644]
syslinux/now.pl [new file with mode: 0644]
syslinux/parsecmd.inc [new file with mode: 0644]
syslinux/parseconfig.inc [new file with mode: 0644]
syslinux/ppmtolss16 [new file with mode: 0755]
syslinux/pxe.inc [new file with mode: 0644]
syslinux/pxelinux.0 [new file with mode: 0644]
syslinux/pxelinux.asm [new file with mode: 0644]
syslinux/pxelinux.doc [new file with mode: 0644]
syslinux/rawcon.inc [new file with mode: 0644]
syslinux/regdump.inc [new file with mode: 0644]
syslinux/rllpack.inc [new file with mode: 0644]
syslinux/runkernel.inc [new file with mode: 0644]
syslinux/sample/Makefile [new file with mode: 0644]
syslinux/sample/README [new file with mode: 0644]
syslinux/sample/atou.c [new file with mode: 0644]
syslinux/sample/c32echo.c [new file with mode: 0644]
syslinux/sample/c32entry.S [new file with mode: 0644]
syslinux/sample/c32exit.S [new file with mode: 0644]
syslinux/sample/comecho.asm [new file with mode: 0644]
syslinux/sample/conio.c [new file with mode: 0644]
syslinux/sample/fd.c [new file with mode: 0644]
syslinux/sample/filetest.c [new file with mode: 0644]
syslinux/sample/hello.c [new file with mode: 0644]
syslinux/sample/hello2.c [new file with mode: 0644]
syslinux/sample/mdiskchk.c [new file with mode: 0644]
syslinux/sample/mdiskchk.com [new file with mode: 0755]
syslinux/sample/printf.c [new file with mode: 0644]
syslinux/sample/sample.msg [new file with mode: 0644]
syslinux/sample/skipatou.c [new file with mode: 0644]
syslinux/sample/syslogo.png [new file with mode: 0644]
syslinux/sha1pass [new file with mode: 0755]
syslinux/strcpy.inc [new file with mode: 0644]
syslinux/sys2ansi.pl [new file with mode: 0755]
syslinux/syslinux.doc [new file with mode: 0644]
syslinux/syslinux.h [new file with mode: 0644]
syslinux/syslinux.spec [new file with mode: 0644]
syslinux/syslxmod.c [new file with mode: 0644]
syslinux/tracers.inc [new file with mode: 0644]
syslinux/ui.inc [new file with mode: 0644]
syslinux/unix/Makefile [new file with mode: 0644]
syslinux/unix/syslinux.c [new file with mode: 0644]
syslinux/version [new file with mode: 0644]
syslinux/version.gen [new file with mode: 0644]
syslinux/version.h [new file with mode: 0644]
syslinux/version.pl [new file with mode: 0755]
syslinux/win32/Makefile [new file with mode: 0644]
syslinux/win32/hello.c [new file with mode: 0644]
syslinux/win32/hello.exe [new file with mode: 0755]
syslinux/win32/syslinux.c [new file with mode: 0644]
syslinux/win32/syslinux.exe [new file with mode: 0755]
syslinux/writehex.inc [new file with mode: 0644]
syslinux/writestr.inc [new file with mode: 0644]

diff --git a/syslinux/.depend b/syslinux/.depend
new file mode 100644 (file)
index 0000000..34adb7c
--- /dev/null
@@ -0,0 +1,27 @@
+syslxmod.o: syslxmod.c syslinux.h
+gethostip.o: gethostip.c
+copybs.bin: copybs.asm
+extlinux.bin: extlinux.asm macros.inc config.inc kernel.inc bios.inc tracers.inc \
+   layout.inc ext2_fs.inc init.inc cpuinit.inc ui.inc runkernel.inc \
+   comboot.inc com32.inc cmdline.inc bootsect.inc getc.inc conio.inc \
+   writestr.inc parseconfig.inc rllpack.inc parsecmd.inc bcopy32.inc \
+   loadhigh.inc font.inc graphics.inc highmem.inc strcpy.inc cache.inc \
+   keywords.inc
+isolinux.bin: isolinux.asm macros.inc config.inc kernel.inc bios.inc tracers.inc \
+   layout.inc writestr.inc writehex.inc init.inc cpuinit.inc ui.inc \
+   runkernel.inc comboot.inc com32.inc cmdline.inc bootsect.inc getc.inc \
+   conio.inc parseconfig.inc rllpack.inc parsecmd.inc bcopy32.inc \
+   loadhigh.inc font.inc graphics.inc highmem.inc strcpy.inc rawcon.inc \
+   keywords.inc
+ldlinux.bin: ldlinux.asm macros.inc config.inc kernel.inc bios.inc tracers.inc \
+   layout.inc cpuinit.inc init.inc ui.inc runkernel.inc comboot.inc \
+   com32.inc cmdline.inc bootsect.inc getc.inc conio.inc writestr.inc \
+   parseconfig.inc rllpack.inc parsecmd.inc bcopy32.inc loadhigh.inc font.inc \
+   graphics.inc highmem.inc strcpy.inc cache.inc keywords.inc
+mbr.bin: mbr.asm bios.inc
+pxelinux.bin: pxelinux.asm macros.inc config.inc kernel.inc bios.inc tracers.inc pxe.inc \
+   layout.inc init.inc cpuinit.inc ui.inc runkernel.inc comboot.inc \
+   com32.inc cmdline.inc bootsect.inc getc.inc conio.inc writestr.inc \
+   writehex.inc parseconfig.inc rllpack.inc parsecmd.inc bcopy32.inc \
+   loadhigh.inc font.inc graphics.inc highmem.inc strcpy.inc rawcon.inc \
+   dnsresolv.inc keywords.inc
diff --git a/syslinux/BUGS b/syslinux/BUGS
new file mode 100644 (file)
index 0000000..9639da8
--- /dev/null
@@ -0,0 +1,4 @@
+Known bugs that have not yet been fixed:
+
+- PXELINUX: Some PXE stacks fail with routing enabled, some with
+  routing disabled.  Try both?
diff --git a/syslinux/COPYING b/syslinux/COPYING
new file mode 100644 (file)
index 0000000..60549be
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    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; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/syslinux/Makefile b/syslinux/Makefile
new file mode 100644 (file)
index 0000000..be8378f
--- /dev/null
@@ -0,0 +1,257 @@
+##  $Id: Makefile,v 1.120 2005/04/02 21:48:47 hpa Exp $
+## -----------------------------------------------------------------------
+##   
+##   Copyright 1998-2005 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.
+##
+## -----------------------------------------------------------------------
+
+#
+# Main Makefile for SYSLINUX
+#
+
+OSTYPE   = $(shell uname -msr)
+CC      = gcc
+INCLUDE  =
+CFLAGS   = -W -Wall -Os -fomit-frame-pointer -D_FILE_OFFSET_BITS=64
+PIC      = -fPIC
+LDFLAGS  = -O2 -s
+AR      = ar
+RANLIB   = ranlib
+
+NASM    = nasm -O99
+NINCLUDE = 
+BINDIR   = /usr/bin
+SBINDIR  = /sbin
+LIBDIR   = /usr/lib
+AUXDIR   = $(LIBDIR)/syslinux
+INCDIR   = /usr/include
+
+PERL     = perl
+
+VERSION  = $(shell cat version)
+
+.c.o:
+       $(CC) $(INCLUDE) $(CFLAGS) -c $<
+
+#
+# The BTARGET refers to objects that are derived from ldlinux.asm; we
+# like to keep those uniform for debugging reasons; however, distributors 
+# want to recompile the installers (ITARGET).
+# 
+# BOBJECTS and IOBJECTS are the same thing, except used for
+# installation, so they include objects that may be in subdirectories
+# with their own Makefiles.  Finally, there is a list of those
+# directories.
+#
+CSRC     = syslxmod.c gethostip.c
+NASMSRC  = $(wildcard *.asm)
+SOURCES = $(CSRC) *.h $(NASMSRC) *.inc
+
+# _bin.c files required by both BTARGET and ITARGET installers
+BINFILES = bootsect_bin.c ldlinux_bin.c mbr_bin.c \
+          extlinux_bss_bin.c extlinux_sys_bin.c 
+
+# syslinux.exe is BTARGET so as to not require everyone to have the
+# mingw suite installed
+BTARGET  = kwdhash.gen version.gen version.h \
+          ldlinux.bss ldlinux.sys ldlinux.bin \
+          pxelinux.0 mbr.bin isolinux.bin isolinux-debug.bin \
+          extlinux.bin extlinux.bss extlinux.sys
+BOBJECTS = $(BTARGET) dos/syslinux.com win32/syslinux.exe memdisk/memdisk
+BSUBDIRS = memdisk dos win32
+ITARGET  = copybs.com gethostip mkdiskimage
+IOBJECTS = $(ITARGET) mtools/syslinux unix/syslinux extlinux/extlinux
+ISUBDIRS = mtools unix extlinux sample com32
+DOCS     = COPYING NEWS README TODO BUGS *.doc sample menu com32
+OTHER    = Makefile bin2c.pl now.pl genhash.pl keywords findpatch.pl \
+          keytab-lilo.pl version version.pl sys2ansi.pl \
+          ppmtolss16 lss16toppm memdisk bin2hex.pl mkdiskimage.in
+OBSOLETE = pxelinux.bin
+
+# Things to install in /usr/bin
+INSTALL_BIN   =        mtools/syslinux gethostip ppmtolss16 lss16toppm
+# Things to install in /sbin
+INSTALL_SBIN  = extlinux/extlinux
+# Things to install in /usr/lib/syslinux
+INSTALL_AUX   =        pxelinux.0 isolinux.bin isolinux-debug.bin \
+               dos/syslinux.com copybs.com memdisk/memdisk mbr.bin
+INSTALL_AUX_OPT = win32/syslinux.exe
+
+# The DATE is set on the make command line when building binaries for
+# official release.  Otherwise, substitute a hex string that is pretty much
+# guaranteed to be unique to be unique from build to build.
+ifndef HEXDATE
+HEXDATE := $(shell $(PERL) now.pl ldlinux.asm pxelinux.asm isolinux.asm)
+endif
+ifndef DATE
+DATE    := $(HEXDATE)
+endif
+MAKE    += DATE=$(DATE) HEXDATE=$(HEXDATE)
+
+#
+# NOTE: If you don't have the mingw compiler suite installed, you probably
+# want to remove win32 from this list; otherwise you're going to get an
+# error every time you try to build.
+#
+
+all:   all-local
+       set -e ; for i in $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
+       $(MAKE) all-local
+       -ls -l $(BOBJECTS) $(IOBJECTS)
+
+all-local: $(BTARGET) $(ITARGET) $(BINFILES)
+
+installer: installer-local
+       set -e ; for i in $(ISUBDIRS); do $(MAKE) -C $$i all ; done
+       -ls -l $(BOBJECTS) $(IOBJECTS)
+
+installer-local: $(ITARGET) $(BINFILES)
+
+version.gen: version version.pl
+       $(PERL) version.pl $< $@ '%define'
+
+version.h: version version.pl
+       $(PERL) version.pl $< $@ '#define'
+
+kwdhash.gen: keywords genhash.pl
+       $(PERL) genhash.pl < keywords > kwdhash.gen
+
+ldlinux.bin: ldlinux.asm kwdhash.gen version.gen
+       $(NASM) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
+               -DMAP=ldlinux.map -l ldlinux.lst -o ldlinux.bin ldlinux.asm
+
+pxelinux.bin: pxelinux.asm kwdhash.gen version.gen
+       $(NASM) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
+               -DMAP=pxelinux.map -l pxelinux.lst -o pxelinux.bin pxelinux.asm
+
+isolinux.bin: isolinux.asm kwdhash.gen version.gen checksumiso.pl
+       $(NASM) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
+               -DMAP=isolinux.map -l isolinux.lst -o isolinux.bin isolinux.asm
+       $(PERL) checksumiso.pl isolinux.bin
+
+# Special verbose version of isolinux.bin
+isolinux-debug.bin: isolinux.asm kwdhash.gen version.gen checksumiso.pl
+       $(NASM) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
+               -DDEBUG_MESSAGES \
+               -DMAP=isolinux-debug.map -l isolinux-debug.lst \
+               -o isolinux-debug.bin isolinux.asm
+       $(PERL) checksumiso.pl $@
+
+extlinux.bin: extlinux.asm kwdhash.gen version.gen
+       $(NASM) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
+               -DMAP=extlinux.map -l extlinux.lst -o extlinux.bin extlinux.asm
+
+pxelinux.0: pxelinux.bin
+       cp pxelinux.bin pxelinux.0
+
+ldlinux.bss: ldlinux.bin
+       dd if=$< of=$@ bs=512 count=1
+
+ldlinux.sys: ldlinux.bin
+       dd if=$< of=$@ bs=512 skip=1
+
+extlinux.bss: extlinux.bin
+       dd if=$< of=$@ bs=512 count=1
+
+extlinux.sys: extlinux.bin
+       dd if=$< of=$@ bs=512 skip=1
+
+mbr.bin: mbr.asm
+       $(NASM) -f bin -l mbr.lst -o mbr.bin mbr.asm
+
+mbr_bin.c: mbr.bin bin2c.pl
+       $(PERL) bin2c.pl syslinux_mbr < $< > $@
+
+copybs.com: copybs.asm
+       $(NASM) -f bin -l copybs.lst -o copybs.com copybs.asm
+
+bootsect_bin.c: ldlinux.bss bin2c.pl
+       $(PERL) bin2c.pl syslinux_bootsect < $< > $@
+
+ldlinux_bin.c: ldlinux.sys bin2c.pl
+       $(PERL) bin2c.pl syslinux_ldlinux < $< > $@
+
+extlinux_bss_bin.c: extlinux.bss bin2c.pl
+       $(PERL) bin2c.pl extlinux_bootsect < $< > $@
+
+extlinux_sys_bin.c: extlinux.sys bin2c.pl
+       $(PERL) bin2c.pl extlinux_image < $< > $@
+
+libsyslinux.a: bootsect_bin.o ldlinux_bin.o mbr_bin.o syslxmod.o
+       rm -f $@
+       $(AR) cq $@ $^
+       $(RANLIB) $@
+
+$(LIB_SO): bootsect_bin.o ldlinux_bin.o syslxmod.o
+       $(CC) $(LDFLAGS) -shared -Wl,-soname,$(LIB_SONAME) -o $@ $^
+
+gethostip.o: gethostip.c
+
+gethostip: gethostip.o
+
+mkdiskimage: mkdiskimage.in mbr.bin bin2hex.pl
+       $(PERL) bin2hex.pl < mbr.bin | cat mkdiskimage.in - > $@
+       chmod a+x $@
+
+install: installer
+       mkdir -m 755 -p $(INSTALLROOT)$(BINDIR)
+       install -m 755 -c $(INSTALL_BIN) $(INSTALLROOT)$(BINDIR)
+       mkdir -m 755 -p $(INSTALLROOT)$(SBINDIR)
+       install -m 755 -c $(INSTALL_SBIN) $(INSTALLROOT)$(SBINDIR)
+       mkdir -m 755 -p $(INSTALLROOT)$(AUXDIR)
+       install -m 644 -c $(INSTALL_AUX) $(INSTALLROOT)$(AUXDIR)
+       -install -m 644 -c $(INSTALL_AUX_OPT) $(INSTALLROOT)$(AUXDIR)
+       $(MAKE) -C com32 install
+
+install-lib: installer
+
+install-all: install install-lib
+
+local-tidy:
+       rm -f *.o *_bin.c stupid.* patch.offset
+       rm -f *.lst *.map
+       rm -f $(OBSOLETE)
+
+tidy: local-tidy
+       set -e ; for i in $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
+
+local-clean:
+       rm -f $(ITARGET)
+
+clean: local-tidy local-clean
+       set -e ; for i in $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
+
+dist: tidy
+       for dir in . sample memdisk ; do \
+               ( cd $$dir && rm -f *~ \#* core ) ; \
+       done
+
+local-spotless:
+       rm -f $(BTARGET) .depend *.so.*
+
+spotless: local-clean dist local-spotless
+       set -e ; for i in $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
+
+.depend:
+       rm -f .depend
+       for csrc in $(CSRC) ; do $(CC) $(INCLUDE) -MM $$csrc >> .depend ; done
+       for nsrc in $(NASMSRC) ; do $(NASM) -DDEPEND $(NINCLUDE) -o `echo $$nsrc | sed -e 's/\.asm/\.bin/'` -M $$nsrc >> .depend ; done
+
+local-depend:
+       rm -f .depend
+       $(MAKE) .depend
+
+depend: local-depend
+       $(MAKE) -C memdisk depend
+
+# Hook to add private Makefile targets for the maintainer.
+-include Makefile.private
+
+# Include dependencies file
+-include .depend
diff --git a/syslinux/NEWS b/syslinux/NEWS
new file mode 100644 (file)
index 0000000..7b0be3e
--- /dev/null
@@ -0,0 +1,744 @@
+Starting with 1.47, changes marked with SYSLINUX/PXELINUX/ISOLINUX
+apply to that specific program only; other changes apply to all of
+them.
+
+Changes in 3.08:
+       * SYSLINUX: Fix performance regression (-s mode always
+         enabled.)
+       * Add API function for idle loop.
+       * libutil: Add do_idle() function for idle loop, make
+         get_key() use it.
+       * libutil: Add SHA-1 and base64 functions.
+       * Simple menu system: add password support.
+       * EXTLINUX: Sparse files now handled correctly.
+       * EXTLINUX: Large directories now handled correctly.
+       * ALL: At the prompt, Ctrl-X now forces text mode.
+       * Fix configuration file parsing error, that could cause
+         hangs.
+       * Rewritten advanced menuing system from Murali Ganapathy.
+       * MEMDISK: New "bigraw" mode to work around certain broken
+         BIOS flash programs.
+       * COM32 module to boot Multiboot systems, including Xen.  See
+         com32/modules/mboot.doc.
+       * Max command line changed to 1024 characters.  Note that the
+         kernel proper still can only handle 255 characters without
+         patching, and COM16 binaries can only handle 125 characters.
+
+Changes in 3.07:
+       * Fix chainloading (chain.c32).
+       * Fix zlib build problem.
+       * Use a private copy of <linux/ext2_fs.h>.
+
+Changes in 3.06:
+       * Fix typo that caused the ramdisk to load in the wrong place.
+
+Changes in 3.05:
+       * New API function "shuffle and boot"; allows COM32 modules to
+         load or construct (almost) arbitrarily complex objects,
+         e.g. a kernel and its initrd/initramfs in pieces, and have
+         the API core reorganize memory for booting.  (A library API
+         for this function will be introduced in a later version.)
+       * The initrd= option now supports multiple filenames separated
+         by commas.  This is mostly useful for initramfs, which can
+         be composed of multiple separate cpio or cpio.gz archives.
+         (Note: all files except the last one are zero-padded to a 4K
+         page boundary.  This should not affect initramfs.)
+       * EXTLINUX: Fix API function 000Ah (get derivative-specific
+         info).
+       * libcom32/ethersel: Support PCI Config Mechanism #2 on
+         machines still infested with that hideous old hack.
+       * SYSLINUX: Fix directory-parsing bug.
+
+Changes in 3.02:
+       * SYSLINUX: The "unix" installer now sets the MS-DOS
+         attributes (hidden, system, readonly.)
+       * COM32 library: build the .lnx (test modules for running
+         under Linux) as architecture native modules, in case
+         i386 devel libraries aren't installed.
+       * EXTLINUX: Hack for systems which don't have BLKGETSIZE64
+         defined in the standard header files.
+       * Simple menu system: minor aestetic improvements, and try to
+         work better over a serial console (speed, and readability on
+         monochrome terminal emulators.)
+       * New CONSOLE directive to control output on the video console
+         (useful for dealing with some broken serial-forwarding
+         BIOSes.)
+       * New com32 module "ethersel" for searching for an Ethernet
+         card and selecting the proper version of Etherboot.
+       * EXTLINUX: Allow the user to override the detected geometry.
+         Add help.
+
+Changes in 3.01:
+       * EXTLINUX, SYSLINUX: Fix compile errors on some systems.
+       * EXTLINUX: Default to zipdrive geometry (64 heads, 32
+         sectors) if no other geometry can be detected.
+
+Changes in 3.00:
+       * SYSLINUX: Support FAT32 and EDD.  As an unfortunate
+         consequence, LDLINUX.SYS is no longer an ordinary file; it
+         is block-mapped at install time, which means it can only be
+         written using the syslinux installers.
+       * SYSLINUX: Reorganize the source code for the installers;
+          each one of the installers (dos, win32, unix, mtools) is now
+          built in its own subdirectory.  In particular, "mtools" is
+         the unprivileged installer which uses mtools; "unix" is the
+         privileged installer which uses system calls.
+       * SYSLINUX: Completely rewritten DOS installer in C.
+       * ALL: "label" statement information is now stored in a
+         compressed format, which means that a lot more labels are
+         permitted (500-1000 in a typical configuration, but depends
+         on the complexity.)
+       * EXTLINUX: New derivative, which boots from an ext2/ext3
+         filesystem.
+       * SYSLINUX: The DOS and Win32 installers can now optionally
+         write the boot sector to a file instead of the real boot
+         sector.  This is not supported in the Linux installers,
+         however.
+       * ALL: New NOESCAPE command, disables the "hold down the Shift
+         key to display the prompt" behaviour.
+       * New simple menu system, as an alternative to the advanced
+         menu system already present.  See README.menu for details.
+       * PXELINUX: Filenames can now be prefixed with an IP address
+         or DNS name plus :: (e.g. 192.0.2.1::filename or
+         server.domain.com::filename), which downloads a file from an
+         alternate TFTP server, or just a :: (e.g. ::filename), which
+         suppresses the common pathname prefix.  See pxelinux.doc.
+       * SYSLINUX: Add an -m option to the DOS and Win32 installers
+         to write an MBR and -a to mark the partition SYSLINUX is
+         being installed on active.
+       * MEMDISK: Give a way to query the boot loader type while
+         running MEMDISK; see memdisk/memdisk.doc and
+         sample/mdiskchk.c.
+       * mkdiskimage: substantially improved mkdiskimage which, among
+         other things, can now be used to initialize USB keys as
+         zipdrives; see README.usbkey for more information.
+
+Changes in 2.13:
+       * MEMDISK: Fix command-line parsing "brown paper bag" class
+         bug.
+       * MEMDISK: Add "raw" mode to support the DOS boot disk from
+         WinME/XP, which seems to deliberately crash the system
+         when someone uses the "INT 15h mover" highmem API.
+       * Make "make install" do something sane for the com32
+         development environment.
+       * In the spec file, create a separate -devel RPM for the com32
+         development environment.
+
+Changes in 2.12:
+       * Simple C library, based on klibc, for writing COM32
+         programs.
+       * Fix the handling of file length in loading of COM32
+         programs.
+       * MEMDISK: Work around a linker bug by rearranging the code to
+         not use the linker for the 16-bit code.
+       * SYSLINUX: If we're building on a machine without a Win32
+         (mingw) compiler, just skip building syslinux.exe.
+       * ISOLINUX: Support non-mkisofs mastering programs, at least
+         as long as the image is single-session.  For best results,
+         ISOLINUX should be the only boot loader installed.
+       * MEMDISK: Allow the user to specify that the simulated disk
+         should be write-protected.
+
+Changes in 2.11:
+       * ALL: Add an API call to get the configuration file name.
+       * SYSLINUX: Fix bug in 2.10 that prevented it from working
+         correctly for a lot of people.
+       * SYSLINUX: In the installer, make mtools a bit less fussy.
+       * Make the menu system compile with newer gcc's.
+
+Changes in 2.10:
+       * MEMDISK: Handle images compressed with zip as well as with
+         gzip.  Some Windows-based image tools apparently generate
+         these kinds of images by default.  Patch by Patrick
+         LoPresti.
+       * Major menu improvement from Murali Ganapathy.
+       * ISOLINUX: Wonderfully sick and brilliant workaround for
+         severe bugs in certain Award BIOSes; from Knut Petersen.
+       * SYSLINUX: Fix for the nomtools installed, from Frederic
+         Pasteleurs.
+       * PXELINUX: Fix handling of IP numbers in the ranges
+         100-109 and 200-209.
+       * ALL: New option "allowoptions" (defaults to 1), which
+         controls if options are allowed on the command line or not.
+       * SYSLINUX: Support building under klibc (see the klibc
+         distribution for details.)
+
+Changes in 2.09:
+       * SYSLINUX: Remove residual setuid crap from
+         syslinux-nomtools.
+       * Handle video pages correctly when using the API functions.
+       * Handle compiling on an x86-64 platform correctly.
+       * Menu system from Murali Krishnan Ganapathy; see the menu
+         directory for information.
+       * COMBOOT: Allow COMBOOT programs to change screen text mode.
+       * COMBOOT: Correct the documentation of how to detect
+         SYSLINUX from COMBOOT!!!!
+       * COMBOOT: Fix "get key without echo" API function.
+       * SYSLINUX: Fix bug that affected the API open function.
+       * ALL: Improve the E820 memory parser, to work around some
+         buggy BIOSes.
+
+Changes in 2.08:
+       * Add new configuration command "ontimeout" to allow timeout
+         to have a different action than just pressing Enter.
+       * Add new configuration command "onerror" to allow a custom
+         command to be executed in case the kernel image is not found.
+       * Fix bugs in the COMBOOT/COM32 command-line parsing.  APPEND
+         now works with COMBOOT/COM32 images.
+       * PXELINUX: Poll for ARP requests while sitting at the
+         prompt.  This makes some boot servers a lot less unhappy.
+       * PXELINUX: Actually free sockets when we get a failure
+         (including file not found.)  This bug would cause us to run
+         out of sockets and thus "go deaf" after a while.
+       * MEMDISK: Add an API to query for the existence of MEMDISK.
+       * SYSLINUX: Fix loading boot sectors (.bs/.bss) from floppy
+         disk.
+       * .c32 is now one of the extensions searched for
+         automatically.
+       * PXELINUX: RFBG.exe seems to randomly overwrite memory
+         location 0x5700.  Thus, don't use it!
+       * PXELINUX: Change pathname length max from 63 to 127; change
+         max vkernels from 128 to 64.
+       * Support Ctrl-U -> kill entire command line input.
+       * The "samples" directory contains a (barely at all tested)
+         chain loading example, chain.c32, which may be used to
+         chainload local floppy disks and hard disks.  Use with
+         "chain fdN" or "chain hdN [partition]"; N = 0 for the first
+         drive of each type.
+
+Changes in 2.07:
+       * MEMDISK: Workaround for BIOSes which go into a snit when
+         they get a RESET command for the floppy system when there is
+         no floppy in the system.
+       * PXELINUX: Add "ipappend 2", which passes the hardware
+         address of the boot interface to the kernel as a
+         command-line option.
+       * mkdiskimage: fix the generation of the end limit.
+       * PXELINUX: Fix multiple bugs in chainloading of other NBPs.
+       * MEMDISK: Fix bug that would occationally cause "ran out of
+         input data" when using compressed disk images.
+       * SYSLINUX: Updates for the win32 installer (from Lars Munch.)
+       * PXELINUX: PXELINUX-specific options are now recognized both
+         in a vendor-option-space (a.k.a. type 43 encapsulated) as
+         well as in a site-option-space (unencapsulated.)
+       * COM32: Don't crash when DS != 0.
+       * COMBOOT/COM32: Make file reading work correctly.  Thanks to
+         Phung Chi Kien for submitting a test program.
+
+Changes in 2.06:
+       * ALL: Fix problem that would occationally cause a
+         boot failure, depending on the length of the kernel.
+       * ISOLINUX: Fix problem that would occationally cause a
+         boot failure, depending on the length of directories.
+       * SYSLINUX: Win32 installer now flushes buffers.
+       * ppmtolss16: Be fully compliant with the PNM spec;
+         actually process comments in the header and odd
+         alignments of the various parameters, as well as
+         "plain" (not raw) files and PBM and PGM files.
+       * PXELINUX: Lower the default MTU to 1472 in order to deal
+         with systems with slightly nonstandard MTUs, and PXE
+         stacks which don't defragment correctly.  Unfortunately this
+         is very hard to test dynamically.
+
+Changes in 2.05:
+       * PXELINUX: Add a default query based on the hardware address
+         of the boot device.  This is in lower case hexadecimal form
+         separated by dashes and including the hardware type, for
+         example, the Ethernet (type 1) address 88:99:AA:BB:CC:DD
+         would query the file pxelinux.cfg/01-88-99-aa-bb-cc-dd.
+        * PXELINUX: Fix bug involving non-IP-based config file names.
+       * SYSLINUX: New installer for WinNT-based systems, from Lars
+         Munch.
+       * MEMDISK: Fix handling of memory region overlap when
+         decompressing.  Thanks to Mikhail Kupchik for identifying
+         the problem.
+
+Changes in 2.04:
+       * ALL: Reclaim even more low memory by observing that
+         comboot_seg == real_mode_seg is perfectly fine, and by the
+         fact that the 1000h segment managed to get unused in all
+         derivatives...
+       * PXELINUX: Attempt to negotiate full Ethernet-sized blocks
+         (1468 bytes) using the blksize option.
+       * SYSLINUX: Resurrect the old no-mtools version of the
+         installer, although as a root-only tool.  Some distributors
+         have indicated that they need a small standalone installer.
+       * MEMDISK: Fix a memory offset computation error when
+         installing compressed disks which generally would cause
+         1 MB of memory to be wasted.
+       * MEMDISK: Fix installing the E820 memory map.  Calling
+         INT 15h AX=0E820h with MEMDISK 2.03 loaded would give a
+         completely corrupt memory map.
+       * SYSLINUX: Make libsyslinux a dynamic library, so that it can
+         be updated separately from client programs.  The whole idea,
+         after all, is to enable alternate programs to become
+         syslinux installers.
+       * Include an rpm spec file in the distribution, so rpmbuild
+         -ta works.
+
+Changes in 2.03:
+       * Actually support comment lines in the configuration file.
+       * PXELINUX: Try to resolve some problems with stack switches.
+       * PXELINUX: Handle PXE stacks with broken routing.
+         With these workarounds, the remote install PXE boot floppy
+         (rbfg.exe) from Argon Technologies should work correctly.
+       * Fix problems with Perl scripts in UTF-8 locales.
+       * You probably need NASM 0.98.34 or later to compile this
+         version.  0.98.36 is recommended.
+       * MEMDISK: Now supports gzip compressed images.
+
+Changes in 2.02:
+       * SYSLINUX: Security flaws have been found in the SYSLINUX
+         installer when running setuid root.  Rewrite the SYSLINUX
+         installer so it uses mtools instead.  It therefore now
+         requires mtools (specifically mcopy and mattrib) to exist on
+         your system, but it will not require root privileges and
+         SHOULD NOT be setuid.
+
+Changes in 2.01:
+       * MEMDISK: Fix memory sizing bug when the ramdisk crosses the
+         16 MB boundary.
+       * MEMDISK: Add a "pause" option to stop immediately before
+         booting, to read off the messages.
+       * MEMDISK: Support disk images with DOSEMU headers.
+       * Update the mkdiskimage script to handle newer mtools
+         versions, and be able to generate disk images with DOSEMU
+         headers (controlled by the -d option).
+       * Fix the COM32 sample program.
+       * PXELINUX, ISOLINUX: Fix some COMBOOT API calls.
+       * PXELINUX: Doc fix.
+       * Build SYSLINUX into a small library for encapsulation into
+         other programs (however, please keep in mind this is a GPL'd
+         library.)
+       * SYSLINUX: Make installer work with "owner" in /etc/fstab.
+       * SYSLINUX: Fix issue with working on nonpartitioned hard disk
+         devices.  THIS CONFIGURATION IS NOT RECOMMENDED.
+
+Changes in 2.00:
+       * ALL: Add support for "COM32" (32-bit COMBOOT) images.
+       * ALL: Add an API for COMBOOT/COM32 images.  See comboot.doc
+         for details.  There is a C development environment for
+         COM32 being created; it should be ready at some point in
+         the future.
+       * Fix mbr.asm so that it actually works.
+       * SYSLINUX: The syslinux installer *SHOULD* now be safe to
+         run setuid root.
+       * PXELINUX: Fix bug where PXELINUX would override random
+         chunks of the UNDI code segment!  Thanks to Kevin Tran for
+         finding this bug.
+       * ISOLINUX: Fix a bug related to slashes in pathnames.
+       * ISOLINUX: Fix a bug in handling initrds over 128 MB.
+       * ALL: Make the <Ctrl-V> key print out the version; this is
+         to help debugging.
+       * Add a small script, mkdiskimage, to create a DOS-formatted
+         hard disk image using mtools.  This may be useful in
+         conjunction with MEMDISK.
+       * ISOLINUX: Search for a /boot/isolinux directory as well as
+         /isolinux.
+       * ALL: Fix a bug related to very long configuration files.
+       * PXELINUX: Work around a NASM bug which would result in no
+         delay before reset if an error occurs.
+
+Changes in 1.76:
+       * ISOLINUX: Remove code no longer used which caused hangs on
+         some Toshiba laptops.
+
+Changes in 1.75:
+       * ALL: NASM 0.98.32 or later is now required to build
+         SYSLINUX from sources.
+       * SYSLINUX: put back in the workaround for the BIOS floppy
+         table.  This seems to be a requirement for "extended" floppy
+         formats to work correctly.
+       * SYSLINUX: No longer warn if one is trying to boot on a 286
+         or older.  The above BIOS workaround no longer fits if the
+         requirement to use only 8086-compatible code in the early
+         boot is maintained.  It made sense in 1994, but in 2002 a
+         286 or older is a museum object.
+       * SYSLINUX: Use a downright bizarre, stateful algorithm to try
+         to guess the maximum transfer size.  I am *hoping* this will
+         cut down on the number of systems for which -s is required
+         to work at any acceptable speed.
+       * ISOLINUX: Add a few more workarounds for various broken El
+         Torito BIOSes.
+       * Make sure .depend files aren't accidentally packed...
+       * ALL: Fix bugs in the extension-detect code; this caused
+         files like COMBOOT images and CD boot sectors to be
+         mis-identified as Linux kernels and rejected.
+       * ALL: Fix the return from COMBOOT.
+       * ALL: Do some of the early groundwork for supporting DOS
+         system calls in COMBOOT.
+       * Get rid of unnecessary "near" directives, making the code
+         bigger.
+       * PXELINUX: Put the PXE stack back in the init state before
+         invoking a chain-loaded NBP.
+       * PXELINUX: Actually found the combination of calls that
+         allows some (most?) PXE 2+ stacks to be unloaded from memory
+         properly.
+       * PXELINUX: Add "keeppxe" command-line option to disable
+         the standard unloading of the PXE stack.
+
+Changes in 1.74:
+       * SYSLINUX: fix bug that would cause valid kernel images to be
+         labelled "invalid".
+
+Changes in 1.73:
+       * Work on removing gratuitous differences between modules.
+       * Break up the source in common and module-specific files.
+       * PXELINUX: Allow chaining of other PXE NBPs.
+       * ISOLINUX: Allow loading "CD-ROM boot sectors".
+       * ALL: generalize the definition of a boot sector/NBP.
+
+Changes in 1.72:
+       * PXELINUX, ISOLINUX: Fix bugs in the new core code.
+
+Changes in 1.71:
+       * Fix a "brown paper bag" class bug in the new core code.
+
+Changes in 1.70:
+       * Major code restructuring.
+       * Relax the conventional memory limits somewhat.
+       * MEMDISK: Set up the "version number string" pointer in the
+         header correctly.
+        * SYSLINUX: Fix, again, "the bug that won't die": the use of
+          the offset parameter with the SYSLINUX installer.
+       * SYSLINUX: Fix possible superblock corruption problem in the
+         SYSLINUX installer.
+
+Changes in 1.67:
+       * Handle bug in the location of initrd.
+
+Changes in 1.66:
+       * MEMDISK: Make compile with newer versions of gcc.
+
+Changes in 1.65:
+       * ISOLINUX: Support booting disk image files (to boot DOS or
+         other non-Linux operating systems), *IF* the BIOS works
+         correctly; unfortunately many BIOSes apparently don't.
+       * Support Linux boot protocol version 2.03 (explicitly
+         specify the initrd address limit.)
+       * Handle small "pseudo-kernels"; images that use the Linux
+         kernel boot protocols but are less than 64K in size.
+       * MEMDISK: New subsystem; this is a driver which allows
+         legacy OSes to boot using an in-memory simulated disk.
+         See memdisk/memdisk.doc for more info.
+       * PXELINUX, ISOLINUX: Correctly handle files larger than 65535
+         blocks (32 MB for PXELINUX, 128 MB for ISOLINUX.)
+       * PXELINUX: Make a best-effort attempt at freeing all memory
+         claimed.  From the looks of it, it will fail on most PXE
+         stacks.
+
+Changes in 1.64:
+       * Limited support for hardware flow control when using a
+         serial port console.
+       * Support specifying the serial port I/O address explicitly.
+       * Make DOS installer hopefully behave more nicely when used on
+         recent Windows versions.
+       * Fix returning to text mode when a font has been specified.
+       * Attempt to detect missing serial port hardware and disable
+         the serial port if there is nothing there.
+
+Changes in 1.63:
+       * Make the ppmtolss16 program handle color conversion more
+         correctly.
+       * Clean up "make install" target, honour INSTALLROOT if it
+         exists.
+       * SYSLINUX: Fix stack-smash bug identified by Steffen
+         Winterfeldt.
+       * Hopefully fix return-to-text-mode on some graphics cards.
+       * ISOLINUX: Bug workaround for Award BIOS 4.51, and perhaps
+         other buggy BIOSes as well.
+
+Changes in 1.62:
+       * PXELINUX: Allow the DHCP server to override the
+         configuration file name and pathname prefix, using
+         "site-specific" DHCP options.
+       * PXELINUX: Documentation fixes.
+       * PXELINUX: Fix the "ipappend" option; the last two values
+         were reversed vs. what the kernel expected.
+       * Introduce a way to return to text mode once we are already
+         in graphics mode.  This may be useful for F-key help
+         screens.
+       * Fix several bugs in the way return to text mode was handled.
+
+Changes in 1.61:
+       * ISOLINUX: Support full pathname searches.  Max length for a
+         pathname is 255 characters.  As a result, only 64 "label"
+         statements are supported in ISOLINUX.
+       * PXELINUX: Max filename length extended to 63 characters.
+
+Changes in 1.60:
+       * Add support for graphical splash screens.
+       * Add mode control characters, which allows you to control
+         message display output depending on output mode (text,
+         graphics, or serial port.)
+       * ISOLINUX: New program, which boots Linux from a CD-ROM
+         without using floppy emulation mode.  See isolinux.doc for
+         more details.
+       * PXELINUX: Don't search for boot sector file types, since
+         they don't work anyway.
+       * SYSLINUX: Document the LOCK command for Win9x, and the error
+         dialog box for WinNT/2K.
+
+Changes in 1.54:
+       * PXELINUX: Fix code for finding !PXE from PXENV+.  This was
+         due to a spec bug; match the most recent spec since that
+         seems to be what implementations actually do.
+       * SYSLINUX: Add some smarts to the boot sector, which
+         hopefully should reduce the number of systems which require 
+         stupid mode ("syslinux -s").
+       * PXELINUX: Document further some of the pathologies with old
+         PXE stacks.
+       * When specifying a "default" command line, no longer
+         automatically appent "auto".  See the "DEFAULT" command in
+         syslinux.doc for more information.
+       * PXELINUX: Clean up the allocation of local socket numbers.
+
+Changes in 1.53:
+       * PXELINUX: Rename pxelinux.bin to pxelinux.0, to match what
+         most PXE servers seem to expect.
+       * PXELINUX: Update the DHCP/boot server setup documentation.
+       * PXELINUX: Support new "localboot" option for "label"
+         sections.
+       * PXELINUX: More robust parsing of DHCP/boot server packets.
+       * PXELINUX: Include a small utility program "gethostip" to
+         compute hexadecimal IP addresses.
+
+Changes in 1.52:
+       * PXELINUX: Fix bugs introduced by new A20 code.  (SYSLINUX
+         has also been changed for code consistency reasons, but I'm
+         pretty sure the changes are don't care on SYSLINUX.)
+       * Documentation updates.
+       * PXELINUX: Add "ipappend" option to generate an ip= option to
+         the kernel.
+
+Changes in 1.51:
+       * PXELINUX: Not all PXE stacks fill in the IP address for a
+         type 3 cached info query.  Use a type 2 cached info query
+         for this information (only.)
+       * Yet another attempt at A20 coding.  Now support BIOS call
+         15:2401 as well, and handle machines which always have A20
+         on separately.
+       * Support memory detection using INT 15h, AX=0E820h.  BIOS
+         manufacturers have apparently gotten sloppy about keeping
+         INT 15h, AX=0E801h working properly.
+       * Don't issue <CR><LF> onto the serial port when we're doing
+         screen wraparound.
+
+Changes in 1.50:
+       * Yet another A20-code update.  It seems some "legacy-free"
+         machines and embedded gear simply don't have a KBC to talk
+         to, and that waiting for one will wait forever.  Sigh.
+
+Changes in 1.49:
+       * SYSLINUX: Implement a hack for BIOS drivers which hog significant
+         chunks of low memory during boot.  (Note: PXELINUX already
+         had this modification.  SYSLINUX does still require that the
+         low 512K is available; PXELINUX requires 384K.  Machines
+         with a physical memory hole in the low 640K cannot boot
+         Linux no matter what.)  Depending what the reason is for the
+         memory hole, a new kernel (2.4.0-test3-pre3 or later) may be
+         required.
+       * SYSLINUX: Default installer binary now compiled against
+         glibc 2.1.  If this is inappropriate for your system and you
+         still want to use the offical version of SYSLINUX, please
+         follow the instructions in "distrib.doc" to rebuild the
+         installer.
+       * SYSLINUX: Linux installer program now supports -o <offset>
+         option which does a loopback mount with the
+         -o loop,offset=<> option.  Useful to run SYSLINUX on an
+         individual partition of a whole-harddisk image.
+       * Include the source code to a Master Boot Record (MBR)
+         functionally equivalent to the one installed DOS except it
+         includes EBIOS support, and should be resistant to geometry
+         changes.  The MBR code is public domain.
+       * PXELINUX: Fix "double p" bug: if the tftp prefix was null,
+         all filenames would get a "p" preprended, e.g.
+         "ppxelinux.cfg" and "pvmlinux".
+
+Changes in 1.48:
+       * PXELINUX: Workaround for PXE ROMs based on the Intel PXE PDK
+         3.0 build 071 and earlier: missing !PXE structure pointer.
+       * PXELINUX: Handle larger BOOTP/DHCP packages.
+       * PXELINUX: The command line passing was broken; fix.
+       * PXELINUX: Make COMBOOT images work.
+       * PXELINUX: Documentation on how to make booting work using
+         the PDK 3.0-derived clients, which aren't so generous as to
+         allow booting with only "PXEClient" specified.
+
+Changes in 1.47:
+       * PXELINUX: RFC 1123 states that a TFTP implementation MUST
+         use adaptive timeout, "at least an exponential backoff of
+          retransmission timeout is necessary."  Implement a very
+         simple exponential backoff for retransmits.
+       * PXELINUX: Updated documentation, including pointer to new
+         TFTP server.
+       * PXELINUX: When sending ERROR due to bad OACK, use the proper
+         destination port number (why are TFTP port numbers so odd?)
+       * PXELINUX: If the boot dies in the middle somewhere,
+         eventually give up and reset the machine (unattended
+         operation.)
+
+Changes in 1.46:
+       * New program PXELINUX to do network booting using a
+         PXE-compliant (Pre-Execution Environment) network booting
+         PROM.  See pxelinux.doc for details.
+
+Changes in 1.45:
+       * Serial console support.  See syslinux.doc for details.
+
+Changes in 1.44:
+       * Change HIGHMEM_MAX to 38000000h to (hopefully) avoid the
+         kernel stepping on it; 3f000000h was apparently a higher
+         limit than the kernel used!
+
+Changes in 1.43:
+       * Add sys2ansi.pl script to display the contents of a
+         colorized SYSLINUX file.
+       * Changed the io_delay once again, after a report that the
+         old delay port causes hangs on some systems.
+
+Changes in 1.42:
+       * Frob the "fast A20 gate" port as well as the keyboard
+         controller; will this help systems with problems?
+       * Be even more paranoid about A20, unfortunately even this
+         seems to be not paranoid enough... what I don't understand
+         is that if there is hardware out there *this broken*, how
+         can it run Linux at all?  Report an error message rather
+         than hang forever if A20 is stuck.
+       * Include some intermediate files in the distribution, plus
+         provide a "make installer" target for distributors to relink
+         the install programs only.  I would prefer the syslinux boot
+         loader proper to be "binary clean" for debuggablity -- use
+         "make clean ; make installer" to rebuild the installers only.
+
+Changes in 1.41:
+       * Don't get confused by directories, volume labels, or VFAT
+         long names.
+       * Use INT 15h, AX=0E801h to query memory size before trying
+         INT 15h, AH=88h.  This not only provides more headroom
+         between the kernel and the initrd on large-memory machines,
+         but it appears some recent BIOSes actually have started
+         returning garbage for the AH=88h (older) call.
+       * Trust high memory beyond the 15 MB mark if the user has
+         specified it, or if obtained with INT 15h, AH=0E801h (with
+         no memory holes above 1 MB.)
+
+Changes in 1.40:
+       * Increase A20M delay and put in a test to avoid problems on
+         certain IBM Thinkpads (thanks to Donnie Barnes of RedHat
+         for vital info on this one.)
+       * Support COMBOOT style boot command images.
+       * Support chain loading (foreign operating systems, e.g. DOS).
+       * Include a new "copybs" DOS utility to copy a boot sector to
+         a file (under Linux, use "dd".)
+       * Fix the DOS installer to work for disks over 32 MB.
+       * SYSLINUX should now handle disks with more than 65536 tracks.
+
+Changes in 1.37:
+       * Fix a bug that caused "label" statements in syslinux.cfg to
+         not be handled properly.
+       * Updated the documentation.  Among other things, we now allow
+         up to 128 "label" statements.
+
+Changes in 1.36:
+       * Fix for booting old (pre-initrd) kernels.
+       * It seems at least some versions of OS/2 doesn't set up all
+         the fields in the superblock correctly.  Account for that.
+       * Fix bug that caused boot failure when using the mem= option.
+
+Changes in 1.35:
+       * Loading from partitions now should work properly.  (Actually
+         tested, this time.  You should even be able to dd a floppy
+         to a partition and boot from it.)
+       * Removed large workaround code for an alleged ancient BIOS
+         bug I have never actually seen.  The -s option should work
+         on those machines, anyway.
+       * Support for simple keyboard remappings, same as used by
+         LILO (once again to support localization.)  The program
+         keytab-lilo.pl from the LILO distribution included to
+         generate such maps.
+       * Added a "safe, slow and stupid" (-s) option to the
+         installers.  This option will lobotomize the boot sector to
+         hopefully work on even very buggy BIOSes.
+       
+Changes in 1.34:
+       * Ability to load a VGA font on bootup (for localized Linux
+         distributions.) 
+
+Changes in 1.33:
+       * Bug fix in the Linux installer.
+       * Added a workaround for a bug in certain AMI/Intel BIOSes
+         when booting from CD-ROM.
+       * Documentation changes.
+
+Changes in 1.32:
+       * FAT16 filesystems are now supported.
+
+Changes in 1.31:
+       * Now compiles under Linux, using NASM, rather than using
+         Turbo Assembler under DOS.  See http://www.cryogen.com/Nasm
+         for information about NASM.
+       * Linux-hosted SYSLINUX installer, as well as a
+         rewritten DOS installer (now is written in assembler, so we
+         don't need Turbo C.)
+
+Changes in 1.30:
+       * Added support for loading bzImage and initrd loading, and made
+         SYSLINUX new-setup-code aware (SYSLINUX 1.30 id=0x31).
+       * Added LILO-style kernel labels; see the LABEL and IMPLICIT
+         keywords in README file.
+       * Added support for colorization of intro and help screens.
+       * The vga= option is now handled correctly.
+       * Massive rewrite of large chunks of the code in order to
+         support the first two new features.
+
+Changes in 1.20:
+       * Added simple online help at the "boot:" prompt.
+       * Removed 2880K image as I no longer have access to such a
+         floppy drive.  (Donations accepted!!)
+       * Decided to distribute the source in a subdirectory rather
+         than in a nested zipfile.
+
+Changes in 1.11:
+       * Removed a sanity check which would cause booting to fail on
+         Phoenix BIOS version 4.03.  Apparently this BIOS is buggy.
+
+Changes in 1.10:
+       * Added configuration file SYSLINUX.CFG.  This file contains all
+         configurable options, and can be edited from any OS which can
+         access an MS-DOS filesystem; there is no longer a need to run
+         SYSLINUX.EXE except to write the boot sector.
+       * Default command line now given by "default" line in config
+         file.
+       * LINUXMSG.TXT and BOOTMSG.TXT hard-coded file names replaced by
+         "display" and "prompt" lines in config file.
+       * LILO-style option appending now supported ("append" line in
+         config file).
+       * Prompt timeout is now supported ("timeout" line in config
+         file).  The timeout is cancelled when anything is typed on the
+         command line.
+       * Pressing <ESC> or <Ctrl-C> at the Loading... stage now aborts
+         the kernel loading in progress and returns the user to the
+         boot: prompt.
+       * The installer now automatically sets the READONLY flag on
+         LDLINUX.SYS.
+       * Added 2880K disk image.
+
+Changes in 1.03:
+       * Fixed bug that would prevent booting from double-density
+         floppies and other DOS filesystems with multiple sectors per
+         cluster.
+       * Added 720K disk image.
+       * Changed default kernel name on disk images to LINUX.
+
+Changes in 1.02:
+       * Fixed bug that would garble the command line on recent kernels
+         with more than 4 sectors of setup code (this wasn't really a
+         *bug*; rather, a kernel change broke the code.  Unfortunately
+         the Linux boot interface is still sorely undocumented).
+       * Added BOOTMSG.TXT file support (message file which does not
+         force display of the boot prompt).
+
+Changes in 1.01:
+       * Fixed bug on some (most?) 386 BIOSes would require two boot
+         attempts.
diff --git a/syslinux/README b/syslinux/README
new file mode 100644 (file)
index 0000000..ea67e35
--- /dev/null
@@ -0,0 +1,31 @@
+See the following files for documentation about SYSLINUX:
+
+       syslinux.doc        - Usage instructions; manual.
+       distrib.doc         - For creators of Linux distributions.
+       pxelinux.doc        - Documentation specific to PXELINUX.
+       isolinux.doc        - Documentation specific to ISOLINUX.
+       extlinux.doc        - Documentation specific to EXTLINUX.
+       README.menu         - About the menu systems.
+       README.usbkey       - About using SYSLINUX on USB keys.
+       comboot.doc         - About the extension API.
+       memdisk/memdisk.doc - Documentation about MEMDISK.
+       NEWS                - List of changes from previous releases.
+       TODO                - About features planned for future releases.
+       COPYING             - For the license terms of this software.
+
+SYSLINUX now builds in a Linux environment, using nasm.  You need nasm
+version 0.98.38 or later to build SYSLINUX from source.  See
+http://nasm.sf.net/ for information about nasm.
+
+There is now a mailing list for SYSLINUX.  See the end of syslinux.doc
+for details.
+
+SYSLINUX is:
+
+   Copyright 1994-2005 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.
diff --git a/syslinux/README.menu b/syslinux/README.menu
new file mode 100644 (file)
index 0000000..ad4f3a9
--- /dev/null
@@ -0,0 +1,119 @@
+$Id: README.menu,v 1.5 2005/01/21 01:35:33 hpa Exp $
+
+There are two menu systems included with SYSLINUX, the advanced menu
+system, and the simple menu system.
+
+
++++ THE ADVANCED MENU SYSTEM +++
+
+The advanced menu system, written by Murali Krishnan Ganapathy, is
+located in the menu/ subdirectly.  It allows the user to create
+hierarchial submenus, dynamic options, checkboxes, and just about
+anything you want.  It requires that the menu is compiled from a
+simple C file, see menu/simple.c and menu/complex.c for examples.
+
+The advanced menu system doesn't support serial console at this time.
+
+See menu/README for more information.
+
+
++++ THE SIMPLE MENU SYSTEM +++
+
+The simple menu system is a single module located at
+com32/modules/menu.c32.  It uses the same configuration file as the
+regular SYSLINUX command line, and displays all the LABEL statements.
+
+To use the menu system, simply make sure menu.c32 is in the
+appropriate location for your boot medium (the same directory as the
+configuration file for SYSLINUX, EXTLINUX and ISOLINUX, and the same
+directory as pxelinux.0 for PXELINUX), and put the following options
+in your configuration file:
+
+DEFAULT menu.c32
+PROMPT 0
+
+
+There are a few menu additions to the command line, all starting with
+the keyword MENU; like the rest of the SYSLINUX config file
+language, it is case insensitive:
+
+MENU TITLE title
+
+       Give the menu a title.  The title is presented at the top of
+       the menu.
+
+MENU LABEL label
+
+       (Only valid after a LABEL statement.)
+       Changes the label displayed for a specific entry.  This allows
+       you to have a label that isn't suitable for the command line,
+       for example:
+
+       # Soft Cap Linux
+       LABEL softcap
+               MENU LABEL Soft Cap ^Linux 9.6.36
+               KERNEL softcap-9.6.36.bzi
+               APPEND whatever
+
+       # A very dense operating system
+       LABEL brick
+               MENU LABEL ^Windows CE/ME/NT
+               KERNEL chain.c32
+               APPEND hd0 2
+
+       The ^ symbol in a MENU LABEL statement defines a hotkey.
+       The hotkey will be highlighted in the menu and will move the
+       menu cursor immediately to that entry.
+
+MENU HIDE
+
+       (Only valid after a LABEL statement.)
+       Suppresses a particular LABEL entry from the menu.
+
+
+MENU DEFAULT
+
+       (Only valid after a LABEL statement.)
+       Indicates that this entry should be the default.  If no
+       default is specified, use the first one.
+
+
+MENU PASSWD passwd
+
+       (Only valid after a LABEL statement.)
+       Sets a password on this menu entry.  "passwd" can be either a
+       cleartext password or a SHA-1 encrypted password; use the
+       included Perl script "sha1pass" to encrypt passwords.
+       (Obviously, if you don't encrypt your passwords they will not
+       be very secure at all.)
+
+       If you are using passwords, you want to make sure you also use
+       the settings "NOESCAPE 1", "PROMPT 0", and either set
+       "ALLOWOPTIONS 0" or use a master password (see below.)
+
+       If passwd is an empty string, this menu entry can only be
+       unlocked with the master password.
+
+
+MENU MASTER PASSWD passwd
+
+       Sets a master password.  This password can be used to boot any
+       menu entry, and is required for the [Tab] and [Esc] keys to
+       work.
+
+
+The menu system honours the TIMEOUT command; if TIMEOUT is specified
+it will execute the ONTIMEOUT command if one exists, otherwise it will
+pick the default menu option.
+
+Normally, the user can press [Tab] to edit the menu entry, and [Esc]
+to return to the SYSLINUX command line.  However, if the configuration
+file specifies ALLOWOPTIONS 0, these keys will be disabled, and if
+MENU MASTER PASSWD is set, they require the master password.
+
+The simple menu system supports serial console, using the normal
+SERIAL directive.  However, it can be quite slow over a slow serial
+link; you probably want to set your baudrate to 38400 or higher if
+possible.  It requires a Linux/VT220/ANSI-compatible terminal on the
+other end.
+
diff --git a/syslinux/README.usbkey b/syslinux/README.usbkey
new file mode 100644 (file)
index 0000000..af6f9d6
--- /dev/null
@@ -0,0 +1,49 @@
+$Id: README.usbkey,v 1.2 2004/12/30 23:31:14 hpa Exp $
+
+The proper mode to boot a USB key drive in is "USB-HDD".  That is the
+ONLY mode in which the C/H/S geometry encoded on the disk itself
+doesn't have to match what the BIOS thinks it is.  Since geometry on
+USB drives is completely arbitrary, and can vary from BIOS to BIOS,
+this is the only mode which will work in general.
+
+Some BIOSes have been reported (in particular, certain versions of the
+Award BIOS) that cannot boot USB keys in "USB-HDD" mode.  This is a
+very serious BIOS bug, but it is unfortunately rather typical of the
+kind of quality we're seeing out of major BIOS vendors these days.  On
+these BIOSes, you're generally stuck booting them in USB-ZIP mode.
+
+THIS MEANS THE FILESYSTEM IMAGE ON THE DISK HAS TO HAVE A CORRECT
+ZIPDRIVE-COMPATIBLE GEOMETRY.
+
+A standard zipdrive (both the 100 MB and the 250 MB varieties) have a
+"geometry" of 64 heads, 32 sectors, and are partitioned devices with a
+single partition 4 (unlike most other media of this type which uses
+partition 1.)  The 100 MB variety has 96 cylinders, and the 250 MB
+variety has 239 cylinders; but any number of cylinders will do as
+appropriate for the size device you have.  For example, if your device
+reports when inserted into a Linux system:
+
+usb-storage: device found at 4
+  Vendor: 32MB      Model: HardDrive         Rev: 1.88
+  Type:   Direct-Access                      ANSI SCSI revision: 02
+SCSI device sda: 64000 512-byte hdwr sectors (33 MB)
+
+... you would have 64000/(64*32) = 31.25 cylinders; round down to 31.
+
+The script "mkdiskimage" which is supplied with the syslinux
+distribution can be used to initialize USB keys in a Zip-like fashion.
+To do that, calculate the correct number of cylinders (31 in the
+example above), and, if your USB key is /dev/sda (CHECK THE KERNEL
+MESSAGES CAREFULLY - IF YOU ENTER THE WRONG DISK DRIVE IT CANNOT BE
+RECOVERED), run:
+
+       mkdiskimage -4 /dev/sda 0 64 32
+
+(The 0 means automatically determine the size of the device, and -4
+means mimic a zipdisk by using partition 4.)
+
+Then you should be able to run
+
+       syslinux /dev/sda4
+
+... and mount /dev/sda4 and put your files on it as needed.
diff --git a/syslinux/TODO b/syslinux/TODO
new file mode 100644 (file)
index 0000000..48c83da
--- /dev/null
@@ -0,0 +1,30 @@
+$Id: TODO,v 1.29 2005/01/05 09:21:07 hpa Exp $
+
+*** To do in the short term:
+
+- PXELINUX: Support changing the default server and boot file prefix?
+
+- Support loading a new configuration file.
+
+- "Shuffle and boot" extension, with the appropriate com32 library
+  support.
+
+- Library support for all the comboot system calls.
+
+
+*** Future projects:
+
+- Clean up the command-line parsing.
+
+- Cleaned up documentation, with a real man page.
+
+- Subdirectory support in SYSLINUX.
+
+- Support files that span multiple input media (SYSLINUX)
+  -> Seems to be getting less important; floppies are dying?
+
+- Clean up the handling of sections
+
+- Add "localboot" support to SYSLINUX (using the ISOLINUX feature
+  set.)
+  OBSOLETE: chain.c32 is probably better.
diff --git a/syslinux/bcopy32.inc b/syslinux/bcopy32.inc
new file mode 100644 (file)
index 0000000..3e069e8
--- /dev/null
@@ -0,0 +1,458 @@
+;; $Id: bcopy32.inc,v 1.16 2005/01/06 22:34:06 hpa Exp $
+;; -----------------------------------------------------------------------
+;;   
+;;   Copyright 1994-2005 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.
+;;
+;; -----------------------------------------------------------------------
+
+;;
+;; bcopy32.inc
+;; 
+;; 32-bit bcopy routine for real mode
+;;
+
+;
+; 32-bit bcopy routine for real mode
+;
+; We enter protected mode, set up a flat 32-bit environment, run rep movsd
+; and then exit.  IMPORTANT: This code assumes cs == 0.
+;
+; This code is probably excessively anal-retentive in its handling of
+; segments, but this stuff is painful enough as it is without having to rely
+; on everything happening "as it ought to."
+;
+; NOTE: this code is relocated into low memory, just after the .earlybss
+; segment, in order to support to "bcopy over self" operation.
+;
+
+               section .bcopy32
+               align 8
+__bcopy_start:
+
+               ; This is in the .text segment since it needs to be
+               ; contiguous with the rest of the bcopy stuff
+
+bcopy_gdt:     dw bcopy_gdt_size-1     ; Null descriptor - contains GDT
+               dd bcopy_gdt            ; pointer for LGDT instruction
+               dw 0
+               dd 0000ffffh            ; Code segment, use16, readable,
+               dd 00009b00h            ; present, dpl 0, cover 64K
+               dd 0000ffffh            ; Data segment, use16, read/write,
+               dd 008f9300h            ; present, dpl 0, cover all 4G
+               dd 0000ffffh            ; Data segment, use16, read/write,
+               dd 00009300h            ; present, dpl 0, cover 64K
+               ; The rest are used for COM32 only
+               dd 0000ffffh            ; Code segment, use32, readable,
+               dd 00cf9b00h            ; present, dpl 0, cover all 4G
+               dd 0000ffffh            ; Data segment, use32, read/write,
+               dd 00cf9300h            ; present, dpl 0, cover all 4G
+bcopy_gdt_size:        equ $-bcopy_gdt
+
+;
+; bcopy:
+;      32-bit copy, overlap safe
+;
+; Inputs:
+;      ESI     - source pointer
+;      EDI     - target pointer
+;      ECX     - byte count
+;      DF      - zero
+;
+; Outputs:
+;      ESI     - first byte after source
+;      EDI     - first byte after target
+;      ECX     - zero
+;
+bcopy:         push eax
+               push esi
+               push edi
+               push ecx
+               pushf                   ; Saves, among others, the IF flag
+               push ds
+               push es
+
+               cli
+               call enable_a20
+
+               o32 lgdt [cs:bcopy_gdt]
+               mov eax,cr0
+               or al,1
+               mov cr0,eax             ; Enter protected mode
+               jmp 08h:.in_pm
+
+.in_pm:                mov ax,10h              ; Data segment selector
+               mov es,ax
+               mov ds,ax
+
+               ; Don't mess with ss, fs, and gs.  They are never changed
+               ; and should be able to make it back out of protected mode.
+               ; This works because (and only because) we don't take
+               ; interrupt in protected mode.
+
+               cmp esi,edi             ; If source > destination, we might
+               ja .reverse             ; have to copy backwards
+
+.forward:
+               mov al,cl               ; Save low bits
+               and al,3
+               shr ecx,2               ; Convert to dwords
+               a32 rep movsd           ; Do our business
+               ; At this point ecx == 0
+
+               mov cl,al               ; Copy any fractional dword
+               a32 rep movsb
+               jmp .exit
+
+.reverse:
+               std                     ; Reverse copy
+               lea esi,[esi+ecx-1]     ; Point to final byte
+               lea edi,[edi+ecx-1]
+               mov eax,ecx
+               and ecx,3
+               shr eax,2
+               a32 rep movsb
+               
+               ; Change ESI/EDI to point to the last dword, instead
+               ; of the last byte.
+               sub esi,3
+               sub edi,3
+               mov ecx,eax
+               a32 rep movsd
+
+               cld
+
+.exit:
+               mov ax,18h              ; "Real-mode-like" data segment
+               mov es,ax
+               mov ds,ax
+
+               mov eax,cr0
+               and al,~1
+               mov cr0,eax             ; Disable protected mode
+               jmp 0:.in_rm
+
+.in_rm:                ; Back in real mode
+               pop es
+               pop ds
+               call disable_a20
+
+               popf                    ; Re-enables interrupts
+               pop eax
+               pop edi
+               pop esi
+               add edi,eax
+               add esi,eax
+               pop eax
+               ret
+
+;
+; Routines to enable and disable (yuck) A20.  These routines are gathered
+; from tips from a couple of sources, including the Linux kernel and
+; http://www.x86.org/.  The need for the delay to be as large as given here
+; is indicated by Donnie Barnes of RedHat, the problematic system being an
+; IBM ThinkPad 760EL.
+;
+; We typically toggle A20 twice for every 64K transferred.
+; 
+%define        io_delay        call _io_delay
+%define IO_DELAY_PORT  80h             ; Invalid port (we hope!)
+%define disable_wait   32              ; How long to wait for a disable
+
+; Note the skip of 2 here
+%define A20_DUNNO      0               ; A20 type unknown
+%define A20_NONE       2               ; A20 always on?
+%define A20_BIOS       4               ; A20 BIOS enable
+%define A20_KBC                6               ; A20 through KBC
+%define A20_FAST       8               ; A20 through port 92h
+
+slow_out:      out dx, al              ; Fall through
+
+_io_delay:     out IO_DELAY_PORT,al
+               out IO_DELAY_PORT,al
+               ret
+
+enable_a20:
+               pushad
+               mov byte [cs:A20Tries],255 ; Times to try to make this work
+
+try_enable_a20:
+;
+; Flush the caches
+;
+%if DO_WBINVD
+               call try_wbinvd
+%endif
+
+;
+; If the A20 type is known, jump straight to type
+;
+               mov bp,[cs:A20Type]
+               jmp word [cs:bp+A20List]
+
+;
+; First, see if we are on a system with no A20 gate
+;
+a20_dunno:
+a20_none:
+               mov byte [cs:A20Type], A20_NONE
+               call a20_test
+               jnz a20_done
+
+;
+; Next, try the BIOS (INT 15h AX=2401h)
+;
+a20_bios:
+               mov byte [cs:A20Type], A20_BIOS
+               mov ax,2401h
+               pushf                           ; Some BIOSes muck with IF
+               int 15h
+               popf
+
+               call a20_test
+               jnz a20_done
+
+;
+; Enable the keyboard controller A20 gate
+;
+a20_kbc:
+               mov dl, 1                       ; Allow early exit
+               call empty_8042
+               jnz a20_done                    ; A20 live, no need to use KBC
+
+               mov byte [cs:A20Type], A20_KBC  ; Starting KBC command sequence
+
+               mov al,0D1h                     ; Command write
+               out 064h, al
+               call empty_8042_uncond
+
+               mov al,0DFh                     ; A20 on
+               out 060h, al
+               call empty_8042_uncond
+
+               ; Verify that A20 actually is enabled.  Do that by
+               ; observing a word in low memory and the same word in
+               ; the HMA until they are no longer coherent.  Note that
+               ; we don't do the same check in the disable case, because
+               ; we don't want to *require* A20 masking (SYSLINUX should
+               ; work fine without it, if the BIOS does.)
+.kbc_wait:     push cx
+               xor cx,cx
+.kbc_wait_loop:
+               call a20_test
+               jnz a20_done_pop
+               loop .kbc_wait_loop
+
+               pop cx
+;
+; Running out of options here.  Final attempt: enable the "fast A20 gate"
+;
+a20_fast:
+               mov byte [cs:A20Type], A20_FAST ; Haven't used the KBC yet
+               in al, 092h
+               or al,02h
+               and al,~01h                     ; Don't accidentally reset the machine!
+               out 092h, al
+
+.fast_wait:    push cx
+               xor cx,cx
+.fast_wait_loop:
+               call a20_test
+               jnz a20_done_pop
+               loop .fast_wait_loop
+
+               pop cx
+
+;
+; Oh bugger.  A20 is not responding.  Try frobbing it again; eventually give up
+; and report failure to the user.
+;
+
+
+               dec byte [cs:A20Tries]
+               jnz try_enable_a20
+
+               mov si, err_a20
+               jmp abort_load
+;
+; A20 unmasked, proceed...
+;
+a20_done_pop:  pop cx
+a20_done:      popad
+               ret
+
+;
+; This routine tests if A20 is enabled (ZF = 0).  This routine
+; must not destroy any register contents.
+;
+a20_test:
+               push es
+               push cx
+               push ax
+               mov cx,0FFFFh           ; HMA = segment 0FFFFh
+               mov es,cx
+               mov cx,32               ; Loop count
+               mov ax,[cs:A20Test]
+.a20_wait:     inc ax
+               mov [cs:A20Test],ax
+               io_delay                ; Serialize, and fix delay
+               cmp ax,[es:A20Test+10h]
+               loopz .a20_wait
+.a20_done:     pop ax
+               pop cx
+               pop es
+               ret
+
+disable_a20:
+               pushad
+;
+; Flush the caches
+;
+%if DO_WBINVD
+               call try_wbinvd
+%endif
+
+               mov bp,[cs:A20Type]
+               jmp word [cs:bp+A20DList]
+
+a20d_bios:
+               mov ax,2400h
+               pushf                           ; Some BIOSes muck with IF
+               int 15h
+               popf
+               jmp short a20d_snooze
+
+;
+; Disable the "fast A20 gate"
+;
+a20d_fast:
+               in al, 092h
+               and al,~03h
+               out 092h, al
+               jmp short a20d_snooze
+
+;
+; Disable the keyboard controller A20 gate
+;
+a20d_kbc:
+               call empty_8042_uncond
+               mov al,0D1h
+               out 064h, al            ; Command write
+               call empty_8042_uncond
+               mov al,0DDh             ; A20 off
+               out 060h, al
+               call empty_8042_uncond
+               ; Wait a bit for it to take effect
+a20d_snooze:
+               push cx
+               mov cx, disable_wait
+.delayloop:    call a20_test
+               jz .disabled
+               loop .delayloop
+.disabled:     pop cx
+a20d_dunno:
+a20d_none:
+               popad
+               ret
+
+;
+; Routine to empty the 8042 KBC controller.  If dl != 0
+; then we will test A20 in the loop and exit if A20 is
+; suddenly enabled.
+;
+empty_8042_uncond:
+               xor dl,dl
+empty_8042:
+               call a20_test
+               jz .a20_on
+               and dl,dl
+               jnz .done
+.a20_on:       io_delay
+               in al, 064h             ; Status port
+               test al,1
+               jz .no_output
+               io_delay
+               in al, 060h             ; Read input
+               jmp short empty_8042
+.no_output:
+               test al,2
+               jnz empty_8042
+               io_delay
+.done:         ret     
+
+;
+; Execute a WBINVD instruction if possible on this CPU
+;
+%if DO_WBINVD
+try_wbinvd:
+               wbinvd
+               ret
+%endif
+
+;
+; bcopy_over_self:
+;
+; This routine is used to shuffle memory around, followed by
+; invoking an entry point somewhere in low memory.  This routine
+; can clobber any memory above 7C00h, we therefore have to move
+; necessary code into the trackbuf area before doing the copy,
+; and do adjustments to anything except BSS area references.
+;
+; NOTE: Since PXELINUX relocates itself, put all these
+; references in the ".earlybss" segment.
+;
+; After performing the copy, this routine resets the stack and
+; jumps to the specified entrypoint.
+;
+; IMPORTANT: This routine does not canonicalize the stack or the
+; SS register.  That is the responsibility of the caller.
+;
+; Inputs:
+;      DS:BX           -> Pointer to list of (dst, src, len) pairs
+;      AX              -> Number of list entries
+;      [CS:EntryPoint] -> CS:IP to jump to
+;      On stack        - initial state (fd, ad, ds, es, fs, gs)
+;
+shuffle_and_boot:
+               and ax,ax
+               jz .done
+.loop:
+               mov edi,[bx]
+               mov esi,[bx+4]
+               mov ecx,[bx+8]
+               call bcopy
+               add bx,12
+               dec ax
+               jnz .loop
+
+.done:
+               pop gs
+               pop fs
+               pop es
+               pop ds
+               popad
+               popfd
+               jmp far [cs:EntryPoint]
+
+               align 2
+A20List                dw a20_dunno, a20_none, a20_bios, a20_kbc, a20_fast
+A20DList       dw a20d_dunno, a20d_none, a20d_bios, a20d_kbc, a20d_fast
+a20_adjust_cnt equ ($-A20List)/2
+
+A20Type                dw A20_NONE             ; A20 type
+
+               ; Total size of .bcopy32 section
+               alignb 4, db 0          ; Even number of dwords
+__bcopy_size   equ $-__bcopy_start
+
+               section .earlybss
+               alignb 2
+EntryPoint     resd 1                  ; CS:IP for shuffle_and_boot
+SavedSSSP      resd 1                  ; Saved real mode SS:SP
+A20Test                resw 1                  ; Counter for testing status of A20
+A20Tries       resb 1                  ; Times until giving up on A20
diff --git a/syslinux/bin2c.pl b/syslinux/bin2c.pl
new file mode 100644 (file)
index 0000000..01c2d26
--- /dev/null
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+## $Id: bin2c.pl,v 1.6 2004/12/14 23:03:28 hpa Exp $
+## -----------------------------------------------------------------------
+##   
+##   Copyright 1998-2004 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.
+##
+## -----------------------------------------------------------------------
+
+#
+# bin2c.pl: binary file to C source converter
+#
+
+eval { use bytes; };
+eval { binmode STDIN; };
+
+if ( $#ARGV != 0 ) {
+    print STDERR "Usage: $0 table_name < input_file > output_file\n";
+    exit 1;
+}
+
+($table_name) = @ARGV;
+
+printf "unsigned char %s[] = {\n", $table_name;
+
+$pos = 0;
+$linelen = 8;
+
+$total_len = 0;
+
+while ( ($n = read(STDIN, $data, 4096)) > 0 ) {
+    $total_len += $n;
+    for ( $i = 0 ; $i < $n ; $i++ ) {
+       $byte = substr($data, $i, 1);
+       if ( $pos >= $linelen ) {
+           print ",\n\t";
+           $pos = 0;
+       } elsif ( $pos > 0 ) {
+           print ", ";
+       } else {
+           print "\t";
+       }
+       printf("0x%02x", unpack("C", $byte));
+       $pos++;
+    }
+}
+
+printf "\n};\n\nunsigned int %s_len = %u;\n", $table_name, $total_len;
+
+@st = stat STDIN;
+
+printf "\nint %s_mtime = %d;\n", $table_name, $st[9];
+
+exit 0;
diff --git a/syslinux/bin2hex.pl b/syslinux/bin2hex.pl
new file mode 100755 (executable)
index 0000000..a211e53
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+## "$Id: bin2hex.pl,v 1.3 2003/07/01 00:49:31 hpa Exp $"
+## -----------------------------------------------------------------------
+##   
+##   Copyright 2003 H. Peter Anvin - All Rights Reserved
+##
+##   Permission is hereby granted, free of charge, to any person
+##   obtaining a copy of this software and associated documentation
+##   files (the "Software"), to deal in the Software without
+##   restriction, including without limitation the rights to use,
+##   copy, modify, merge, publish, distribute, sublicense, and/or
+##   sell copies of the Software, and to permit persons to whom
+##   the Software is furnished to do so, subject to the following
+##   conditions:
+##   
+##   The above copyright notice and this permission notice shall
+##   be included in all copies or substantial portions of the Software.
+##   
+##   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+##   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+##   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+##   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+##   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+##   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+##   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+##   OTHER DEALINGS IN THE SOFTWARE.
+##
+## -----------------------------------------------------------------------
+
+eval { use bytes; }; eval { binmode STDIN; };
+
+$len = 0;
+while ( read(STDIN,$ch,1) ) {
+    $cc = ord($ch);
+    $len += printf ("%x", $cc);
+    if ( $len > 72 ) {
+       print "\n";
+       $len = 0;
+    } else {
+       print " ";
+       $len++;
+    }
+}
+print "\n" if ( $len );
+exit 0;
+
diff --git a/syslinux/bios.inc b/syslinux/bios.inc
new file mode 100644 (file)
index 0000000..8b11fc4
--- /dev/null
@@ -0,0 +1,40 @@
+;; $Id: bios.inc,v 1.3 2004/12/14 22:46:24 hpa Exp $
+;; -----------------------------------------------------------------------
+;;   
+;;   Copyright 1994-2004 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.
+;;
+;; -----------------------------------------------------------------------
+
+;;
+;; bios.inc
+;; 
+;; Header file for the BIOS data structures etc.
+;;
+
+%ifndef _BIOS_INC
+%define _BIOS_INC
+
+               absolute 4*1Eh          ; In the interrupt table
+fdctab         equ $
+fdctab1                resw 1
+fdctab2                resw 1
+               absolute 0400h
+serial_base    resw 4                  ; Base addresses for 4 serial ports
+               absolute 0413h
+BIOS_fbm       resw 1                  ; Free Base Memory (kilobytes)
+               absolute 0462h
+BIOS_page      resb 1                  ; Current video page
+               absolute 046Ch
+BIOS_timer     resw 1                  ; Timer ticks
+               absolute 0472h
+BIOS_magic     resw 1                  ; BIOS reset magic
+                absolute 0484h
+BIOS_vidrows    resb 1                 ; Number of screen rows
+
+%endif ; _BIOS_INC
diff --git a/syslinux/bootsect.inc b/syslinux/bootsect.inc
new file mode 100644 (file)
index 0000000..dce9a59
--- /dev/null
@@ -0,0 +1,157 @@
+;; $Id: bootsect.inc,v 1.15 2005/01/12 00:34:54 hpa Exp $
+;; -----------------------------------------------------------------------
+;;   
+;;   Copyright 1994-2005 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.
+;;
+;; -----------------------------------------------------------------------
+
+;;
+;; bootsect.inc
+;; 
+;; Load a boot sector (or other bootstrap program.)
+;;
+;; Unlike previous versions of this software, this doesn't require that
+;; the length is 512 bytes.  This allows PXE bootstraps and WinNT
+;; "CD boot sectors" to be invoked.
+;;
+
+;
+; Load a boot sector
+;
+is_bootsector:
+%if IS_SYSLINUX || IS_MDSLINUX
+               ; Transfer zero bytes
+               mov byte [CopySuper],0
+               jmp short load_bootsec
+
+is_bss_sector:
+               ; Transfer the superblock
+               mov byte [CopySuper],superblock_len
+%endif
+load_bootsec:
+               xchg dx,ax
+               shl eax,16
+               xchg dx,ax              ; Now EAX = file length
+               mov edi, 100000h
+               mov [trackbuf+4],edi    ; Copy from this address
+               push edi                ; Save load address
+               xor dx,dx               ; No padding
+               call load_high
+               call crlf
+
+               sub edi,100000h
+               mov [trackbuf+8],edi    ; Save length
+
+               mov eax,7C00h           ; Entry point
+               mov [trackbuf],eax      ; Copy to this address
+               mov [EntryPoint],eax    ; Jump to this address when done
+
+%if IS_SYSLINUX || IS_MDSLINUX
+               movzx ecx,byte [CopySuper]
+               jcxz .not_bss
+
+               ; For a BSS boot sector we have to patch.
+               mov esi,superblock
+               mov edi,100000h+(superblock-bootsec)
+               call bcopy
+
+.not_bss:
+%endif
+
+               xor edx,edx
+               xor esi,esi
+%if IS_SYSLINUX || IS_MDSLINUX || IS_EXTLINUX
+               ; Restore original FDC table
+               mov eax,[OrigFDCTabPtr]
+               mov [fdctab],eax
+
+               mov dl,[DriveNumber]
+               mov si,PartInfo         ; Partition info buffer
+               mov di,800h-18          ; Put partition info here
+               push di
+               mov cx,8                ; 16 bytes
+               xor ax,ax
+               rep movsw
+               pop si                  ; DS:SI points to partition info
+%elif IS_ISOLINUX
+               mov dl,[DriveNo]
+%elif IS_PXELINUX
+               mov byte [KeepPXE],1    ; Chainloading another NBP
+               call reset_pxe
+%endif
+               xor bx,bx
+
+;
+; replace_bootstrap for the special case where we have exactly one
+; descriptor, and it's the first entry in the trackbuf
+;
+
+replace_bootstrap_one:
+               push word trackbuf              ; Address of descriptor list
+               push word 1                     ; Length of descriptor list
+               ; Fall through
+
+; 
+; Entrypoint for "shut down and replace bootstrap" -- also invoked by
+; the COMBOOT API.  This routine expects two words on the stack:
+; address of the copy list (versus DS) and count.  Additionally,
+; the values of ESI and EDX are passed on to the new bootstrap;
+; the value of BX becomes the new DS.
+; 
+replace_bootstrap:
+               ;
+               ; Prepare for shutting down
+               ;
+               call vgaclearmode
+
+               ;
+               ; Set up initial stack frame (not used by PXE if keeppxe is
+               ; set - we use the PXE stack then.)
+               ; AFTER THIS POINT ONLY .earlybss IS AVAILABLE, NOT .bss
+               ;
+               xor ax,ax
+               mov ds,ax
+               mov es,ax               
+
+%if IS_PXELINUX
+               test byte [KeepPXE],01h
+               jz .stdstack
+               les di,[InitStack]      ; Reset stack to PXE original
+               jmp .stackok
+%endif
+.stdstack:
+               mov di,7C00h-44
+               push di
+               mov cx,22               ; 44 bytes
+               rep stosw
+               pop di
+.stackok:
+
+               mov [es:di+28],edx
+               mov [es:di+12],esi
+               mov [es:di+6],bx
+
+               pop ax                  ; Copy list count
+               pop bx                  ; Copy from...
+
+               cli
+               mov cx,es
+               mov ss,cx
+               movzx esp,di
+
+               jmp shuffle_and_boot
+
+%if IS_SYSLINUX || IS_MDSLINUX
+               ; Nothing
+%else
+is_bss_sector:
+               mov si,err_bssimage
+               call cwritestr
+               jmp enter_command
+%endif
diff --git a/syslinux/cache.inc b/syslinux/cache.inc
new file mode 100644 (file)
index 0000000..3e0fd8e
--- /dev/null
@@ -0,0 +1,83 @@
+; -*- fundamental -*- ---------------------------------------------------
+;   
+;   Copyright 2004 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.
+;
+; -----------------------------------------------------------------------
+; $Id: cache.inc,v 1.3 2005/01/25 07:15:21 hpa Exp $
+
+               section .text
+;
+; initcache: Initialize the cache data structures
+;
+initcache:
+               xor eax,eax                     ; We don't care about sector 0
+               mov di,CachePtrs
+               mov cx,65536/SECTOR_SIZE
+               rep stosd
+               ret
+
+
+;
+; getcachesector: Check for a particular sector (EAX) in the sector cache,
+;                and if it is already there, return a pointer in GS:SI
+;                otherwise load it and return said pointer.
+;
+;              Assumes CS == DS.
+;
+getcachesector:
+               push cx
+               mov si,cache_seg
+               mov gs,si
+               mov si,CachePtrs        ; Sector cache pointers
+               mov cx,65536/SECTOR_SIZE
+.search:
+               cmp eax,[si]
+               jz .hit
+               add si,4
+               loop .search
+
+.miss:
+               TRACER 'M'
+               ; Need to load it.  Highly inefficient cache replacement
+               ; algorithm: Least Recently Written (LRW)
+               push bx
+               push es
+               push gs
+               pop es
+               mov bx,[NextCacheSlot]
+               inc bx
+               and bx,(1 << (16-SECTOR_SHIFT))-1
+               mov [NextCacheSlot],bx
+               shl bx,2
+               mov [CachePtrs+bx],eax
+               shl bx,SECTOR_SHIFT-2
+               mov si,bx
+               pushad
+%if IS_EXTLINUX
+               call getonesec_ext
+%else
+               call getonesec
+%endif
+               popad
+               pop es
+               pop bx
+               pop cx
+               ret
+
+.hit:          ; We have it; get the pointer
+               TRACER 'H'
+               sub si,CachePtrs
+               shl si,SECTOR_SHIFT-2
+               pop cx
+               ret
+
+               section .bss
+               alignb 4
+CachePtrs      resd 65536/SECTOR_SIZE  ; Cached sector pointers
+NextCacheSlot  resw 1                  ; Next cache slot to occupy
diff --git a/syslinux/checksumiso.pl b/syslinux/checksumiso.pl
new file mode 100755 (executable)
index 0000000..b552742
--- /dev/null
@@ -0,0 +1,36 @@
+#!/usr/bin/perl
+#
+# Construct a checksum for isolinux*.bin, compatible
+# with an mkisofs boot-info-table
+#
+
+use bytes;
+use integer;
+
+($file) = @ARGV;
+
+open(FILE, '+<', $file) or die "$0: Cannot open $file: $!\n";
+binmode FILE;
+
+if ( !seek(FILE,64,0) ) {
+    die "$0: Cannot seek past header\n";
+}
+
+$csum  = 0;
+$bytes = 64;
+while ( ($n = read(FILE, $dw, 4)) > 0 ) {
+    $dw .= "\0\0\0\0";         # Pad to at least 32 bits
+    ($v) = unpack("V", $dw);
+    $csum  = ($csum + $v) & 0xffffffff;
+    $bytes += $n;
+}
+
+if ( !seek(FILE,16,0) ) {
+    die "$0: Cannot seek to header\n";
+}
+
+print FILE pack("VV", $bytes, $csum);
+
+close(FILE);
+
+exit 0;
diff --git a/syslinux/cmdline.inc b/syslinux/cmdline.inc
new file mode 100644 (file)
index 0000000..628f8a3
--- /dev/null
@@ -0,0 +1,44 @@
+;; $Id: cmdline.inc,v 1.2 2004/12/14 22:46:24 hpa Exp $
+;; -----------------------------------------------------------------------
+;;   
+;;   Copyright 2003 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.
+;;
+;; -----------------------------------------------------------------------
+
+;;
+;; cmdline.inc
+;;
+;; Common routine to assemble [null-terminated] command line into
+;; real_mode_seg:cmd_line_here.
+;; Not used by plain kernel due to BOOT_IMAGE= etc.
+;;
+
+;
+; Assumes DS == CS
+make_plain_cmdline:
+               push es
+               ; ui.inc has already copied the actual command line
+               mov ax,real_mode_seg
+               mov es,ax
+
+               mov si,[CmdOptPtr]
+               mov di,[CmdLinePtr]
+               
+.loop:         lodsb
+               stosb
+               and al,al
+               jnz .loop
+
+               dec di
+               mov [CmdLinePtr],di
+
+               pop es
+               ret
+
+
diff --git a/syslinux/com32.inc b/syslinux/com32.inc
new file mode 100644 (file)
index 0000000..f257b08
--- /dev/null
@@ -0,0 +1,359 @@
+;; $Id: com32.inc,v 1.9 2005/01/06 22:34:06 hpa Exp $
+;; -----------------------------------------------------------------------
+;;   
+;;   Copyright 1994-2003 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.
+;;
+;; -----------------------------------------------------------------------
+
+;;
+;; com32.inc
+;;
+;; Common code for running a COM32 image
+;;
+
+;
+; Load a COM32 image.  A COM32 image is the 32-bit analogue to a DOS
+; .com file.  A COM32 image is loaded at address 0x101000, with %esp
+; set to the high end of usable memory.
+;
+; A COM32 image should begin with the magic bytes:
+; B8 FF 4C CD 21, which is "mov eax,0x21cd4cff" in 32-bit mode and
+; "mov ax,0x4cff; int 0x21" in 16-bit mode.  This will abort the
+; program with an error if run in 16-bit mode.
+;
+pm_idt:                equ 0x100000
+pm_entry:      equ 0x101000
+
+               bits 16
+               section .data
+               align 2, db 0
+com32_pmidt:
+               dw 8*256                ; Limit
+               dd pm_idt               ; Address
+
+com32_rmidt:
+               dw 0ffffh               ; Limit
+               dd 0                    ; Address
+
+               section .text
+is_com32_image:
+               push si                 ; Save file handle
+               push dx                 ; File length held in DX:AX
+               push ax
+
+               call make_plain_cmdline
+               ; Copy the command line into the low cmdline buffer
+               mov ax,real_mode_seg
+               mov fs,ax
+               mov si,cmd_line_here
+               mov di,command_line
+               mov cx,[CmdLinePtr]
+               inc cx                  ; Include final null
+               sub cx,si
+               fs rep movsb
+
+               call highmemsize        ; We need the high memory size...
+               call comboot_setup_api  ; Set up the COMBOOT-style API
+
+               mov edi,pm_entry        ; Load address
+               pop eax                 ; File length
+               pop si                  ; File handle
+               xor dx,dx               ; No padding
+               call load_high
+               call crlf
+
+com32_start:
+               mov ebx,com32_call_start        ; Where to go in PM
+
+com32_enter_pm:
+               cli
+               mov ax,cs
+               mov ds,ax
+               mov [SavedSSSP],sp
+               mov [SavedSSSP+2],ss
+               cld
+               call a20_test
+               jnz .a20ok
+               call enable_a20
+
+.a20ok:
+               lgdt [bcopy_gdt]        ; We can use the same GDT just fine
+               lidt [com32_pmidt]      ; Set up the IDT
+               mov eax,cr0
+               or al,1
+               mov cr0,eax             ; Enter protected mode
+               jmp 20h:.in_pm
+               
+               bits 32
+.in_pm:
+               xor eax,eax             ; Available for future use...
+               mov fs,eax
+               mov gs,eax
+
+               mov al,28h              ; Set up data segments
+               mov es,eax
+               mov ds,eax
+               mov ss,eax
+
+               mov esp,[PMESP]         ; Load protmode %esp if available
+               jmp ebx                 ; Go to where we need to go
+
+;
+; This is invoked right before the actually starting the COM32
+; progam, in 32-bit mode...
+;
+com32_call_start:
+               ;
+               ; Point the stack to the end of high memory
+               ;
+               mov esp,[word HighMemSize]
+
+               ;
+               ; Set up the protmode IDT and the interrupt jump buffers
+               ; We set these up in the system area at 0x100000,
+               ; but we could also put them beyond the stack.
+               ;
+               mov edi,pm_idt
+
+               ; Form an interrupt gate descriptor
+               mov eax,0x00200000+((pm_idt+8*256)&0x0000ffff)
+               mov ebx,0x0000ee00+((pm_idt+8*256)&0xffff0000)
+               xor ecx,ecx
+               inc ch                          ; ecx <- 256
+
+               push ecx
+.make_idt:
+               stosd
+               add eax,8
+               xchg eax,ebx
+               stosd
+               xchg eax,ebx
+               loop .make_idt
+
+               pop ecx
+
+               ; Each entry in the interrupt jump buffer contains
+               ; the following instructions:
+               ;
+               ; 00000000 60                pushad
+               ; 00000001 B0xx              mov al,<interrupt#>
+               ; 00000003 E9xxxxxxxx        jmp com32_handle_interrupt
+
+               mov eax,0e900b060h
+               mov ebx,com32_handle_interrupt-(pm_idt+8*256+8)
+
+.make_ijb:
+               stosd
+               sub [edi-2],cl                  ; Interrupt #
+               xchg eax,ebx
+               stosd
+               sub eax,8
+               xchg eax,ebx
+               loop .make_ijb
+
+               ; Now everything is set up for interrupts...
+
+               push dword com32_farcall        ; Farcall entry point
+               push dword (1 << 16)            ; 64K bounce buffer
+               push dword (comboot_seg << 4)   ; Bounce buffer address
+               push dword com32_intcall        ; Intcall entry point
+               push dword command_line         ; Command line pointer
+               push dword 5                    ; Argument count
+               sti                             ; Interrupts OK now
+               call pm_entry                   ; Run the program...
+               ; ... on return, fall through to com32_exit ...
+
+com32_exit:
+               mov bx,com32_done       ; Return to command loop
+
+com32_enter_rm:
+               cli
+               cld
+               mov [PMESP],esp         ; Save exit %esp
+               xor esp,esp             ; Make sure the high bits are zero
+               jmp 08h:.in_pm16        ; Return to 16-bit mode first
+
+               bits 16
+.in_pm16:
+               mov ax,18h              ; Real-mode-like segment
+               mov es,ax
+               mov ds,ax
+               mov ss,ax
+               mov fs,ax
+               mov gs,ax
+
+               lidt [com32_rmidt]      ; Real-mode IDT (rm needs no GDT)
+               mov eax,cr0
+               and al,~1
+               mov cr0,eax
+               jmp 0:.in_rm
+
+.in_rm:                                        ; Back in real mode
+               mov ax,cs               ; Set up sane segments
+               mov ds,ax
+               mov es,ax
+               mov fs,ax
+               mov gs,ax
+               lss sp,[SavedSSSP]      ; Restore stack
+               jmp bx                  ; Go to whereever we need to go...
+
+com32_done:
+               call disable_a20
+               sti
+               jmp enter_command
+
+;
+; 16-bit support code
+;
+               bits 16
+
+;
+; 16-bit interrupt-handling code
+;
+com32_int_rm:
+               pushf                           ; Flags on stack
+               push cs                         ; Return segment
+               push word .cont                 ; Return address
+               push dword edx                  ; Segment:offset of IVT entry
+               retf                            ; Invoke IVT routine
+.cont:         ; ... on resume ...
+               mov ebx,com32_int_resume
+               jmp com32_enter_pm              ; Go back to PM
+
+;
+; 16-bit system call handling code
+;
+com32_sys_rm:
+               pop gs
+               pop fs
+               pop es
+               pop ds
+               popad
+               popfd
+               mov [cs:Com32SysSP],sp
+               retf                            ; Invoke routine
+.return:
+               ; We clean up SP here because we don't know if the
+               ; routine returned with RET, RETF or IRET
+               mov sp,[cs:Com32SysSP]
+               pushfd
+               pushad
+               push ds
+               push es
+               push fs
+               push gs
+               mov ebx,com32_sys_resume
+               jmp com32_enter_pm
+
+;
+; 32-bit support code
+;
+               bits 32
+
+;
+; This is invoked on getting an interrupt in protected mode.  At
+; this point, we need to context-switch to real mode and invoke
+; the interrupt routine.
+;
+; When this gets invoked, the registers are saved on the stack and
+; AL contains the register number.
+;
+com32_handle_interrupt:
+               movzx eax,al
+               xor ebx,ebx             ; Actually makes the code smaller
+               mov edx,[ebx+eax*4]     ; Get the segment:offset of the routine
+               mov bx,com32_int_rm
+               jmp com32_enter_rm      ; Go to real mode
+
+com32_int_resume:
+               popad
+               iret
+
+;
+; Intcall/farcall invocation.  We manifest a structure on the real-mode stack,
+; containing the com32sys_t structure from <com32.h> as well as
+; the following entries (from low to high address):
+; - Target offset
+; - Target segment
+; - Return offset
+; - Return segment (== real mode cs == 0)
+; - Return flags
+;
+com32_farcall:
+               pushfd                          ; Save IF among other things...
+               pushad                          ; We only need to save some, but...
+
+               mov eax,[esp+10*4]              ; CS:IP
+               jmp com32_syscall
+
+
+com32_intcall:
+               pushfd                          ; Save IF among other things...
+               pushad                          ; We only need to save some, but...
+
+               movzx eax,byte [esp+10*4]       ; INT number
+               mov eax,[eax*4]                 ; Get CS:IP from low memory
+
+com32_syscall:
+               cld
+
+               movzx edi,word [word SavedSSSP]
+               movzx ebx,word [word SavedSSSP+2]
+               sub edi,54              ; Allocate 54 bytes
+               mov [word SavedSSSP],di
+               shl ebx,4
+               add edi,ebx             ; Create linear address
+
+               mov esi,[esp+11*4]      ; Source regs
+               xor ecx,ecx
+               mov cl,11               ; 44 bytes to copy
+               rep movsd
+
+               ; EAX is already set up to be CS:IP
+               stosd                   ; Save in stack frame
+               mov eax,com32_sys_rm.return     ; Return seg:offs
+               stosd                   ; Save in stack frame
+               mov eax,[edi-12]        ; Return flags
+               and eax,0x200cd7        ; Mask (potentially) unsafe flags
+               mov [edi-12],eax        ; Primary flags entry
+               stosw                   ; Return flags
+
+               mov bx,com32_sys_rm
+               jmp com32_enter_rm      ; Go to real mode
+
+               ; On return, the 44-byte return structure is on the
+               ; real-mode stack, plus the 10 additional bytes used
+               ; by the target address (see above.)
+com32_sys_resume:
+               movzx esi,word [word SavedSSSP]
+               movzx eax,word [word SavedSSSP+2]
+               mov edi,[esp+12*4]      ; Dest regs
+               shl eax,4
+               add esi,eax             ; Create linear address
+               and edi,edi             ; NULL pointer?
+               jnz .do_copy
+.no_copy:      mov edi,esi             ; Do a dummy copy-to-self
+.do_copy:      xor ecx,ecx
+               mov cl,11               ; 44 bytes
+               rep movsd               ; Copy register block
+
+               add dword [word SavedSSSP],54   ; Remove from stack
+
+               popad
+               popfd
+               ret                     ; Return to 32-bit program
+
+               bits 16
+
+               section .bss
+               alignb 4
+PMESP          resd 1                  ; Protected-mode ESP
+Com32SysSP     resw 1                  ; SP saved during COM32 syscall
+
+               section .text
diff --git a/syslinux/com32/LICENCE b/syslinux/com32/LICENCE
new file mode 100644 (file)
index 0000000..b20d654
--- /dev/null
@@ -0,0 +1,31 @@
+libcom32 and libutil are licensed under the MIT license:
+
+## -----------------------------------------------------------------------
+##   
+##   Copyright 2004 H. Peter Anvin - All Rights Reserved
+##
+##   Permission is hereby granted, free of charge, to any person
+##   obtaining a copy of this software and associated documentation
+##   files (the "Software"), to deal in the Software without
+##   restriction, including without limitation the rights to use,
+##   copy, modify, merge, publish, distribute, sublicense, and/or
+##   sell copies of the Software, and to permit persons to whom
+##   the Software is furnished to do so, subject to the following
+##   conditions:
+##   
+##   The above copyright notice and this permission notice shall
+##   be included in all copies or substantial portions of the Software.
+##   
+##   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+##   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+##   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+##   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+##   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+##   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+##   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+##   OTHER DEALINGS IN THE SOFTWARE.
+##
+## -----------------------------------------------------------------------
+
+The files in the samples and modules directories are mostly under the
+GNU GPL (see the file COPYING in the directory above.)
diff --git a/syslinux/com32/Makefile b/syslinux/com32/Makefile
new file mode 100644 (file)
index 0000000..7e7bfcb
--- /dev/null
@@ -0,0 +1,4 @@
+SUBDIRS = lib libutil modules samples
+
+all tidy clean spotless install:
+       for d in $(SUBDIRS); do $(MAKE) -C $$d $@; done
diff --git a/syslinux/com32/include/bitsize/limits.h b/syslinux/com32/include/bitsize/limits.h
new file mode 100644 (file)
index 0000000..f90e524
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * bits32/limits.h
+ */
+
+#ifndef _BITSIZE_LIMITS_H
+#define _BITSIZE_LIMITS_H
+
+#define LONG_BIT       32
+
+#define LONG_MIN       (-2147483647L-1)
+#define LONG_MAX       2147483647L
+#define ULONG_MAX      4294967295UL
+
+#endif /* _BITSIZE_LIMITS_H */
diff --git a/syslinux/com32/include/bitsize/stddef.h b/syslinux/com32/include/bitsize/stddef.h
new file mode 100644 (file)
index 0000000..c486041
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * bits32/stddef.h
+ */
+
+#ifndef _BITSIZE_STDDEF_H
+#define _BITSIZE_STDDEF_H
+
+#define _SIZE_T
+#if defined(__s390__) || defined(__hppa__) || defined(__cris__)
+typedef unsigned long size_t;
+#else
+typedef unsigned int size_t;
+#endif
+
+#define _PTRDIFF_T
+typedef signed int   ptrdiff_t;
+
+#endif /* _BITSIZE_STDDEF_H */
diff --git a/syslinux/com32/include/bitsize/stdint.h b/syslinux/com32/include/bitsize/stdint.h
new file mode 100644 (file)
index 0000000..40b4649
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * bits32/stdint.h
+ */
+
+#ifndef _BITSIZE_STDINT_H
+#define _BITSIZE_STDINT_H
+
+typedef signed char            int8_t;
+typedef short int              int16_t;
+typedef int                    int32_t;
+typedef long long int          int64_t;
+
+typedef unsigned char          uint8_t;
+typedef unsigned short int     uint16_t;
+typedef unsigned int           uint32_t;
+typedef unsigned long long int uint64_t;
+
+typedef int                    int_fast16_t;
+typedef int                    int_fast32_t;
+
+typedef unsigned int           uint_fast16_t;
+typedef unsigned int           uint_fast32_t;
+
+typedef int                    intptr_t;
+typedef unsigned int           uintptr_t;
+
+#define __INT64_C(c)   c ## LL
+#define __UINT64_C(c)  c ## ULL
+
+#define __PRI64_RANK   "ll"
+#define __PRIFAST_RANK ""
+#define __PRIPTR_RANK  ""
+
+#endif /* _BITSIZE_STDINT_H */
diff --git a/syslinux/com32/include/bitsize/stdintconst.h b/syslinux/com32/include/bitsize/stdintconst.h
new file mode 100644 (file)
index 0000000..8157dd0
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * bits32/stdintconst.h
+ */
+
+#ifndef _BITSIZE_STDINTCONST_H
+#define _BITSIZE_STDINTCONST_H
+
+#define INT_FAST16_C(c)         INT32_C(c)
+#define INT_FAST32_C(c)  INT32_C(c)
+
+#define UINT_FAST16_C(c) UINT32_C(c)
+#define UINT_FAST32_C(c) UINT32_C(c)
+
+#define INTPTR_C(c)     INT32_C(c)
+#define UINTPTR_C(c)    UINT32_C(c)
+#define PTRDIFF_C(c)     INT32_C(c)
+
+#endif /* _BITSIZE_STDINTCONST_H */
diff --git a/syslinux/com32/include/bitsize/stdintlimits.h b/syslinux/com32/include/bitsize/stdintlimits.h
new file mode 100644 (file)
index 0000000..b44fe01
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * bits32/stdintlimits.h
+ */
+
+#ifndef _BITSIZE_STDINTLIMITS_H
+#define _BITSIZE_STDINTLIMITS_H
+
+#define INT_FAST16_MIN INT32_MIN
+#define INT_FAST32_MIN INT32_MIN
+#define INT_FAST16_MAX INT32_MAX
+#define INT_FAST32_MAX INT32_MAX
+#define UINT_FAST16_MAX UINT32_MAX
+#define UINT_FAST32_MAX UINT32_MAX
+
+#define INTPTR_MIN     INT32_MIN
+#define INTPTR_MAX     INT32_MAX
+#define UINTPTR_MAX    UINT32_MAX
+
+#define PTRDIFF_MIN    INT32_MIN
+#define PTRDIFF_MAX    INT32_MAX
+
+#endif /* _BITSIZE_STDINTLIMITS_H */
diff --git a/syslinux/com32/include/com32.h b/syslinux/com32/include/com32.h
new file mode 100644 (file)
index 0000000..91799f6
--- /dev/null
@@ -0,0 +1,117 @@
+/* ----------------------------------------------------------------------- *
+ *   Not Copyright 2002 H. Peter Anvin
+ *   This file is in the public domain.
+ * ----------------------------------------------------------------------- */
+
+/*
+ * com32.h
+ *
+ * Common declarations for com32 programs.
+ */
+
+#ifndef _COM32_H
+#define _COM32_H
+
+#include <stdint.h>
+#include <klibc/compiler.h>    /* For __cdecl */
+
+/*
+ * This structure defines the register frame used by the
+ * system call interface.
+ *
+ * The syscall interface is:
+ *
+ * __intcall(interrupt_#, source_regs, return_regs)
+ * __farcall(seg, offs, source_regs, return_regs)
+ */
+typedef union {
+  uint32_t l;
+  uint16_t w[2];
+  uint8_t  b[4];
+} reg32_t;
+
+typedef struct {
+  uint16_t gs;                 /* Offset  0 */
+  uint16_t fs;                 /* Offset  2 */
+  uint16_t es;                 /* Offset  4 */
+  uint16_t ds;                 /* Offset  6 */
+
+  reg32_t edi;                 /* Offset  8 */
+  reg32_t esi;                 /* Offset 12 */
+  reg32_t ebp;                 /* Offset 16 */
+  reg32_t _unused;             /* Offset 20 */
+  reg32_t ebx;                 /* Offset 24 */
+  reg32_t edx;                 /* Offset 28 */
+  reg32_t ecx;                 /* Offset 32 */
+  reg32_t eax;                 /* Offset 36 */
+
+  reg32_t eflags;              /* Offset 40 */
+} com32sys_t;
+
+/* EFLAGS definitions */
+#define EFLAGS_CF              0x00000001
+#define EFLAGS_PF              0x00000004
+#define EFLAGS_AF              0x00000010
+#define EFLAGS_ZF              0x00000040
+#define EFLAGS_SF              0x00000080
+#define EFLAGS_TF              0x00000100
+#define EFLAGS_IF              0x00000200
+#define EFLAGS_DF              0x00000400
+#define EFLAGS_OF              0x00000800
+#define EFLAGS_IOPL            0x00003000
+#define EFLAGS_NT              0x00004000
+#define EFLAGS_RF              0x00010000
+#define EFLAGS_VM              0x00020000
+#define EFLAGS_AC              0x00040000
+#define EFLAGS_VIF             0x00080000
+#define EFLAGS_VIP             0x00100000
+#define EFLAGS_ID              0x00200000
+
+extern struct com32_sys_args {
+  uint32_t cs_sysargs;
+  char *cs_cmdline;
+  void __cdecl (*cs_intcall)(uint8_t, const com32sys_t *, com32sys_t *);
+  void *cs_bounce;
+  uint32_t cs_bounce_size;
+  void __cdecl (*cs_farcall)(uint32_t, const com32sys_t *, com32sys_t *);
+} __com32;
+
+/*
+ * System call macros
+ */
+static inline void
+__intcall(uint8_t __i, const com32sys_t *__sr, com32sys_t *__dr)
+{
+  __com32.cs_intcall(__i, __sr, __dr);
+}
+
+static inline void
+__farcall(uint16_t __es, uint16_t __eo,
+         const com32sys_t *__sr, com32sys_t *__dr)
+{
+  __com32.cs_farcall((__es << 16) + __eo, __sr, __dr);
+}
+
+/*
+ * These functions convert between linear pointers in the range
+ * 0..0xFFFFF and real-mode style SEG:OFFS pointers.  Note that a
+ * 32-bit linear pointer is not compatible with a SEG:OFFS pointer
+ * stored in two consecutive 16-bit words.
+ */
+static inline uint16_t SEG(void *__p)
+{
+  return (uint16_t)(((uintptr_t)__p) >> 4);
+}
+
+static inline uint16_t OFFS(void *__p)
+{
+  /* The double cast here is to shut up gcc */
+  return (uint16_t)(uintptr_t)__p & 0x000F;
+}
+
+static inline void *MK_PTR(uint16_t __seg, uint16_t __offs)
+{
+  return (void *)((__seg << 4) + __offs);
+}
+
+#endif /* _COM32_H */
diff --git a/syslinux/com32/include/console.h b/syslinux/com32/include/console.h
new file mode 100644 (file)
index 0000000..e7677ff
--- /dev/null
@@ -0,0 +1,60 @@
+#ident "$Id: console.h,v 1.4 2004/11/30 22:09:56 hpa Exp $"
+/* ----------------------------------------------------------------------- *
+ *   
+ *   Copyright 2004 H. Peter Anvin - All Rights Reserved
+ *
+ *   Permission is hereby granted, free of charge, to any person
+ *   obtaining a copy of this software and associated documentation
+ *   files (the "Software"), to deal in the Software without
+ *   restriction, including without limitation the rights to use,
+ *   copy, modify, merge, publish, distribute, sublicense, and/or
+ *   sell copies of the Software, and to permit persons to whom
+ *   the Software is furnished to do so, subject to the following
+ *   conditions:
+ *   
+ *   The above copyright notice and this permission notice shall
+ *   be included in all copies or substantial portions of the Software.
+ *   
+ *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *   OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+
+/*
+ * console.h
+ *
+ * Alternative consoles
+ */
+
+#ifndef _CONSOLE_H
+#define _CONSOLE_H
+
+#include <klibc/extern.h>
+#include <dev.h>
+
+__extern int openconsole(const struct input_dev *, const struct output_dev *);
+
+/* Standard line-oriented console */
+extern const struct input_dev  dev_stdcon_r;
+extern const struct output_dev dev_stdcon_w;
+/* Raw character-oriented console */
+extern const struct input_dev  dev_rawcon_r;
+extern const struct output_dev dev_rawcon_w;
+
+/* These are output-only consoles; combine with one of the input methods */
+
+/* Serial port only */
+extern const struct output_dev dev_serial_w;
+/* ANSI console (output only; combine with one of the input methods) */
+extern const struct output_dev dev_ansicon_w;
+/* ANSI plus serial port */
+extern const struct output_dev dev_ansiserial_w;
+
+#endif /* _CONSOLE_H */
+
diff --git a/syslinux/com32/include/ctype.h b/syslinux/com32/include/ctype.h
new file mode 100644 (file)
index 0000000..daa6a8e
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * ctype.h
+ *
+ * This assumes ISO 8859-1, being a reasonable superset of ASCII.
+ */
+
+#ifndef _CTYPE_H
+#define _CTYPE_H
+
+#ifndef __CTYPE_NO_INLINE
+# define __ctype_inline extern __inline__
+#else
+# define __ctype_inline
+#endif
+
+/*
+ * This relies on the following definitions:
+ *
+ * cntrl = !print
+ * alpha = upper|lower
+ * graph = punct|alpha|digit
+ * blank = '\t' || ' ' (per POSIX requirement)
+ */
+enum {
+  __ctype_upper  = (1 << 0),
+  __ctype_lower  = (1 << 1),
+  __ctype_digit  = (1 << 2),
+  __ctype_xdigit = (1 << 3),
+  __ctype_space  = (1 << 4),
+  __ctype_print  = (1 << 5),
+  __ctype_punct  = (1 << 6),
+  __ctype_cntrl  = (1 << 7),
+};
+
+extern const unsigned char __ctypes[];
+
+__ctype_inline int isalnum(int __c)
+{
+  return __ctypes[__c+1] &
+    (__ctype_upper|__ctype_lower|__ctype_digit);
+}
+
+__ctype_inline int isalpha(int __c)
+{
+  return __ctypes[__c+1] &
+    (__ctype_upper|__ctype_lower);
+}
+
+__ctype_inline int isascii(int __c)
+{
+  return !(__c & ~0x7f);
+}
+
+__ctype_inline int isblank(int __c)
+{
+  return (__c == '\t') || (__c == ' ');
+}
+
+__ctype_inline int iscntrl(int __c)
+{
+  return __ctypes[__c+1] & __ctype_cntrl;
+}
+
+__ctype_inline int isdigit(int __c)
+{
+  return ((unsigned)__c - '0') <= 9;
+}
+
+__ctype_inline int isgraph(int __c)
+{
+  return __ctypes[__c+1] &
+    (__ctype_upper|__ctype_lower|__ctype_digit|__ctype_punct);
+}
+
+__ctype_inline int islower(int __c)
+{
+  return __ctypes[__c+1] & __ctype_lower;
+}
+
+__ctype_inline int isprint(int __c)
+{
+  return __ctypes[__c+1] & __ctype_print;
+}
+
+__ctype_inline int ispunct(int __c)
+{
+  return __ctypes[__c+1] & __ctype_punct;
+}
+
+__ctype_inline int isspace(int __c)
+{
+  return __ctypes[__c+1] & __ctype_space;
+}
+
+__ctype_inline int isupper(int __c)
+{
+  return __ctypes[__c+1] & __ctype_upper;
+}
+
+__ctype_inline int isxdigit(int __c)
+{
+  return __ctypes[__c+1] & __ctype_xdigit;
+}
+
+/* Note: this is decimal, not hex, to avoid accidental promotion to unsigned */
+#define _toupper(__c) ((__c) & ~32)
+#define _tolower(__c) ((__c) | 32)
+
+__ctype_inline int toupper(int __c)
+{
+  return islower(__c) ? _toupper(__c) : __c;
+}
+
+__ctype_inline int tolower(int __c)
+{
+  return isupper(__c) ? _tolower(__c) : __c;
+}
+
+#endif /* _CTYPE_H */
diff --git a/syslinux/com32/include/dev.h b/syslinux/com32/include/dev.h
new file mode 100644 (file)
index 0000000..45a07f0
--- /dev/null
@@ -0,0 +1,57 @@
+#ident "$Id: dev.h,v 1.2 2004/11/30 22:09:56 hpa Exp $"
+/* ----------------------------------------------------------------------- *
+ *   
+ *   Copyright 2004 H. Peter Anvin - All Rights Reserved
+ *
+ *   Permission is hereby granted, free of charge, to any person
+ *   obtaining a copy of this software and associated documentation
+ *   files (the "Software"), to deal in the Software without
+ *   restriction, including without limitation the rights to use,
+ *   copy, modify, merge, publish, distribute, sublicense, and/or
+ *   sell copies of the Software, and to permit persons to whom
+ *   the Software is furnished to do so, subject to the following
+ *   conditions:
+ *   
+ *   The above copyright notice and this permission notice shall
+ *   be included in all copies or substantial portions of the Software.
+ *   
+ *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *   OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+
+/*
+ * console.h
+ *
+ * Alternative consoles
+ */
+
+#ifndef _DEV_H
+#define _DEV_H
+
+#include <klibc/extern.h>
+#include <stdint.h>
+
+struct input_dev;
+struct output_dev;
+
+__extern int opendev(const struct input_dev *, const struct output_dev *, int);
+
+/* Common generic devices */
+
+/* Null device */
+extern const struct input_dev  dev_null_r;
+extern const struct output_dev dev_null_w;
+
+/* Error device */
+extern const struct input_dev  dev_error_r;
+extern const struct output_dev dev_error_w;
+
+#endif /* _DEV_H */
+
diff --git a/syslinux/com32/include/errno.h b/syslinux/com32/include/errno.h
new file mode 100644 (file)
index 0000000..d32f33f
--- /dev/null
@@ -0,0 +1,135 @@
+#ifndef _ERRNO_H
+#define _ERRNO_H
+
+extern int errno;
+
+#define        EPERM            1      /* Operation not permitted */
+#define        ENOENT           2      /* No such file or directory */
+#define        ESRCH            3      /* No such process */
+#define        EINTR            4      /* Interrupted system call */
+#define        EIO              5      /* I/O error */
+#define        ENXIO            6      /* No such device or address */
+#define        E2BIG            7      /* Arg list too long */
+#define        ENOEXEC          8      /* Exec format error */
+#define        EBADF            9      /* Bad file number */
+#define        ECHILD          10      /* No child processes */
+#define        EAGAIN          11      /* Try again */
+#define        ENOMEM          12      /* Out of memory */
+#define        EACCES          13      /* Permission denied */
+#define        EFAULT          14      /* Bad address */
+#define        ENOTBLK         15      /* Block device required */
+#define        EBUSY           16      /* Device or resource busy */
+#define        EEXIST          17      /* File exists */
+#define        EXDEV           18      /* Cross-device link */
+#define        ENODEV          19      /* No such device */
+#define        ENOTDIR         20      /* Not a directory */
+#define        EISDIR          21      /* Is a directory */
+#define        EINVAL          22      /* Invalid argument */
+#define        ENFILE          23      /* File table overflow */
+#define        EMFILE          24      /* Too many open files */
+#define        ENOTTY          25      /* Not a typewriter */
+#define        ETXTBSY         26      /* Text file busy */
+#define        EFBIG           27      /* File too large */
+#define        ENOSPC          28      /* No space left on device */
+#define        ESPIPE          29      /* Illegal seek */
+#define        EROFS           30      /* Read-only file system */
+#define        EMLINK          31      /* Too many links */
+#define        EPIPE           32      /* Broken pipe */
+#define        EDOM            33      /* Math argument out of domain of func */
+#define        ERANGE          34      /* Math result not representable */
+#define        EDEADLK         35      /* Resource deadlock would occur */
+#define        ENAMETOOLONG    36      /* File name too long */
+#define        ENOLCK          37      /* No record locks available */
+#define        ENOSYS          38      /* Function not implemented */
+#define        ENOTEMPTY       39      /* Directory not empty */
+#define        ELOOP           40      /* Too many symbolic links encountered */
+#define        EWOULDBLOCK     EAGAIN  /* Operation would block */
+#define        ENOMSG          42      /* No message of desired type */
+#define        EIDRM           43      /* Identifier removed */
+#define        ECHRNG          44      /* Channel number out of range */
+#define        EL2NSYNC        45      /* Level 2 not synchronized */
+#define        EL3HLT          46      /* Level 3 halted */
+#define        EL3RST          47      /* Level 3 reset */
+#define        ELNRNG          48      /* Link number out of range */
+#define        EUNATCH         49      /* Protocol driver not attached */
+#define        ENOCSI          50      /* No CSI structure available */
+#define        EL2HLT          51      /* Level 2 halted */
+#define        EBADE           52      /* Invalid exchange */
+#define        EBADR           53      /* Invalid request descriptor */
+#define        EXFULL          54      /* Exchange full */
+#define        ENOANO          55      /* No anode */
+#define        EBADRQC         56      /* Invalid request code */
+#define        EBADSLT         57      /* Invalid slot */
+
+#define        EDEADLOCK       EDEADLK
+
+#define        EBFONT          59      /* Bad font file format */
+#define        ENOSTR          60      /* Device not a stream */
+#define        ENODATA         61      /* No data available */
+#define        ETIME           62      /* Timer expired */
+#define        ENOSR           63      /* Out of streams resources */
+#define        ENONET          64      /* Machine is not on the network */
+#define        ENOPKG          65      /* Package not installed */
+#define        EREMOTE         66      /* Object is remote */
+#define        ENOLINK         67      /* Link has been severed */
+#define        EADV            68      /* Advertise error */
+#define        ESRMNT          69      /* Srmount error */
+#define        ECOMM           70      /* Communication error on send */
+#define        EPROTO          71      /* Protocol error */
+#define        EMULTIHOP       72      /* Multihop attempted */
+#define        EDOTDOT         73      /* RFS specific error */
+#define        EBADMSG         74      /* Not a data message */
+#define        EOVERFLOW       75      /* Value too large for defined data type */
+#define        ENOTUNIQ        76      /* Name not unique on network */
+#define        EBADFD          77      /* File descriptor in bad state */
+#define        EREMCHG         78      /* Remote address changed */
+#define        ELIBACC         79      /* Can not access a needed shared library */
+#define        ELIBBAD         80      /* Accessing a corrupted shared library */
+#define        ELIBSCN         81      /* .lib section in a.out corrupted */
+#define        ELIBMAX         82      /* Attempting to link in too many shared libraries */
+#define        ELIBEXEC        83      /* Cannot exec a shared library directly */
+#define        EILSEQ          84      /* Illegal byte sequence */
+#define        ERESTART        85      /* Interrupted system call should be restarted */
+#define        ESTRPIPE        86      /* Streams pipe error */
+#define        EUSERS          87      /* Too many users */
+#define        ENOTSOCK        88      /* Socket operation on non-socket */
+#define        EDESTADDRREQ    89      /* Destination address required */
+#define        EMSGSIZE        90      /* Message too long */
+#define        EPROTOTYPE      91      /* Protocol wrong type for socket */
+#define        ENOPROTOOPT     92      /* Protocol not available */
+#define        EPROTONOSUPPORT 93      /* Protocol not supported */
+#define        ESOCKTNOSUPPORT 94      /* Socket type not supported */
+#define        EOPNOTSUPP      95      /* Operation not supported on transport endpoint */
+#define        EPFNOSUPPORT    96      /* Protocol family not supported */
+#define        EAFNOSUPPORT    97      /* Address family not supported by protocol */
+#define        EADDRINUSE      98      /* Address already in use */
+#define        EADDRNOTAVAIL   99      /* Cannot assign requested address */
+#define        ENETDOWN        100     /* Network is down */
+#define        ENETUNREACH     101     /* Network is unreachable */
+#define        ENETRESET       102     /* Network dropped connection because of reset */
+#define        ECONNABORTED    103     /* Software caused connection abort */
+#define        ECONNRESET      104     /* Connection reset by peer */
+#define        ENOBUFS         105     /* No buffer space available */
+#define        EISCONN         106     /* Transport endpoint is already connected */
+#define        ENOTCONN        107     /* Transport endpoint is not connected */
+#define        ESHUTDOWN       108     /* Cannot send after transport endpoint shutdown */
+#define        ETOOMANYREFS    109     /* Too many references: cannot splice */
+#define        ETIMEDOUT       110     /* Connection timed out */
+#define        ECONNREFUSED    111     /* Connection refused */
+#define        EHOSTDOWN       112     /* Host is down */
+#define        EHOSTUNREACH    113     /* No route to host */
+#define        EALREADY        114     /* Operation already in progress */
+#define        EINPROGRESS     115     /* Operation now in progress */
+#define        ESTALE          116     /* Stale NFS file handle */
+#define        EUCLEAN         117     /* Structure needs cleaning */
+#define        ENOTNAM         118     /* Not a XENIX named type file */
+#define        ENAVAIL         119     /* No XENIX semaphores available */
+#define        EISNAM          120     /* Is a named type file */
+#define        EREMOTEIO       121     /* Remote I/O error */
+#define        EDQUOT          122     /* Quota exceeded */
+
+#define        ENOMEDIUM       123     /* No medium found */
+#define        EMEDIUMTYPE     124     /* Wrong medium type */
+
+#endif /* _ERRNO_H */
+
diff --git a/syslinux/com32/include/fcntl.h b/syslinux/com32/include/fcntl.h
new file mode 100644 (file)
index 0000000..b691b5c
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * fcntl.h
+ */
+
+#ifndef _FCNTL_H
+#define _FCNTL_H
+
+#include <klibc/extern.h>
+#include <klibc/compiler.h>
+#include <sys/types.h>
+
+/* None of these are actually supported, although O_RDONLY works */
+/* Note this is different from the classical Unix way of doing it */
+#define        O_RDONLY        1
+#define O_WRONLY       2
+#define O_RDWR         3
+#define O_CREAT                0100
+#define O_EXCL         0200
+#define O_TRUNC                01000
+#define O_APPEND       02000
+
+__extern int open(const char *, int, ...);
+
+#endif /* _FCNTL_H */
diff --git a/syslinux/com32/include/inttypes.h b/syslinux/com32/include/inttypes.h
new file mode 100644 (file)
index 0000000..e00fa63
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+ * inttypes.h
+ */
+
+#ifndef _INTTYPES_H
+#define _INTTYPES_H
+
+#include <klibc/extern.h>
+#include <stdint.h>
+#include <stddef.h>
+
+static __inline__ intmax_t imaxabs(intmax_t __n)
+{
+  return (__n < (intmax_t)0) ? -__n : __n;
+}
+
+__extern intmax_t strtoimax(const char *, char **, int);
+__extern uintmax_t strtoumax(const char *, char **, int);
+
+/* extensions */
+__extern intmax_t strntoimax(const char *, char **, int, size_t);
+__extern uintmax_t strntoumax(const char *, char **, int, size_t);
+
+#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
+
+#define PRId8  "d"
+#define PRId16 "d"
+#define PRId32 "d"
+#define PRId64 __PRI64_RANK "d"
+
+#define PRIdLEAST8     "d"
+#define PRIdLEAST16    "d"
+#define PRIdLEAST32    "d"
+#define PRIdLEAST64    __PRI64_RANK "d"
+
+#define PRIdFAST8      "d"
+#define PRIdFAST16     __PRIFAST_RANK "d"
+#define PRIdFAST32     __PRIFAST_RANK "d"
+#define PRIdFAST64     __PRI64_RANK "d"
+
+#define PRIdMAX         __PRI64_RANK "d"
+#define PRIdPTR  __PRIPTR_RANK "d"
+
+#define PRIi8  "i"
+#define PRIi16 "i"
+#define PRIi32 "i"
+#define PRIi64 __PRI64_RANK "i"
+
+#define PRIiLEAST8     "i"
+#define PRIiLEAST16    "i"
+#define PRIiLEAST32    "i"
+#define PRIiLEAST64    __PRI64_RANK "i"
+
+#define PRIiFAST8      "i"
+#define PRIiFAST16     __PRIFAST_RANK "i"
+#define PRIiFAST32     __PRIFAST_RANK "i"
+#define PRIiFAST64     __PRI64_RANK "i"
+
+#define PRIiMAX         __PRI64_RANK "i"
+#define PRIiPTR  __PRIPTR_RANK "i"
+
+#define PRIo8  "o"
+#define PRIo16 "o"
+#define PRIo32 "o"
+#define PRIo64 __PRI64_RANK "o"
+
+#define PRIoLEAST8     "o"
+#define PRIoLEAST16    "o"
+#define PRIoLEAST32    "o"
+#define PRIoLEAST64    __PRI64_RANK "o"
+
+#define PRIoFAST8      "o"
+#define PRIoFAST16     __PRIFAST_RANK "o"
+#define PRIoFAST32     __PRIFAST_RANK "o"
+#define PRIoFAST64     __PRI64_RANK "o"
+
+#define PRIoMAX         __PRI64_RANK "o"
+#define PRIoPTR  __PRIPTR_RANK "o"
+
+#define PRIu8  "u"
+#define PRIu16 "u"
+#define PRIu32 "u"
+#define PRIu64 __PRI64_RANK "u"
+
+#define PRIuLEAST8     "u"
+#define PRIuLEAST16    "u"
+#define PRIuLEAST32    "u"
+#define PRIuLEAST64    __PRI64_RANK "u"
+
+#define PRIuFAST8      "u"
+#define PRIuFAST16     __PRIFAST_RANK "u"
+#define PRIuFAST32     __PRIFAST_RANK "u"
+#define PRIuFAST64     __PRI64_RANK "u"
+
+#define PRIuMAX         __PRI64_RANK "u"
+#define PRIuPTR  __PRIPTR_RANK "u"
+
+#define PRIx8  "x"
+#define PRIx16 "x"
+#define PRIx32 "x"
+#define PRIx64 __PRI64_RANK "x"
+
+#define PRIxLEAST8     "x"
+#define PRIxLEAST16    "x"
+#define PRIxLEAST32    "x"
+#define PRIxLEAST64    __PRI64_RANK "x"
+
+#define PRIxFAST8      "x"
+#define PRIxFAST16     __PRIFAST_RANK "x"
+#define PRIxFAST32     __PRIFAST_RANK "x"
+#define PRIxFAST64     __PRI64_RANK "x"
+
+#define PRIxMAX         __PRI64_RANK "x"
+#define PRIxPTR  __PRIPTR_RANK "x"
+
+#define PRIX8  "X"
+#define PRIX16 "X"
+#define PRIX32 "X"
+#define PRIX64 __PRI64_RANK "X"
+
+#define PRIXLEAST8     "X"
+#define PRIXLEAST16    "X"
+#define PRIXLEAST32    "X"
+#define PRIXLEAST64    __PRI64_RANK "X"
+
+#define PRIXFAST8      "X"
+#define PRIXFAST16     __PRIFAST_RANK "X"
+#define PRIXFAST32     __PRIFAST_RANK "X"
+#define PRIXFAST64     __PRI64_RANK "X"
+
+#define PRIXMAX         __PRI64_RANK "X"
+#define PRIXPTR  __PRIPTR_RANK "X"
+
+#define SCNd8  "hhd"
+#define SCNd16 "hd"
+#define SCNd32 "d"
+#define SCNd64 __PRI64_RANK "d"
+
+#define SCNdLEAST8     "hhd"
+#define SCNdLEAST16    "hd"
+#define SCNdLEAST32    "d"
+#define SCNdLEAST64    __PRI64_RANK "d"
+
+#define SCNdFAST8      "hhd"
+#define SCNdFAST16     __PRIFAST_RANK "d"
+#define SCNdFAST32     __PRIFAST_RANK "d"
+#define SCNdFAST64     __PRI64_RANK "d"
+
+#define SCNdMAX         __PRI64_RANK "d"
+#define SCNdPTR  __PRIPTR_RANK "d"
+
+#define SCNi8  "hhi"
+#define SCNi16 "hi"
+#define SCNi32 "i"
+#define SCNi64 __PRI64_RANK "i"
+
+#define SCNiLEAST8     "hhi"
+#define SCNiLEAST16    "hi"
+#define SCNiLEAST32    "i"
+#define SCNiLEAST64    __PRI64_RANK "i"
+
+#define SCNiFAST8      "hhi"
+#define SCNiFAST16     __PRIFAST_RANK "i"
+#define SCNiFAST32     __PRIFAST_RANK "i"
+#define SCNiFAST64     __PRI64_RANK "i"
+
+#define SCNiMAX         __PRI64_RANK "i"
+#define SCNiPTR  __PRIPTR_RANK "i"
+
+#define SCNo8  "hho"
+#define SCNo16 "ho"
+#define SCNo32 "o"
+#define SCNo64 __PRI64_RANK "o"
+
+#define SCNoLEAST8     "hho"
+#define SCNoLEAST16    "ho"
+#define SCNoLEAST32    "o"
+#define SCNoLEAST64    __PRI64_RANK "o"
+
+#define SCNoFAST8      "hho"
+#define SCNoFAST16     __PRIFAST_RANK "o"
+#define SCNoFAST32     __PRIFAST_RANK "o"
+#define SCNoFAST64     __PRI64_RANK "o"
+
+#define SCNoMAX         __PRI64_RANK "o"
+#define SCNoPTR  __PRIPTR_RANK "o"
+
+#define SCNu8  "hhu"
+#define SCNu16 "hu"
+#define SCNu32 "u"
+#define SCNu64 __PRI64_RANK "u"
+
+#define SCNuLEAST8     "hhu"
+#define SCNuLEAST16    "hu"
+#define SCNuLEAST32    "u"
+#define SCNuLEAST64    __PRI64_RANK "u"
+
+#define SCNuFAST8      "hhu"
+#define SCNuFAST16     __PRIFAST_RANK "u"
+#define SCNuFAST32     __PRIFAST_RANK "u"
+#define SCNuFAST64     __PRI64_RANK "u"
+
+#define SCNuMAX         __PRI64_RANK "u"
+#define SCNuPTR  __PRIPTR_RANK "u"
+
+#define SCNx8  "hhx"
+#define SCNx16 "hx"
+#define SCNx32 "x"
+#define SCNx64 __PRI64_RANK "x"
+
+#define SCNxLEAST8     "hhx"
+#define SCNxLEAST16    "hx"
+#define SCNxLEAST32    "x"
+#define SCNxLEAST64    __PRI64_RANK "x"
+
+#define SCNxFAST8      "hhx"
+#define SCNxFAST16     __PRIFAST_RANK "x"
+#define SCNxFAST32     __PRIFAST_RANK "x"
+#define SCNxFAST64     __PRI64_RANK "x"
+
+#define SCNxMAX         __PRI64_RANK "x"
+#define SCNxPTR  __PRIPTR_RANK "x"
+
+#endif
+
+#endif /* _INTTYPES_H */
diff --git a/syslinux/com32/include/klibc/compiler.h b/syslinux/com32/include/klibc/compiler.h
new file mode 100644 (file)
index 0000000..f806506
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * klibc/compiler.h
+ *
+ * Various compiler features
+ */
+
+#ifndef _KLIBC_COMPILER_H
+#define _KLIBC_COMPILER_H
+
+#define __user
+
+/* Specific calling conventions */
+/* __cdecl is used when we want varadic and non-varadic functions to have
+   the same binary calling convention. */
+#ifdef __i386__
+# ifdef __GNUC__
+#  define __cdecl __attribute__((cdecl,regparm(0)))
+# else
+  /* Most other C compilers have __cdecl as a keyword */
+# endif
+#else
+# define __cdecl               /* Meaningless on non-i386 */
+#endif
+
+/* How to declare a function that *must* be inlined */
+#ifdef __GNUC__
+# if __GNUC_MAJOR__ >= 3
+#  define __must_inline static __inline__ __attribute__((always_inline))
+# else
+#  define __must_inline extern __inline__
+# endif
+#else
+# define __must_inline inline  /* Just hope this works... */
+#endif
+
+/* How to declare a function that does not return */
+#ifdef __GNUC__
+# define __noreturn void __attribute__((noreturn))
+#else
+# define __noreturn void
+#endif
+
+/* "const" function:
+
+     Many functions do not examine any values except their arguments,
+     and have no effects except the return value.  Basically this is
+     just slightly more strict class than the `pure' attribute above,
+     since function is not allowed to read global memory.
+
+     Note that a function that has pointer arguments and examines the
+     data pointed to must _not_ be declared `const'.  Likewise, a
+     function that calls a non-`const' function usually must not be
+     `const'.  It does not make sense for a `const' function to return
+     `void'.
+*/
+#ifdef __GNUC__
+# define __constfunc __attribute__((const))
+#else
+# define __constfunc
+#endif
+#undef __attribute_const__
+#define __attribute_const__ __constfunc
+
+/* "pure" function:
+
+     Many functions have no effects except the return value and their
+     return value depends only on the parameters and/or global
+     variables.  Such a function can be subject to common subexpression
+     elimination and loop optimization just as an arithmetic operator
+     would be.  These functions should be declared with the attribute
+     `pure'.
+*/
+#ifdef __GNUC__
+# define __purefunc __attribute__((pure))
+#else
+# define __purefunc
+#endif
+#undef __attribute_pure__
+#define __attribute_pure__ __purefunc
+
+/* Format attribute */
+#ifdef __GNUC__
+# define __formatfunc(t,f,a) __attribute__((format(t,f,a)))
+#else
+# define __formatfunc(t,f,a)
+#endif
+
+/* malloc() function (returns unaliased pointer) */
+#if defined(__GNUC__) && (__GNUC_MAJOR__ >= 3)
+# define __mallocfunc __attribute__((malloc))
+#else
+# define __mallocfunc
+#endif
+
+/* likely/unlikely */
+#if defined(__GNUC__) && (__GNUC_MAJOR__ > 2 || (__GNUC_MAJOR__ == 2 && __GNUC_MINOR__ >= 95))
+# define __likely(x)   __builtin_expect((x), 1)
+# define __unlikely(x) __builtin_expect((x), 0)
+#else
+# define __likely(x)   (x)
+# define __unlikely(x) (x)
+#endif
+
+/* Possibly unused function */
+#ifdef __GNUC__
+# define __unusedfunc  __attribute__((unused))
+#else
+# define __unusedfunc
+#endif
+
+/* Constructors and destructors */
+#define __constructor  __attribute__((constructor))
+#define __destructor   __attribute__((destructor))
+
+#endif
diff --git a/syslinux/com32/include/klibc/diverr.h b/syslinux/com32/include/klibc/diverr.h
new file mode 100644 (file)
index 0000000..a4bbedd
--- /dev/null
@@ -0,0 +1,4 @@
+static inline void __divide_error(void)
+{
+  asm volatile("int $0");      /* Divide by zero */
+}
diff --git a/syslinux/com32/include/klibc/extern.h b/syslinux/com32/include/klibc/extern.h
new file mode 100644 (file)
index 0000000..f9c3467
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * klibc/extern.h
+ */
+
+#ifndef _KLIBC_EXTERN_H
+#define _KLIBC_EXTERN_H
+
+#ifdef __cplusplus
+#define __extern extern "C"
+#else
+#define __extern extern
+#endif
+
+#endif /* _KLIBC_EXTERN_H */
diff --git a/syslinux/com32/include/klibc/sysconfig.h b/syslinux/com32/include/klibc/sysconfig.h
new file mode 100644 (file)
index 0000000..efaaaf5
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * klibc/sysconfig.h
+ *
+ * Allows for definitions of some things which may be system-dependent
+ */
+
+#ifndef _KLIBC_SYSCONFIG_H
+#define _KLIBC_SYSCONFIG_H
+
+/*
+ * Define this to obtain memory using sbrk() instead
+ * of mmap().  This should make it friendlier on
+ * non-MMU architectures.  This should become a
+ * per-architecture configurable.
+ */
+#define MALLOC_USING_SBRK
+
+/*
+ * This is the minimum chunk size we will ask the kernel for using
+ * malloc(); this should be a multiple of the page size on all
+ * architectures.
+ */
+#define MALLOC_CHUNK_SIZE      4096
+#define MALLOC_CHUNK_MASK       (MALLOC_CHUNK_SIZE-1)
+
+/*
+ * This is the minimum alignment for the memory returned by sbrk().
+ * It must be a power of 2.  If MALLOC_USING_SBRK is defined it should
+ * be no smaller than the size of struct arena_header in malloc.h (4
+ * pointers.)
+ */
+#define SBRK_ALIGNMENT         32
+
+#endif /* _KLIBC_SYSCONFIG_H */
diff --git a/syslinux/com32/include/limits.h b/syslinux/com32/include/limits.h
new file mode 100644 (file)
index 0000000..64ef974
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * limits.h
+ */
+
+#ifndef _LIMITS_H
+#define _LIMITS_H
+
+#define CHAR_BIT       8
+#define SHRT_BIT       16
+#define INT_BIT                32
+#define LONGLONG_BIT   64
+
+#define SCHAR_MIN      (-128)
+#define SCHAR_MAX      127
+#define UCHAR_MAX      255
+
+#ifdef __CHAR_UNSIGNED__
+# define CHAR_MIN 0
+# define CHAR_MAX UCHAR_MAX
+#else
+# define CHAR_MIN SCHAR_MIN
+# define CHAR_MAX SCHAR_MAX
+#endif
+
+#define SHRT_MIN       (-32768)
+#define SHRT_MAX       32767
+#define USHRT_MAX      65535
+
+#define INT_MIN                (-2147483647-1)
+#define INT_MAX                2147483647
+#define UINT_MAX       4294967295U
+
+#define LONGLONG_MIN   (-9223372036854775807LL-1)
+#define LONGLONG_MAX   9223372036854775807LL
+#define ULONGLONG_MAX  18446744073709551615ULL
+
+#include <bitsize/limits.h>
+
+#endif /* _LIMITS_H */
diff --git a/syslinux/com32/include/minmax.h b/syslinux/com32/include/minmax.h
new file mode 100644 (file)
index 0000000..3785094
--- /dev/null
@@ -0,0 +1,44 @@
+#ident "$Id: minmax.h,v 1.1 2004/11/10 22:31:50 hpa Exp $"
+/* ----------------------------------------------------------------------- *
+ *   
+ *   Copyright 2004 H. Peter Anvin - All Rights Reserved
+ *
+ *   Permission is hereby granted, free of charge, to any person
+ *   obtaining a copy of this software and associated documentation
+ *   files (the "Software"), to deal in the Software without
+ *   restriction, including without limitation the rights to use,
+ *   copy, modify, merge, publish, distribute, sublicense, and/or
+ *   sell copies of the Software, and to permit persons to whom
+ *   the Software is furnished to do so, subject to the following
+ *   conditions:
+ *   
+ *   The above copyright notice and this permission notice shall
+ *   be included in all copies or substantial portions of the Software.
+ *   
+ *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *   OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+
+#ifndef _MINMAX_H
+#define _MINMAX_H
+
+/*
+ * minmax.h: Type-independent safe min/max macros
+ */
+
+#define min(x,y) ({ __typeof(x) xx = (x); \
+                    __typeof(y) yy = (y); \
+                    xx < yy ? xx : yy; })
+#define max(x,y) ({ __typeof(x) xx = (x); \
+                    __typeof(y) yy = (y); \
+                    xx > yy ? xx : yy; })
+
+#endif /* _MINMAX_H */
+
diff --git a/syslinux/com32/include/netinet/in.h b/syslinux/com32/include/netinet/in.h
new file mode 100644 (file)
index 0000000..325bd4c
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef _NETINET_IN_H
+#define _NETINET_IN_H
+
+/* COM32 will be running on an i386 platform */
+
+#include <stdint.h>
+
+static inline uint16_t __htons(uint16_t v)
+{
+  return ((v) << 8) | ((v) >> 8);
+}
+
+#define htons(x) __htons(x)
+#define ntohs(x) __htons(x)
+
+static inline uint32_t __htonl(uint32_t v)
+{
+  if ( __builtin_constant_p(v) ) {
+    return (((v) & 0x000000ff) << 24) |
+      (((v) & 0x0000ff00) << 8) |
+      (((v) & 0x00ff0000) >> 8) |
+      (((v) & 0xff000000) >> 24);
+  } else {
+    asm("xchgb %h0,%b0 ; roll $16,%0 ; xchgb %h0,%b0" : "+abcd" (v));
+    return v;
+  }
+}
+
+#define htonl(x) __htonl(x)
+#define ntohl(x) __htonl(x)
+
+static inline uint64_t __htonq(uint64_t v)
+{
+  return ((uint64_t) __htonl(v) << 32) | __htonl(v >> 32);
+}
+
+#define htonq(x) __htonq(x)
+#define ntohq(x) __htonq(x)
+
+#endif /* _NETINET_IN_H */
+
+
+      
diff --git a/syslinux/com32/include/png.h b/syslinux/com32/include/png.h
new file mode 100644 (file)
index 0000000..e87a301
--- /dev/null
@@ -0,0 +1,3419 @@
+/* png.h - header file for PNG reference library
+ *
+ * libpng version 1.2.8 - December 3, 2004
+ * Copyright (c) 1998-2004 Glenn Randers-Pehrson
+ * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
+ * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
+ *
+ * Authors and maintainers:
+ *  libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
+ *  libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
+ *  libpng versions 0.97, January 1998, through 1.2.8 - December 3, 2004: Glenn
+ *  See also "Contributing Authors", below.
+ *
+ * Note about libpng version numbers:
+ *
+ *    Due to various miscommunications, unforeseen code incompatibilities
+ *    and occasional factors outside the authors' control, version numbering
+ *    on the library has not always been consistent and straightforward.
+ *    The following table summarizes matters since version 0.89c, which was
+ *    the first widely used release:
+ *
+ *    source                 png.h  png.h  shared-lib
+ *    version                string   int  version
+ *    -------                ------ -----  ----------
+ *    0.89c "1.0 beta 3"     0.89      89  1.0.89
+ *    0.90  "1.0 beta 4"     0.90      90  0.90  [should have been 2.0.90]
+ *    0.95  "1.0 beta 5"     0.95      95  0.95  [should have been 2.0.95]
+ *    0.96  "1.0 beta 6"     0.96      96  0.96  [should have been 2.0.96]
+ *    0.97b "1.00.97 beta 7" 1.00.97   97  1.0.1 [should have been 2.0.97]
+ *    0.97c                  0.97      97  2.0.97
+ *    0.98                   0.98      98  2.0.98
+ *    0.99                   0.99      98  2.0.99
+ *    0.99a-m                0.99      99  2.0.99
+ *    1.00                   1.00     100  2.1.0 [100 should be 10000]
+ *    1.0.0      (from here on, the   100  2.1.0 [100 should be 10000]
+ *    1.0.1       png.h string is   10001  2.1.0
+ *    1.0.1a-e    identical to the  10002  from here on, the shared library
+ *    1.0.2       source version)   10002  is 2.V where V is the source code
+ *    1.0.2a-b                      10003  version, except as noted.
+ *    1.0.3                         10003
+ *    1.0.3a-d                      10004
+ *    1.0.4                         10004
+ *    1.0.4a-f                      10005
+ *    1.0.5 (+ 2 patches)           10005
+ *    1.0.5a-d                      10006
+ *    1.0.5e-r                      10100 (not source compatible)
+ *    1.0.5s-v                      10006 (not binary compatible)
+ *    1.0.6 (+ 3 patches)           10006 (still binary incompatible)
+ *    1.0.6d-f                      10007 (still binary incompatible)
+ *    1.0.6g                        10007
+ *    1.0.6h                        10007  10.6h (testing xy.z so-numbering)
+ *    1.0.6i                        10007  10.6i
+ *    1.0.6j                        10007  2.1.0.6j (incompatible with 1.0.0)
+ *    1.0.7beta11-14        DLLNUM  10007  2.1.0.7beta11-14 (binary compatible)
+ *    1.0.7beta15-18           1    10007  2.1.0.7beta15-18 (binary compatible)
+ *    1.0.7rc1-2               1    10007  2.1.0.7rc1-2 (binary compatible)
+ *    1.0.7                    1    10007  (still compatible)
+ *    1.0.8beta1-4             1    10008  2.1.0.8beta1-4
+ *    1.0.8rc1                 1    10008  2.1.0.8rc1
+ *    1.0.8                    1    10008  2.1.0.8
+ *    1.0.9beta1-6             1    10009  2.1.0.9beta1-6
+ *    1.0.9rc1                 1    10009  2.1.0.9rc1
+ *    1.0.9beta7-10            1    10009  2.1.0.9beta7-10
+ *    1.0.9rc2                 1    10009  2.1.0.9rc2
+ *    1.0.9                    1    10009  2.1.0.9
+ *    1.0.10beta1              1    10010  2.1.0.10beta1
+ *    1.0.10rc1                1    10010  2.1.0.10rc1
+ *    1.0.10                   1    10010  2.1.0.10
+ *    1.0.11beta1-3            1    10011  2.1.0.11beta1-3
+ *    1.0.11rc1                1    10011  2.1.0.11rc1
+ *    1.0.11                   1    10011  2.1.0.11
+ *    1.0.12beta1-2            2    10012  2.1.0.12beta1-2
+ *    1.0.12rc1                2    10012  2.1.0.12rc1
+ *    1.0.12                   2    10012  2.1.0.12
+ *    1.1.0a-f                 -    10100  2.1.1.0a-f (branch abandoned)
+ *    1.2.0beta1-2             2    10200  2.1.2.0beta1-2
+ *    1.2.0beta3-5             3    10200  3.1.2.0beta3-5
+ *    1.2.0rc1                 3    10200  3.1.2.0rc1
+ *    1.2.0                    3    10200  3.1.2.0
+ *    1.2.1beta1-4             3    10201  3.1.2.1beta1-4
+ *    1.2.1rc1-2               3    10201  3.1.2.1rc1-2
+ *    1.2.1                    3    10201  3.1.2.1
+ *    1.2.2beta1-6            12    10202  12.so.0.1.2.2beta1-6
+ *    1.0.13beta1             10    10013  10.so.0.1.0.13beta1
+ *    1.0.13rc1               10    10013  10.so.0.1.0.13rc1
+ *    1.2.2rc1                12    10202  12.so.0.1.2.2rc1
+ *    1.0.13                  10    10013  10.so.0.1.0.13
+ *    1.2.2                   12    10202  12.so.0.1.2.2
+ *    1.2.3rc1-6              12    10203  12.so.0.1.2.3rc1-6
+ *    1.2.3                   12    10203  12.so.0.1.2.3
+ *    1.2.4beta1-3            13    10204  12.so.0.1.2.4beta1-3
+ *    1.0.14rc1               13    10014  10.so.0.1.0.14rc1
+ *    1.2.4rc1                13    10204  12.so.0.1.2.4rc1
+ *    1.0.14                  10    10014  10.so.0.1.0.14
+ *    1.2.4                   13    10204  12.so.0.1.2.4
+ *    1.2.5beta1-2            13    10205  12.so.0.1.2.5beta1-2
+ *    1.0.15rc1-3             10    10015  10.so.0.1.0.15rc1-3
+ *    1.2.5rc1-3              13    10205  12.so.0.1.2.5rc1-3
+ *    1.0.15                  10    10015  10.so.0.1.0.15
+ *    1.2.5                   13    10205  12.so.0.1.2.5
+ *    1.2.6beta1-4            13    10206  12.so.0.1.2.6beta1-4
+ *    1.0.16                  10    10016  10.so.0.1.0.16
+ *    1.2.6                   13    10206  12.so.0.1.2.6
+ *    1.2.7beta1-2            13    10207  12.so.0.1.2.7beta1-2
+ *    1.0.17rc1               10    10017  12.so.0.1.0.17rc1
+ *    1.2.7rc1                13    10207  12.so.0.1.2.7rc1
+ *    1.0.17                  10    10017  12.so.0.1.0.17
+ *    1.2.7                   13    10207  12.so.0.1.2.7
+ *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5
+ *    1.0.18rc1-5             10    10018  12.so.0.1.0.18rc1-5
+ *    1.2.8rc1-5              13    10208  12.so.0.1.2.8rc1-5
+ *    1.0.18                  10    10018  12.so.0.1.0.18
+ *    1.2.8                   13    10208  12.so.0.1.2.8
+ *
+ *    Henceforth the source version will match the shared-library major
+ *    and minor numbers; the shared-library major version number will be
+ *    used for changes in backward compatibility, as it is intended.  The
+ *    PNG_LIBPNG_VER macro, which is not used within libpng but is available
+ *    for applications, is an unsigned integer of the form xyyzz corresponding
+ *    to the source version x.y.z (leading zeros in y and z).  Beta versions
+ *    were given the previous public release number plus a letter, until
+ *    version 1.0.6j; from then on they were given the upcoming public
+ *    release number plus "betaNN" or "rcN".
+ *
+ *    Binary incompatibility exists only when applications make direct access
+ *    to the info_ptr or png_ptr members through png.h, and the compiled
+ *    application is loaded with a different version of the library.
+ *
+ *    DLLNUM will change each time there are forward or backward changes
+ *    in binary compatibility (e.g., when a new feature is added).
+ *
+ * See libpng.txt or libpng.3 for more information.  The PNG specification
+ * is available as a W3C Recommendation and as an ISO Specification,
+ * <http://www.w3.org/TR/2003/REC-PNG-20031110/
+ */
+
+/*
+ * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
+ *
+ * If you modify libpng you may insert additional notices immediately following
+ * this sentence.
+ *
+ * libpng versions 1.2.6, August 15, 2004, through 1.2.8, December 3, 2004, are
+ * Copyright (c) 2004 Glenn Randers-Pehrson, and are
+ * distributed according to the same disclaimer and license as libpng-1.2.5
+ * with the following individual added to the list of Contributing Authors:
+ *
+ *    Cosmin Truta
+ *
+ * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
+ * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
+ * distributed according to the same disclaimer and license as libpng-1.0.6
+ * with the following individuals added to the list of Contributing Authors:
+ *
+ *    Simon-Pierre Cadieux
+ *    Eric S. Raymond
+ *    Gilles Vollant
+ *
+ * and with the following additions to the disclaimer:
+ *
+ *    There is no warranty against interference with your enjoyment of the
+ *    library or against infringement.  There is no warranty that our
+ *    efforts or the library will fulfill any of your particular purposes
+ *    or needs.  This library is provided with all faults, and the entire
+ *    risk of satisfactory quality, performance, accuracy, and effort is with
+ *    the user.
+ *
+ * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
+ * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
+ * distributed according to the same disclaimer and license as libpng-0.96,
+ * with the following individuals added to the list of Contributing Authors:
+ *
+ *    Tom Lane
+ *    Glenn Randers-Pehrson
+ *    Willem van Schaik
+ *
+ * libpng versions 0.89, June 1996, through 0.96, May 1997, are
+ * Copyright (c) 1996, 1997 Andreas Dilger
+ * Distributed according to the same disclaimer and license as libpng-0.88,
+ * with the following individuals added to the list of Contributing Authors:
+ *
+ *    John Bowler
+ *    Kevin Bracey
+ *    Sam Bushell
+ *    Magnus Holmgren
+ *    Greg Roelofs
+ *    Tom Tanner
+ *
+ * libpng versions 0.5, May 1995, through 0.88, January 1996, are
+ * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
+ *
+ * For the purposes of this copyright and license, "Contributing Authors"
+ * is defined as the following set of individuals:
+ *
+ *    Andreas Dilger
+ *    Dave Martindale
+ *    Guy Eric Schalnat
+ *    Paul Schmidt
+ *    Tim Wegner
+ *
+ * The PNG Reference Library is supplied "AS IS".  The Contributing Authors
+ * and Group 42, Inc. disclaim all warranties, expressed or implied,
+ * including, without limitation, the warranties of merchantability and of
+ * fitness for any purpose.  The Contributing Authors and Group 42, Inc.
+ * assume no liability for direct, indirect, incidental, special, exemplary,
+ * or consequential damages, which may result from the use of the PNG
+ * Reference Library, even if advised of the possibility of such damage.
+ *
+ * Permission is hereby granted to use, copy, modify, and distribute this
+ * source code, or portions hereof, for any purpose, without fee, subject
+ * to the following restrictions:
+ *
+ * 1. The origin of this source code must not be misrepresented.
+ *
+ * 2. Altered versions must be plainly marked as such and
+ * must not be misrepresented as being the original source.
+ *
+ * 3. This Copyright notice may not be removed or altered from
+ *    any source or altered source distribution.
+ *
+ * The Contributing Authors and Group 42, Inc. specifically permit, without
+ * fee, and encourage the use of this source code as a component to
+ * supporting the PNG file format in commercial products.  If you use this
+ * source code in a product, acknowledgment is not required but would be
+ * appreciated.
+ */
+
+/*
+ * A "png_get_copyright" function is available, for convenient use in "about"
+ * boxes and the like:
+ *
+ * printf("%s",png_get_copyright(NULL));
+ *
+ * Also, the PNG logo (in PNG format, of course) is supplied in the
+ * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
+ */
+
+/*
+ * Libpng is OSI Certified Open Source Software.  OSI Certified is a
+ * certification mark of the Open Source Initiative.
+ */
+
+/*
+ * The contributing authors would like to thank all those who helped
+ * with testing, bug fixes, and patience.  This wouldn't have been
+ * possible without all of you.
+ *
+ * Thanks to Frank J. T. Wojcik for helping with the documentation.
+ */
+
+/*
+ * Y2K compliance in libpng:
+ * =========================
+ *
+ *    December 3, 2004
+ *
+ *    Since the PNG Development group is an ad-hoc body, we can't make
+ *    an official declaration.
+ *
+ *    This is your unofficial assurance that libpng from version 0.71 and
+ *    upward through 1.2.8 are Y2K compliant.  It is my belief that earlier
+ *    versions were also Y2K compliant.
+ *
+ *    Libpng only has three year fields.  One is a 2-byte unsigned integer
+ *    that will hold years up to 65535.  The other two hold the date in text
+ *    format, and will hold years up to 9999.
+ *
+ *    The integer is
+ *        "png_uint_16 year" in png_time_struct.
+ *
+ *    The strings are
+ *        "png_charp time_buffer" in png_struct and
+ *        "near_time_buffer", which is a local character string in png.c.
+ *
+ *    There are seven time-related functions:
+ *        png.c: png_convert_to_rfc_1123() in png.c
+ *          (formerly png_convert_to_rfc_1152() in error)
+ *        png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
+ *        png_convert_from_time_t() in pngwrite.c
+ *        png_get_tIME() in pngget.c
+ *        png_handle_tIME() in pngrutil.c, called in pngread.c
+ *        png_set_tIME() in pngset.c
+ *        png_write_tIME() in pngwutil.c, called in pngwrite.c
+ *
+ *    All handle dates properly in a Y2K environment.  The
+ *    png_convert_from_time_t() function calls gmtime() to convert from system
+ *    clock time, which returns (year - 1900), which we properly convert to
+ *    the full 4-digit year.  There is a possibility that applications using
+ *    libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
+ *    function, or that they are incorrectly passing only a 2-digit year
+ *    instead of "year - 1900" into the png_convert_from_struct_tm() function,
+ *    but this is not under our control.  The libpng documentation has always
+ *    stated that it works with 4-digit years, and the APIs have been
+ *    documented as such.
+ *
+ *    The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned
+ *    integer to hold the year, and can hold years as large as 65535.
+ *
+ *    zlib, upon which libpng depends, is also Y2K compliant.  It contains
+ *    no date-related code.
+ *
+ *       Glenn Randers-Pehrson
+ *       libpng maintainer
+ *       PNG Development Group
+ */
+
+#ifndef PNG_H
+#define PNG_H
+
+/* This is not the place to learn how to use libpng.  The file libpng.txt
+ * describes how to use libpng, and the file example.c summarizes it
+ * with some code on which to build.  This file is useful for looking
+ * at the actual function definitions and structure components.
+ */
+
+/* Version information for png.h - this should match the version in png.c */
+#define PNG_LIBPNG_VER_STRING "1.2.8"
+#define PNG_HEADER_VERSION_STRING \
+   " libpng version 1.2.8 - December 3, 2004 (header)\n"
+
+#define PNG_LIBPNG_VER_SONUM   0
+#define PNG_LIBPNG_VER_DLLNUM  13
+
+/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
+#define PNG_LIBPNG_VER_MAJOR   1
+#define PNG_LIBPNG_VER_MINOR   2
+#define PNG_LIBPNG_VER_RELEASE 8
+/* This should match the numeric part of the final component of
+ * PNG_LIBPNG_VER_STRING, omitting any leading zero: */
+
+#define PNG_LIBPNG_VER_BUILD  0
+
+/* Release Status */
+#define PNG_LIBPNG_BUILD_ALPHA    1
+#define PNG_LIBPNG_BUILD_BETA     2
+#define PNG_LIBPNG_BUILD_RC       3
+#define PNG_LIBPNG_BUILD_STABLE   4
+#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
+  
+/* Release-Specific Flags */
+#define PNG_LIBPNG_BUILD_PATCH    8 /* Can be OR'ed with
+                                       PNG_LIBPNG_BUILD_STABLE only */
+#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
+                                       PNG_LIBPNG_BUILD_SPECIAL */
+#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
+                                       PNG_LIBPNG_BUILD_PRIVATE */
+
+#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE
+
+/* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
+ * We must not include leading zeros.
+ * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
+ * version 1.0.0 was mis-numbered 100 instead of 10000).  From
+ * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release */
+#define PNG_LIBPNG_VER 10208 /* 1.2.8 */
+
+#ifndef PNG_VERSION_INFO_ONLY
+/* include the compression library's header */
+#include "zlib.h"
+#endif
+
+/* include all user configurable info, including optional assembler routines */
+#include "pngconf.h"
+
+/*
+ * Added at libpng-1.2.8 */
+/* Ref MSDN: Private as priority over Special
+ * VS_FF_PRIVATEBUILD File *was not* built using standard release
+ * procedures. If this value is given, the StringFileInfo block must
+ * contain a PrivateBuild string. 
+ *
+ * VS_FF_SPECIALBUILD File *was* built by the original company using
+ * standard release procedures but is a variation of the standard
+ * file of the same version number. If this value is given, the
+ * StringFileInfo block must contain a SpecialBuild string. 
+ */
+
+#if defined(PNG_USER_PRIVATEBUILD)
+#  define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE | \
+          PNG_LIBPNG_BUILD_PRIVATE
+#else
+#  if defined(PNG_LIBPNG_SPECIALBUILD)
+#    define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE | \
+            PNG_LIBPNG_BUILD_SPECIAL
+#  else
+#    define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE
+#  endif
+#endif
+
+#ifndef PNG_VERSION_INFO_ONLY
+
+/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* This file is arranged in several sections.  The first section contains
+ * structure and type definitions.  The second section contains the external
+ * library functions, while the third has the internal library functions,
+ * which applications aren't expected to use directly.
+ */
+
+#ifndef PNG_NO_TYPECAST_NULL
+#define int_p_NULL                (int *)NULL
+#define png_bytep_NULL            (png_bytep)NULL
+#define png_bytepp_NULL           (png_bytepp)NULL
+#define png_doublep_NULL          (png_doublep)NULL
+#define png_error_ptr_NULL        (png_error_ptr)NULL
+#define png_flush_ptr_NULL        (png_flush_ptr)NULL
+#define png_free_ptr_NULL         (png_free_ptr)NULL
+#define png_infopp_NULL           (png_infopp)NULL
+#define png_malloc_ptr_NULL       (png_malloc_ptr)NULL
+#define png_read_status_ptr_NULL  (png_read_status_ptr)NULL
+#define png_rw_ptr_NULL           (png_rw_ptr)NULL
+#define png_structp_NULL          (png_structp)NULL
+#define png_uint_16p_NULL         (png_uint_16p)NULL
+#define png_voidp_NULL            (png_voidp)NULL
+#define png_write_status_ptr_NULL (png_write_status_ptr)NULL
+#else
+#define int_p_NULL                NULL
+#define png_bytep_NULL            NULL
+#define png_bytepp_NULL           NULL
+#define png_doublep_NULL          NULL
+#define png_error_ptr_NULL        NULL
+#define png_flush_ptr_NULL        NULL
+#define png_free_ptr_NULL         NULL
+#define png_infopp_NULL           NULL
+#define png_malloc_ptr_NULL       NULL
+#define png_read_status_ptr_NULL  NULL
+#define png_rw_ptr_NULL           NULL
+#define png_structp_NULL          NULL
+#define png_uint_16p_NULL         NULL
+#define png_voidp_NULL            NULL
+#define png_write_status_ptr_NULL NULL
+#endif
+
+/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */
+#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
+/* Version information for C files, stored in png.c.  This had better match
+ * the version above.
+ */
+#ifdef PNG_USE_GLOBAL_ARRAYS
+PNG_EXPORT_VAR (const char) png_libpng_ver[18];
+  /* need room for 99.99.99beta99z */
+#else
+#define png_libpng_ver png_get_header_ver(NULL)
+#endif
+
+#ifdef PNG_USE_GLOBAL_ARRAYS
+/* This was removed in version 1.0.5c */
+/* Structures to facilitate easy interlacing.  See png.c for more details */
+PNG_EXPORT_VAR (const int FARDATA) png_pass_start[7];
+PNG_EXPORT_VAR (const int FARDATA) png_pass_inc[7];
+PNG_EXPORT_VAR (const int FARDATA) png_pass_ystart[7];
+PNG_EXPORT_VAR (const int FARDATA) png_pass_yinc[7];
+PNG_EXPORT_VAR (const int FARDATA) png_pass_mask[7];
+PNG_EXPORT_VAR (const int FARDATA) png_pass_dsp_mask[7];
+#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW
+PNG_EXPORT_VAR (const int FARDATA) png_pass_width[7];
+#endif
+/* This isn't currently used.  If you need it, see png.c for more details.
+PNG_EXPORT_VAR (const int FARDATA) png_pass_height[7];
+*/
+#endif
+
+#endif /* PNG_NO_EXTERN */
+
+/* Three color definitions.  The order of the red, green, and blue, (and the
+ * exact size) is not important, although the size of the fields need to
+ * be png_byte or png_uint_16 (as defined below).
+ */
+typedef struct png_color_struct
+{
+   png_byte red;
+   png_byte green;
+   png_byte blue;
+} png_color;
+typedef png_color FAR * png_colorp;
+typedef png_color FAR * FAR * png_colorpp;
+
+typedef struct png_color_16_struct
+{
+   png_byte index;    /* used for palette files */
+   png_uint_16 red;   /* for use in red green blue files */
+   png_uint_16 green;
+   png_uint_16 blue;
+   png_uint_16 gray;  /* for use in grayscale files */
+} png_color_16;
+typedef png_color_16 FAR * png_color_16p;
+typedef png_color_16 FAR * FAR * png_color_16pp;
+
+typedef struct png_color_8_struct
+{
+   png_byte red;   /* for use in red green blue files */
+   png_byte green;
+   png_byte blue;
+   png_byte gray;  /* for use in grayscale files */
+   png_byte alpha; /* for alpha channel files */
+} png_color_8;
+typedef png_color_8 FAR * png_color_8p;
+typedef png_color_8 FAR * FAR * png_color_8pp;
+
+/*
+ * The following two structures are used for the in-core representation
+ * of sPLT chunks.
+ */
+typedef struct png_sPLT_entry_struct
+{
+   png_uint_16 red;
+   png_uint_16 green;
+   png_uint_16 blue;
+   png_uint_16 alpha;
+   png_uint_16 frequency;
+} png_sPLT_entry;
+typedef png_sPLT_entry FAR * png_sPLT_entryp;
+typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp;
+
+/*  When the depth of the sPLT palette is 8 bits, the color and alpha samples
+ *  occupy the LSB of their respective members, and the MSB of each member
+ *  is zero-filled.  The frequency member always occupies the full 16 bits.
+ */
+
+typedef struct png_sPLT_struct
+{
+   png_charp name;           /* palette name */
+   png_byte depth;           /* depth of palette samples */
+   png_sPLT_entryp entries;  /* palette entries */
+   png_int_32 nentries;      /* number of palette entries */
+} png_sPLT_t;
+typedef png_sPLT_t FAR * png_sPLT_tp;
+typedef png_sPLT_t FAR * FAR * png_sPLT_tpp;
+
+#ifdef PNG_TEXT_SUPPORTED
+/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
+ * and whether that contents is compressed or not.  The "key" field
+ * points to a regular zero-terminated C string.  The "text", "lang", and
+ * "lang_key" fields can be regular C strings, empty strings, or NULL pointers.
+ * However, the * structure returned by png_get_text() will always contain
+ * regular zero-terminated C strings (possibly empty), never NULL pointers,
+ * so they can be safely used in printf() and other string-handling functions.
+ */
+typedef struct png_text_struct
+{
+   int  compression;       /* compression value:
+                             -1: tEXt, none
+                              0: zTXt, deflate
+                              1: iTXt, none
+                              2: iTXt, deflate  */
+   png_charp key;          /* keyword, 1-79 character description of "text" */
+   png_charp text;         /* comment, may be an empty string (ie "")
+                              or a NULL pointer */
+   png_size_t text_length; /* length of the text string */
+#ifdef PNG_iTXt_SUPPORTED
+   png_size_t itxt_length; /* length of the itxt string */
+   png_charp lang;         /* language code, 0-79 characters
+                              or a NULL pointer */
+   png_charp lang_key;     /* keyword translated UTF-8 string, 0 or more
+                              chars or a NULL pointer */
+#endif
+} png_text;
+typedef png_text FAR * png_textp;
+typedef png_text FAR * FAR * png_textpp;
+#endif
+
+/* Supported compression types for text in PNG files (tEXt, and zTXt).
+ * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
+#define PNG_TEXT_COMPRESSION_NONE_WR -3
+#define PNG_TEXT_COMPRESSION_zTXt_WR -2
+#define PNG_TEXT_COMPRESSION_NONE    -1
+#define PNG_TEXT_COMPRESSION_zTXt     0
+#define PNG_ITXT_COMPRESSION_NONE     1
+#define PNG_ITXT_COMPRESSION_zTXt     2
+#define PNG_TEXT_COMPRESSION_LAST     3  /* Not a valid value */
+
+/* png_time is a way to hold the time in an machine independent way.
+ * Two conversions are provided, both from time_t and struct tm.  There
+ * is no portable way to convert to either of these structures, as far
+ * as I know.  If you know of a portable way, send it to me.  As a side
+ * note - PNG has always been Year 2000 compliant!
+ */
+typedef struct png_time_struct
+{
+   png_uint_16 year; /* full year, as in, 1995 */
+   png_byte month;   /* month of year, 1 - 12 */
+   png_byte day;     /* day of month, 1 - 31 */
+   png_byte hour;    /* hour of day, 0 - 23 */
+   png_byte minute;  /* minute of hour, 0 - 59 */
+   png_byte second;  /* second of minute, 0 - 60 (for leap seconds) */
+} png_time;
+typedef png_time FAR * png_timep;
+typedef png_time FAR * FAR * png_timepp;
+
+#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+/* png_unknown_chunk is a structure to hold queued chunks for which there is
+ * no specific support.  The idea is that we can use this to queue
+ * up private chunks for output even though the library doesn't actually
+ * know about their semantics.
+ */
+typedef struct png_unknown_chunk_t
+{
+    png_byte name[5];
+    png_byte *data;
+    png_size_t size;
+
+    /* libpng-using applications should NOT directly modify this byte. */
+    png_byte location; /* mode of operation at read time */
+}
+png_unknown_chunk;
+typedef png_unknown_chunk FAR * png_unknown_chunkp;
+typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp;
+#endif
+
+/* png_info is a structure that holds the information in a PNG file so
+ * that the application can find out the characteristics of the image.
+ * If you are reading the file, this structure will tell you what is
+ * in the PNG file.  If you are writing the file, fill in the information
+ * you want to put into the PNG file, then call png_write_info().
+ * The names chosen should be very close to the PNG specification, so
+ * consult that document for information about the meaning of each field.
+ *
+ * With libpng < 0.95, it was only possible to directly set and read the
+ * the values in the png_info_struct, which meant that the contents and
+ * order of the values had to remain fixed.  With libpng 0.95 and later,
+ * however, there are now functions that abstract the contents of
+ * png_info_struct from the application, so this makes it easier to use
+ * libpng with dynamic libraries, and even makes it possible to use
+ * libraries that don't have all of the libpng ancillary chunk-handing
+ * functionality.
+ *
+ * In any case, the order of the parameters in png_info_struct should NOT
+ * be changed for as long as possible to keep compatibility with applications
+ * that use the old direct-access method with png_info_struct.
+ *
+ * The following members may have allocated storage attached that should be
+ * cleaned up before the structure is discarded: palette, trans, text,
+ * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile,
+ * splt_palettes, scal_unit, row_pointers, and unknowns.   By default, these
+ * are automatically freed when the info structure is deallocated, if they were
+ * allocated internally by libpng.  This behavior can be changed by means
+ * of the png_data_freer() function.
+ *
+ * More allocation details: all the chunk-reading functions that
+ * change these members go through the corresponding png_set_*
+ * functions.  A function to clear these members is available: see
+ * png_free_data().  The png_set_* functions do not depend on being
+ * able to point info structure members to any of the storage they are
+ * passed (they make their own copies), EXCEPT that the png_set_text
+ * functions use the same storage passed to them in the text_ptr or
+ * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns
+ * functions do not make their own copies.
+ */
+typedef struct png_info_struct
+{
+   /* the following are necessary for every PNG file */
+   png_uint_32 width;       /* width of image in pixels (from IHDR) */
+   png_uint_32 height;      /* height of image in pixels (from IHDR) */
+   png_uint_32 valid;       /* valid chunk data (see PNG_INFO_ below) */
+   png_uint_32 rowbytes;    /* bytes needed to hold an untransformed row */
+   png_colorp palette;      /* array of color values (valid & PNG_INFO_PLTE) */
+   png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */
+   png_uint_16 num_trans;   /* number of transparent palette color (tRNS) */
+   png_byte bit_depth;      /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
+   png_byte color_type;     /* see PNG_COLOR_TYPE_ below (from IHDR) */
+   /* The following three should have been named *_method not *_type */
+   png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
+   png_byte filter_type;    /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
+   png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
+
+   /* The following is informational only on read, and not used on writes. */
+   png_byte channels;       /* number of data channels per pixel (1, 2, 3, 4) */
+   png_byte pixel_depth;    /* number of bits per pixel */
+   png_byte spare_byte;     /* to align the data, and for future use */
+   png_byte signature[8];   /* magic bytes read by libpng from start of file */
+
+   /* The rest of the data is optional.  If you are reading, check the
+    * valid field to see if the information in these are valid.  If you
+    * are writing, set the valid field to those chunks you want written,
+    * and initialize the appropriate fields below.
+    */
+
+#if defined(PNG_gAMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
+   /* The gAMA chunk describes the gamma characteristics of the system
+    * on which the image was created, normally in the range [1.0, 2.5].
+    * Data is valid if (valid & PNG_INFO_gAMA) is non-zero.
+    */
+   float gamma; /* gamma value of image, if (valid & PNG_INFO_gAMA) */
+#endif
+
+#if defined(PNG_sRGB_SUPPORTED)
+    /* GR-P, 0.96a */
+    /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */
+   png_byte srgb_intent; /* sRGB rendering intent [0, 1, 2, or 3] */
+#endif
+
+#if defined(PNG_TEXT_SUPPORTED)
+   /* The tEXt, and zTXt chunks contain human-readable textual data in
+    * uncompressed, compressed, and optionally compressed forms, respectively.
+    * The data in "text" is an array of pointers to uncompressed,
+    * null-terminated C strings. Each chunk has a keyword that describes the
+    * textual data contained in that chunk.  Keywords are not required to be
+    * unique, and the text string may be empty.  Any number of text chunks may
+    * be in an image.
+    */
+   int num_text; /* number of comments read/to write */
+   int max_text; /* current size of text array */
+   png_textp text; /* array of comments read/to write */
+#endif /* PNG_TEXT_SUPPORTED */
+
+#if defined(PNG_tIME_SUPPORTED)
+   /* The tIME chunk holds the last time the displayed image data was
+    * modified.  See the png_time struct for the contents of this struct.
+    */
+   png_time mod_time;
+#endif
+
+#if defined(PNG_sBIT_SUPPORTED)
+   /* The sBIT chunk specifies the number of significant high-order bits
+    * in the pixel data.  Values are in the range [1, bit_depth], and are
+    * only specified for the channels in the pixel data.  The contents of
+    * the low-order bits is not specified.  Data is valid if
+    * (valid & PNG_INFO_sBIT) is non-zero.
+    */
+   png_color_8 sig_bit; /* significant bits in color channels */
+#endif
+
+#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \
+defined(PNG_READ_BACKGROUND_SUPPORTED)
+   /* The tRNS chunk supplies transparency data for paletted images and
+    * other image types that don't need a full alpha channel.  There are
+    * "num_trans" transparency values for a paletted image, stored in the
+    * same order as the palette colors, starting from index 0.  Values
+    * for the data are in the range [0, 255], ranging from fully transparent
+    * to fully opaque, respectively.  For non-paletted images, there is a
+    * single color specified that should be treated as fully transparent.
+    * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.
+    */
+   png_bytep trans; /* transparent values for paletted image */
+   png_color_16 trans_values; /* transparent color for non-palette image */
+#endif
+
+#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
+   /* The bKGD chunk gives the suggested image background color if the
+    * display program does not have its own background color and the image
+    * is needs to composited onto a background before display.  The colors
+    * in "background" are normally in the same color space/depth as the
+    * pixel data.  Data is valid if (valid & PNG_INFO_bKGD) is non-zero.
+    */
+   png_color_16 background;
+#endif
+
+#if defined(PNG_oFFs_SUPPORTED)
+   /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards
+    * and downwards from the top-left corner of the display, page, or other
+    * application-specific co-ordinate space.  See the PNG_OFFSET_ defines
+    * below for the unit types.  Valid if (valid & PNG_INFO_oFFs) non-zero.
+    */
+   png_int_32 x_offset; /* x offset on page */
+   png_int_32 y_offset; /* y offset on page */
+   png_byte offset_unit_type; /* offset units type */
+#endif
+
+#if defined(PNG_pHYs_SUPPORTED)
+   /* The pHYs chunk gives the physical pixel density of the image for
+    * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_
+    * defines below).  Data is valid if (valid & PNG_INFO_pHYs) is non-zero.
+    */
+   png_uint_32 x_pixels_per_unit; /* horizontal pixel density */
+   png_uint_32 y_pixels_per_unit; /* vertical pixel density */
+   png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */
+#endif
+
+#if defined(PNG_hIST_SUPPORTED)
+   /* The hIST chunk contains the relative frequency or importance of the
+    * various palette entries, so that a viewer can intelligently select a
+    * reduced-color palette, if required.  Data is an array of "num_palette"
+    * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST)
+    * is non-zero.
+    */
+   png_uint_16p hist;
+#endif
+
+#ifdef PNG_cHRM_SUPPORTED
+   /* The cHRM chunk describes the CIE color characteristics of the monitor
+    * on which the PNG was created.  This data allows the viewer to do gamut
+    * mapping of the input image to ensure that the viewer sees the same
+    * colors in the image as the creator.  Values are in the range
+    * [0.0, 0.8].  Data valid if (valid & PNG_INFO_cHRM) non-zero.
+    */
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+   float x_white;
+   float y_white;
+   float x_red;
+   float y_red;
+   float x_green;
+   float y_green;
+   float x_blue;
+   float y_blue;
+#endif
+#endif
+
+#if defined(PNG_pCAL_SUPPORTED)
+   /* The pCAL chunk describes a transformation between the stored pixel
+    * values and original physical data values used to create the image.
+    * The integer range [0, 2^bit_depth - 1] maps to the floating-point
+    * range given by [pcal_X0, pcal_X1], and are further transformed by a
+    * (possibly non-linear) transformation function given by "pcal_type"
+    * and "pcal_params" into "pcal_units".  Please see the PNG_EQUATION_
+    * defines below, and the PNG-Group's PNG extensions document for a
+    * complete description of the transformations and how they should be
+    * implemented, and for a description of the ASCII parameter strings.
+    * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.
+    */
+   png_charp pcal_purpose;  /* pCAL chunk description string */
+   png_int_32 pcal_X0;      /* minimum value */
+   png_int_32 pcal_X1;      /* maximum value */
+   png_charp pcal_units;    /* Latin-1 string giving physical units */
+   png_charpp pcal_params;  /* ASCII strings containing parameter values */
+   png_byte pcal_type;      /* equation type (see PNG_EQUATION_ below) */
+   png_byte pcal_nparams;   /* number of parameters given in pcal_params */
+#endif
+
+/* New members added in libpng-1.0.6 */
+#ifdef PNG_FREE_ME_SUPPORTED
+   png_uint_32 free_me;     /* flags items libpng is responsible for freeing */
+#endif
+
+#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+   /* storage for unknown chunks that the library doesn't recognize. */
+   png_unknown_chunkp unknown_chunks;
+   png_size_t unknown_chunks_num;
+#endif
+
+#if defined(PNG_iCCP_SUPPORTED)
+   /* iCCP chunk data. */
+   png_charp iccp_name;     /* profile name */
+   png_charp iccp_profile;  /* International Color Consortium profile data */
+                            /* Note to maintainer: should be png_bytep */
+   png_uint_32 iccp_proflen;  /* ICC profile data length */
+   png_byte iccp_compression; /* Always zero */
+#endif
+
+#if defined(PNG_sPLT_SUPPORTED)
+   /* data on sPLT chunks (there may be more than one). */
+   png_sPLT_tp splt_palettes;
+   png_uint_32 splt_palettes_num;
+#endif
+
+#if defined(PNG_sCAL_SUPPORTED)
+   /* The sCAL chunk describes the actual physical dimensions of the
+    * subject matter of the graphic.  The chunk contains a unit specification
+    * a byte value, and two ASCII strings representing floating-point
+    * values.  The values are width and height corresponsing to one pixel
+    * in the image.  This external representation is converted to double
+    * here.  Data values are valid if (valid & PNG_INFO_sCAL) is non-zero.
+    */
+   png_byte scal_unit;         /* unit of physical scale */
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+   double scal_pixel_width;    /* width of one pixel */
+   double scal_pixel_height;   /* height of one pixel */
+#endif
+#ifdef PNG_FIXED_POINT_SUPPORTED
+   png_charp scal_s_width;     /* string containing height */
+   png_charp scal_s_height;    /* string containing width */
+#endif
+#endif
+
+#if defined(PNG_INFO_IMAGE_SUPPORTED)
+   /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */
+   /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
+   png_bytepp row_pointers;        /* the image bits */
+#endif
+
+#if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_SUPPORTED)
+   png_fixed_point int_gamma; /* gamma of image, if (valid & PNG_INFO_gAMA) */
+#endif
+
+#if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED)
+   png_fixed_point int_x_white;
+   png_fixed_point int_y_white;
+   png_fixed_point int_x_red;
+   png_fixed_point int_y_red;
+   png_fixed_point int_x_green;
+   png_fixed_point int_y_green;
+   png_fixed_point int_x_blue;
+   png_fixed_point int_y_blue;
+#endif
+
+} png_info;
+
+typedef png_info FAR * png_infop;
+typedef png_info FAR * FAR * png_infopp;
+
+/* Maximum positive integer used in PNG is (2^31)-1 */
+#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
+#define PNG_UINT_32_MAX ((png_uint_32)(-1))
+#define PNG_SIZE_MAX ((png_size_t)(-1))
+/* PNG_MAX_UINT is deprecated; use PNG_UINT_31_MAX instead. */
+#define PNG_MAX_UINT PNG_UINT_31_MAX
+
+/* These describe the color_type field in png_info. */
+/* color type masks */
+#define PNG_COLOR_MASK_PALETTE    1
+#define PNG_COLOR_MASK_COLOR      2
+#define PNG_COLOR_MASK_ALPHA      4
+
+/* color types.  Note that not all combinations are legal */
+#define PNG_COLOR_TYPE_GRAY 0
+#define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
+#define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)
+#define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
+#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
+/* aliases */
+#define PNG_COLOR_TYPE_RGBA  PNG_COLOR_TYPE_RGB_ALPHA
+#define PNG_COLOR_TYPE_GA  PNG_COLOR_TYPE_GRAY_ALPHA
+
+/* This is for compression type. PNG 1.0-1.2 only define the single type. */
+#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
+#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
+
+/* This is for filter type. PNG 1.0-1.2 only define the single type. */
+#define PNG_FILTER_TYPE_BASE      0 /* Single row per-byte filtering */
+#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
+#define PNG_FILTER_TYPE_DEFAULT   PNG_FILTER_TYPE_BASE
+
+/* These are for the interlacing type.  These values should NOT be changed. */
+#define PNG_INTERLACE_NONE        0 /* Non-interlaced image */
+#define PNG_INTERLACE_ADAM7       1 /* Adam7 interlacing */
+#define PNG_INTERLACE_LAST        2 /* Not a valid value */
+
+/* These are for the oFFs chunk.  These values should NOT be changed. */
+#define PNG_OFFSET_PIXEL          0 /* Offset in pixels */
+#define PNG_OFFSET_MICROMETER     1 /* Offset in micrometers (1/10^6 meter) */
+#define PNG_OFFSET_LAST           2 /* Not a valid value */
+
+/* These are for the pCAL chunk.  These values should NOT be changed. */
+#define PNG_EQUATION_LINEAR       0 /* Linear transformation */
+#define PNG_EQUATION_BASE_E       1 /* Exponential base e transform */
+#define PNG_EQUATION_ARBITRARY    2 /* Arbitrary base exponential transform */
+#define PNG_EQUATION_HYPERBOLIC   3 /* Hyperbolic sine transformation */
+#define PNG_EQUATION_LAST         4 /* Not a valid value */
+
+/* These are for the sCAL chunk.  These values should NOT be changed. */
+#define PNG_SCALE_UNKNOWN         0 /* unknown unit (image scale) */
+#define PNG_SCALE_METER           1 /* meters per pixel */
+#define PNG_SCALE_RADIAN          2 /* radians per pixel */
+#define PNG_SCALE_LAST            3 /* Not a valid value */
+
+/* These are for the pHYs chunk.  These values should NOT be changed. */
+#define PNG_RESOLUTION_UNKNOWN    0 /* pixels/unknown unit (aspect ratio) */
+#define PNG_RESOLUTION_METER      1 /* pixels/meter */
+#define PNG_RESOLUTION_LAST       2 /* Not a valid value */
+
+/* These are for the sRGB chunk.  These values should NOT be changed. */
+#define PNG_sRGB_INTENT_PERCEPTUAL 0
+#define PNG_sRGB_INTENT_RELATIVE   1
+#define PNG_sRGB_INTENT_SATURATION 2
+#define PNG_sRGB_INTENT_ABSOLUTE   3
+#define PNG_sRGB_INTENT_LAST       4 /* Not a valid value */
+
+/* This is for text chunks */
+#define PNG_KEYWORD_MAX_LENGTH     79
+
+/* Maximum number of entries in PLTE/sPLT/tRNS arrays */
+#define PNG_MAX_PALETTE_LENGTH    256
+
+/* These determine if an ancillary chunk's data has been successfully read
+ * from the PNG header, or if the application has filled in the corresponding
+ * data in the info_struct to be written into the output file.  The values
+ * of the PNG_INFO_<chunk> defines should NOT be changed.
+ */
+#define PNG_INFO_gAMA 0x0001
+#define PNG_INFO_sBIT 0x0002
+#define PNG_INFO_cHRM 0x0004
+#define PNG_INFO_PLTE 0x0008
+#define PNG_INFO_tRNS 0x0010
+#define PNG_INFO_bKGD 0x0020
+#define PNG_INFO_hIST 0x0040
+#define PNG_INFO_pHYs 0x0080
+#define PNG_INFO_oFFs 0x0100
+#define PNG_INFO_tIME 0x0200
+#define PNG_INFO_pCAL 0x0400
+#define PNG_INFO_sRGB 0x0800   /* GR-P, 0.96a */
+#define PNG_INFO_iCCP 0x1000   /* ESR, 1.0.6 */
+#define PNG_INFO_sPLT 0x2000   /* ESR, 1.0.6 */
+#define PNG_INFO_sCAL 0x4000   /* ESR, 1.0.6 */
+#define PNG_INFO_IDAT 0x8000L  /* ESR, 1.0.6 */
+
+/* This is used for the transformation routines, as some of them
+ * change these values for the row.  It also should enable using
+ * the routines for other purposes.
+ */
+typedef struct png_row_info_struct
+{
+   png_uint_32 width; /* width of row */
+   png_uint_32 rowbytes; /* number of bytes in row */
+   png_byte color_type; /* color type of row */
+   png_byte bit_depth; /* bit depth of row */
+   png_byte channels; /* number of channels (1, 2, 3, or 4) */
+   png_byte pixel_depth; /* bits per pixel (depth * channels) */
+} png_row_info;
+
+typedef png_row_info FAR * png_row_infop;
+typedef png_row_info FAR * FAR * png_row_infopp;
+
+/* These are the function types for the I/O functions and for the functions
+ * that allow the user to override the default I/O functions with his or her
+ * own.  The png_error_ptr type should match that of user-supplied warning
+ * and error functions, while the png_rw_ptr type should match that of the
+ * user read/write data functions.
+ */
+typedef struct png_struct_def png_struct;
+typedef png_struct FAR * png_structp;
+
+typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp));
+typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t));
+typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp));
+typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32,
+   int));
+typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32,
+   int));
+
+#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
+typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop));
+typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));
+typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
+   png_uint_32, int));
+#endif
+
+#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
+    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
+    defined(PNG_LEGACY_SUPPORTED)
+typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp,
+    png_row_infop, png_bytep));
+#endif
+
+#if defined(PNG_USER_CHUNKS_SUPPORTED)
+typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp));
+#endif
+#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
+#endif
+
+/* Transform masks for the high-level interface */
+#define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */
+#define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */
+#define PNG_TRANSFORM_STRIP_ALPHA    0x0002    /* read only */
+#define PNG_TRANSFORM_PACKING        0x0004    /* read and write */
+#define PNG_TRANSFORM_PACKSWAP       0x0008    /* read and write */
+#define PNG_TRANSFORM_EXPAND         0x0010    /* read only */
+#define PNG_TRANSFORM_INVERT_MONO    0x0020    /* read and write */
+#define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */
+#define PNG_TRANSFORM_BGR            0x0080    /* read and write */
+#define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */
+#define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
+#define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */
+#define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* WRITE only */
+
+/* Flags for MNG supported features */
+#define PNG_FLAG_MNG_EMPTY_PLTE     0x01
+#define PNG_FLAG_MNG_FILTER_64      0x04
+#define PNG_ALL_MNG_FEATURES        0x05
+
+typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));
+typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
+
+/* The structure that holds the information to read and write PNG files.
+ * The only people who need to care about what is inside of this are the
+ * people who will be modifying the library for their own special needs.
+ * It should NOT be accessed directly by an application, except to store
+ * the jmp_buf.
+ */
+
+struct png_struct_def
+{
+#ifdef PNG_SETJMP_SUPPORTED
+   jmp_buf jmpbuf;            /* used in png_error */
+#endif
+   png_error_ptr error_fn;    /* function for printing errors and aborting */
+   png_error_ptr warning_fn;  /* function for printing warnings */
+   png_voidp error_ptr;       /* user supplied struct for error functions */
+   png_rw_ptr write_data_fn;  /* function for writing output data */
+   png_rw_ptr read_data_fn;   /* function for reading input data */
+   png_voidp io_ptr;          /* ptr to application struct for I/O functions */
+
+#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
+   png_user_transform_ptr read_user_transform_fn; /* user read transform */
+#endif
+
+#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
+   png_user_transform_ptr write_user_transform_fn; /* user write transform */
+#endif
+
+/* These were added in libpng-1.0.2 */
+#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
+#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
+    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
+   png_voidp user_transform_ptr; /* user supplied struct for user transform */
+   png_byte user_transform_depth;    /* bit depth of user transformed pixels */
+   png_byte user_transform_channels; /* channels in user transformed pixels */
+#endif
+#endif
+
+   png_uint_32 mode;          /* tells us where we are in the PNG file */
+   png_uint_32 flags;         /* flags indicating various things to libpng */
+   png_uint_32 transformations; /* which transformations to perform */
+
+   z_stream zstream;          /* pointer to decompression structure (below) */
+   png_bytep zbuf;            /* buffer for zlib */
+   png_size_t zbuf_size;      /* size of zbuf */
+   int zlib_level;            /* holds zlib compression level */
+   int zlib_method;           /* holds zlib compression method */
+   int zlib_window_bits;      /* holds zlib compression window bits */
+   int zlib_mem_level;        /* holds zlib compression memory level */
+   int zlib_strategy;         /* holds zlib compression strategy */
+
+   png_uint_32 width;         /* width of image in pixels */
+   png_uint_32 height;        /* height of image in pixels */
+   png_uint_32 num_rows;      /* number of rows in current pass */
+   png_uint_32 usr_width;     /* width of row at start of write */
+   png_uint_32 rowbytes;      /* size of row in bytes */
+   png_uint_32 irowbytes;     /* size of current interlaced row in bytes */
+   png_uint_32 iwidth;        /* width of current interlaced row in pixels */
+   png_uint_32 row_number;    /* current row in interlace pass */
+   png_bytep prev_row;        /* buffer to save previous (unfiltered) row */
+   png_bytep row_buf;         /* buffer to save current (unfiltered) row */
+   png_bytep sub_row;         /* buffer to save "sub" row when filtering */
+   png_bytep up_row;          /* buffer to save "up" row when filtering */
+   png_bytep avg_row;         /* buffer to save "avg" row when filtering */
+   png_bytep paeth_row;       /* buffer to save "Paeth" row when filtering */
+   png_row_info row_info;     /* used for transformation routines */
+
+   png_uint_32 idat_size;     /* current IDAT size for read */
+   png_uint_32 crc;           /* current chunk CRC value */
+   png_colorp palette;        /* palette from the input file */
+   png_uint_16 num_palette;   /* number of color entries in palette */
+   png_uint_16 num_trans;     /* number of transparency values */
+   png_byte chunk_name[5];    /* null-terminated name of current chunk */
+   png_byte compression;      /* file compression type (always 0) */
+   png_byte filter;           /* file filter type (always 0) */
+   png_byte interlaced;       /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
+   png_byte pass;             /* current interlace pass (0 - 6) */
+   png_byte do_filter;        /* row filter flags (see PNG_FILTER_ below ) */
+   png_byte color_type;       /* color type of file */
+   png_byte bit_depth;        /* bit depth of file */
+   png_byte usr_bit_depth;    /* bit depth of users row */
+   png_byte pixel_depth;      /* number of bits per pixel */
+   png_byte channels;         /* number of channels in file */
+   png_byte usr_channels;     /* channels at start of write */
+   png_byte sig_bytes;        /* magic bytes read/written from start of file */
+
+#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
+#ifdef PNG_LEGACY_SUPPORTED
+   png_byte filler;           /* filler byte for pixel expansion */
+#else
+   png_uint_16 filler;           /* filler bytes for pixel expansion */
+#endif
+#endif
+
+#if defined(PNG_bKGD_SUPPORTED)
+   png_byte background_gamma_type;
+#  ifdef PNG_FLOATING_POINT_SUPPORTED
+   float background_gamma;
+#  endif
+   png_color_16 background;   /* background color in screen gamma space */
+#if defined(PNG_READ_GAMMA_SUPPORTED)
+   png_color_16 background_1; /* background normalized to gamma 1.0 */
+#endif
+#endif /* PNG_bKGD_SUPPORTED */
+
+#if defined(PNG_WRITE_FLUSH_SUPPORTED)
+   png_flush_ptr output_flush_fn;/* Function for flushing output */
+   png_uint_32 flush_dist;    /* how many rows apart to flush, 0 - no flush */
+   png_uint_32 flush_rows;    /* number of rows written since last flush */
+#endif
+
+#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
+   int gamma_shift;      /* number of "insignificant" bits 16-bit gamma */
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+   float gamma;          /* file gamma value */
+   float screen_gamma;   /* screen gamma value (display_exponent) */
+#endif
+#endif
+
+#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
+   png_bytep gamma_table;     /* gamma table for 8-bit depth files */
+   png_bytep gamma_from_1;    /* converts from 1.0 to screen */
+   png_bytep gamma_to_1;      /* converts from file to 1.0 */
+   png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */
+   png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */
+   png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
+#endif
+
+#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
+   png_color_8 sig_bit;       /* significant bits in each available channel */
+#endif
+
+#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
+   png_color_8 shift;         /* shift for significant bit tranformation */
+#endif
+
+#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
+ || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
+   png_bytep trans;           /* transparency values for paletted files */
+   png_color_16 trans_values; /* transparency values for non-paletted files */
+#endif
+
+   png_read_status_ptr read_row_fn;   /* called after each row is decoded */
+   png_write_status_ptr write_row_fn; /* called after each row is encoded */
+#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
+   png_progressive_info_ptr info_fn; /* called after header data fully read */
+   png_progressive_row_ptr row_fn;   /* called after each prog. row is decoded */
+   png_progressive_end_ptr end_fn;   /* called after image is complete */
+   png_bytep save_buffer_ptr;        /* current location in save_buffer */
+   png_bytep save_buffer;            /* buffer for previously read data */
+   png_bytep current_buffer_ptr;     /* current location in current_buffer */
+   png_bytep current_buffer;         /* buffer for recently used data */
+   png_uint_32 push_length;          /* size of current input chunk */
+   png_uint_32 skip_length;          /* bytes to skip in input data */
+   png_size_t save_buffer_size;      /* amount of data now in save_buffer */
+   png_size_t save_buffer_max;       /* total size of save_buffer */
+   png_size_t buffer_size;           /* total amount of available input data */
+   png_size_t current_buffer_size;   /* amount of data now in current_buffer */
+   int process_mode;                 /* what push library is currently doing */
+   int cur_palette;                  /* current push library palette index */
+
+#  if defined(PNG_TEXT_SUPPORTED)
+     png_size_t current_text_size;   /* current size of text input data */
+     png_size_t current_text_left;   /* how much text left to read in input */
+     png_charp current_text;         /* current text chunk buffer */
+     png_charp current_text_ptr;     /* current location in current_text */
+#  endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */
+
+#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
+
+#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
+/* for the Borland special 64K segment handler */
+   png_bytepp offset_table_ptr;
+   png_bytep offset_table;
+   png_uint_16 offset_table_number;
+   png_uint_16 offset_table_count;
+   png_uint_16 offset_table_count_free;
+#endif
+
+#if defined(PNG_READ_DITHER_SUPPORTED)
+   png_bytep palette_lookup;         /* lookup table for dithering */
+   png_bytep dither_index;           /* index translation for palette files */
+#endif
+
+#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED)
+   png_uint_16p hist;                /* histogram */
+#endif
+
+#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
+   png_byte heuristic_method;        /* heuristic for row filter selection */
+   png_byte num_prev_filters;        /* number of weights for previous rows */
+   png_bytep prev_filters;           /* filter type(s) of previous row(s) */
+   png_uint_16p filter_weights;      /* weight(s) for previous line(s) */
+   png_uint_16p inv_filter_weights;  /* 1/weight(s) for previous line(s) */
+   png_uint_16p filter_costs;        /* relative filter calculation cost */
+   png_uint_16p inv_filter_costs;    /* 1/relative filter calculation cost */
+#endif
+
+#if defined(PNG_TIME_RFC1123_SUPPORTED)
+   png_charp time_buffer;            /* String to hold RFC 1123 time text */
+#endif
+
+/* New members added in libpng-1.0.6 */
+
+#ifdef PNG_FREE_ME_SUPPORTED
+   png_uint_32 free_me;       /* flags items libpng is responsible for freeing */
+#endif
+
+#if defined(PNG_USER_CHUNKS_SUPPORTED)
+   png_voidp user_chunk_ptr;
+   png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */
+#endif
+
+#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+   int num_chunk_list;
+   png_bytep chunk_list;
+#endif
+
+/* New members added in libpng-1.0.3 */
+#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
+   png_byte rgb_to_gray_status;
+   /* These were changed from png_byte in libpng-1.0.6 */
+   png_uint_16 rgb_to_gray_red_coeff;
+   png_uint_16 rgb_to_gray_green_coeff;
+   png_uint_16 rgb_to_gray_blue_coeff;
+#endif
+
+/* New member added in libpng-1.0.4 (renamed in 1.0.9) */
+#if defined(PNG_MNG_FEATURES_SUPPORTED) || \
+    defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
+    defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
+/* changed from png_byte to png_uint_32 at version 1.2.0 */
+#ifdef PNG_1_0_X
+   png_byte mng_features_permitted;
+#else
+   png_uint_32 mng_features_permitted;
+#endif /* PNG_1_0_X */
+#endif
+
+/* New member added in libpng-1.0.7 */
+#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
+   png_fixed_point int_gamma;
+#endif
+
+/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */
+#if defined(PNG_MNG_FEATURES_SUPPORTED)
+   png_byte filter_type;
+#endif
+
+#if defined(PNG_1_0_X) || (defined(PNG_DEBUG) && defined(PNG_USE_PNGGCCRD))
+/* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */
+   png_uint_32 row_buf_size;
+#endif
+
+/* New members added in libpng-1.2.0 */
+#if !defined(PNG_1_0_X) && defined(PNG_ASSEMBLER_CODE_SUPPORTED)
+   png_byte     mmx_bitdepth_threshold;
+   png_uint_32  mmx_rowbytes_threshold;
+   png_uint_32  asm_flags;
+#endif
+
+/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
+#ifdef PNG_USER_MEM_SUPPORTED
+   png_voidp mem_ptr;                /* user supplied struct for mem functions */
+   png_malloc_ptr malloc_fn;         /* function for allocating memory */
+   png_free_ptr free_fn;             /* function for freeing memory */
+#endif
+
+/* New member added in libpng-1.0.13 and 1.2.0 */
+   png_bytep big_row_buf;         /* buffer to save current (unfiltered) row */
+
+#if defined(PNG_READ_DITHER_SUPPORTED)
+/* The following three members were added at version 1.0.14 and 1.2.4 */
+   png_bytep dither_sort;            /* working sort array */
+   png_bytep index_to_palette;       /* where the original index currently is */
+                                     /* in the palette */
+   png_bytep palette_to_index;       /* which original index points to this */
+                                     /* palette color */
+#endif
+
+/* New members added in libpng-1.0.16 and 1.2.6 */
+   png_byte compression_type;
+
+#ifdef PNG_SET_USER_LIMITS_SUPPORTED
+   png_uint_32 user_width_max;
+   png_uint_32 user_height_max;
+#endif
+
+};
+
+
+/* This triggers a compiler error in png.c, if png.c and png.h
+ * do not agree upon the version number.
+ */
+typedef png_structp version_1_2_8;
+
+typedef png_struct FAR * FAR * png_structpp;
+
+/* Here are the function definitions most commonly used.  This is not
+ * the place to find out how to use libpng.  See libpng.txt for the
+ * full explanation, see example.c for the summary.  This just provides
+ * a simple one line description of the use of each function.
+ */
+
+/* Returns the version number of the library */
+extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void));
+
+/* Tell lib we have already handled the first <num_bytes> magic bytes.
+ * Handling more than 8 bytes from the beginning of the file is an error.
+ */
+extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr,
+   int num_bytes));
+
+/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
+ * PNG file.  Returns zero if the supplied bytes match the 8-byte PNG
+ * signature, and non-zero otherwise.  Having num_to_check == 0 or
+ * start > 7 will always fail (ie return non-zero).
+ */
+extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start,
+   png_size_t num_to_check));
+
+/* Simple signature checking function.  This is the same as calling
+ * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
+ */
+extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num));
+
+/* Allocate and initialize png_ptr struct for reading, and any other memory. */
+extern PNG_EXPORT(png_structp,png_create_read_struct)
+   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
+   png_error_ptr error_fn, png_error_ptr warn_fn));
+
+/* Allocate and initialize png_ptr struct for writing, and any other memory */
+extern PNG_EXPORT(png_structp,png_create_write_struct)
+   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
+   png_error_ptr error_fn, png_error_ptr warn_fn));
+
+#ifdef PNG_WRITE_SUPPORTED
+extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size)
+   PNGARG((png_structp png_ptr));
+#endif
+
+#ifdef PNG_WRITE_SUPPORTED
+extern PNG_EXPORT(void,png_set_compression_buffer_size)
+   PNGARG((png_structp png_ptr, png_uint_32 size));
+#endif
+
+/* Reset the compression stream */
+extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr));
+
+/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
+#ifdef PNG_USER_MEM_SUPPORTED
+extern PNG_EXPORT(png_structp,png_create_read_struct_2)
+   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
+   png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
+   png_malloc_ptr malloc_fn, png_free_ptr free_fn));
+extern PNG_EXPORT(png_structp,png_create_write_struct_2)
+   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
+   png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
+   png_malloc_ptr malloc_fn, png_free_ptr free_fn));
+#endif
+
+/* Write a PNG chunk - size, type, (optional) data, CRC. */
+extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr,
+   png_bytep chunk_name, png_bytep data, png_size_t length));
+
+/* Write the start of a PNG chunk - length and chunk name. */
+extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr,
+   png_bytep chunk_name, png_uint_32 length));
+
+/* Write the data of a PNG chunk started with png_write_chunk_start(). */
+extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr,
+   png_bytep data, png_size_t length));
+
+/* Finish a chunk started with png_write_chunk_start() (includes CRC). */
+extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr));
+
+/* Allocate and initialize the info structure */
+extern PNG_EXPORT(png_infop,png_create_info_struct)
+   PNGARG((png_structp png_ptr));
+
+/* Initialize the info structure (old interface - DEPRECATED) */
+extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr));
+#undef png_info_init
+#define png_info_init(info_ptr) png_info_init_3(&info_ptr,\
+    png_sizeof(png_info));
+extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr,
+    png_size_t png_info_struct_size));
+
+/* Writes all the PNG information before the image. */
+extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr,
+   png_infop info_ptr));
+extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr,
+   png_infop info_ptr));
+
+#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
+/* read the information before the actual image data. */
+extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr,
+   png_infop info_ptr));
+#endif
+
+#if defined(PNG_TIME_RFC1123_SUPPORTED)
+extern PNG_EXPORT(png_charp,png_convert_to_rfc1123)
+   PNGARG((png_structp png_ptr, png_timep ptime));
+#endif
+
+#if !defined(_WIN32_WCE)
+/* "time.h" functions are not supported on WindowsCE */
+#if defined(PNG_WRITE_tIME_SUPPORTED)
+/* convert from a struct tm to png_time */
+extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime,
+   struct tm FAR * ttime));
+
+/* convert from time_t to png_time.  Uses gmtime() */
+extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime,
+   time_t ttime));
+#endif /* PNG_WRITE_tIME_SUPPORTED */
+#endif /* _WIN32_WCE */
+
+#if defined(PNG_READ_EXPAND_SUPPORTED)
+/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
+extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr));
+extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr));
+extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr));
+extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
+/* Use blue, green, red order for pixels. */
+extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
+/* Expand the grayscale to 24-bit RGB if necessary. */
+extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
+/* Reduce RGB to grayscale. */
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr,
+   int error_action, double red, double green ));
+#endif
+extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr,
+   int error_action, png_fixed_point red, png_fixed_point green ));
+extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp
+   png_ptr));
+#endif
+
+extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth,
+   png_colorp palette));
+
+#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
+extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
+    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
+extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
+    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
+extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
+/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
+extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr,
+   png_uint_32 filler, int flags));
+/* The values of the PNG_FILLER_ defines should NOT be changed */
+#define PNG_FILLER_BEFORE 0
+#define PNG_FILLER_AFTER 1
+/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
+#if !defined(PNG_1_0_X)
+extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr,
+   png_uint_32 filler, int flags));
+#endif
+#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */
+
+#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
+/* Swap bytes in 16-bit depth files. */
+extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
+/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */
+extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED)
+/* Swap packing order of pixels in bytes. */
+extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
+/* Converts files to legal bit depths. */
+extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr,
+   png_color_8p true_bits));
+#endif
+
+#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
+    defined(PNG_WRITE_INTERLACING_SUPPORTED)
+/* Have the code handle the interlacing.  Returns the number of passes. */
+extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
+/* Invert monochrome files */
+extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_BACKGROUND_SUPPORTED)
+/* Handle alpha and tRNS by replacing with a background color. */
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr,
+   png_color_16p background_color, int background_gamma_code,
+   int need_expand, double background_gamma));
+#endif
+#define PNG_BACKGROUND_GAMMA_UNKNOWN 0
+#define PNG_BACKGROUND_GAMMA_SCREEN  1
+#define PNG_BACKGROUND_GAMMA_FILE    2
+#define PNG_BACKGROUND_GAMMA_UNIQUE  3
+#endif
+
+#if defined(PNG_READ_16_TO_8_SUPPORTED)
+/* strip the second byte of information from a 16-bit depth file. */
+extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_DITHER_SUPPORTED)
+/* Turn on dithering, and reduce the palette to the number of colors available. */
+extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr,
+   png_colorp palette, int num_palette, int maximum_colors,
+   png_uint_16p histogram, int full_dither));
+#endif
+
+#if defined(PNG_READ_GAMMA_SUPPORTED)
+/* Handle gamma correction. Screen_gamma=(display_exponent) */
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr,
+   double screen_gamma, double default_file_gamma));
+#endif
+#endif
+
+#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
+    defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
+/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */
+/* Deprecated and will be removed.  Use png_permit_mng_features() instead. */
+extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr,
+   int empty_plte_permitted));
+#endif
+
+#if defined(PNG_WRITE_FLUSH_SUPPORTED)
+/* Set how many lines between output flushes - 0 for no flushing */
+extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows));
+/* Flush the current PNG output buffer */
+extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr));
+#endif
+
+/* optional update palette with requested transformations */
+extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr));
+
+/* optional call to update the users info structure */
+extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr,
+   png_infop info_ptr));
+
+#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
+/* read one or more rows of image data. */
+extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr,
+   png_bytepp row, png_bytepp display_row, png_uint_32 num_rows));
+#endif
+
+#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
+/* read a row of data. */
+extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr,
+   png_bytep row,
+   png_bytep display_row));
+#endif
+
+#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
+/* read the whole image into memory at once. */
+extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr,
+   png_bytepp image));
+#endif
+
+/* write a row of image data */
+extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr,
+   png_bytep row));
+
+/* write a few rows of image data */
+extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr,
+   png_bytepp row, png_uint_32 num_rows));
+
+/* write the image data */
+extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
+   png_bytepp image));
+
+/* writes the end of the PNG file. */
+extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
+   png_infop info_ptr));
+
+#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
+/* read the end of the PNG file. */
+extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr,
+   png_infop info_ptr));
+#endif
+
+/* free any memory associated with the png_info_struct */
+extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr,
+   png_infopp info_ptr_ptr));
+
+/* free any memory associated with the png_struct and the png_info_structs */
+extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp
+   png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
+
+/* free all memory used by the read (old method - NOT DLL EXPORTED) */
+extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr,
+   png_infop end_info_ptr));
+
+/* free any memory associated with the png_struct and the png_info_structs */
+extern PNG_EXPORT(void,png_destroy_write_struct)
+   PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr));
+
+/* free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */
+extern void png_write_destroy PNGARG((png_structp png_ptr));
+
+/* set the libpng method of handling chunk CRC errors */
+extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr,
+   int crit_action, int ancil_action));
+
+/* Values for png_set_crc_action() to say how to handle CRC errors in
+ * ancillary and critical chunks, and whether to use the data contained
+ * therein.  Note that it is impossible to "discard" data in a critical
+ * chunk.  For versions prior to 0.90, the action was always error/quit,
+ * whereas in version 0.90 and later, the action for CRC errors in ancillary
+ * chunks is warn/discard.  These values should NOT be changed.
+ *
+ *      value                       action:critical     action:ancillary
+ */
+#define PNG_CRC_DEFAULT       0  /* error/quit          warn/discard data */
+#define PNG_CRC_ERROR_QUIT    1  /* error/quit          error/quit        */
+#define PNG_CRC_WARN_DISCARD  2  /* (INVALID)           warn/discard data */
+#define PNG_CRC_WARN_USE      3  /* warn/use data       warn/use data     */
+#define PNG_CRC_QUIET_USE     4  /* quiet/use data      quiet/use data    */
+#define PNG_CRC_NO_CHANGE     5  /* use current value   use current value */
+
+/* These functions give the user control over the scan-line filtering in
+ * libpng and the compression methods used by zlib.  These functions are
+ * mainly useful for testing, as the defaults should work with most users.
+ * Those users who are tight on memory or want faster performance at the
+ * expense of compression can modify them.  See the compression library
+ * header file (zlib.h) for an explination of the compression functions.
+ */
+
+/* set the filtering method(s) used by libpng.  Currently, the only valid
+ * value for "method" is 0.
+ */
+extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method,
+   int filters));
+
+/* Flags for png_set_filter() to say which filters to use.  The flags
+ * are chosen so that they don't conflict with real filter types
+ * below, in case they are supplied instead of the #defined constants.
+ * These values should NOT be changed.
+ */
+#define PNG_NO_FILTERS     0x00
+#define PNG_FILTER_NONE    0x08
+#define PNG_FILTER_SUB     0x10
+#define PNG_FILTER_UP      0x20
+#define PNG_FILTER_AVG     0x40
+#define PNG_FILTER_PAETH   0x80
+#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
+                         PNG_FILTER_AVG | PNG_FILTER_PAETH)
+
+/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
+ * These defines should NOT be changed.
+ */
+#define PNG_FILTER_VALUE_NONE  0
+#define PNG_FILTER_VALUE_SUB   1
+#define PNG_FILTER_VALUE_UP    2
+#define PNG_FILTER_VALUE_AVG   3
+#define PNG_FILTER_VALUE_PAETH 4
+#define PNG_FILTER_VALUE_LAST  5
+
+#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */
+/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
+ * defines, either the default (minimum-sum-of-absolute-differences), or
+ * the experimental method (weighted-minimum-sum-of-absolute-differences).
+ *
+ * Weights are factors >= 1.0, indicating how important it is to keep the
+ * filter type consistent between rows.  Larger numbers mean the current
+ * filter is that many times as likely to be the same as the "num_weights"
+ * previous filters.  This is cumulative for each previous row with a weight.
+ * There needs to be "num_weights" values in "filter_weights", or it can be
+ * NULL if the weights aren't being specified.  Weights have no influence on
+ * the selection of the first row filter.  Well chosen weights can (in theory)
+ * improve the compression for a given image.
+ *
+ * Costs are factors >= 1.0 indicating the relative decoding costs of a
+ * filter type.  Higher costs indicate more decoding expense, and are
+ * therefore less likely to be selected over a filter with lower computational
+ * costs.  There needs to be a value in "filter_costs" for each valid filter
+ * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't
+ * setting the costs.  Costs try to improve the speed of decompression without
+ * unduly increasing the compressed image size.
+ *
+ * A negative weight or cost indicates the default value is to be used, and
+ * values in the range [0.0, 1.0) indicate the value is to remain unchanged.
+ * The default values for both weights and costs are currently 1.0, but may
+ * change if good general weighting/cost heuristics can be found.  If both
+ * the weights and costs are set to 1.0, this degenerates the WEIGHTED method
+ * to the UNWEIGHTED method, but with added encoding time/computation.
+ */
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr,
+   int heuristic_method, int num_weights, png_doublep filter_weights,
+   png_doublep filter_costs));
+#endif
+#endif /*  PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
+
+/* Heuristic used for row filter selection.  These defines should NOT be
+ * changed.
+ */
+#define PNG_FILTER_HEURISTIC_DEFAULT    0  /* Currently "UNWEIGHTED" */
+#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1  /* Used by libpng < 0.95 */
+#define PNG_FILTER_HEURISTIC_WEIGHTED   2  /* Experimental feature */
+#define PNG_FILTER_HEURISTIC_LAST       3  /* Not a valid value */
+
+/* Set the library compression level.  Currently, valid values range from
+ * 0 - 9, corresponding directly to the zlib compression levels 0 - 9
+ * (0 - no compression, 9 - "maximal" compression).  Note that tests have
+ * shown that zlib compression levels 3-6 usually perform as well as level 9
+ * for PNG images, and do considerably fewer caclulations.  In the future,
+ * these values may not correspond directly to the zlib compression levels.
+ */
+extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr,
+   int level));
+
+extern PNG_EXPORT(void,png_set_compression_mem_level)
+   PNGARG((png_structp png_ptr, int mem_level));
+
+extern PNG_EXPORT(void,png_set_compression_strategy)
+   PNGARG((png_structp png_ptr, int strategy));
+
+extern PNG_EXPORT(void,png_set_compression_window_bits)
+   PNGARG((png_structp png_ptr, int window_bits));
+
+extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr,
+   int method));
+
+/* These next functions are called for input/output, memory, and error
+ * handling.  They are in the file pngrio.c, pngwio.c, and pngerror.c,
+ * and call standard C I/O routines such as fread(), fwrite(), and
+ * fprintf().  These functions can be made to use other I/O routines
+ * at run time for those applications that need to handle I/O in a
+ * different manner by calling png_set_???_fn().  See libpng.txt for
+ * more information.
+ */
+
+#if !defined(PNG_NO_STDIO)
+/* Initialize the input/output for the PNG file to the default functions. */
+extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp));
+#endif
+
+/* Replace the (error and abort), and warning functions with user
+ * supplied functions.  If no messages are to be printed you must still
+ * write and use replacement functions. The replacement error_fn should
+ * still do a longjmp to the last setjmp location if you are using this
+ * method of error handling.  If error_fn or warning_fn is NULL, the
+ * default function will be used.
+ */
+
+extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr,
+   png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn));
+
+/* Return the user pointer associated with the error functions */
+extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr));
+
+/* Replace the default data output functions with a user supplied one(s).
+ * If buffered output is not used, then output_flush_fn can be set to NULL.
+ * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
+ * output_flush_fn will be ignored (and thus can be NULL).
+ */
+extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr,
+   png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
+
+/* Replace the default data input function with a user supplied one. */
+extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr,
+   png_voidp io_ptr, png_rw_ptr read_data_fn));
+
+/* Return the user pointer associated with the I/O functions */
+extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr));
+
+extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr,
+   png_read_status_ptr read_row_fn));
+
+extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr,
+   png_write_status_ptr write_row_fn));
+
+#ifdef PNG_USER_MEM_SUPPORTED
+/* Replace the default memory allocation functions with user supplied one(s). */
+extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr,
+   png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn));
+/* Return the user pointer associated with the memory functions */
+extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr));
+#endif
+
+#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
+    defined(PNG_LEGACY_SUPPORTED)
+extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp
+   png_ptr, png_user_transform_ptr read_user_transform_fn));
+#endif
+
+#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
+    defined(PNG_LEGACY_SUPPORTED)
+extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp
+   png_ptr, png_user_transform_ptr write_user_transform_fn));
+#endif
+
+#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
+    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
+    defined(PNG_LEGACY_SUPPORTED)
+extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp
+   png_ptr, png_voidp user_transform_ptr, int user_transform_depth,
+   int user_transform_channels));
+/* Return the user pointer associated with the user transform functions */
+extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr)
+   PNGARG((png_structp png_ptr));
+#endif
+
+#ifdef PNG_USER_CHUNKS_SUPPORTED
+extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr,
+   png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
+extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp
+   png_ptr));
+#endif
+
+#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
+/* Sets the function callbacks for the push reader, and a pointer to a
+ * user-defined structure available to the callback functions.
+ */
+extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr,
+   png_voidp progressive_ptr,
+   png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
+   png_progressive_end_ptr end_fn));
+
+/* returns the user pointer associated with the push read functions */
+extern PNG_EXPORT(png_voidp,png_get_progressive_ptr)
+   PNGARG((png_structp png_ptr));
+
+/* function to be called when data becomes available */
+extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_bytep buffer, png_size_t buffer_size));
+
+/* function that combines rows.  Not very much different than the
+ * png_combine_row() call.  Is this even used?????
+ */
+extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr,
+   png_bytep old_row, png_bytep new_row));
+#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
+
+extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr,
+   png_uint_32 size));
+
+#if defined(PNG_1_0_X)
+#  define png_malloc_warn png_malloc
+#else
+/* Added at libpng version 1.2.4 */
+extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr,
+   png_uint_32 size));
+#endif
+
+/* frees a pointer allocated by png_malloc() */
+extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr));
+
+#if defined(PNG_1_0_X)
+/* Function to allocate memory for zlib. */
+extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items,
+   uInt size));
+
+/* Function to free memory for zlib */
+extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr));
+#endif
+
+/* Free data that was allocated internally */
+extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_uint_32 free_me, int num));
+#ifdef PNG_FREE_ME_SUPPORTED
+/* Reassign responsibility for freeing existing data, whether allocated
+ * by libpng or by the application */
+extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, int freer, png_uint_32 mask));
+#endif
+/* assignments for png_data_freer */
+#define PNG_DESTROY_WILL_FREE_DATA 1
+#define PNG_SET_WILL_FREE_DATA 1
+#define PNG_USER_WILL_FREE_DATA 2
+/* Flags for png_ptr->free_me and info_ptr->free_me */
+#define PNG_FREE_HIST 0x0008
+#define PNG_FREE_ICCP 0x0010
+#define PNG_FREE_SPLT 0x0020
+#define PNG_FREE_ROWS 0x0040
+#define PNG_FREE_PCAL 0x0080
+#define PNG_FREE_SCAL 0x0100
+#define PNG_FREE_UNKN 0x0200
+#define PNG_FREE_LIST 0x0400
+#define PNG_FREE_PLTE 0x1000
+#define PNG_FREE_TRNS 0x2000
+#define PNG_FREE_TEXT 0x4000
+#define PNG_FREE_ALL  0x7fff
+#define PNG_FREE_MUL  0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
+
+#ifdef PNG_USER_MEM_SUPPORTED
+extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr,
+   png_uint_32 size));
+extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr,
+   png_voidp ptr));
+#endif
+
+extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr,
+   png_voidp s1, png_voidp s2, png_uint_32 size));
+
+extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr,
+   png_voidp s1, int value, png_uint_32 size));
+
+#if defined(USE_FAR_KEYWORD)  /* memory model conversion function */
+extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr,
+   int check));
+#endif /* USE_FAR_KEYWORD */
+
+/* Fatal error in PNG image of libpng - can't continue */
+extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr,
+   png_const_charp error_message));
+
+/* The same, but the chunk name is prepended to the error string. */
+extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr,
+   png_const_charp error_message));
+
+/* Non-fatal error in libpng.  Can continue, but may have a problem. */
+extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr,
+   png_const_charp warning_message));
+
+/* Non-fatal error in libpng, chunk name is prepended to message. */
+extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr,
+   png_const_charp warning_message));
+
+/* The png_set_<chunk> functions are for storing values in the png_info_struct.
+ * Similarly, the png_get_<chunk> calls are used to read values from the
+ * png_info_struct, either storing the parameters in the passed variables, or
+ * setting pointers into the png_info_struct where the data is stored.  The
+ * png_get_<chunk> functions return a non-zero value if the data was available
+ * in info_ptr, or return zero and do not change any of the parameters if the
+ * data was not available.
+ *
+ * These functions should be used instead of directly accessing png_info
+ * to avoid problems with future changes in the size and internal layout of
+ * png_info_struct.
+ */
+/* Returns "flag" if chunk data is valid in info_ptr. */
+extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr,
+png_infop info_ptr, png_uint_32 flag));
+
+/* Returns number of bytes needed to hold a transformed row. */
+extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr,
+png_infop info_ptr));
+
+#if defined(PNG_INFO_IMAGE_SUPPORTED)
+/* Returns row_pointers, which is an array of pointers to scanlines that was
+returned from png_read_png(). */
+extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr,
+png_infop info_ptr));
+/* Set row_pointers, which is an array of pointers to scanlines for use
+by png_write_png(). */
+extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_bytepp row_pointers));
+#endif
+
+/* Returns number of color channels in image. */
+extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr,
+png_infop info_ptr));
+
+#ifdef PNG_EASY_ACCESS_SUPPORTED
+/* Returns image width in pixels. */
+extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+
+/* Returns image height in pixels. */
+extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+
+/* Returns image bit_depth. */
+extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+
+/* Returns image color_type. */
+extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+
+/* Returns image filter_type. */
+extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+
+/* Returns image interlace_type. */
+extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+
+/* Returns image compression_type. */
+extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+
+/* Returns image resolution in pixels per meter, from pHYs chunk data. */
+extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+
+/* Returns pixel aspect ratio, computed from pHYs chunk data.  */
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+#endif
+
+/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */
+extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp
+png_ptr, png_infop info_ptr));
+
+#endif /* PNG_EASY_ACCESS_SUPPORTED */
+
+/* Returns pointer to signature string read from PNG header */
+extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr,
+png_infop info_ptr));
+
+#if defined(PNG_bKGD_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_color_16p *background));
+#endif
+
+#if defined(PNG_bKGD_SUPPORTED)
+extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_color_16p background));
+#endif
+
+#if defined(PNG_cHRM_SUPPORTED)
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, double *white_x, double *white_y, double *red_x,
+   double *red_y, double *green_x, double *green_y, double *blue_x,
+   double *blue_y));
+#endif
+#ifdef PNG_FIXED_POINT_SUPPORTED
+extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point
+   *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y,
+   png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point
+   *int_blue_x, png_fixed_point *int_blue_y));
+#endif
+#endif
+
+#if defined(PNG_cHRM_SUPPORTED)
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, double white_x, double white_y, double red_x,
+   double red_y, double green_x, double green_y, double blue_x, double blue_y));
+#endif
+#ifdef PNG_FIXED_POINT_SUPPORTED
+extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y,
+   png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
+   int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
+   png_fixed_point int_blue_y));
+#endif
+#endif
+
+#if defined(PNG_gAMA_SUPPORTED)
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, double *file_gamma));
+#endif
+extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_fixed_point *int_file_gamma));
+#endif
+
+#if defined(PNG_gAMA_SUPPORTED)
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, double file_gamma));
+#endif
+extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_fixed_point int_file_gamma));
+#endif
+
+#if defined(PNG_hIST_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_uint_16p *hist));
+#endif
+
+#if defined(PNG_hIST_SUPPORTED)
+extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_uint_16p hist));
+#endif
+
+extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_uint_32 *width, png_uint_32 *height,
+   int *bit_depth, int *color_type, int *interlace_method,
+   int *compression_method, int *filter_method));
+
+extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
+   int color_type, int interlace_method, int compression_method,
+   int filter_method));
+
+#if defined(PNG_oFFs_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
+   int *unit_type));
+#endif
+
+#if defined(PNG_oFFs_SUPPORTED)
+extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y,
+   int unit_type));
+#endif
+
+#if defined(PNG_pCAL_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1,
+   int *type, int *nparams, png_charp *units, png_charpp *params));
+#endif
+
+#if defined(PNG_pCAL_SUPPORTED)
+extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1,
+   int type, int nparams, png_charp units, png_charpp params));
+#endif
+
+#if defined(PNG_pHYs_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
+#endif
+
+#if defined(PNG_pHYs_SUPPORTED)
+extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type));
+#endif
+
+extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_colorp *palette, int *num_palette));
+
+extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_colorp palette, int num_palette));
+
+#if defined(PNG_sBIT_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_color_8p *sig_bit));
+#endif
+
+#if defined(PNG_sBIT_SUPPORTED)
+extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_color_8p sig_bit));
+#endif
+
+#if defined(PNG_sRGB_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, int *intent));
+#endif
+
+#if defined(PNG_sRGB_SUPPORTED)
+extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, int intent));
+extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, int intent));
+#endif
+
+#if defined(PNG_iCCP_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_charpp name, int *compression_type,
+   png_charpp profile, png_uint_32 *proflen));
+   /* Note to maintainer: profile should be png_bytepp */
+#endif
+
+#if defined(PNG_iCCP_SUPPORTED)
+extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_charp name, int compression_type,
+   png_charp profile, png_uint_32 proflen));
+   /* Note to maintainer: profile should be png_bytep */
+#endif
+
+#if defined(PNG_sPLT_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_sPLT_tpp entries));
+#endif
+
+#if defined(PNG_sPLT_SUPPORTED)
+extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_sPLT_tp entries, int nentries));
+#endif
+
+#if defined(PNG_TEXT_SUPPORTED)
+/* png_get_text also returns the number of text chunks in *num_text */
+extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_textp *text_ptr, int *num_text));
+#endif
+
+/*
+ *  Note while png_set_text() will accept a structure whose text,
+ *  language, and  translated keywords are NULL pointers, the structure
+ *  returned by png_get_text will always contain regular
+ *  zero-terminated C strings.  They might be empty strings but
+ *  they will never be NULL pointers.
+ */
+
+#if defined(PNG_TEXT_SUPPORTED)
+extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_textp text_ptr, int num_text));
+#endif
+
+#if defined(PNG_tIME_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_timep *mod_time));
+#endif
+
+#if defined(PNG_tIME_SUPPORTED)
+extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_timep mod_time));
+#endif
+
+#if defined(PNG_tRNS_SUPPORTED)
+extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_bytep *trans, int *num_trans,
+   png_color_16p *trans_values));
+#endif
+
+#if defined(PNG_tRNS_SUPPORTED)
+extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_bytep trans, int num_trans,
+   png_color_16p trans_values));
+#endif
+
+#if defined(PNG_tRNS_SUPPORTED)
+#endif
+
+#if defined(PNG_sCAL_SUPPORTED)
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, int *unit, double *width, double *height));
+#else
+#ifdef PNG_FIXED_POINT_SUPPORTED
+extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight));
+#endif
+#endif
+#endif /* PNG_sCAL_SUPPORTED */
+
+#if defined(PNG_sCAL_SUPPORTED)
+#ifdef PNG_FLOATING_POINT_SUPPORTED
+extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, int unit, double width, double height));
+#endif
+#ifdef PNG_FIXED_POINT_SUPPORTED
+extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, int unit, png_charp swidth, png_charp sheight));
+#endif
+#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
+
+#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+/* provide a list of chunks and how they are to be handled, if the built-in
+   handling or default unknown chunk handling is not desired.  Any chunks not
+   listed will be handled in the default manner.  The IHDR and IEND chunks
+   must not be listed.
+      keep = 0: follow default behavour
+           = 1: do not keep
+           = 2: keep only if safe-to-copy
+           = 3: keep even if unsafe-to-copy
+*/
+extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp
+   png_ptr, int keep, png_bytep chunk_list, int num_chunks));
+extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns));
+extern PNG_EXPORT(void, png_set_unknown_chunk_location)
+   PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location));
+extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp
+   png_ptr, png_infop info_ptr, png_unknown_chunkpp entries));
+#endif
+#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
+PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep
+   chunk_name));
+#endif
+
+/* Png_free_data() will turn off the "valid" flag for anything it frees.
+   If you need to turn it off for a chunk that your application has freed,
+   you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */
+extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr,
+   png_infop info_ptr, int mask));
+
+#if defined(PNG_INFO_IMAGE_SUPPORTED)
+/* The "params" pointer is currently not used and is for future expansion. */
+extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
+                        png_infop info_ptr,
+                        int transforms,
+                        png_voidp params));
+extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr,
+                        png_infop info_ptr,
+                        int transforms,
+                        png_voidp params));
+#endif
+
+/* Define PNG_DEBUG at compile time for debugging information.  Higher
+ * numbers for PNG_DEBUG mean more debugging information.  This has
+ * only been added since version 0.95 so it is not implemented throughout
+ * libpng yet, but more support will be added as needed.
+ */
+#ifdef PNG_DEBUG
+#if (PNG_DEBUG > 0)
+#if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER)
+#include <crtdbg.h>
+#if (PNG_DEBUG > 1)
+#define png_debug(l,m)  _RPT0(_CRT_WARN,m)
+#define png_debug1(l,m,p1)  _RPT1(_CRT_WARN,m,p1)
+#define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m,p1,p2)
+#endif
+#else /* PNG_DEBUG_FILE || !_MSC_VER */
+#ifndef PNG_DEBUG_FILE
+#define PNG_DEBUG_FILE stderr
+#endif /* PNG_DEBUG_FILE */
+#if (PNG_DEBUG > 1)
+#define png_debug(l,m) \
+{ \
+     int num_tabs=l; \
+     fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \
+       (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \
+}
+#define png_debug1(l,m,p1) \
+{ \
+     int num_tabs=l; \
+     fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \
+       (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \
+}
+#define png_debug2(l,m,p1,p2) \
+{ \
+     int num_tabs=l; \
+     fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \
+       (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \
+}
+#endif /* (PNG_DEBUG > 1) */
+#endif /* _MSC_VER */
+#endif /* (PNG_DEBUG > 0) */
+#endif /* PNG_DEBUG */
+#ifndef png_debug
+#define png_debug(l, m)
+#endif
+#ifndef png_debug1
+#define png_debug1(l, m, p1)
+#endif
+#ifndef png_debug2
+#define png_debug2(l, m, p1, p2)
+#endif
+
+extern PNG_EXPORT(png_bytep,png_sig_bytes) PNGARG((void));
+
+extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr));
+extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr));
+extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr));
+extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
+
+#ifdef PNG_MNG_FEATURES_SUPPORTED
+extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp
+   png_ptr, png_uint_32 mng_features_permitted));
+#endif
+
+/* For use in png_set_keep_unknown, added to version 1.2.6 */
+#define PNG_HANDLE_CHUNK_AS_DEFAULT   0
+#define PNG_HANDLE_CHUNK_NEVER        1
+#define PNG_HANDLE_CHUNK_IF_SAFE      2
+#define PNG_HANDLE_CHUNK_ALWAYS       3
+
+/* Added to version 1.2.0 */
+#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
+#define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED  0x01  /* not user-settable */
+#define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU    0x02  /* not user-settable */
+#define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  0x04
+#define PNG_ASM_FLAG_MMX_READ_INTERLACE    0x08
+#define PNG_ASM_FLAG_MMX_READ_FILTER_SUB   0x10
+#define PNG_ASM_FLAG_MMX_READ_FILTER_UP    0x20
+#define PNG_ASM_FLAG_MMX_READ_FILTER_AVG   0x40
+#define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80
+#define PNG_ASM_FLAGS_INITIALIZED          0x80000000  /* not user-settable */
+
+#define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  \
+                           | PNG_ASM_FLAG_MMX_READ_INTERLACE    \
+                           | PNG_ASM_FLAG_MMX_READ_FILTER_SUB   \
+                           | PNG_ASM_FLAG_MMX_READ_FILTER_UP    \
+                           | PNG_ASM_FLAG_MMX_READ_FILTER_AVG   \
+                           | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH )
+#define PNG_MMX_WRITE_FLAGS ( 0 )
+
+#define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \
+                      | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU   \
+                      | PNG_MMX_READ_FLAGS                \
+                      | PNG_MMX_WRITE_FLAGS )
+
+#define PNG_SELECT_READ   1
+#define PNG_SELECT_WRITE  2
+
+#if !defined(PNG_1_0_X)
+/* pngget.c */
+extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask)
+   PNGARG((int flag_select, int *compilerID));
+
+/* pngget.c */
+extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask)
+   PNGARG((int flag_select));
+
+/* pngget.c */
+extern PNG_EXPORT(png_uint_32,png_get_asm_flags)
+   PNGARG((png_structp png_ptr));
+
+/* pngget.c */
+extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold)
+   PNGARG((png_structp png_ptr));
+
+/* pngget.c */
+extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold)
+   PNGARG((png_structp png_ptr));
+
+/* pngset.c */
+extern PNG_EXPORT(void,png_set_asm_flags)
+   PNGARG((png_structp png_ptr, png_uint_32 asm_flags));
+
+/* pngset.c */
+extern PNG_EXPORT(void,png_set_mmx_thresholds)
+   PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold,
+   png_uint_32 mmx_rowbytes_threshold));
+
+#endif /* PNG_1_0_X */
+#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
+
+#if !defined(PNG_1_0_X)
+/* png.c, pnggccrd.c, or pngvcrd.c */
+extern PNG_EXPORT(int,png_mmx_support) PNGARG((void));
+
+/* Strip the prepended error numbers ("#nnn ") from error and warning
+ * messages before passing them to the error or warning handler. */
+#ifdef PNG_ERROR_NUMBERS_SUPPORTED
+extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp
+   png_ptr, png_uint_32 strip_mode));
+#endif
+
+#endif /* PNG_1_0_X */
+
+/* Added at libpng-1.2.6 */
+#ifdef PNG_SET_USER_LIMITS_SUPPORTED
+extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp
+   png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max));
+extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp
+   png_ptr));
+extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp
+   png_ptr));
+#endif
+
+/* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */
+
+#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
+/* With these routines we avoid an integer divide, which will be slower on
+ * most machines.  However, it does take more operations than the corresponding
+ * divide method, so it may be slower on a few RISC systems.  There are two
+ * shifts (by 8 or 16 bits) and an addition, versus a single integer divide.
+ *
+ * Note that the rounding factors are NOT supposed to be the same!  128 and
+ * 32768 are correct for the NODIV code; 127 and 32767 are correct for the
+ * standard method.
+ *
+ * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ]
+ */
+
+ /* fg and bg should be in `gamma 1.0' space; alpha is the opacity          */
+
+#  define png_composite(composite, fg, alpha, bg)                            \
+     { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \
+                        +        (png_uint_16)(bg)*(png_uint_16)(255 -       \
+                        (png_uint_16)(alpha)) + (png_uint_16)128);           \
+       (composite) = (png_byte)((temp + (temp >> 8)) >> 8); }
+
+#  define png_composite_16(composite, fg, alpha, bg)                         \
+     { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \
+                        + (png_uint_32)(bg)*(png_uint_32)(65535L -           \
+                        (png_uint_32)(alpha)) + (png_uint_32)32768L);        \
+       (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); }
+
+#else  /* standard method using integer division */
+
+#  define png_composite(composite, fg, alpha, bg)                            \
+     (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) +    \
+       (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) +       \
+       (png_uint_16)127) / 255)
+
+#  define png_composite_16(composite, fg, alpha, bg)                         \
+     (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \
+       (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) +      \
+       (png_uint_32)32767) / (png_uint_32)65535L)
+
+#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */
+
+/* These next functions are used internally in the code.  They generally
+ * shouldn't be used unless you are writing code to add or replace some
+ * functionality in libpng.  More information about most functions can
+ * be found in the files where the functions are located.
+ */
+
+#if defined(PNG_INTERNAL)
+
+/* Various modes of operation.  Note that after an init, mode is set to
+ * zero automatically when the structure is created.
+ */
+#define PNG_HAVE_IHDR               0x01
+#define PNG_HAVE_PLTE               0x02
+#define PNG_HAVE_IDAT               0x04
+#define PNG_AFTER_IDAT              0x08
+#define PNG_HAVE_IEND               0x10
+#define PNG_HAVE_gAMA               0x20
+#define PNG_HAVE_cHRM               0x40
+#define PNG_HAVE_sRGB               0x80
+#define PNG_HAVE_CHUNK_HEADER      0x100
+#define PNG_WROTE_tIME             0x200
+#define PNG_WROTE_INFO_BEFORE_PLTE 0x400
+#define PNG_BACKGROUND_IS_GRAY     0x800
+#define PNG_HAVE_PNG_SIGNATURE    0x1000
+
+/* flags for the transformations the PNG library does on the image data */
+#define PNG_BGR                0x0001
+#define PNG_INTERLACE          0x0002
+#define PNG_PACK               0x0004
+#define PNG_SHIFT              0x0008
+#define PNG_SWAP_BYTES         0x0010
+#define PNG_INVERT_MONO        0x0020
+#define PNG_DITHER             0x0040
+#define PNG_BACKGROUND         0x0080
+#define PNG_BACKGROUND_EXPAND  0x0100
+                          /*   0x0200 unused */
+#define PNG_16_TO_8            0x0400
+#define PNG_RGBA               0x0800
+#define PNG_EXPAND             0x1000
+#define PNG_GAMMA              0x2000
+#define PNG_GRAY_TO_RGB        0x4000
+#define PNG_FILLER             0x8000L
+#define PNG_PACKSWAP          0x10000L
+#define PNG_SWAP_ALPHA        0x20000L
+#define PNG_STRIP_ALPHA       0x40000L
+#define PNG_INVERT_ALPHA      0x80000L
+#define PNG_USER_TRANSFORM   0x100000L
+#define PNG_RGB_TO_GRAY_ERR  0x200000L
+#define PNG_RGB_TO_GRAY_WARN 0x400000L
+#define PNG_RGB_TO_GRAY      0x600000L  /* two bits, RGB_TO_GRAY_ERR|WARN */
+                       /*    0x800000L     Unused */
+#define PNG_ADD_ALPHA       0x1000000L  /* Added to libpng-1.2.7 */
+                       /*   0x2000000L  unused */
+                       /*   0x4000000L  unused */
+                       /*   0x8000000L  unused */
+                       /*  0x10000000L  unused */
+                       /*  0x20000000L  unused */
+                       /*  0x40000000L  unused */
+
+/* flags for png_create_struct */
+#define PNG_STRUCT_PNG   0x0001
+#define PNG_STRUCT_INFO  0x0002
+
+/* Scaling factor for filter heuristic weighting calculations */
+#define PNG_WEIGHT_SHIFT 8
+#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
+#define PNG_COST_SHIFT 3
+#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
+
+/* flags for the png_ptr->flags rather than declaring a byte for each one */
+#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY     0x0001
+#define PNG_FLAG_ZLIB_CUSTOM_LEVEL        0x0002
+#define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL    0x0004
+#define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS  0x0008
+#define PNG_FLAG_ZLIB_CUSTOM_METHOD       0x0010
+#define PNG_FLAG_ZLIB_FINISHED            0x0020
+#define PNG_FLAG_ROW_INIT                 0x0040
+#define PNG_FLAG_FILLER_AFTER             0x0080
+#define PNG_FLAG_CRC_ANCILLARY_USE        0x0100
+#define PNG_FLAG_CRC_ANCILLARY_NOWARN     0x0200
+#define PNG_FLAG_CRC_CRITICAL_USE         0x0400
+#define PNG_FLAG_CRC_CRITICAL_IGNORE      0x0800
+#define PNG_FLAG_FREE_PLTE                0x1000
+#define PNG_FLAG_FREE_TRNS                0x2000
+#define PNG_FLAG_FREE_HIST                0x4000
+#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x8000L
+#define PNG_FLAG_KEEP_UNSAFE_CHUNKS       0x10000L
+#define PNG_FLAG_LIBRARY_MISMATCH         0x20000L
+#define PNG_FLAG_STRIP_ERROR_NUMBERS      0x40000L
+#define PNG_FLAG_STRIP_ERROR_TEXT         0x80000L
+#define PNG_FLAG_MALLOC_NULL_MEM_OK       0x100000L
+#define PNG_FLAG_ADD_ALPHA                0x200000L  /* Added to libpng-1.2.8 */
+#define PNG_FLAG_STRIP_ALPHA              0x400000L  /* Added to libpng-1.2.8 */
+                                  /*      0x800000L  unused */
+                                  /*     0x1000000L  unused */
+                                  /*     0x2000000L  unused */
+                                  /*     0x4000000L  unused */
+                                  /*     0x8000000L  unused */
+                                  /*    0x10000000L  unused */
+                                  /*    0x20000000L  unused */
+                                  /*    0x40000000L  unused */
+
+#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
+                                     PNG_FLAG_CRC_ANCILLARY_NOWARN)
+
+#define PNG_FLAG_CRC_CRITICAL_MASK  (PNG_FLAG_CRC_CRITICAL_USE | \
+                                     PNG_FLAG_CRC_CRITICAL_IGNORE)
+
+#define PNG_FLAG_CRC_MASK           (PNG_FLAG_CRC_ANCILLARY_MASK | \
+                                     PNG_FLAG_CRC_CRITICAL_MASK)
+
+/* save typing and make code easier to understand */
+
+#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \
+   abs((int)((c1).green) - (int)((c2).green)) + \
+   abs((int)((c1).blue) - (int)((c2).blue)))
+
+/* Added to libpng-1.2.6 JB */
+#define PNG_ROWBYTES(pixel_bits, width) \
+    ((pixel_bits) >= 8 ? \
+    ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \
+    (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) )
+
+/* PNG_OUT_OF_RANGE returns true if value is outside the range
+   ideal-delta..ideal+delta.  Each argument is evaluated twice.
+   "ideal" and "delta" should be constants, normally simple
+   integers, &qu