static void ttfLoadKERN (FILE *fp,KERNPtr kern,ULONG offset) { int i; if (fseek(fp,offset,SEEK_SET) !=0) ttfError("Fseek Failed in ttfLoadKERN \n"); kern->version = ttfGetUSHORT(fp); kern->nTables = ttfGetUSHORT(fp); kern->subtable = (KernSubtable *) calloc(kern->nTables, sizeof(KernSubtable)); for (i=0;i<kern->nTables;i++) { struct kernpair *pairs; int j,n; (kern->subtable+i)->version = ttfGetUSHORT(fp); (kern->subtable+i)->length = ttfGetUSHORT(fp); (kern->subtable+i)->coverage = ttfGetUSHORT(fp); switch ((kern->subtable+i)->coverage >> 8) { case 0: (kern->subtable+i)->kern.kern0.nPairs = n = ttfGetUSHORT(fp); (kern->subtable+i)->kern.kern0.searchRange = ttfGetUSHORT(fp); (kern->subtable+i)->kern.kern0.entrySelector = ttfGetUSHORT(fp); (kern->subtable+i)->kern.kern0.rangeShift = ttfGetUSHORT(fp); (kern->subtable+i)->kern.kern0.pairs = pairs = (struct kernpair *) calloc(n,sizeof (struct kernpair)); for (j=0;j<n;j++) { (pairs+j)->left = ttfGetUSHORT(fp); (pairs+j)->right = ttfGetUSHORT(fp); (pairs+j)->value = ttfGetFWord(fp); } break; case 2: /* not implemented yet */ break; default: /* do nothing */ break; } } }
static void ttfLoadVMTX(FILE *fp,VMTXPtr vmtx,ULONG offset) { USHORT i,n = vmtx->numOfLongVerMetrics,m=vmtx->numOfTSB; xfseek(fp, offset, SEEK_SET, "ttfLoadVMTX"); vmtx->vMetrics = XCALLOC (n, longVerMetric); for (i=0;i<n;i++) { (vmtx->vMetrics+i)->advanceHeight = ttfGetuFWord(fp); (vmtx->vMetrics+i)->topSideBearing = ttfGetFWord(fp); } /* codes dealing with topSideBearing entry */ if (m) { vmtx->topSideBearing = XCALLOC (m, FWord); for (i=0;i<m;i++) { (vmtx->topSideBearing)[i] = ttfGetFWord(fp); } } }
void ttfReadFWord(FWord *array, size_t nelem, FILE *fp) { int i; for (i = 0; i < nelem; i++) array[i] = ttfGetFWord (fp); }