void aputw( int channel, int n, char fc, char *bf ) { char ch; char *p = bf; while( *p++ && n > 0 ) n--; while( n-- > 0 ) aputc( channel, fc ); while( ( ch = *bf++ ) ) aputc( channel, ch ); }
int aputx( int channel, char c ) { char chh, chl; chh = ac2x( c / 16 ); chl = ac2x( c % 16 ); aputc( channel, chh ); return aputc( channel, chl ); }
int aputstr( int channel, char *str ) { while( *str ) { if( aputc( channel, *str ) < 0 ) return -1; str++; } return 0; }
int aputr( int channel, unsigned int reg ) { int byte; char *ch = (char *) ® for( byte = 3; byte >= 0; byte-- ) aputx( channel, ch[byte] ); return aputc( channel, ' ' ); }
static void ttf_dumpcvar(struct alltabs *at,MMSet *mm) { int16_t **deltas; int ptcnt, cnt, pcnt; int i, j, rj, big; int tuple_size; uint32_t start, end; uint16_t *pts; deltas=CvtFindDeltas(mm, &ptcnt); for (i=cnt=0; i < mm->instance_count; ++i) if (deltas[i] != NULL) ++cnt; if (cnt==0) { free(deltas); return; } tuple_size=4 + 2 * mm->axis_count; at->cvar=atmpfile(); putlong(at->cvar, 0x00010000); /* Format */ putshort(at->cvar, cnt); /* Number of instances with cvt tables (tuple count of interesting tuples) */ putshort(at->cvar, 8 + cnt * tuple_size); /* Offset to data */ for (i=0; i < mm->instance_count; ++i) if (deltas[i] != NULL) { putshort(at->cvar, 0); /* tuple data size, figure out later */ putshort(at->cvar, 0xa000); /* tuple coords follow, private points in data */ for (j=0; j < mm->axis_count; ++j) putshort(at->cvar, rint(16384 * mm->positions[i * mm->axis_count + j])); } if (aftell(at->cvar) != 8 + cnt * tuple_size) ErrorMsg(2,"Data offset wrong\n"); for (i=cnt=0; i < mm->instance_count; ++i) if (deltas[i] != NULL) { start=aftell(at->cvar); for (j=pcnt=0; j < ptcnt; ++j) if (deltas[i][j] != 0) ++pcnt; pts=malloc(pcnt * sizeof(uint16_t)); for (j=pcnt=0; j < ptcnt; ++j) if (deltas[i][j] != 0) pts[pcnt++]=j; if (pcnt > 0x7f) { aputc(0x80 | (pcnt >> 8), at->cvar); aputc(pcnt & 0xff, at->cvar); } else