Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 650 git-svn-id: svn://10.65.10.50/trunk@14148 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			303 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			303 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/*---------------------------------------------------------------------------*
 | 
						|
 |              PDFlib - A library for generating PDF on the fly             |
 | 
						|
 +---------------------------------------------------------------------------+
 | 
						|
 | Copyright (c) 1997-2005 Thomas Merz and PDFlib GmbH. All rights reserved. |
 | 
						|
 +---------------------------------------------------------------------------+
 | 
						|
 |                                                                           |
 | 
						|
 |    This software is subject to the PDFlib license. It is NOT in the       |
 | 
						|
 |    public domain. Extended versions and commercial licenses are           |
 | 
						|
 |    available, please check http://www.pdflib.com.                         |
 | 
						|
 |                                                                           |
 | 
						|
 *---------------------------------------------------------------------------*/
 | 
						|
 | 
						|
/* $Id: pc_core.h,v 1.2 2006-07-11 13:10:33 alex Exp $
 | 
						|
 *
 | 
						|
 * PDFlib core services:
 | 
						|
 * - memory management
 | 
						|
 * - exception handling
 | 
						|
 * - internal try/catch
 | 
						|
 * - debug tracing
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef PC_CORE_H
 | 
						|
#define PC_CORE_H
 | 
						|
 | 
						|
/* Built-in metric support */
 | 
						|
#define PDF_BUILTINMETRIC_SUPPORTED
 | 
						|
 | 
						|
/* Built-in encoding support */
 | 
						|
#define PDF_BUILTINENCODING_SUPPORTED
 | 
						|
 | 
						|
 | 
						|
#define PDF_FEATURE_NOT_PUBLIC
 | 
						|
 | 
						|
 | 
						|
/* ------------------------- general  ------------------------- */
 | 
						|
 | 
						|
typedef struct pdc_core_s pdc_core;
 | 
						|
 | 
						|
typedef int            pdc_bool;
 | 
						|
typedef long           pdc_id;
 | 
						|
typedef char           pdc_char;
 | 
						|
typedef unsigned char  pdc_byte;
 | 
						|
typedef unsigned char  pdc_uchar;
 | 
						|
typedef short          pdc_short;
 | 
						|
typedef unsigned short pdc_ushort;
 | 
						|
typedef long           pdc_long;
 | 
						|
typedef unsigned long  pdc_ulong;
 | 
						|
 | 
						|
typedef short          pdc_sint16;
 | 
						|
typedef unsigned short pdc_uint16;
 | 
						|
typedef int            pdc_sint32;
 | 
						|
typedef unsigned int   pdc_uint32;
 | 
						|
 | 
						|
/* TODO2GB:	this is the signed 64-bit integer type for >2GB files.
 | 
						|
**		 must be platform & compiler specific.
 | 
						|
*/
 | 
						|
#if	defined(_LARGEFILE_SOURCE)
 | 
						|
    #if defined(WIN32)
 | 
						|
	typedef __int64	pdc_off_t;
 | 
						|
    #else
 | 
						|
#include <sys/types.h>
 | 
						|
	typedef off_t	pdc_off_t;
 | 
						|
    #endif
 | 
						|
#else
 | 
						|
	typedef long	pdc_off_t;
 | 
						|
#endif
 | 
						|
 | 
						|
/* use this one for casts from "off_t" to "long" - so we can "grep"
 | 
						|
** for critical places.
 | 
						|
*/
 | 
						|
typedef long pdc_off_t1;
 | 
						|
 | 
						|
 | 
						|
#define pdc_undef      -1
 | 
						|
#define pdc_false       0
 | 
						|
#define pdc_true	1
 | 
						|
 | 
						|
#define	PDC_1_1			11		/* PDF 1.1 = Acrobat 2 */
 | 
						|
#define	PDC_1_2			12		/* PDF 1.2 = Acrobat 3 */
 | 
						|
#define	PDC_1_3			13		/* PDF 1.3 = Acrobat 4 */
 | 
						|
#define	PDC_1_4			14		/* PDF 1.4 = Acrobat 5 */
 | 
						|
