1
/* gasp.c -- Grid-fitting And Scan-conversion Procedure
2
* Copyright (C) 1996 Li-Da Lho, All right reserved
14
/* $Id: gasp.c,v 1.1.1.1 1998/06/05 07:47:52 robert Exp $ */
17
static char vcid[] = "$Id: gasp.c,v 1.1.1.1 1998/06/05 07:47:52 robert Exp $";
20
static GASPPtr ttfAllocGASP(TTFontPtr font);
21
static void ttfLoadGASP(FILE *fp,GASPPtr gasp,ULONG offset);
23
void ttfInitGASP(TTFontPtr font)
25
ULONG tag = 'g' | 'a' << 8 | 's' << 16 | 'p' << 24;
28
if ((ptd = ttfLookUpTableDir(tag,font)) != NULL)
30
font->gasp = ttfAllocGASP(font);
31
ttfLoadGASP(font->fp,font->gasp,ptd->offset);
34
static GASPPtr ttfAllocGASP(TTFontPtr font)
38
if ((gasp = (GASPPtr) calloc(1,sizeof(GASP))) == NULL)
40
ttfError("Out of Memory in __FILE__:__LINE__\n");
45
static void ttfLoadGASP (FILE *fp,GASPPtr gasp,ULONG offset)
49
if (fseek(fp,offset,SEEK_SET) !=0)
50
ttfError("Fseek Failed in ttfLoadGASP \n");
52
gasp->version = ttfGetUSHORT(fp);
53
gasp->numRanges = ttfGetUSHORT(fp);
55
gasp->gaspRange = (GASPRANGE *) calloc(gasp->numRanges, sizeof(GASPRANGE));
57
if (gasp->gaspRange == NULL)
58
ttfError("Out of Memory in __FILE__:__LINE__\n");
60
for (i=0;i<gasp->numRanges;i++)
62
gasp->gaspRange[i].rangeMaxPPEM = ttfGetUSHORT(fp);
63
gasp->gaspRange[i].rangeGaspBehavior = ttfGetUSHORT(fp);
67
void ttfPrintGASP(FILE *fp,GASPPtr gasp)
71
fprintf(fp,"'gasp' Table - Grid-fitting And Scan-conversion Procedure\n");
72
fprintf(fp,"---------------------------------------------------------\n");
74
fprintf(fp,"'gasp' version:\t %d\n",gasp->version);
75
fprintf(fp,"numRanges: \t %d\n\n",gasp->numRanges);
77
for (i=0;i<gasp->numRanges;i++)
79
fprintf(fp,"\t gasp Range %d\n",i);
80
fprintf(fp,"\t rangeMaxPPEM:\t %d\n",
81
gasp->gaspRange[i].rangeMaxPPEM);
82
fprintf(fp,"\t rangeGaspBehavior:\t 0x%04x\n\n",
83
gasp->gaspRange[i].rangeGaspBehavior);
88
void ttfFreeGASP(GASPPtr gasp)
92
free(gasp->gaspRange);