/* def.dfn - define format of libpng.def
 *
 * Last changed in libpng version 1.5.0 [(PENDING RELEASE)]
 * Copyright (c) 2010-2011 Glenn Randers-Pehrson
 *
 * This code is released under the libpng license.
 * For conditions of distribution and use, see the disclaimer
 * and license in png.h
 */

/* These macros exist to make the header and trailer shorter below: */
#define S PNG_DEFN_MAGIC
#define E PNG_DEFN_END

/* Write the export file header: */
S-;---------------------------------------------------------------E
S-; LIBPNG module definition file for OS/2-E
S-;---------------------------------------------------------------E
S--E
S-; If you give the library an explicit name one or other files-E
S-; may need modifying to support the new name on one or more-E
S-; systems.-E
S-LIBRARY-E
S-OS2 DESCRIPTION "PNG image compression library"-E
S-OS2 CODE PRELOAD MOVEABLE DISCARDABLE-E
S--E
S-EXPORTS-E
S-;Version 1.5.0beta58-E

/* NOTE: @@@ is interpreted by the calling script as a signal to
 * join the two things on either side, so we can do symbol
 * substitution within the name, regular C ## joins the pp-tokens,
 * not their final values.
 */
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
	PNG_DEFN_MAGIC- SYMBOL_PREFIX @@@ name-PNG_DEFN_END

#include "../png.h"