#define	PDC_1_5			15		/* PDF 1.5 = Acrobat 6 */
 | 
						|
#define	PDC_1_6			16		/* PDF 1.6 = Acrobat 7 */
 | 
						|
#define PDC_X_X_LAST		16
 | 
						|
 | 
						|
/* Acrobat limit for page dimensions */
 | 
						|
#define PDF_ACRO_MINPAGE       (3.0)           /* 1/24 inch = 0.106 cm */
 | 
						|
#define PDF_ACRO_MAXPAGE       (14400.0)       /* 200  inch = 508 cm   */
 | 
						|
 | 
						|
 | 
						|
 | 
						|
typedef void  (*pdc_error_fp)(void *opaque, int type, const char *msg);
 | 
						|
typedef void* (*pdc_alloc_fp)(void *opaque, size_t size, const char *caller);
 | 
						|
typedef void* (*pdc_realloc_fp)(void *opaque, void *mem, size_t size,
 | 
						|
						const char *caller);
 | 
						|
typedef void  (*pdc_free_fp)(void *opaque, void *mem);
 | 
						|
 | 
						|
pdc_core *pdc_init_core(pdc_error_fp errorhandler, pdc_alloc_fp allocproc,
 | 
						|
    pdc_realloc_fp reallocproc, pdc_free_fp freeproc, void *opaque);
 | 
						|
 | 
						|
void pdc_delete_core(pdc_core *pdc);
 | 
						|
 | 
						|
/* this is used by pdflib and pdi sources, so i put it here.
 | 
						|
** WARNING: any changes here will break existing PDI code!
 | 
						|
*/
 | 
						|
typedef enum {
 | 
						|
    use_none = 0, use_art, use_bleed, use_crop, use_media, use_trim
 | 
						|
} pdc_usebox;
 | 
						|
 | 
						|
/* ------------------------- memory management  ------------------------- */
 | 
						|
 | 
						|
void	*pdc_malloc(pdc_core *pdc, size_t size, const char *caller);
 | 
						|
void	*pdc_realloc(pdc_core *pdc, void *mem, size_t size, const char *caller);
 | 
						|
void	*pdc_calloc(pdc_core *pdc, size_t size, const char *caller);
 | 
						|
void	pdc_free(pdc_core *pdc, void *mem);
 | 
						|
 | 
						|
#define PDC_TMPMEM	1
 | 
						|
 | 
						|
typedef void (*pdc_destructor)(void *opaque, void *mem);
 | 
						|
 | 
						|
void    pdc_insert_mem_tmp(pdc_core *pdc, void *memory, void *opaque,
 | 
						|
            pdc_destructor destr);
 | 
						|
void	*pdc_malloc_tmp(pdc_core *pdc, size_t size, const char *caller,
 | 
						|
	    void *opaque, pdc_destructor destr);
 | 
						|
void	*pdc_realloc_tmp(pdc_core *pdc, void *mem, size_t size,
 | 
						|
	    const char *caller);
 | 
						|
void	*pdc_calloc_tmp(pdc_core *pdc, size_t size, const char *caller,
 | 
						|
	    void *opaque, pdc_destructor destr);
 | 
						|
void	pdc_free_tmp(pdc_core *pdc, void *mem);
 | 
						|
 | 
						|
/* --------------------------- exception handling --------------------------- */
 | 
						|
 | 
						|
#define PDC_ET_NOPREFIX (1<<0)  /* API funcname without prefix (e.g. PDF_) */
 | 
						|
#define PDC_ET_NOSUFFIX (1<<1)  /* API funcname without suffix 2 */
 | 
						|
 | 
						|
/* maximal length of strings for %.*s in pdc_errprintf format
 | 
						|
*/
 | 
						|
#define PDC_ET_MAXSTRLEN 256
 | 
						|
 | 
						|
/* per-library error table base numbers.
 | 
						|
*/
 | 
						|
#define PDC_ET_CORE	1000
 | 
						|
#define PDC_ET_PDFLIB	2000
 | 
						|
#define PDC_ET_PDI	4000
 | 
						|
