/*
* Copyright 1993,1994,1995,2005 by Ross Paterson
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*
* Two interfaces to HBF files -- take your pick.
*
* Ross Paterson <
[email protected]>
*
* Ross no longer maintains this code. Please send bug reports to
* Werner Lemberg <
[email protected]>.
*
*/
#ifndef _HBF_
#define _HBF_
#ifndef __STDC__
# ifndef const
# define const
# endif
#endif
/*
* #1: a lightweight C interface.
*/
typedef unsigned int HBF_CHAR;
typedef struct {
unsigned short hbf_width;
unsigned short hbf_height;
short hbf_xDisplacement;
short hbf_yDisplacement;
} HBF_BBOX;
typedef struct {
/* fields corresponding to the definition */
HBF_BBOX hbf_bitmap_bbox; /* HBF_BITMAP_BOUNDING_BOX */
HBF_BBOX hbf_font_bbox; /* FONTBOUNDINGBOX */
} HBF;
extern HBF *hbfOpen(
#ifdef __STDC__
const char *filename
#endif
);
extern void hbfClose(
#ifdef __STDC__
HBF *hbf
#endif
);
extern const char *hbfProperty(
#ifdef __STDC__
HBF *hbf,
const char *propName
#endif
);
extern const unsigned char *hbfGetBitmap(
#ifdef __STDC__
HBF *hbf,
HBF_CHAR code
#endif
);
extern void hbfForEach(
#ifdef __STDC__
HBF *hbf,
void (*func)(HBF *sameHbf, HBF_CHAR code)
#endif
);
extern const char *hbfFileName(
#ifdef __STDC__
HBF *hbf
#endif
);
extern long hbfChars(
#ifdef __STDC__
HBF *hbf
#endif
);
extern HBF_BBOX *hbfBitmapBBox(
#ifdef __STDC__
HBF *hbf
#endif
);
/* but defined here as a macro */
#define hbfBitmapBBox(hbf) (&((hbf)->hbf_bitmap_bbox))
extern HBF_BBOX *hbfFontBBox(
#ifdef __STDC__
HBF *hbf
#endif
);
/* but defined here as a macro */
#define hbfFontBBox(hbf) (&((hbf)->hbf_font_bbox))
#define HBF_RowSize(hbf)\
((hbfBitmapBBox(hbf)->hbf_width + 7)/8)
#define HBF_BitmapSize(hbf)\
(HBF_RowSize(hbf) * hbfBitmapBBox(hbf)->hbf_height)
#define HBF_GetBit(hbf,bitmap,x,y)\
(((bitmap)[(y)*HBF_RowSize(hbf) + (x)/8]>>(7 - (x)%8))&01)
extern int hbfDebug; /* set non-zero for error reporting */
extern const void *hbfGetCodeRange(
#ifdef __STDC__
HBF *hbfFile,
const void *code_pointer,
HBF_CHAR *startp,
HBF_CHAR *finishp
#endif
);
extern const void *hbfGetByte2Range(
#ifdef __STDC__
HBF *hbfFile,
const void *b2r_pointer,
unsigned char *startp,
unsigned char *finishp
#endif
);
/*
* #2: taken from Appendix 2 of the HBF draft.
*/
typedef unsigned int HBF_HzCode;
typedef unsigned char HBF_Byte ;
typedef HBF_Byte * HBF_BytePtr ;
typedef HBF * HBF_Handle ;
typedef HBF_Handle * HBF_HandlePtr ;
typedef char * String ;
extern int HBF_OpenFont(
#ifdef __STDC__
const char * filename,
HBF_HandlePtr ptrHandleStorage
#endif
);
extern int HBF_CloseFont(
#ifdef __STDC__
HBF_Handle handle
#endif
);
extern const char * HBF_GetProperty(
#ifdef __STDC__
HBF_Handle handle,
const char * propertyName
#endif
);
extern int HBF_GetFontBoundingBox(
#ifdef __STDC__
HBF_Handle handle,
unsigned int *width,
unsigned int *height,
int *xDisplacement,
int *yDisplacement
#endif
);
extern int HBF_GetBitmapBoundingBox(
#ifdef __STDC__
HBF_Handle handle,
unsigned int *width,
unsigned int *height,
int *xDisplacement,
int *yDisplacement
#endif
);
extern int HBF_GetBitmap(
#ifdef __STDC__
HBF_Handle handle,
HBF_HzCode hanziCode,
HBF_BytePtr ptrBitmapBuffer
#endif
);
#endif /* ! _HBF_ */