+void name_parse(memreader_t*r, ttf_t*ttf)
+{
+ U16 format = readU16(r);
+ U16 count = readU16(r);
+ U16 offset = readU16(r);
+
+ int t;
+ for(t=0;t<count;t++) {
+ U16 platform = readU16(r);
+ U16 encoding = readU16(r);
+ U16 language = readU16(r);
+ U16 name_id = readU16(r);
+ U16 len = readU16(r);
+ U16 offset_2 = readU16(r);
+ /*printf("%d %d %d %d at %d, %d bytes:", platform, encoding, language, name_id, offset+offset_2, len);
+ int s;
+ for(s=0;s<len;s++) {
+ printf("%c", r->mem[offset+offset_2+s]);
+ }
+ printf("\n");*/
+ }
+}
+void name_write(ttf_t*ttf, ttf_table_t*table)
+{
+ writeU16(table, 0); //format
+ writeU16(table, 1); //count
+ int offset = 18;
+ writeU16(table, offset); //offset
+
+ writeU16(table, 1); //platform id
+ writeU16(table, 0); //encoding id
+ writeU16(table, 0); //language
+ writeU16(table, 4); //4: full name
+ int len = strlen(ttf->name);
+ writeU16(table, len);
+ writeU16(table, table->len+2 - offset);
+ int t;
+ for(t=0;t<len;t++) {
+ writeU8(table, ttf->name[t]);
+ }
+}
+void name_delete(ttf_t*ttf)
+{
+ if(ttf->name)
+ free(ttf->name);
+}