#define PDC_ET_PLOP	5000
 | 
						|
#define PDC_ET_PDPAGE	6000
 | 
						|
 | 
						|
#define PDC_ET_LAST	6000
 | 
						|
 | 
						|
/* core error numbers.
 | 
						|
*/
 | 
						|
enum
 | 
						|
{
 | 
						|
#define		pdc_genNames	1
 | 
						|
#include	"pc_generr.h"
 | 
						|
 | 
						|
    PDC_E_dummy
 | 
						|
};
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
    int		nparms;		/* number of error parameters	*/
 | 
						|
    int		errnum;		/* error number			*/
 | 
						|
    const char *errmsg;		/* default error message	*/
 | 
						|
    const char *ce_msg;		/* custom error message		*/
 | 
						|
} pdc_error_info;
 | 
						|
 | 
						|
void		pdc_register_errtab(pdc_core *pdc, int et, pdc_error_info *ei,
 | 
						|
		    int n_entries);
 | 
						|
 | 
						|
pdc_bool        pdc_enter_api(pdc_core *pdc, const char *apiname, int flags);
 | 
						|
pdc_bool	pdc_in_error(pdc_core *pdc);
 | 
						|
void		pdc_set_warnings(pdc_core *pdc, pdc_bool on);
 | 
						|
 | 
						|
const char *	pdc_errprintf(pdc_core *pdc, const char *format, ...);
 | 
						|
 | 
						|
void		pdc_set_errmsg(pdc_core *pdc, int errnum, const char *parm1,
 | 
						|
		    const char *parm2, const char *parm3, const char *parm4);
 | 
						|
 | 
						|
void		pdc_error(pdc_core *pdc, int errnum, const char *parm1,
 | 
						|
		    const char *parm2, const char *parm3, const char *parm4);
 | 
						|
 | 
						|
void		pdc_warning(pdc_core *pdc, int errnum, const char *parm1,
 | 
						|
		    const char *parm2, const char *parm3, const char *parm4);
 | 
						|
 | 
						|
int		pdc_get_errnum(pdc_core *pdc);
 | 
						|
const char *	pdc_get_errmsg(pdc_core *pdc);
 | 
						|
const char *	pdc_get_apiname(pdc_core *pdc);
 | 
						|
 | 
						|
/* ----------------------------- try/catch ---------------------------- */
 | 
						|
 | 
						|
#include <setjmp.h>
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
    jmp_buf	jbuf;
 | 
						|
} pdc_jmpbuf;
 | 
						|
 | 
						|
pdc_jmpbuf *	pdc_jbuf(pdc_core *pdc);
 | 
						|
void		pdc_exit_try(pdc_core *pdc);
 | 
						|
int		pdc_catch_intern(pdc_core *pdc);
 | 
						|
int		pdc_catch_extern(pdc_core *pdc);
 | 
						|
void		pdc_rethrow(pdc_core *pdc);
 | 
						|
 | 
						|
#define PDC_TRY(pdc)		if (setjmp(pdc_jbuf(pdc)->jbuf) == 0)
 | 
						|
 | 
						|
#define PDC_EXIT_TRY(pdc)	pdc_exit_try(pdc)
 | 
						|
 | 
						|
#define PDC_CATCH(pdc)		if (pdc_catch_intern(pdc))
 | 
						|
 | 
						|
#define PDC_RETHROW(pdc)	pdc_rethrow(pdc)
 | 
						|
 | 
						|
 | 
						|
/* --------------------------- debug trace  --------------------------- */
 | 
						|
 | 
						|
/* pdcore protocol classes */
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    trc_other = 0,      /* other classes */
 | 
						|
    trc_api,            /* API function call protocol */
 | 
						|
    trc_optlist,        /* optlist protocol */
 | 
						|
    trc_memory,         /* memory protocol */
 | 
						|
    trc_warning,        /* protocol of disabled warnings */
 | 
						|
    trc_resource,       /* resource protocol */
 | 
						|
    trc_filesearch,     /* file search protocol */
 | 
						|
    trc_encoding,       /* encoding end textformat protocol */
 | 
						|
    trc_image,          /* image and template protocol */
 | 
						|
    trc_font            /* font protocol */
 | 
						|
}
 | 
						|
pdc_protocol_class;
 | 
						|
 | 
						|
/* string code kinds */
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    strform_readable,
 | 
						|
    strform_readable0,
 | 
						|
    strform_octal,
 | 
						|
    strform_hexa,
 | 
						|
    strform_java
 | 
						|
}
 | 
						|
pdc_strform_kind;
 | 
						|
 | 
						|
# ifndef DEBUG_TRACE_FILE
 | 
						|
#  if defined(MVS)
 | 
						|
#   define DEBUG_TRACE_FILE     "pdflog"
 | 
						|
#  elif defined(MAC) || defined(AS400)
 | 
						|
#   define DEBUG_TRACE_FILE     "PDFlib.log"
 | 
						|
#  elif defined(WIN32)
 | 
						|
#   define DEBUG_TRACE_FILE     "/PDFlib.log"
 | 
						|
#  else
 | 
						|
#   define DEBUG_TRACE_FILE     "/tmp/PDFlib.log"
 | 
						|
#  endif
 | 
						|
# endif
 | 
						|
# define PDF_TRACE(ARGS)	pdc_trace ARGS
 | 
						|
 | 
						|
void	pdc_set_tracefile(pdc_core *pdc, const char *filename);
 | 
						|
pdc_bool pdc_set_trace_options(pdc_core *pdc, const char *optlist);
 | 
						|
void	pdc_set_trace(pdc_core *pdc, const char *client);
 | 
						|
const char *pdc_print_tracestring(pdc_core *pdc, const char *str, int len);
 | 
						|
void    pdc_trace(pdc_core *pdc, const char *fmt, ...);
 | 
						|
void    pdc_trace_enter_api(pdc_core *pdc, const char *funame,
 | 
						|
                            const char *fmt, va_list args);
 | 
						|
void    pdc_trace_exit_api(pdc_core *pdc, pdc_bool cleanup,
 | 
						|
                           const char *fmt, ...);
 | 
						|
pdc_bool pdc_trace_protocol_is_enabled(pdc_core *pdc, int level, int pclass);
 | 
						|
void    pdc_trace_protocol(pdc_core *pdc, int level, int pclass,
 | 
						|
                           const char *fmt, ...);
 | 
						|
#ifdef	PDC_DEBUG
 | 
						|
void	pdc_enable_hexdump(pdc_core *pdc);
 | 
						|
void	pdc_disable_hexdump(pdc_core *pdc);
 | 
						|
void	pdc_hexdump(pdc_core *pdc, const char *msg, const char *text, int tlen);
 | 
						|
#endif /* PDC_DEBUG */
 | 
						|
 | 
						|
 | 
						|
/* ------------ client structs handling ------------ */
 | 
						|
 | 
						|
void    pdc_set_pglyphtab_ptr(pdc_core *pdc, void *pglyphtab_ptr);
 | 
						|
void *  pdc_get_pglyphtab_ptr(pdc_core *pdc);
 | 
						|
 | 
						|
 | 
						|
/* ----------- service function to get PDF version string  -------------- */
 | 
						|
 | 
						|
const char *pdc_get_pdfversion(pdc_core *pdc, int compatibility);
 | 
						|
 | 
						|
 | 
						|
/* --------------------------- float digits  --------------------------- */
 | 
						|
 | 
						|
void    pdc_set_floatdigits(pdc_core *pdc, int val);
 | 
						|
int     pdc_get_floatdigits(pdc_core *pdc);
 | 
						|
 | 
						|
 | 
						|
/* --------------------------- scope  --------------------------- */
 | 
						|
 | 
						|
/*
 | 
						|
 * An arbitrary number used for sanity checks.
 | 
						|
 * Actually, we use the hex representation of pi in order to avoid
 | 
						|
 * the more common patterns.
 | 
						|
 */
 | 
						|
 | 
						|
#define PDC_MAGIC	((unsigned long) 0x126960A1)
 | 
						|
 | 
						|
#endif	/* PC_CORE_H */
 |