shithub: fnt

Download patch

ref: 103afe43213f6cb1e6969ffa72fe0dab1db1c45e
parent: 1f8bdfba6a4301d5197fc4ff62561a31cc958e50
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sat Jul 13 12:53:44 EDT 2024

fix posix vs plan9 formatting strings when generating code

--- a/gen.rkt
+++ b/gen.rkt
@@ -1,15 +1,6 @@
 #!/usr/bin/env racket
 #lang racket
 
-(define plan9? (make-parameter #f))
-(define indir (make-parameter "."))
-(define outdir (make-parameter "."))
-
-(command-line #:program "gen.rkt"
-              #:once-each [("--plan9") "Generate for Plan 9" (plan9? #f)]
-              [("--indir") DIR "Where *.in files are located" (indir DIR)]
-              [("--outdir") DIR "Where the generated files should be stored" (outdir DIR)])
-
 (require (for-syntax racket/format))
 (require (for-syntax syntax/parse))
 (require (for-syntax racket/contract))
@@ -18,6 +9,15 @@
 (require racket/contract)
 (require racket/generic)
 
+(define for-posix? (make-parameter #f))
+(define in-dir (make-parameter "."))
+(define out-dir (make-parameter "."))
+
+(command-line #:program "gen.rkt"
+              #:once-each [("--for-posix") BOOL "Generate for POSIX" (for-posix? BOOL)]
+              [("--in-dir") DIR "Where *.in files are located" (in-dir DIR)]
+              [("--out-dir") DIR "Where the generated files should be stored" (out-dir DIR)])
+
 (define types '()) ; base types set
 (define cmplxs '()) ; complex types set
 (define tagged '()) ; complex types set that also have a defined tag
@@ -49,6 +49,12 @@
   (define ps (list a b (map f types) ""))
   (string-join (allfun (flatten ps)) "\n"))
 
+(define (verb-hex bits)
+  (if (for-posix?) (~a "%#\"PRIx" bits "\"") "%#ux"))
+
+(define (verb-unsigned bits)
+  (if (for-posix?) (~a "%\"PRIu" bits "\"") "%ud"))
+
 (define (fmt-expr e)
   (define (fmt e)
     (cond
@@ -204,7 +210,9 @@
             [(list) empty]
             [(list a ...)
              (list (~a "if(" (string-join a " || ") "){")
-                   (~a "	werrstr(\"%s: invalid value: %d (0x%ux)\", \""
+                   (~a "	werrstr(\"%s: invalid value: %d ("
+                       (verb-hex 32)
+                       ")\", \""
                        (field-name f)
                        "\", "
                        ref
@@ -442,7 +450,7 @@
   (define (f t)
     (string-replace (string-trim ((if downcase string-downcase identity) t))
                     "/"
-                    (if (plan9?) "∕" "")))
+                    (if (for-posix?) "" "∕")))
   (if (symbol? t) (string->symbol (f (symbol->string t))) (f t)))
 
 (define-syntax (mktype stx)
@@ -517,7 +525,7 @@
     [(_ _ _ ({~literal at} e:expr)) #''(at e)]
     [(_ type _ {~literal hex})
      #:fail-when (not (type-number? (syntax-e #'type))) "not a number type"
-     #'(if (plan9?) '(verb "%#ux") '(verb "%#x"))]
+     #'(list 'verb (verb-hex (type-bits type)))]
     [(_ type _ (p:compop vs:number ...+))
      #:fail-when (not (type-comparable? (syntax-e #'type))) "type can't be used in a comparison"
      #''(test p vs ...)]
@@ -584,9 +592,9 @@
 (define (at dir name)
   (simplify-path (build-path (dir) name)))
 
-(out (at outdir "otf.h")
+(out (at out-dir "otf.h")
      (λ ()
-       (printf (port->string (open-input-file (at indir "otf.h.in")) #:close? #t))
+       (printf (port->string (open-input-file (at in-dir "otf.h.in")) #:close? #t))
        (printf "\n")
        (printf (format gen-h))))
 
@@ -595,9 +603,9 @@
       (filter-map (λ (f) (and (field-context? f) (indent (gen-h f)))) (cmplx-fields c))
       empty))
 
-(out (at outdir "otf.c")
+(out (at out-dir "otf.c")
      (λ ()
-       (printf (string-replace (port->string (open-input-file (at indir "otf.c.in")) #:close? #t)
+       (printf (string-replace (port->string (open-input-file (at in-dir "otf.c.in")) #:close? #t)
                                "OTF_EXTRA_FIELDS\n"
                                (format extra-context-fields #:on-all remove-duplicates)))
        (printf "\n")
--- a/meson.build
+++ b/meson.build
@@ -34,7 +34,8 @@
 	],
 	command: [
 		racket, '@SOURCE_ROOT@/gen.rkt',
-		'--indir', '@SOURCE_ROOT@',
+		'--for-posix', 'true',
+		'--in-dir', '@SOURCE_ROOT@',
 	],
 )
 
--- a/mkfile
+++ b/mkfile
@@ -26,6 +26,6 @@
 	$CC $CFLAGS plan9/test.c
 
 plan9/otf.h plan9/otf.c: gen.rkt otf.rkt
-	ssh $s76 'cd w/_/fnt && ./gen.rkt --plan9 --outdir plan9'
+	ssh $s76 'cd w/_/fnt && ./gen.rkt --out-dir plan9'
 
 </sys/src/cmd/mkone
--- a/otf.rkt
+++ b/otf.rkt
@@ -13,28 +13,26 @@
   (member type
           '(uint8 int8 uint16 int16 uint24 uint32 int32 Version16Dot16 Offset16 Offset24 Offset32)))
 
-(define ufmt (if (plan9?) "%ud" "%u"))
-
 (mktype String 8 char "%s")
 (mktype String-UTF16 8 char "%s")
-(mktype uint8 8 u8int ufmt)
+(mktype uint8 8 u8int (verb-unsigned 8))
 (mktype int8 8 s8int "%d")
-(mktype uint16 16 u16int ufmt)
+(mktype uint16 16 u16int (verb-unsigned 16))
 (mktype int16 16 s16int "%d")
-(mktype uint24 24 u32int ufmt)
-(mktype uint32 32 u32int ufmt)
+(mktype uint24 24 u32int (verb-unsigned 32))
+(mktype uint32 32 u32int (verb-unsigned 32))
 (mktype int32 32 s32int "%d")
 (mktype FWORD 16 s16int "%d")
-(mktype UFWORD 16 u16int ufmt)
+(mktype UFWORD 16 u16int (verb-unsigned 16))
 (mktype LONGDATETIME
         64
         s64int
-        (cons (if (plan9?) "%τ" "%s") (λ (v) (~a "fmttime(" v ")")))
+        (cons (if (for-posix?) "%s" "%τ") (λ (v) (~a "fmttime(" v ")")))
         (λ (b index [offset #f]) (~a "(" ((autoparse 64 's64int) b index offset) ") - 2082844800LL")))
 (mktype Tag 32 u32int (cons "%c%c%c%c" (λ (v) (~a v ">>24, " v ">>16, " v ">>8, " v ">>0"))))
-(mktype Offset16 16 u16int ufmt)
-(mktype Offset24 24 u32int ufmt)
-(mktype Offset32 32 u32int ufmt)
+(mktype Offset16 16 u16int (verb-unsigned 16))
+(mktype Offset24 24 u32int (verb-unsigned 32))
+(mktype Offset32 32 u32int (verb-unsigned 32))
 (mktype Version16Dot16 32 u32int (cons "%d.%d" (λ (v) (~a v ">>16, " v "&0xffff"))))
 (mktype Fixed
         32
--- a/plan9/otf.c
+++ b/plan9/otf.c
@@ -585,7 +585,7 @@
 		return g;
 
 	if(otfpushrange(o, o->glyf.offset, o->glyf.length) < 0)
-		return nil;
+		goto err;
 	if(otfpushrange(o, off, len) < 0)
 		goto err;
 	if(read_Glyf(o, g) < 0){
@@ -628,10 +628,10 @@
 void
 print_SubHeader(Otfile *f, int indent, Otf *o, SubHeader *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "firstCode", v->firstCode);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "entryCode", v->entryCode);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "firstCode", v->firstCode);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "entryCode", v->entryCode);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "idDelta", v->idDelta);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "idRangeOffset", v->idRangeOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "idRangeOffset", v->idRangeOffset);
 	USED(o);
 }
 
@@ -653,9 +653,9 @@
 void
 print_MapGroup(Otfile *f, int indent, Otf *o, MapGroup *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "startCharCode", v->startCharCode);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "endCharCode", v->endCharCode);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "startGlyphID", v->startGlyphID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "startCharCode", v->startCharCode);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "endCharCode", v->endCharCode);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "startGlyphID", v->startGlyphID);
 	USED(o);
 }
 
@@ -678,10 +678,10 @@
 void
 print_SubtableCmap0(Otfile *f, int indent, Otf *o, SubtableCmap0 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "language", v->language);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "language", v->language);
 	for(int i = 0; i < 256; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "glyphIdArray", i, v->glyphIdArray[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "glyphIdArray", i, v->glyphIdArray[i]);
 	USED(o);
 }
 
@@ -704,10 +704,10 @@
 void
 print_SubtableCmap2(Otfile *f, int indent, Otf *o, SubtableCmap2 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "language", v->language);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "language", v->language);
 	for(int i = 0; i < 256; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "subHeaderKeys", i, v->subHeaderKeys[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "subHeaderKeys", i, v->subHeaderKeys[i]);
 	USED(o);
 }
 
@@ -755,16 +755,16 @@
 void
 print_SubtableCmap4(Otfile *f, int indent, Otf *o, SubtableCmap4 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "language", v->language);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "segCountX2", v->segCountX2);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "searchRange", v->searchRange);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "entrySelector", v->entrySelector);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "rangeShift", v->rangeShift);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "language", v->language);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "segCountX2", v->segCountX2);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "searchRange", v->searchRange);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "entrySelector", v->entrySelector);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "rangeShift", v->rangeShift);
 	for(int i = 0; i < (v->segCountX2/2); i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "endCode", i, v->endCode[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "endCode", i, v->endCode[i]);
 	for(int i = 0; i < (v->segCountX2/2); i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "startCode", i, v->startCode[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "startCode", i, v->startCode[i]);
 	for(int i = 0; i < (v->segCountX2/2); i++)
 		f->print(f->aux, "%*s%s[%d]: %d\n", indent, "", "idDelta", i, v->idDelta[i]);
 	for(int i = 0; i < (v->segCountX2/2); i++)
@@ -796,12 +796,12 @@
 void
 print_SubtableCmap6(Otfile *f, int indent, Otf *o, SubtableCmap6 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "language", v->language);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "firstCode", v->firstCode);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "entryCount", v->entryCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "language", v->language);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "firstCode", v->firstCode);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "entryCount", v->entryCount);
 	for(int i = 0; i < v->entryCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "glyphIdArray", i, v->glyphIdArray[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "glyphIdArray", i, v->glyphIdArray[i]);
 	USED(o);
 }
 
@@ -829,11 +829,11 @@
 void
 print_SubtableCmap8(Otfile *f, int indent, Otf *o, SubtableCmap8 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "language", v->language);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "language", v->language);
 	for(int i = 0; i < 8192; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "is32", i, v->is32[i]);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numGroups", v->numGroups);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "is32", i, v->is32[i]);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numGroups", v->numGroups);
 	for(int i = 0; i < v->numGroups; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "groups", i);
 		print_MapGroup(f, indent+indentΔ, o, &v->groups[i]);
@@ -861,11 +861,11 @@
 void
 print_SubtableCmap10(Otfile *f, int indent, Otf *o, SubtableCmap10 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "reserved", v->reserved);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "language", v->language);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "startCharCode", v->startCharCode);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numChars", v->numChars);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "reserved", v->reserved);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "language", v->language);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "startCharCode", v->startCharCode);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numChars", v->numChars);
 	USED(o);
 }
 
@@ -892,10 +892,10 @@
 void
 print_SubtableCmap12or13(Otfile *f, int indent, Otf *o, SubtableCmap12or13 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "reserved", v->reserved);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "language", v->language);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numGroups", v->numGroups);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "reserved", v->reserved);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "language", v->language);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numGroups", v->numGroups);
 	for(int i = 0; i < v->numGroups; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "groups", i);
 		print_MapGroup(f, indent+indentΔ, o, &v->groups[i]);
@@ -920,8 +920,8 @@
 void
 print_UnicodeRange(Otfile *f, int indent, Otf *o, UnicodeRange *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "startUnicodeValue", v->startUnicodeValue);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "additionalCount", v->additionalCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "startUnicodeValue", v->startUnicodeValue);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "additionalCount", v->additionalCount);
 	USED(o);
 }
 
@@ -945,7 +945,7 @@
 void
 print_DefaultUVS(Otfile *f, int indent, Otf *o, DefaultUVS *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numUnicodeValueRanges", v->numUnicodeValueRanges);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numUnicodeValueRanges", v->numUnicodeValueRanges);
 	for(int i = 0; i < v->numUnicodeValueRanges; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "ranges", i);
 		print_UnicodeRange(f, indent+indentΔ, o, &v->ranges[i]);
@@ -970,8 +970,8 @@
 void
 print_UVSMapping(Otfile *f, int indent, Otf *o, UVSMapping *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "unicodeValue", v->unicodeValue);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "glyphID", v->glyphID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "unicodeValue", v->unicodeValue);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "glyphID", v->glyphID);
 	USED(o);
 }
 
@@ -995,7 +995,7 @@
 void
 print_NonDefaultUVS(Otfile *f, int indent, Otf *o, NonDefaultUVS *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numUVSMappings", v->numUVSMappings);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numUVSMappings", v->numUVSMappings);
 	for(int i = 0; i < v->numUVSMappings; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "uvsMappings", i);
 		print_UVSMapping(f, indent+indentΔ, o, &v->uvsMappings[i]);
@@ -1043,9 +1043,9 @@
 void
 print_VariationSelector(Otfile *f, int indent, Otf *o, VariationSelector *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "varSelector", v->varSelector);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "defaultUVSOffset", v->defaultUVSOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "nonDefaultUVSOffset", v->nonDefaultUVSOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "varSelector", v->varSelector);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "defaultUVSOffset", v->defaultUVSOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "nonDefaultUVSOffset", v->nonDefaultUVSOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "defaultUVS");
 	if(v->defaultUVS != nil)
 		print_DefaultUVS(f, indent+indentΔ, o, v->defaultUVS);
@@ -1076,8 +1076,8 @@
 void
 print_SubtableCmap14(Otfile *f, int indent, Otf *o, SubtableCmap14 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numVarSelectorRecords", v->numVarSelectorRecords);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numVarSelectorRecords", v->numVarSelectorRecords);
 	for(int i = 0; i < v->numVarSelectorRecords; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "varSelector", i);
 		print_VariationSelector(f, indent+indentΔ, o, &v->varSelector[i]);
@@ -1093,7 +1093,7 @@
 		goto err;
 	v->format = b[0]<<8 | b[1];
 	if(v->format != 0 && v->format != 2 && v->format != 4 && v->format != 6 && v->format != 8 && v->format != 10 && v->format != 12 && v->format != 13 && v->format != 14){
-		werrstr("%s: invalid value: %d (0x%ux)", "format", v->format, v->format);
+		werrstr("%s: invalid value: %d (%#ux)", "format", v->format, v->format);
 		goto err;
 	}
 	if(v->format == 0){
@@ -1153,7 +1153,7 @@
 void
 print_SubtableCmap(Otfile *f, int indent, Otf *o, SubtableCmap *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "format", v->format);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "format", v->format);
 	if(v->format == 0){
 		f->print(f->aux, "%*s%s:\n", indent, "", "sub0");
 		print_SubtableCmap0(f, indent+indentΔ, o, &v->sub0);
@@ -1197,7 +1197,7 @@
 		goto err;
 	v->platformID = b[0]<<8 | b[1];
 	if(v->platformID > 4){
-		werrstr("%s: invalid value: %d (0x%ux)", "platformID", v->platformID, v->platformID);
+		werrstr("%s: invalid value: %d (%#ux)", "platformID", v->platformID, v->platformID);
 		goto err;
 	}
 	v->encodingID = b[2]<<8 | b[3];
@@ -1222,9 +1222,9 @@
 void
 print_EncodingRecord(Otfile *f, int indent, Otf *o, EncodingRecord *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "platformID", v->platformID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "encodingID", v->encodingID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "subtableOffset", v->subtableOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "platformID", v->platformID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "encodingID", v->encodingID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "subtableOffset", v->subtableOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "subtable");
 	if(v->subtable != nil)
 		print_SubtableCmap(f, indent+indentΔ, o, v->subtable);
@@ -1239,7 +1239,7 @@
 		goto err;
 	u16int version = b[0]<<8 | b[1];
 	if(version != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "version", version, version);
+		werrstr("%s: invalid value: %d (%#ux)", "version", version, version);
 		goto err;
 	}
 	v->numTables = b[2]<<8 | b[3];
@@ -1256,7 +1256,7 @@
 void
 print_TableCmap(Otfile *f, int indent, Otf *o, TableCmap *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numTables", v->numTables);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numTables", v->numTables);
 	for(int i = 0; i < v->numTables; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "encodingRecords", i);
 		print_EncodingRecord(f, indent+indentΔ, o, &v->encodingRecords[i]);
@@ -1272,23 +1272,23 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	u16int minorVersion = b[2]<<8 | b[3];
 	if(minorVersion != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", minorVersion, minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", minorVersion, minorVersion);
 		goto err;
 	}
 	u32int magicNumber = b[12]<<24 | b[13]<<16 | b[14]<<8 | b[15];
 	if(magicNumber != 0x5f0f3cf5){
-		werrstr("%s: invalid value: %d (0x%ux)", "magicNumber", magicNumber, magicNumber);
+		werrstr("%s: invalid value: %d (%#ux)", "magicNumber", magicNumber, magicNumber);
 		goto err;
 	}
 	v->flags = b[16]<<8 | b[17];
 	v->unitsPerEm = b[18]<<8 | b[19];
 	if(v->unitsPerEm < 16 || v->unitsPerEm > 16384){
-		werrstr("%s: invalid value: %d (0x%ux)", "unitsPerEm", v->unitsPerEm, v->unitsPerEm);
+		werrstr("%s: invalid value: %d (%#ux)", "unitsPerEm", v->unitsPerEm, v->unitsPerEm);
 		goto err;
 	}
 	v->created = ((s64int)b[20]<<56 | (s64int)b[21]<<48 | (s64int)b[22]<<40 | (s64int)b[23]<<32 | b[24]<<24 | b[25]<<16 | b[26]<<8 | b[27]) - 2082844800LL;
@@ -1301,18 +1301,18 @@
 	v->lowestRecPPEM = b[46]<<8 | b[47];
 	s16int fontDirectionHint = b[48]<<8 | b[49];
 	if(fontDirectionHint < -2 || fontDirectionHint > 2){
-		werrstr("%s: invalid value: %d (0x%ux)", "fontDirectionHint", fontDirectionHint, fontDirectionHint);
+		werrstr("%s: invalid value: %d (%#ux)", "fontDirectionHint", fontDirectionHint, fontDirectionHint);
 		goto err;
 	}
 	v->indexToLocFormat = b[50]<<8 | b[51];
 	o->indexToLocFormat = v->indexToLocFormat;
 	if(v->indexToLocFormat > 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "indexToLocFormat", v->indexToLocFormat, v->indexToLocFormat);
+		werrstr("%s: invalid value: %d (%#ux)", "indexToLocFormat", v->indexToLocFormat, v->indexToLocFormat);
 		goto err;
 	}
 	s16int glyphDataFormat = b[52]<<8 | b[53];
 	if(glyphDataFormat != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "glyphDataFormat", glyphDataFormat, glyphDataFormat);
+		werrstr("%s: invalid value: %d (%#ux)", "glyphDataFormat", glyphDataFormat, glyphDataFormat);
 		goto err;
 	}
 	return 0;
@@ -1324,16 +1324,16 @@
 void
 print_TableHead(Otfile *f, int indent, Otf *o, TableHead *v)
 {
-	f->print(f->aux, "%*s%s: %#x%s%s%s%s%s%s%s%s%s\n", indent, "", "flags", v->flags, (v->flags&HEAD_FL_BASELINE_Y_0)?" HEAD_FL_BASELINE_Y_0":"", (v->flags&HEAD_FL_LEFT_SIDEBEARING_X_0)?" HEAD_FL_LEFT_SIDEBEARING_X_0":"", (v->flags&HEAD_FL_INSTR_DEP_POINT_SZ)?" HEAD_FL_INSTR_DEP_POINT_SZ":"", (v->flags&HEAD_FL_FORCE_PPEM_INT)?" HEAD_FL_FORCE_PPEM_INT":"", (v->flags&HEAD_FL_INSTR_ALT_ADVANCE_WIDTH)?" HEAD_FL_INSTR_ALT_ADVANCE_WIDTH":"", (v->flags&HEAD_FL_LOSSLESS)?" HEAD_FL_LOSSLESS":"", (v->flags&HEAD_FL_CONVERTED)?" HEAD_FL_CONVERTED":"", (v->flags&HEAD_FL_CLEARTYPE)?" HEAD_FL_CLEARTYPE":"", (v->flags&HEAD_FL_LAST_RESORT)?" HEAD_FL_LAST_RESORT":"");
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "unitsPerEm", v->unitsPerEm);
-	f->print(f->aux, "%*s%s: %s\n", indent, "", "created", fmttime(v->created));
-	f->print(f->aux, "%*s%s: %s\n", indent, "", "modified", fmttime(v->modified));
+	f->print(f->aux, "%*s%s: %#ux%s%s%s%s%s%s%s%s%s\n", indent, "", "flags", v->flags, (v->flags&HEAD_FL_BASELINE_Y_0)?" HEAD_FL_BASELINE_Y_0":"", (v->flags&HEAD_FL_LEFT_SIDEBEARING_X_0)?" HEAD_FL_LEFT_SIDEBEARING_X_0":"", (v->flags&HEAD_FL_INSTR_DEP_POINT_SZ)?" HEAD_FL_INSTR_DEP_POINT_SZ":"", (v->flags&HEAD_FL_FORCE_PPEM_INT)?" HEAD_FL_FORCE_PPEM_INT":"", (v->flags&HEAD_FL_INSTR_ALT_ADVANCE_WIDTH)?" HEAD_FL_INSTR_ALT_ADVANCE_WIDTH":"", (v->flags&HEAD_FL_LOSSLESS)?" HEAD_FL_LOSSLESS":"", (v->flags&HEAD_FL_CONVERTED)?" HEAD_FL_CONVERTED":"", (v->flags&HEAD_FL_CLEARTYPE)?" HEAD_FL_CLEARTYPE":"", (v->flags&HEAD_FL_LAST_RESORT)?" HEAD_FL_LAST_RESORT":"");
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "unitsPerEm", v->unitsPerEm);
+	f->print(f->aux, "%*s%s: %τ\n", indent, "", "created", fmttime(v->created));
+	f->print(f->aux, "%*s%s: %τ\n", indent, "", "modified", fmttime(v->modified));
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "xMin", v->xMin);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "yMin", v->yMin);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "xMax", v->xMax);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "yMax", v->yMax);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "macStyle", v->macStyle);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "lowestRecPPEM", v->lowestRecPPEM);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "macStyle", v->macStyle);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "lowestRecPPEM", v->lowestRecPPEM);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "indexToLocFormat", v->indexToLocFormat);
 	USED(o);
 }
@@ -1346,12 +1346,12 @@
 		goto err;
 	v->majorVersion = b[0]<<8 | b[1];
 	if(v->majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", v->majorVersion, v->majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", v->majorVersion, v->majorVersion);
 		goto err;
 	}
 	v->minorVersion = b[2]<<8 | b[3];
 	if(v->minorVersion != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", v->minorVersion, v->minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", v->minorVersion, v->minorVersion);
 		goto err;
 	}
 	v->ascender = b[4]<<8 | b[5];
@@ -1366,7 +1366,7 @@
 	v->caretOffset = b[22]<<8 | b[23];
 	v->metricDataFormat = b[32]<<8 | b[33];
 	if(v->metricDataFormat != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "metricDataFormat", v->metricDataFormat, v->metricDataFormat);
+		werrstr("%s: invalid value: %d (%#ux)", "metricDataFormat", v->metricDataFormat, v->metricDataFormat);
 		goto err;
 	}
 	v->numberOfHMetrics = b[34]<<8 | b[35];
@@ -1380,12 +1380,12 @@
 void
 print_TableHhea(Otfile *f, int indent, Otf *o, TableHhea *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "majorVersion", v->majorVersion);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "minorVersion", v->minorVersion);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "majorVersion", v->majorVersion);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "minorVersion", v->minorVersion);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "ascender", v->ascender);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "descender", v->descender);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "lineGap", v->lineGap);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "advanceWidthMax", v->advanceWidthMax);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "advanceWidthMax", v->advanceWidthMax);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "minLeftSideBearing", v->minLeftSideBearing);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "minRightSideBearing", v->minRightSideBearing);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "xMaxExtent", v->xMaxExtent);
@@ -1393,7 +1393,7 @@
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "caretSlopeRun", v->caretSlopeRun);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "caretOffset", v->caretOffset);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "metricDataFormat", v->metricDataFormat);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numberOfHMetrics", v->numberOfHMetrics);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numberOfHMetrics", v->numberOfHMetrics);
 	USED(o);
 }
 
@@ -1454,7 +1454,7 @@
 void
 print_LongHorMetric(Otfile *f, int indent, Otf *o, LongHorMetric *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "advanceWidth", v->advanceWidth);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "advanceWidth", v->advanceWidth);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "lsb", v->lsb);
 	USED(o);
 }
@@ -1467,7 +1467,7 @@
 		goto err;
 	u32int version = b[0]<<24 | b[1]<<16 | b[2]<<8 | b[3];
 	if(version != 20480 && version != 0x10000){
-		werrstr("%s: invalid value: %d (0x%ux)", "version", version, version);
+		werrstr("%s: invalid value: %d (%#ux)", "version", version, version);
 		goto err;
 	}
 	v->numGlyphs = b[4]<<8 | b[5];
@@ -1481,7 +1481,7 @@
 void
 print_TableMaxp(Otfile *f, int indent, Otf *o, TableMaxp *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numGlyphs", v->numGlyphs);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numGlyphs", v->numGlyphs);
 	USED(o);
 }
 
@@ -1524,7 +1524,7 @@
 		goto err;
 	u32int version = b[0]<<24 | b[1]<<16 | b[2]<<8 | b[3];
 	if(version != 0x10000 && version != 0x20000 && version != 0x25000 && version != 0x30000){
-		werrstr("%s: invalid value: %d (0x%ux)", "version", version, version);
+		werrstr("%s: invalid value: %d (%#ux)", "version", version, version);
 		goto err;
 	}
 	v->italicAngle = (b[4]<<24 | b[5]<<16 | b[6]<<8 | b[7])/65536.0f;
@@ -1543,7 +1543,7 @@
 	f->print(f->aux, "%*s%s: %g\n", indent, "", "italicAngle", v->italicAngle);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "underlinePosition", v->underlinePosition);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "underlineThickness", v->underlineThickness);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "isFixedPitch", v->isFixedPitch);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "isFixedPitch", v->isFixedPitch);
 	USED(o);
 }
 
@@ -1579,12 +1579,12 @@
 void
 print_NameRecord(Otfile *f, int indent, Otf *o, NameRecord *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "platformID", v->platformID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "encodingID", v->encodingID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "languageID", v->languageID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "nameID", v->nameID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "stringLength", v->stringLength);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "stringOffset", v->stringOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "platformID", v->platformID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "encodingID", v->encodingID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "languageID", v->languageID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "nameID", v->nameID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "stringLength", v->stringLength);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "stringOffset", v->stringOffset);
 	f->print(f->aux, "%*s%s: %s\n", indent, "", "string", v->string);
 	USED(o);
 }
@@ -1616,8 +1616,8 @@
 void
 print_LangTagRecord(Otfile *f, int indent, Otf *o, LangTagRecord *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "langTagOffset", v->langTagOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "langTagOffset", v->langTagOffset);
 	f->print(f->aux, "%*s%s: %s\n", indent, "", "langTag", v->langTag);
 	USED(o);
 }
@@ -1630,7 +1630,7 @@
 		goto err;
 	v->version = b[0]<<8 | b[1];
 	if(v->version != 0 && v->version != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "version", v->version, v->version);
+		werrstr("%s: invalid value: %d (%#ux)", "version", v->version, v->version);
 		goto err;
 	}
 	v->count = b[2]<<8 | b[3];
@@ -1660,15 +1660,15 @@
 void
 print_TableName(Otfile *f, int indent, Otf *o, TableName *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "version", v->version);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "count", v->count);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "storageOffset", v->storageOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "version", v->version);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "count", v->count);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "storageOffset", v->storageOffset);
 	for(int i = 0; i < v->count; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "nameRecord", i);
 		print_NameRecord(f, indent+indentΔ, o, &v->nameRecord[i]);
 	}
 	if(v->version >= 1)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "langTagCount", v->langTagCount);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "langTagCount", v->langTagCount);
 	if(v->version >= 1){
 		for(int i = 0; i < v->langTagCount; i++){
 			f->print(f->aux, "%*s%s[%d]:\n", indent, "", "langTagRecord", i);
@@ -1701,14 +1701,14 @@
 void
 print_BigGlyphMetrics(Otfile *f, int indent, Otf *o, BigGlyphMetrics *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "height", v->height);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "width", v->width);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "height", v->height);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "width", v->width);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "horiBearingX", v->horiBearingX);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "horiBearingY", v->horiBearingY);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "horiAdvance", v->horiAdvance);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "horiAdvance", v->horiAdvance);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "vertBearingX", v->vertBearingX);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "vertBearingY", v->vertBearingY);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "vertAdvance", v->vertAdvance);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "vertAdvance", v->vertAdvance);
 	USED(o);
 }
 
@@ -1732,11 +1732,11 @@
 void
 print_SmallGlyphMetrics(Otfile *f, int indent, Otf *o, SmallGlyphMetrics *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "height", v->height);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "width", v->width);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "height", v->height);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "width", v->width);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "bearingX", v->bearingX);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "bearingY", v->bearingY);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "advance", v->advance);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "advance", v->advance);
 	USED(o);
 }
 
@@ -1767,7 +1767,7 @@
 {
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "ascender", v->ascender);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "descender", v->descender);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "widthMax", v->widthMax);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "widthMax", v->widthMax);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "caretSlopeNumerator", v->caretSlopeNumerator);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "caretSlopeDenumerator", v->caretSlopeDenumerator);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "caretOffset", v->caretOffset);
@@ -1797,7 +1797,7 @@
 print_IndexSubtable1(Otfile *f, int indent, Otf *o, IndexSubtable1 *v)
 {
 	for(int i = 0; i < ((o->lastGlyphIndex-o->firstGlyphIndex)+2); i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "sbitOffsets", i, v->sbitOffsets[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "sbitOffsets", i, v->sbitOffsets[i]);
 	USED(o);
 }
 
@@ -1821,7 +1821,7 @@
 void
 print_IndexSubtable2(Otfile *f, int indent, Otf *o, IndexSubtable2 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "imageSize", v->imageSize);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "imageSize", v->imageSize);
 	f->print(f->aux, "%*s%s:\n", indent, "", "bigMetrics");
 	print_BigGlyphMetrics(f, indent+indentΔ, o, &v->bigMetrics);
 	USED(o);
@@ -1846,7 +1846,7 @@
 print_IndexSubtable3(Otfile *f, int indent, Otf *o, IndexSubtable3 *v)
 {
 	for(int i = 0; i < ((o->lastGlyphIndex-o->firstGlyphIndex)+2); i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "sbitOffsets", i, v->sbitOffsets[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "sbitOffsets", i, v->sbitOffsets[i]);
 	USED(o);
 }
 
@@ -1867,8 +1867,8 @@
 void
 print_GlyphIdOffsetPair(Otfile *f, int indent, Otf *o, GlyphIdOffsetPair *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "glyphID", v->glyphID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "sbitOffset", v->sbitOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "glyphID", v->glyphID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "sbitOffset", v->sbitOffset);
 	USED(o);
 }
 
@@ -1892,7 +1892,7 @@
 void
 print_IndexSubtable4(Otfile *f, int indent, Otf *o, IndexSubtable4 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numGlyphs", v->numGlyphs);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numGlyphs", v->numGlyphs);
 	for(int i = 0; i < (v->numGlyphs+1); i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "glyphArray", i);
 		print_GlyphIdOffsetPair(f, indent+indentΔ, o, &v->glyphArray[i]);
@@ -1928,12 +1928,12 @@
 void
 print_IndexSubtable5(Otfile *f, int indent, Otf *o, IndexSubtable5 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "imageSize", v->imageSize);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "imageSize", v->imageSize);
 	f->print(f->aux, "%*s%s:\n", indent, "", "bigMetrics");
 	print_BigGlyphMetrics(f, indent+indentΔ, o, &v->bigMetrics);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numGlyphs", v->numGlyphs);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numGlyphs", v->numGlyphs);
 	for(int i = 0; i < v->numGlyphs; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "glyphIdArray", i, v->glyphIdArray[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "glyphIdArray", i, v->glyphIdArray[i]);
 	USED(o);
 }
 
@@ -1945,7 +1945,7 @@
 		goto err;
 	v->indexFormat = b[0]<<8 | b[1];
 	if(v->indexFormat < 1 || v->indexFormat > 5){
-		werrstr("%s: invalid value: %d (0x%ux)", "indexFormat", v->indexFormat, v->indexFormat);
+		werrstr("%s: invalid value: %d (%#ux)", "indexFormat", v->indexFormat, v->indexFormat);
 		goto err;
 	}
 	v->imageFormat = b[2]<<8 | b[3];
@@ -1989,9 +1989,9 @@
 void
 print_IndexSubtable(Otfile *f, int indent, Otf *o, IndexSubtable *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "indexFormat", v->indexFormat);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "imageFormat", v->imageFormat);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "imageDataOffset", v->imageDataOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "indexFormat", v->indexFormat);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "imageFormat", v->imageFormat);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "imageDataOffset", v->imageDataOffset);
 	if(v->indexFormat == 1){
 		f->print(f->aux, "%*s%s:\n", indent, "", "sub1");
 		print_IndexSubtable1(f, indent+indentΔ, o, &v->sub1);
@@ -2046,9 +2046,9 @@
 void
 print_IndexSubtableRecord(Otfile *f, int indent, Otf *o, IndexSubtableRecord *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "firstGlyphIndex", v->firstGlyphIndex);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "lastGlyphIndex", v->lastGlyphIndex);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "indexSubtableOffset", v->indexSubtableOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "firstGlyphIndex", v->firstGlyphIndex);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "lastGlyphIndex", v->lastGlyphIndex);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "indexSubtableOffset", v->indexSubtableOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "indexSubtable");
 	if(v->indexSubtable != nil)
 		print_IndexSubtable(f, indent+indentΔ, o, v->indexSubtable);
@@ -2099,19 +2099,19 @@
 void
 print_BitmapSize(Otfile *f, int indent, Otf *o, BitmapSize *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "indexSubtableListOffset", v->indexSubtableListOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "indexSubtableListSize", v->indexSubtableListSize);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numberOfIndexSubtables", v->numberOfIndexSubtables);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "indexSubtableListOffset", v->indexSubtableListOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "indexSubtableListSize", v->indexSubtableListSize);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numberOfIndexSubtables", v->numberOfIndexSubtables);
 	f->print(f->aux, "%*s%s:\n", indent, "", "hori");
 	print_SbitLineMetrics(f, indent+indentΔ, o, &v->hori);
 	f->print(f->aux, "%*s%s:\n", indent, "", "vert");
 	print_SbitLineMetrics(f, indent+indentΔ, o, &v->vert);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "startGlyphIndex", v->startGlyphIndex);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "endGlyphIndex", v->endGlyphIndex);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "ppemX", v->ppemX);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "ppemY", v->ppemY);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "bitDepth", v->bitDepth);
-	f->print(f->aux, "%*s%s: %#x%s%s\n", indent, "", "flags", v->flags, (v->flags&BITMAPSIZE_FL_HORIZONTAL_METRICS)?" BITMAPSIZE_FL_HORIZONTAL_METRICS":"", (v->flags&BITMAPSIZE_FL_VERTICAL_METRICS)?" BITMAPSIZE_FL_VERTICAL_METRICS":"");
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "startGlyphIndex", v->startGlyphIndex);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "endGlyphIndex", v->endGlyphIndex);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "ppemX", v->ppemX);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "ppemY", v->ppemY);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "bitDepth", v->bitDepth);
+	f->print(f->aux, "%*s%s: %#ux%s%s\n", indent, "", "flags", v->flags, (v->flags&BITMAPSIZE_FL_HORIZONTAL_METRICS)?" BITMAPSIZE_FL_HORIZONTAL_METRICS":"", (v->flags&BITMAPSIZE_FL_VERTICAL_METRICS)?" BITMAPSIZE_FL_VERTICAL_METRICS":"");
 	for(int i = 0; i < v->numberOfIndexSubtables; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "indexSubtableList", i);
 		print_IndexSubtableRecord(f, indent+indentΔ, o, &v->indexSubtableList[i]);
@@ -2127,12 +2127,12 @@
 		goto err;
 	v->majorVersion = b[0]<<8 | b[1];
 	if(v->majorVersion != 2){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", v->majorVersion, v->majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", v->majorVersion, v->majorVersion);
 		goto err;
 	}
 	u16int minorVersion = b[2]<<8 | b[3];
 	if(minorVersion != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", minorVersion, minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", minorVersion, minorVersion);
 		goto err;
 	}
 	return 0;
@@ -2144,7 +2144,7 @@
 void
 print_TableEBDT(Otfile *f, int indent, Otf *o, TableEBDT *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "majorVersion", v->majorVersion);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "majorVersion", v->majorVersion);
 	USED(o);
 }
 
@@ -2156,12 +2156,12 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 2){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	u16int minorVersion = b[2]<<8 | b[3];
 	if(minorVersion != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", minorVersion, minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", minorVersion, minorVersion);
 		goto err;
 	}
 	v->numSizes = b[4]<<24 | b[5]<<16 | b[6]<<8 | b[7];
@@ -2178,7 +2178,7 @@
 void
 print_TableEBLC(Otfile *f, int indent, Otf *o, TableEBLC *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numSizes", v->numSizes);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numSizes", v->numSizes);
 	for(int i = 0; i < v->numSizes; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "bitmapSizes", i);
 		print_BitmapSize(f, indent+indentΔ, o, &v->bitmapSizes[i]);
@@ -2208,10 +2208,10 @@
 void
 print_AttachList(Otfile *f, int indent, Otf *o, AttachList *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "coverageOffset", v->coverageOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "glyphCount", v->glyphCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "coverageOffset", v->coverageOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "glyphCount", v->glyphCount);
 	for(int i = 0; i < v->glyphCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "attachPointOffsets", i, v->attachPointOffsets[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "attachPointOffsets", i, v->attachPointOffsets[i]);
 	USED(o);
 }
 
@@ -2236,9 +2236,9 @@
 void
 print_AttachPoint(Otfile *f, int indent, Otf *o, AttachPoint *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "pointCount", v->pointCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "pointCount", v->pointCount);
 	for(int i = 0; i < v->pointCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "pointIndices", i, v->pointIndices[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "pointIndices", i, v->pointIndices[i]);
 	USED(o);
 }
 
@@ -2264,10 +2264,10 @@
 void
 print_LigCaretList(Otfile *f, int indent, Otf *o, LigCaretList *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "coverageOffset", v->coverageOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "ligGlyphCount", v->ligGlyphCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "coverageOffset", v->coverageOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "ligGlyphCount", v->ligGlyphCount);
 	for(int i = 0; i < v->ligGlyphCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "ligGlyphOffsets", i, v->ligGlyphOffsets[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "ligGlyphOffsets", i, v->ligGlyphOffsets[i]);
 	USED(o);
 }
 
@@ -2292,9 +2292,9 @@
 void
 print_LigGlyph(Otfile *f, int indent, Otf *o, LigGlyph *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "caretCount", v->caretCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "caretCount", v->caretCount);
 	for(int i = 0; i < v->caretCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "caretValueOffsets", i, v->caretValueOffsets[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "caretValueOffsets", i, v->caretValueOffsets[i]);
 	USED(o);
 }
 
@@ -2306,7 +2306,7 @@
 		goto err;
 	v->format = b[0]<<8 | b[1];
 	if(v->format < 1 || v->format > 3){
-		werrstr("%s: invalid value: %d (0x%ux)", "format", v->format, v->format);
+		werrstr("%s: invalid value: %d (%#ux)", "format", v->format, v->format);
 		goto err;
 	}
 	if(v->format == 1 || v->format == 3){
@@ -2333,13 +2333,13 @@
 void
 print_CaretValue(Otfile *f, int indent, Otf *o, CaretValue *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "format", v->format);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "format", v->format);
 	if(v->format == 1 || v->format == 3)
 		f->print(f->aux, "%*s%s: %d\n", indent, "", "coordinate", v->coordinate);
 	if(v->format == 2)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "caretValuePointIndex", v->caretValuePointIndex);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "caretValuePointIndex", v->caretValuePointIndex);
 	if(v->format == 3)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "deviceOffset", v->deviceOffset);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "deviceOffset", v->deviceOffset);
 	USED(o);
 }
 
@@ -2370,10 +2370,10 @@
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "yPlacement", v->yPlacement);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "xAdvance", v->xAdvance);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "yAdvance", v->yAdvance);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "xPlaDeviceOffset", v->xPlaDeviceOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "yPlaDeviceOffset", v->yPlaDeviceOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "xAdvDeviceOffset", v->xAdvDeviceOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "yAdvDeviceOffset", v->yAdvDeviceOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "xPlaDeviceOffset", v->xPlaDeviceOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "yPlaDeviceOffset", v->yPlaDeviceOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "xAdvDeviceOffset", v->xAdvDeviceOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "yAdvDeviceOffset", v->yAdvDeviceOffset);
 	USED(o);
 }
 
@@ -2385,7 +2385,7 @@
 		goto err;
 	v->format = b[0]<<8 | b[1];
 	if(v->format != 1 && v->format != 2){
-		werrstr("%s: invalid value: %d (0x%ux)", "format", v->format, v->format);
+		werrstr("%s: invalid value: %d (%#ux)", "format", v->format, v->format);
 		goto err;
 	}
 	v->coverageOffset = b[2]<<8 | b[3];
@@ -2416,15 +2416,15 @@
 void
 print_SinglePos(Otfile *f, int indent, Otf *o, SinglePos *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "format", v->format);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "coverageOffset", v->coverageOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "valueFormat", v->valueFormat);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "format", v->format);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "coverageOffset", v->coverageOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "valueFormat", v->valueFormat);
 	if(v->format == 1){
 		f->print(f->aux, "%*s%s:\n", indent, "", "valueRecord");
 		print_ValueRecord(f, indent+indentΔ, o, &v->valueRecord);
 	}
 	if(v->format == 2)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "valueCount", v->valueCount);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "valueCount", v->valueCount);
 	if(v->format == 2){
 		for(int i = 0; i < v->valueCount; i++){
 			f->print(f->aux, "%*s%s[%d]:\n", indent, "", "valueRecords", i);
@@ -2442,12 +2442,12 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	v->minorVersion = b[2]<<8 | b[3];
 	if(v->minorVersion != 0 && v->minorVersion != 2 && v->minorVersion != 3){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", v->minorVersion, v->minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", v->minorVersion, v->minorVersion);
 		goto err;
 	}
 	v->glyphClassDefOffset = b[4]<<8 | b[5];
@@ -2473,15 +2473,15 @@
 void
 print_TableGDEF(Otfile *f, int indent, Otf *o, TableGDEF *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "minorVersion", v->minorVersion);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "glyphClassDefOffset", v->glyphClassDefOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "attachListOffset", v->attachListOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "ligCaretListOffset", v->ligCaretListOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "markAttachClassDefOffset", v->markAttachClassDefOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "minorVersion", v->minorVersion);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "glyphClassDefOffset", v->glyphClassDefOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "attachListOffset", v->attachListOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "ligCaretListOffset", v->ligCaretListOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "markAttachClassDefOffset", v->markAttachClassDefOffset);
 	if(v->minorVersion >= 2)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "markGlyphSetsDefOffset", v->markGlyphSetsDefOffset);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "markGlyphSetsDefOffset", v->markGlyphSetsDefOffset);
 	if(v->minorVersion >= 3)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "itemVarStoreOffset", v->itemVarStoreOffset);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "itemVarStoreOffset", v->itemVarStoreOffset);
 	USED(o);
 }
 
@@ -2507,10 +2507,10 @@
 void
 print_LangSys(Otfile *f, int indent, Otf *o, LangSys *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "requiredFeatureIndex", v->requiredFeatureIndex);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "featureIndexCount", v->featureIndexCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "requiredFeatureIndex", v->requiredFeatureIndex);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "featureIndexCount", v->featureIndexCount);
 	for(int i = 0; i < v->featureIndexCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "featureIndices", i, v->featureIndices[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "featureIndices", i, v->featureIndices[i]);
 	USED(o);
 }
 
@@ -2543,7 +2543,7 @@
 print_LangSysRecord(Otfile *f, int indent, Otf *o, LangSysRecord *v)
 {
 	f->print(f->aux, "%*s%s: %c%c%c%c\n", indent, "", "langSysTag", v->langSysTag>>24, v->langSysTag>>16, v->langSysTag>>8, v->langSysTag>>0);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "langSysOffset", v->langSysOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "langSysOffset", v->langSysOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "langSys");
 	if(v->langSys != nil)
 		print_LangSys(f, indent+indentΔ, o, v->langSys);
@@ -2582,8 +2582,8 @@
 void
 print_Script(Otfile *f, int indent, Otf *o, Script *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "defaultLangSysOffset", v->defaultLangSysOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "langSysCount", v->langSysCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "defaultLangSysOffset", v->defaultLangSysOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "langSysCount", v->langSysCount);
 	for(int i = 0; i < v->langSysCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "langSysRecords", i);
 		print_LangSysRecord(f, indent+indentΔ, o, &v->langSysRecords[i]);
@@ -2623,7 +2623,7 @@
 print_ScriptRecord(Otfile *f, int indent, Otf *o, ScriptRecord *v)
 {
 	f->print(f->aux, "%*s%s: %c%c%c%c\n", indent, "", "scriptTag", v->scriptTag>>24, v->scriptTag>>16, v->scriptTag>>8, v->scriptTag>>0);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "scriptOffset", v->scriptOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "scriptOffset", v->scriptOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "script");
 	if(v->script != nil)
 		print_Script(f, indent+indentΔ, o, v->script);
@@ -2650,7 +2650,7 @@
 void
 print_ScriptList(Otfile *f, int indent, Otf *o, ScriptList *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "scriptCount", v->scriptCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "scriptCount", v->scriptCount);
 	for(int i = 0; i < v->scriptCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "scriptRecords", i);
 		print_ScriptRecord(f, indent+indentΔ, o, &v->scriptRecords[i]);
@@ -2680,10 +2680,10 @@
 void
 print_Feature(Otfile *f, int indent, Otf *o, Feature *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "featureParamsOffset", v->featureParamsOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "lookupIndexCount", v->lookupIndexCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "featureParamsOffset", v->featureParamsOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "lookupIndexCount", v->lookupIndexCount);
 	for(int i = 0; i < v->lookupIndexCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "lookupListIndices", i, v->lookupListIndices[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "lookupListIndices", i, v->lookupListIndices[i]);
 	USED(o);
 }
 
@@ -2716,7 +2716,7 @@
 print_FeatureRecord(Otfile *f, int indent, Otf *o, FeatureRecord *v)
 {
 	f->print(f->aux, "%*s%s: %c%c%c%c\n", indent, "", "featureTag", v->featureTag>>24, v->featureTag>>16, v->featureTag>>8, v->featureTag>>0);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "featureOffset", v->featureOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "featureOffset", v->featureOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "feature");
 	if(v->feature != nil)
 		print_Feature(f, indent+indentΔ, o, v->feature);
@@ -2743,7 +2743,7 @@
 void
 print_FeatureList(Otfile *f, int indent, Otf *o, FeatureList *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "featureCount", v->featureCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "featureCount", v->featureCount);
 	for(int i = 0; i < v->featureCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "featureRecords", i);
 		print_FeatureRecord(f, indent+indentΔ, o, &v->featureRecords[i]);
@@ -2777,12 +2777,12 @@
 void
 print_Lookup(Otfile *f, int indent, Otf *o, Lookup *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "lookupType", v->lookupType);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "lookupFlag", v->lookupFlag);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "subTableCount", v->subTableCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "lookupType", v->lookupType);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "lookupFlag", v->lookupFlag);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "subTableCount", v->subTableCount);
 	for(int i = 0; i < v->subTableCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "subtableOffsets", i, v->subtableOffsets[i]);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "markFilteringSet", v->markFilteringSet);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "subtableOffsets", i, v->subtableOffsets[i]);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "markFilteringSet", v->markFilteringSet);
 	USED(o);
 }
 
@@ -2807,9 +2807,9 @@
 void
 print_LookupList(Otfile *f, int indent, Otf *o, LookupList *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "lookupCount", v->lookupCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "lookupCount", v->lookupCount);
 	for(int i = 0; i < v->lookupCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "lookupOffsets", i, v->lookupOffsets[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "lookupOffsets", i, v->lookupOffsets[i]);
 	USED(o);
 }
 
@@ -2821,12 +2821,12 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	v->minorVersion = b[2]<<8 | b[3];
 	if(v->minorVersion > 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", v->minorVersion, v->minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", v->minorVersion, v->minorVersion);
 		goto err;
 	}
 	v->scriptListOffset = b[4]<<8 | b[5];
@@ -2879,12 +2879,12 @@
 void
 print_TableGPOS(Otfile *f, int indent, Otf *o, TableGPOS *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "minorVersion", v->minorVersion);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "scriptListOffset", v->scriptListOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "featureListOffset", v->featureListOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "lookupListOffset", v->lookupListOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "minorVersion", v->minorVersion);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "scriptListOffset", v->scriptListOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "featureListOffset", v->featureListOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "lookupListOffset", v->lookupListOffset);
 	if(v->minorVersion == 1)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "featureVariationsOffset", v->featureVariationsOffset);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "featureVariationsOffset", v->featureVariationsOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "scriptList");
 	if(v->scriptList != nil)
 		print_ScriptList(f, indent+indentΔ, o, v->scriptList);
@@ -2905,12 +2905,12 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	v->minorVersion = b[2]<<8 | b[3];
 	if(v->minorVersion > 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", v->minorVersion, v->minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", v->minorVersion, v->minorVersion);
 		goto err;
 	}
 	v->scriptListOffset = b[4]<<8 | b[5];
@@ -2952,12 +2952,12 @@
 void
 print_TableGSUB(Otfile *f, int indent, Otf *o, TableGSUB *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "minorVersion", v->minorVersion);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "scriptListOffset", v->scriptListOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "featureListOffset", v->featureListOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "lookupListOffset", v->lookupListOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "minorVersion", v->minorVersion);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "scriptListOffset", v->scriptListOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "featureListOffset", v->featureListOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "lookupListOffset", v->lookupListOffset);
 	if(v->minorVersion == 1)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "featureVariationsOffset", v->featureVariationsOffset);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "featureVariationsOffset", v->featureVariationsOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "scriptList");
 	if(v->scriptList != nil)
 		print_ScriptList(f, indent+indentΔ, o, v->scriptList);
@@ -2985,7 +2985,7 @@
 print_MathValueRecord(Otfile *f, int indent, Otf *o, MathValueRecord *v)
 {
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "value", v->value);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "deviceOffset", v->deviceOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "deviceOffset", v->deviceOffset);
 	USED(o);
 }
 
@@ -3217,8 +3217,8 @@
 {
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "scriptPercentScaleDown", v->scriptPercentScaleDown);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "scriptScriptPercentScaleDown", v->scriptScriptPercentScaleDown);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "delimitedSubFormulaMinHeight", v->delimitedSubFormulaMinHeight);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "displayOperatorMinHeight", v->displayOperatorMinHeight);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "delimitedSubFormulaMinHeight", v->delimitedSubFormulaMinHeight);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "displayOperatorMinHeight", v->displayOperatorMinHeight);
 	f->print(f->aux, "%*s%s:\n", indent, "", "mathLeading");
 	print_MathValueRecord(f, indent+indentΔ, o, &v->mathLeading);
 	f->print(f->aux, "%*s%s:\n", indent, "", "axisHeight");
@@ -3346,8 +3346,8 @@
 void
 print_MathItalicsCorrectionInfo(Otfile *f, int indent, Otf *o, MathItalicsCorrectionInfo *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "italicsCorrectionCoverageOffset", v->italicsCorrectionCoverageOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "italicsCorrectionCount", v->italicsCorrectionCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "italicsCorrectionCoverageOffset", v->italicsCorrectionCoverageOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "italicsCorrectionCount", v->italicsCorrectionCount);
 	for(int i = 0; i < v->italicsCorrectionCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "italicsCorrection", i);
 		print_MathValueRecord(f, indent+indentΔ, o, &v->italicsCorrection[i]);
@@ -3376,8 +3376,8 @@
 void
 print_MathTopAccentAttachment(Otfile *f, int indent, Otf *o, MathTopAccentAttachment *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "topAccentCoverageOffset", v->topAccentCoverageOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "topAccentAttachmentCount", v->topAccentAttachmentCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "topAccentCoverageOffset", v->topAccentCoverageOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "topAccentAttachmentCount", v->topAccentAttachmentCount);
 	for(int i = 0; i < v->topAccentAttachmentCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "topAccentAttachment", i);
 		print_MathValueRecord(f, indent+indentΔ, o, &v->topAccentAttachment[i]);
@@ -3404,10 +3404,10 @@
 void
 print_MathKernInfoRecord(Otfile *f, int indent, Otf *o, MathKernInfoRecord *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "topRightMathKernOffset", v->topRightMathKernOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "topLeftMathKernOffset", v->topLeftMathKernOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "bottomRightMathKernOffset", v->bottomRightMathKernOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "bottomLeftMathKernOffset", v->bottomLeftMathKernOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "topRightMathKernOffset", v->topRightMathKernOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "topLeftMathKernOffset", v->topLeftMathKernOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "bottomRightMathKernOffset", v->bottomRightMathKernOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "bottomLeftMathKernOffset", v->bottomLeftMathKernOffset);
 	USED(o);
 }
 
@@ -3432,8 +3432,8 @@
 void
 print_MathKernInfo(Otfile *f, int indent, Otf *o, MathKernInfo *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "mathKernCoverageOffset", v->mathKernCoverageOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "mathKernCount", v->mathKernCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "mathKernCoverageOffset", v->mathKernCoverageOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "mathKernCount", v->mathKernCount);
 	for(int i = 0; i < v->mathKernCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "mathKernInfoRecords", i);
 		print_MathKernInfoRecord(f, indent+indentΔ, o, &v->mathKernInfoRecords[i]);
@@ -3465,7 +3465,7 @@
 void
 print_MathKern(Otfile *f, int indent, Otf *o, MathKern *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "heightCount", v->heightCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "heightCount", v->heightCount);
 	for(int i = 0; i < v->heightCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "correctionHeight", i);
 		print_MathValueRecord(f, indent+indentΔ, o, &v->correctionHeight[i]);
@@ -3498,9 +3498,9 @@
 void
 print_Coverage1(Otfile *f, int indent, Otf *o, Coverage1 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "glyphCount", v->glyphCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "glyphCount", v->glyphCount);
 	for(int i = 0; i < v->glyphCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "glyphArray", i, v->glyphArray[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "glyphArray", i, v->glyphArray[i]);
 	USED(o);
 }
 
@@ -3522,9 +3522,9 @@
 void
 print_RangeRecord(Otfile *f, int indent, Otf *o, RangeRecord *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "startGlyphID", v->startGlyphID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "endGlyphID", v->endGlyphID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "startCoverageIndex", v->startCoverageIndex);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "startGlyphID", v->startGlyphID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "endGlyphID", v->endGlyphID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "startCoverageIndex", v->startCoverageIndex);
 	USED(o);
 }
 
@@ -3548,7 +3548,7 @@
 void
 print_Coverage2(Otfile *f, int indent, Otf *o, Coverage2 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "rangeCount", v->rangeCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "rangeCount", v->rangeCount);
 	for(int i = 0; i < v->rangeCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "rangeRecords", i);
 		print_RangeRecord(f, indent+indentΔ, o, &v->rangeRecords[i]);
@@ -3564,7 +3564,7 @@
 		goto err;
 	v->format = b[0]<<8 | b[1];
 	if(v->format != 1 && v->format != 2){
-		werrstr("%s: invalid value: %d (0x%ux)", "format", v->format, v->format);
+		werrstr("%s: invalid value: %d (%#ux)", "format", v->format, v->format);
 		goto err;
 	}
 	if(v->format == 1){
@@ -3588,7 +3588,7 @@
 void
 print_Coverage(Otfile *f, int indent, Otf *o, Coverage *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "format", v->format);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "format", v->format);
 	if(v->format == 1){
 		f->print(f->aux, "%*s%s:\n", indent, "", "cov1");
 		print_Coverage1(f, indent+indentΔ, o, &v->cov1);
@@ -3652,15 +3652,15 @@
 void
 print_MathVariants(Otfile *f, int indent, Otf *o, MathVariants *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "minConnectorOverlap", v->minConnectorOverlap);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "vertGlyphCoverageOffset", v->vertGlyphCoverageOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "horizGlyphCoverageOffset", v->horizGlyphCoverageOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "vertGlyphCount", v->vertGlyphCount);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "horizGlyphCount", v->horizGlyphCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "minConnectorOverlap", v->minConnectorOverlap);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "vertGlyphCoverageOffset", v->vertGlyphCoverageOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "horizGlyphCoverageOffset", v->horizGlyphCoverageOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "vertGlyphCount", v->vertGlyphCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "horizGlyphCount", v->horizGlyphCount);
 	for(int i = 0; i < v->vertGlyphCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "vertGlyphConstructionOffsets", i, v->vertGlyphConstructionOffsets[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "vertGlyphConstructionOffsets", i, v->vertGlyphConstructionOffsets[i]);
 	for(int i = 0; i < v->horizGlyphCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "horizGlyphConstructionOffsets", i, v->horizGlyphConstructionOffsets[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "horizGlyphConstructionOffsets", i, v->horizGlyphConstructionOffsets[i]);
 	f->print(f->aux, "%*s%s:\n", indent, "", "vertGlyphCoverage");
 	if(v->vertGlyphCoverage != nil)
 		print_Coverage(f, indent+indentΔ, o, v->vertGlyphCoverage);
@@ -3733,10 +3733,10 @@
 void
 print_MathGlyphInfo(Otfile *f, int indent, Otf *o, MathGlyphInfo *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "mathItalicsCorrectionInfoOffset", v->mathItalicsCorrectionInfoOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "mathTopAccentAttachmentOffset", v->mathTopAccentAttachmentOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "extendedShapeCoverageOffset", v->extendedShapeCoverageOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "mathKernInfoOffset", v->mathKernInfoOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "mathItalicsCorrectionInfoOffset", v->mathItalicsCorrectionInfoOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "mathTopAccentAttachmentOffset", v->mathTopAccentAttachmentOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "extendedShapeCoverageOffset", v->extendedShapeCoverageOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "mathKernInfoOffset", v->mathKernInfoOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "mathItalicsCorrectionInfo");
 	if(v->mathItalicsCorrectionInfo != nil)
 		print_MathItalicsCorrectionInfo(f, indent+indentΔ, o, v->mathItalicsCorrectionInfo);
@@ -3769,8 +3769,8 @@
 void
 print_MathGlyphVariantRecord(Otfile *f, int indent, Otf *o, MathGlyphVariantRecord *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "variantGlyph", v->variantGlyph);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "advanceMeasurement", v->advanceMeasurement);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "variantGlyph", v->variantGlyph);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "advanceMeasurement", v->advanceMeasurement);
 	USED(o);
 }
 
@@ -3794,11 +3794,11 @@
 void
 print_GlyphPart(Otfile *f, int indent, Otf *o, GlyphPart *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "glyphID", v->glyphID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "startConnectorLength", v->startConnectorLength);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "endConnectorLength", v->endConnectorLength);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "fullAdvance", v->fullAdvance);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "partFlags", v->partFlags);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "glyphID", v->glyphID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "startConnectorLength", v->startConnectorLength);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "endConnectorLength", v->endConnectorLength);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "fullAdvance", v->fullAdvance);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "partFlags", v->partFlags);
 	USED(o);
 }
 
@@ -3828,7 +3828,7 @@
 {
 	f->print(f->aux, "%*s%s:\n", indent, "", "italicsCorrection");
 	print_MathValueRecord(f, indent+indentΔ, o, &v->italicsCorrection);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "partCount", v->partCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "partCount", v->partCount);
 	for(int i = 0; i < v->partCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "partRecords", i);
 		print_GlyphPart(f, indent+indentΔ, o, &v->partRecords[i]);
@@ -3868,8 +3868,8 @@
 void
 print_MathGlyphConstruction(Otfile *f, int indent, Otf *o, MathGlyphConstruction *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "glyphAssemblyOffset", v->glyphAssemblyOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "variantCount", v->variantCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "glyphAssemblyOffset", v->glyphAssemblyOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "variantCount", v->variantCount);
 	for(int i = 0; i < v->variantCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "mathGlyphVariantRecords", i);
 		print_MathGlyphVariantRecord(f, indent+indentΔ, o, &v->mathGlyphVariantRecords[i]);
@@ -3888,12 +3888,12 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	u16int minorVersion = b[2]<<8 | b[3];
 	if(minorVersion != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", minorVersion, minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", minorVersion, minorVersion);
 		goto err;
 	}
 	v->mathConstantsOffset = b[4]<<8 | b[5];
@@ -3941,9 +3941,9 @@
 void
 print_TableMATH(Otfile *f, int indent, Otf *o, TableMATH *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "mathConstantsOffset", v->mathConstantsOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "mathGlyphInfoOffset", v->mathGlyphInfoOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "mathVariantsOffset", v->mathVariantsOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "mathConstantsOffset", v->mathConstantsOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "mathGlyphInfoOffset", v->mathGlyphInfoOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "mathVariantsOffset", v->mathVariantsOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "mathConstants");
 	if(v->mathConstants != nil)
 		print_MathConstants(f, indent+indentΔ, o, v->mathConstants);
@@ -3974,8 +3974,8 @@
 void
 print_KernPair(Otfile *f, int indent, Otf *o, KernPair *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "left", v->left);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "right", v->right);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "left", v->left);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "right", v->right);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "value", v->value);
 	USED(o);
 }
@@ -4003,10 +4003,10 @@
 void
 print_KernSubtable0(Otfile *f, int indent, Otf *o, KernSubtable0 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "nPairs", v->nPairs);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "searchRange", v->searchRange);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "entrySelector", v->entrySelector);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "rangeShift", v->rangeShift);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "nPairs", v->nPairs);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "searchRange", v->searchRange);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "entrySelector", v->entrySelector);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "rangeShift", v->rangeShift);
 	for(int i = 0; i < v->nPairs; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "kernPairs", i);
 		print_KernPair(f, indent+indentΔ, o, &v->kernPairs[i]);
@@ -4036,10 +4036,10 @@
 void
 print_KernClass(Otfile *f, int indent, Otf *o, KernClass *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "firstGlyph", v->firstGlyph);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "nGlyphs", v->nGlyphs);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "firstGlyph", v->firstGlyph);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "nGlyphs", v->nGlyphs);
 	for(int i = 0; i < v->nGlyphs; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "values", i, v->values[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "values", i, v->values[i]);
 	USED(o);
 }
 
@@ -4089,10 +4089,10 @@
 void
 print_KernSubtable2(Otfile *f, int indent, Otf *o, KernSubtable2 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "rowWidth", v->rowWidth);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "leftClassOffset", v->leftClassOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "rightClassOffset", v->rightClassOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "kerningArrayOffset", v->kerningArrayOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "rowWidth", v->rowWidth);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "leftClassOffset", v->leftClassOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "rightClassOffset", v->rightClassOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "kerningArrayOffset", v->kerningArrayOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "leftClass");
 	if(v->leftClass != nil)
 		print_KernClass(f, indent+indentΔ, o, v->leftClass);
@@ -4112,12 +4112,12 @@
 		goto err;
 	u16int version = b[0]<<8 | b[1];
 	if(version != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "version", version, version);
+		werrstr("%s: invalid value: %d (%#ux)", "version", version, version);
 		goto err;
 	}
 	v->length = b[2]<<8 | b[3];
 	if(v->length < 6){
-		werrstr("%s: invalid value: %d (0x%ux)", "length", v->length, v->length);
+		werrstr("%s: invalid value: %d (%#ux)", "length", v->length, v->length);
 		goto err;
 	}
 	v->coverage = b[4]<<8 | b[5];
@@ -4130,8 +4130,8 @@
 void
 print_KernSubtable(Otfile *f, int indent, Otf *o, KernSubtable *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %#x\n", indent, "", "coverage", v->coverage);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %#ux\n", indent, "", "coverage", v->coverage);
 	USED(o);
 }
 
@@ -4143,7 +4143,7 @@
 		goto err;
 	u16int version = b[0]<<8 | b[1];
 	if(version != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "version", version, version);
+		werrstr("%s: invalid value: %d (%#ux)", "version", version, version);
 		goto err;
 	}
 	v->nTables = b[2]<<8 | b[3];
@@ -4160,7 +4160,7 @@
 void
 print_TableKern(Otfile *f, int indent, Otf *o, TableKern *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "nTables", v->nTables);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "nTables", v->nTables);
 	for(int i = 0; i < v->nTables; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "subtables", i);
 		print_KernSubtable(f, indent+indentΔ, o, &v->subtables[i]);
@@ -4197,11 +4197,11 @@
 {
 	if(o->indexToLocFormat == 0){
 		for(int i = 0; i < (o->numGlyphs+1); i++)
-			f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "shortOffsets", i, v->shortOffsets[i]);
+			f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "shortOffsets", i, v->shortOffsets[i]);
 	}
 	if(o->indexToLocFormat == 1){
 		for(int i = 0; i < (o->numGlyphs+1); i++)
-			f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "longOffsets", i, v->longOffsets[i]);
+			f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "longOffsets", i, v->longOffsets[i]);
 	}
 	USED(o);
 }
@@ -4231,8 +4231,8 @@
 	f->print(f->aux, "%*s%s: %g\n", indent, "", "minValue", v->minValue);
 	f->print(f->aux, "%*s%s: %g\n", indent, "", "defaultValue", v->defaultValue);
 	f->print(f->aux, "%*s%s: %g\n", indent, "", "maxValue", v->maxValue);
-	f->print(f->aux, "%*s%s: %#x%s\n", indent, "", "flags", v->flags, (v->flags&VARIATIONAXISRECORD_FL_HIDDEN_AXIS)?" VARIATIONAXISRECORD_FL_HIDDEN_AXIS":"");
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "axisNameID", v->axisNameID);
+	f->print(f->aux, "%*s%s: %#ux%s\n", indent, "", "flags", v->flags, (v->flags&VARIATIONAXISRECORD_FL_HIDDEN_AXIS)?" VARIATIONAXISRECORD_FL_HIDDEN_AXIS":"");
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "axisNameID", v->axisNameID);
 	USED(o);
 }
 
@@ -4284,11 +4284,11 @@
 void
 print_InstanceRecord(Otfile *f, int indent, Otf *o, InstanceRecord *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "subfamilyNameID", v->subfamilyNameID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "subfamilyNameID", v->subfamilyNameID);
 	f->print(f->aux, "%*s%s:\n", indent, "", "coordinates");
 	print_UserTuple(f, indent+indentΔ, o, &v->coordinates);
 	if((o->instanceSize==((o->axisCount*4)+6)))
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "postScriptNameID", v->postScriptNameID);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "postScriptNameID", v->postScriptNameID);
 	USED(o);
 }
 
@@ -4332,12 +4332,12 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	u16int minorVersion = b[2]<<8 | b[3];
 	if(minorVersion != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", minorVersion, minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", minorVersion, minorVersion);
 		goto err;
 	}
 	v->axesArrayOffset = b[4]<<8 | b[5];
@@ -4345,7 +4345,7 @@
 	o->axisCount = v->axisCount;
 	u16int axisSize = b[10]<<8 | b[11];
 	if(axisSize != 20){
-		werrstr("%s: invalid value: %d (0x%ux)", "axisSize", axisSize, axisSize);
+		werrstr("%s: invalid value: %d (%#ux)", "axisSize", axisSize, axisSize);
 		goto err;
 	}
 	v->instanceCount = b[12]<<8 | b[13];
@@ -4372,10 +4372,10 @@
 void
 print_TableFvar(Otfile *f, int indent, Otf *o, TableFvar *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "axesArrayOffset", v->axesArrayOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "axisCount", v->axisCount);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "instanceCount", v->instanceCount);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "instanceSize", v->instanceSize);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "axesArrayOffset", v->axesArrayOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "axisCount", v->axisCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "instanceCount", v->instanceCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "instanceSize", v->instanceSize);
 	f->print(f->aux, "%*s%s:\n", indent, "", "axisInstances");
 	if(v->axisInstances != nil)
 		print_AxisInstances(f, indent+indentΔ, o, v->axisInstances);
@@ -4451,8 +4451,8 @@
 void
 print_VariationRegionList(Otfile *f, int indent, Otf *o, VariationRegionList *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "axisCount", v->axisCount);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "regionCount", v->regionCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "axisCount", v->axisCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "regionCount", v->regionCount);
 	for(int i = 0; i < v->regionCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "variationRegion", i);
 		print_VariationRegion(f, indent+indentΔ, o, &v->variationRegion[i]);
@@ -4483,11 +4483,11 @@
 void
 print_ItemVariationData(Otfile *f, int indent, Otf *o, ItemVariationData *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "itemCount", v->itemCount);
-	f->print(f->aux, "%*s%s: %#x\n", indent, "", "wordDeltaCount", v->wordDeltaCount);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "regionIndexCount", v->regionIndexCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "itemCount", v->itemCount);
+	f->print(f->aux, "%*s%s: %#ux\n", indent, "", "wordDeltaCount", v->wordDeltaCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "regionIndexCount", v->regionIndexCount);
 	for(int i = 0; i < v->regionIndexCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "regionIndexes", i, v->regionIndexes[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "regionIndexes", i, v->regionIndexes[i]);
 	USED(o);
 }
 
@@ -4499,7 +4499,7 @@
 		goto err;
 	u16int format = b[0]<<8 | b[1];
 	if(format != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "format", format, format);
+		werrstr("%s: invalid value: %d (%#ux)", "format", format, format);
 		goto err;
 	}
 	v->variationRegionListOffset = b[2]<<24 | b[3]<<16 | b[4]<<8 | b[5];
@@ -4518,10 +4518,10 @@
 void
 print_ItemVariationStore(Otfile *f, int indent, Otf *o, ItemVariationStore *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "variationRegionListOffset", v->variationRegionListOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "itemVariationDataCount", v->itemVariationDataCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "variationRegionListOffset", v->variationRegionListOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "itemVariationDataCount", v->itemVariationDataCount);
 	for(int i = 0; i < v->itemVariationDataCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "itemVariationDataOffsets", i, v->itemVariationDataOffsets[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "itemVariationDataOffsets", i, v->itemVariationDataOffsets[i]);
 	USED(o);
 }
 
@@ -4533,7 +4533,7 @@
 		goto err;
 	v->format = b[0];
 	if(v->format != 0 && v->format != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "format", v->format, v->format);
+		werrstr("%s: invalid value: %d (%#ux)", "format", v->format, v->format);
 		goto err;
 	}
 	v->entryFormat = b[1];
@@ -4559,13 +4559,13 @@
 void
 print_DeltaSetIndexMap(Otfile *f, int indent, Otf *o, DeltaSetIndexMap *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "format", v->format);
-	f->print(f->aux, "%*s%s: %#x\n", indent, "", "entryFormat", v->entryFormat);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "format", v->format);
+	f->print(f->aux, "%*s%s: %#ux\n", indent, "", "entryFormat", v->entryFormat);
 	if(v->format == 0)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "mapCount0", v->mapCount0);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "mapCount0", v->mapCount0);
 	if(v->format == 1)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "mapCount1", v->mapCount1);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "mapData", v->mapData);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "mapCount1", v->mapCount1);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "mapData", v->mapData);
 	USED(o);
 }
 
@@ -4577,12 +4577,12 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	u16int minorVersion = b[2]<<8 | b[3];
 	if(minorVersion != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", minorVersion, minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", minorVersion, minorVersion);
 		goto err;
 	}
 	v->itemVariationStoreOffset = b[4]<<24 | b[5]<<16 | b[6]<<8 | b[7];
@@ -4642,10 +4642,10 @@
 void
 print_TableHVAR(Otfile *f, int indent, Otf *o, TableHVAR *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "itemVariationStoreOffset", v->itemVariationStoreOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "advanceWidthMappingOffset", v->advanceWidthMappingOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "lsbMappingOffset", v->lsbMappingOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "rsbMappingOffset", v->rsbMappingOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "itemVariationStoreOffset", v->itemVariationStoreOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "advanceWidthMappingOffset", v->advanceWidthMappingOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "lsbMappingOffset", v->lsbMappingOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "rsbMappingOffset", v->rsbMappingOffset);
 	f->print(f->aux, "%*s%s:\n", indent, "", "itemVariationStore");
 	if(v->itemVariationStore != nil)
 		print_ItemVariationStore(f, indent+indentΔ, o, v->itemVariationStore);
@@ -4684,13 +4684,13 @@
 void
 print_TableFFTM(Otfile *f, int indent, Otf *o, TableFFTM *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "version", v->version);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "version", v->version);
 	if(v->version == 1)
-		f->print(f->aux, "%*s%s: %s\n", indent, "", "fontforge", fmttime(v->fontforge));
+		f->print(f->aux, "%*s%s: %τ\n", indent, "", "fontforge", fmttime(v->fontforge));
 	if(v->version == 1)
-		f->print(f->aux, "%*s%s: %s\n", indent, "", "created", fmttime(v->created));
+		f->print(f->aux, "%*s%s: %τ\n", indent, "", "created", fmttime(v->created));
 	if(v->version == 1)
-		f->print(f->aux, "%*s%s: %s\n", indent, "", "modified", fmttime(v->modified));
+		f->print(f->aux, "%*s%s: %τ\n", indent, "", "modified", fmttime(v->modified));
 	USED(o);
 }
 
@@ -4715,9 +4715,9 @@
 void
 print_SignatureBlock1(Otfile *f, int indent, Otf *o, SignatureBlock1 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "signatureLength", v->signatureLength);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "signatureLength", v->signatureLength);
 	for(int i = 0; i < v->signatureLength; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "signature", i, v->signature[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "signature", i, v->signature[i]);
 	USED(o);
 }
 
@@ -4752,9 +4752,9 @@
 void
 print_SignatureRecord(Otfile *f, int indent, Otf *o, SignatureRecord *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "format", v->format);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "signatureBlockOffset", v->signatureBlockOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "format", v->format);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "signatureBlockOffset", v->signatureBlockOffset);
 	if(v->format == 1){
 		f->print(f->aux, "%*s%s:\n", indent, "", "signatureBlock1");
 		if(v->signatureBlock1 != nil)
@@ -4771,7 +4771,7 @@
 		goto err;
 	u32int version = b[0]<<24 | b[1]<<16 | b[2]<<8 | b[3];
 	if(version != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "version", version, version);
+		werrstr("%s: invalid value: %d (%#ux)", "version", version, version);
 		goto err;
 	}
 	v->numSignatures = b[4]<<8 | b[5];
@@ -4789,8 +4789,8 @@
 void
 print_TableDSIG(Otfile *f, int indent, Otf *o, TableDSIG *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numSignatures", v->numSignatures);
-	f->print(f->aux, "%*s%s: %#x%s\n", indent, "", "flags", v->flags, (v->flags&DSIG_CANNOT_BE_RESIGNED)?" DSIG_CANNOT_BE_RESIGNED":"");
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numSignatures", v->numSignatures);
+	f->print(f->aux, "%*s%s: %#ux%s\n", indent, "", "flags", v->flags, (v->flags&DSIG_CANNOT_BE_RESIGNED)?" DSIG_CANNOT_BE_RESIGNED":"");
 	for(int i = 0; i < v->numSignatures; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "signatureRecords", i);
 		print_SignatureRecord(f, indent+indentΔ, o, &v->signatureRecords[i]);
@@ -4820,8 +4820,8 @@
 print_AxisRecord(Otfile *f, int indent, Otf *o, AxisRecord *v)
 {
 	f->print(f->aux, "%*s%s: %c%c%c%c\n", indent, "", "axisTag", v->axisTag>>24, v->axisTag>>16, v->axisTag>>8, v->axisTag>>0);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "axisNameID", v->axisNameID);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "axisOrdering", v->axisOrdering);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "axisNameID", v->axisNameID);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "axisOrdering", v->axisOrdering);
 	USED(o);
 }
 
@@ -4852,7 +4852,7 @@
 		print_AxisRecord(f, indent+indentΔ, o, &v->designAxes[i]);
 	}
 	for(int i = 0; i < o->axisValueCount; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "axisValueOffsets", i, v->axisValueOffsets[i]);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "axisValueOffsets", i, v->axisValueOffsets[i]);
 	USED(o);
 }
 
@@ -4864,12 +4864,12 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	v->minorVersion = b[2]<<8 | b[3];
 	if(v->minorVersion != 0 && v->minorVersion != 1 && v->minorVersion != 2){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", v->minorVersion, v->minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", v->minorVersion, v->minorVersion);
 		goto err;
 	}
 	v->designAxisSize = b[4]<<8 | b[5];
@@ -4905,14 +4905,14 @@
 void
 print_TableSTAT(Otfile *f, int indent, Otf *o, TableSTAT *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "minorVersion", v->minorVersion);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "designAxisSize", v->designAxisSize);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "designAxisCount", v->designAxisCount);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "designAxesOffset", v->designAxesOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "axisValueCount", v->axisValueCount);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "offsetToAxisValueOffsets", v->offsetToAxisValueOffsets);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "minorVersion", v->minorVersion);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "designAxisSize", v->designAxisSize);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "designAxisCount", v->designAxisCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "designAxesOffset", v->designAxesOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "axisValueCount", v->axisValueCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "offsetToAxisValueOffsets", v->offsetToAxisValueOffsets);
 	if(v->minorVersion > 0)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "elidedFallbackNameID", v->elidedFallbackNameID);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "elidedFallbackNameID", v->elidedFallbackNameID);
 	f->print(f->aux, "%*s%s:\n", indent, "", "designAxes");
 	if(v->designAxes != nil)
 		print_DesignAxes(f, indent+indentΔ, o, v->designAxes);
@@ -4936,8 +4936,8 @@
 void
 print_GaspRange(Otfile *f, int indent, Otf *o, GaspRange *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "rangeMaxPPEM", v->rangeMaxPPEM);
-	f->print(f->aux, "%*s%s: %#x\n", indent, "", "rangeGaspBehavior", v->rangeGaspBehavior);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "rangeMaxPPEM", v->rangeMaxPPEM);
+	f->print(f->aux, "%*s%s: %#ux\n", indent, "", "rangeGaspBehavior", v->rangeGaspBehavior);
 	USED(o);
 }
 
@@ -4949,7 +4949,7 @@
 		goto err;
 	v->version = b[0]<<8 | b[1];
 	if(v->version != 0 && v->version != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "version", v->version, v->version);
+		werrstr("%s: invalid value: %d (%#ux)", "version", v->version, v->version);
 		goto err;
 	}
 	v->numRanges = b[2]<<8 | b[3];
@@ -4966,8 +4966,8 @@
 void
 print_TableGasp(Otfile *f, int indent, Otf *o, TableGasp *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "version", v->version);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numRanges", v->numRanges);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "version", v->version);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numRanges", v->numRanges);
 	for(int i = 0; i < v->numRanges; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "gaspRanges", i);
 		print_GaspRange(f, indent+indentΔ, o, &v->gaspRanges[i]);
@@ -5027,8 +5027,8 @@
 void
 print_TupleVariationHeader(Otfile *f, int indent, Otf *o, TupleVariationHeader *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "variationDataSize", v->variationDataSize);
-	f->print(f->aux, "%*s%s: %u%s%s%s\n", indent, "", "tupleIndex", v->tupleIndex, (v->tupleIndex&TUPLEINDEX_FL_PRIVATE_POINT_NUMBERS)?" TUPLEINDEX_FL_PRIVATE_POINT_NUMBERS":"", (v->tupleIndex&TUPLEINDEX_FL_INTERMEDIATE_REGION)?" TUPLEINDEX_FL_INTERMEDIATE_REGION":"", (v->tupleIndex&TUPLEINDEX_FL_EMBEDDED_PEAK_TUPLE)?" TUPLEINDEX_FL_EMBEDDED_PEAK_TUPLE":"");
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "variationDataSize", v->variationDataSize);
+	f->print(f->aux, "%*s%s: %ud%s%s%s\n", indent, "", "tupleIndex", v->tupleIndex, (v->tupleIndex&TUPLEINDEX_FL_PRIVATE_POINT_NUMBERS)?" TUPLEINDEX_FL_PRIVATE_POINT_NUMBERS":"", (v->tupleIndex&TUPLEINDEX_FL_INTERMEDIATE_REGION)?" TUPLEINDEX_FL_INTERMEDIATE_REGION":"", (v->tupleIndex&TUPLEINDEX_FL_EMBEDDED_PEAK_TUPLE)?" TUPLEINDEX_FL_EMBEDDED_PEAK_TUPLE":"");
 	f->print(f->aux, "%*s%s:\n", indent, "", "peakTuple");
 	print_Tuple(f, indent+indentΔ, o, &v->peakTuple);
 	f->print(f->aux, "%*s%s:\n", indent, "", "intermediateStartTuple");
@@ -5059,8 +5059,8 @@
 void
 print_GlyphVariationData(Otfile *f, int indent, Otf *o, GlyphVariationData *v)
 {
-	f->print(f->aux, "%*s%s: %u%s\n", indent, "", "tupleVariationCount", v->tupleVariationCount, (v->tupleVariationCount&COUNT_FL_SHARED_POINT_NUMBERS)?" COUNT_FL_SHARED_POINT_NUMBERS":"");
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "dataOffset", v->dataOffset);
+	f->print(f->aux, "%*s%s: %ud%s\n", indent, "", "tupleVariationCount", v->tupleVariationCount, (v->tupleVariationCount&COUNT_FL_SHARED_POINT_NUMBERS)?" COUNT_FL_SHARED_POINT_NUMBERS":"");
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "dataOffset", v->dataOffset);
 	for(int i = 0; i < (v->tupleVariationCount&4095); i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "tupleVariationHeaders", i);
 		print_TupleVariationHeader(f, indent+indentΔ, o, &v->tupleVariationHeaders[i]);
@@ -5076,12 +5076,12 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	u16int minorVersion = b[2]<<8 | b[3];
 	if(minorVersion != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", minorVersion, minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", minorVersion, minorVersion);
 		goto err;
 	}
 	v->axisCount = b[4]<<8 | b[5];
@@ -5123,19 +5123,19 @@
 void
 print_TableGvar(Otfile *f, int indent, Otf *o, TableGvar *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "axisCount", v->axisCount);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "sharedTupleCount", v->sharedTupleCount);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "sharedTuplesOffset", v->sharedTuplesOffset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "glyphCount", v->glyphCount);
-	f->print(f->aux, "%*s%s: %#x%s\n", indent, "", "flags", v->flags, (v->flags&GVAR_FL_LONG_OFFSETS)?" GVAR_FL_LONG_OFFSETS":"");
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "glyphVariationDataArrayOffset", v->glyphVariationDataArrayOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "axisCount", v->axisCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "sharedTupleCount", v->sharedTupleCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "sharedTuplesOffset", v->sharedTuplesOffset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "glyphCount", v->glyphCount);
+	f->print(f->aux, "%*s%s: %#ux%s\n", indent, "", "flags", v->flags, (v->flags&GVAR_FL_LONG_OFFSETS)?" GVAR_FL_LONG_OFFSETS":"");
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "glyphVariationDataArrayOffset", v->glyphVariationDataArrayOffset);
 	if((v->flags&GVAR_FL_LONG_OFFSETS) == 0){
 		for(int i = 0; i < (v->glyphCount+1); i++)
-			f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "glyphVariationDataOffsetsShort", i, v->glyphVariationDataOffsetsShort[i]);
+			f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "glyphVariationDataOffsetsShort", i, v->glyphVariationDataOffsetsShort[i]);
 	}
 	if((v->flags&GVAR_FL_LONG_OFFSETS) != 0){
 		for(int i = 0; i < (v->glyphCount+1); i++)
-			f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "glyphVariationDataOffsetsLong", i, v->glyphVariationDataOffsetsLong[i]);
+			f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "glyphVariationDataOffsetsLong", i, v->glyphVariationDataOffsetsLong[i]);
 	}
 	for(int i = 0; i < v->sharedTupleCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "sharedTuples", i);
@@ -5186,7 +5186,7 @@
 void
 print_SegmentMaps(Otfile *f, int indent, Otf *o, SegmentMaps *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "positionMapCount", v->positionMapCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "positionMapCount", v->positionMapCount);
 	for(int i = 0; i < v->positionMapCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "axisValueMaps", i);
 		print_AxisValueMap(f, indent+indentΔ, o, &v->axisValueMaps[i]);
@@ -5202,12 +5202,12 @@
 		goto err;
 	u16int majorVersion = b[0]<<8 | b[1];
 	if(majorVersion != 1){
-		werrstr("%s: invalid value: %d (0x%ux)", "majorVersion", majorVersion, majorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "majorVersion", majorVersion, majorVersion);
 		goto err;
 	}
 	u16int minorVersion = b[2]<<8 | b[3];
 	if(minorVersion != 0){
-		werrstr("%s: invalid value: %d (0x%ux)", "minorVersion", minorVersion, minorVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "minorVersion", minorVersion, minorVersion);
 		goto err;
 	}
 	v->axisCount = b[6]<<8 | b[7];
@@ -5224,7 +5224,7 @@
 void
 print_TableAvar(Otfile *f, int indent, Otf *o, TableAvar *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "axisCount", v->axisCount);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "axisCount", v->axisCount);
 	for(int i = 0; i < v->axisCount; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "axisSegmentMaps", i);
 		print_SegmentMaps(f, indent+indentΔ, o, &v->axisSegmentMaps[i]);
@@ -5233,7 +5233,7 @@
 }
 
 int
-read_TableOS2(Otf *o, TableOS2 *v)
+read_TableOS∕2(Otf *o, TableOS∕2 *v)
 {
 	u8int *b;
 	if((b = otfreadn(o, 78)) == nil)
@@ -5240,7 +5240,7 @@
 		goto err;
 	v->version = b[0]<<8 | b[1];
 	if(v->version > 5){
-		werrstr("%s: invalid value: %d (0x%ux)", "version", v->version, v->version);
+		werrstr("%s: invalid value: %d (%#ux)", "version", v->version, v->version);
 		goto err;
 	}
 	v->xAvgCharWidth = b[2]<<8 | b[3];
@@ -5296,18 +5296,18 @@
 	}
 	return 0;
 err:
-	werrstr("%s: %r", "TableOS2");
+	werrstr("%s: %r", "TableOS∕2");
 	return -1;
 }
 
 void
-print_TableOS2(Otfile *f, int indent, Otf *o, TableOS2 *v)
+print_TableOS∕2(Otfile *f, int indent, Otf *o, TableOS∕2 *v)
 {
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "version", v->version);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "version", v->version);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "xAvgCharWidth", v->xAvgCharWidth);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "usWeightClass", v->usWeightClass);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "usWidthClass", v->usWidthClass);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "fsType", v->fsType);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "usWeightClass", v->usWeightClass);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "usWidthClass", v->usWidthClass);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "fsType", v->fsType);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "ySubscriptXSize", v->ySubscriptXSize);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "ySubscriptYSize", v->ySubscriptYSize);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "ySubscriptXOffset", v->ySubscriptXOffset);
@@ -5320,38 +5320,38 @@
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "yStrikeoutPosition", v->yStrikeoutPosition);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "sFamilyClass", v->sFamilyClass);
 	for(int i = 0; i < 10; i++)
-		f->print(f->aux, "%*s%s[%d]: %u\n", indent, "", "panose", i, v->panose[i]);
-	f->print(f->aux, "%*s%s: %#x\n", indent, "", "ulUnicodeRange1", v->ulUnicodeRange1);
-	f->print(f->aux, "%*s%s: %#x\n", indent, "", "ulUnicodeRange2", v->ulUnicodeRange2);
-	f->print(f->aux, "%*s%s: %#x\n", indent, "", "ulUnicodeRange3", v->ulUnicodeRange3);
-	f->print(f->aux, "%*s%s: %#x\n", indent, "", "ulUnicodeRange4", v->ulUnicodeRange4);
+		f->print(f->aux, "%*s%s[%d]: %ud\n", indent, "", "panose", i, v->panose[i]);
+	f->print(f->aux, "%*s%s: %#ux\n", indent, "", "ulUnicodeRange1", v->ulUnicodeRange1);
+	f->print(f->aux, "%*s%s: %#ux\n", indent, "", "ulUnicodeRange2", v->ulUnicodeRange2);
+	f->print(f->aux, "%*s%s: %#ux\n", indent, "", "ulUnicodeRange3", v->ulUnicodeRange3);
+	f->print(f->aux, "%*s%s: %#ux\n", indent, "", "ulUnicodeRange4", v->ulUnicodeRange4);
 	f->print(f->aux, "%*s%s: %c%c%c%c\n", indent, "", "achVendID", v->achVendID>>24, v->achVendID>>16, v->achVendID>>8, v->achVendID>>0);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "fsSelection", v->fsSelection);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "usFirstCharIndex", v->usFirstCharIndex);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "usLastCharIndex", v->usLastCharIndex);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "fsSelection", v->fsSelection);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "usFirstCharIndex", v->usFirstCharIndex);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "usLastCharIndex", v->usLastCharIndex);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "sTypoAscender", v->sTypoAscender);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "sTypoDescender", v->sTypoDescender);
 	f->print(f->aux, "%*s%s: %d\n", indent, "", "sTypoLineGap", v->sTypoLineGap);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "usWinAscent", v->usWinAscent);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "usWinDescent", v->usWinDescent);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "usWinAscent", v->usWinAscent);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "usWinDescent", v->usWinDescent);
 	if(v->version >= 1)
-		f->print(f->aux, "%*s%s: %#x\n", indent, "", "ulCodePageRange1", v->ulCodePageRange1);
+		f->print(f->aux, "%*s%s: %#ux\n", indent, "", "ulCodePageRange1", v->ulCodePageRange1);
 	if(v->version >= 1)
-		f->print(f->aux, "%*s%s: %#x\n", indent, "", "ulCodePageRange2", v->ulCodePageRange2);
+		f->print(f->aux, "%*s%s: %#ux\n", indent, "", "ulCodePageRange2", v->ulCodePageRange2);
 	if(v->version >= 2)
 		f->print(f->aux, "%*s%s: %d\n", indent, "", "sxHeight", v->sxHeight);
 	if(v->version >= 2)
 		f->print(f->aux, "%*s%s: %d\n", indent, "", "sCapHeight", v->sCapHeight);
 	if(v->version >= 2)
-		f->print(f->aux, "%*s%s: %#x\n", indent, "", "usDefaultChar", v->usDefaultChar);
+		f->print(f->aux, "%*s%s: %#ux\n", indent, "", "usDefaultChar", v->usDefaultChar);
 	if(v->version >= 2)
-		f->print(f->aux, "%*s%s: %#x\n", indent, "", "usBreakChar", v->usBreakChar);
+		f->print(f->aux, "%*s%s: %#ux\n", indent, "", "usBreakChar", v->usBreakChar);
 	if(v->version >= 2)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "usMaxContext", v->usMaxContext);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "usMaxContext", v->usMaxContext);
 	if(v->version >= 5)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "usLowerOpticalPointSize", v->usLowerOpticalPointSize);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "usLowerOpticalPointSize", v->usLowerOpticalPointSize);
 	if(v->version >= 5)
-		f->print(f->aux, "%*s%s: %u\n", indent, "", "usUpperOpticalPointSize", v->usUpperOpticalPointSize);
+		f->print(f->aux, "%*s%s: %ud\n", indent, "", "usUpperOpticalPointSize", v->usUpperOpticalPointSize);
 	USED(o);
 }
 
@@ -5374,8 +5374,8 @@
 print_TableRecord(Otfile *f, int indent, Otf *o, TableRecord *v)
 {
 	f->print(f->aux, "%*s%s: %c%c%c%c\n", indent, "", "tableTag", v->tableTag>>24, v->tableTag>>16, v->tableTag>>8, v->tableTag>>0);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "offset", v->offset);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "length", v->length);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "offset", v->offset);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "length", v->length);
 	if(v->print != nil && v->parsed != nil)
 		v->print(f, indent+indentΔ, o, v->parsed);
 	USED(o);
@@ -5389,7 +5389,7 @@
 		goto err;
 	v->sfntVersion = b[0]<<24 | b[1]<<16 | b[2]<<8 | b[3];
 	if(v->sfntVersion != 0x10000 && v->sfntVersion != 0x4f54544f){
-		werrstr("%s: invalid value: %d (0x%ux)", "sfntVersion", v->sfntVersion, v->sfntVersion);
+		werrstr("%s: invalid value: %d (%#ux)", "sfntVersion", v->sfntVersion, v->sfntVersion);
 		goto err;
 	}
 	v->numTables = b[4]<<8 | b[5];
@@ -5719,15 +5719,15 @@
 				rec->print = (void*)print_TableAvar;
 				break;
 			case (u32int)('O'<<24|'S'<<16|'/'<<8|'2'):
-				if(v->os2 != nil)
+				if(v->os∕2 != nil)
 					break;
-				v->os2 = calloc(1, sizeof(TableOS2));
-				if(read_TableOS2(o, v->os2) < 0){
-					free(v->os2);
+				v->os∕2 = calloc(1, sizeof(TableOS∕2));
+				if(read_TableOS∕2(o, v->os∕2) < 0){
+					free(v->os∕2);
 					goto err;
 				}
-				rec->parsed = v->os2;
-				rec->print = (void*)print_TableOS2;
+				rec->parsed = v->os∕2;
+				rec->print = (void*)print_TableOS∕2;
 				break;
 			default:
 				// FIXME fprint(2, "no parser for \"%t\"\n", rec->tableTag);
@@ -5746,11 +5746,11 @@
 void
 print_TableDirectory(Otfile *f, int indent, Otf *o, TableDirectory *v)
 {
-	f->print(f->aux, "%*s%s: %#x\n", indent, "", "sfntVersion", v->sfntVersion);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "numTables", v->numTables);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "searchRange", v->searchRange);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "entrySelector", v->entrySelector);
-	f->print(f->aux, "%*s%s: %u\n", indent, "", "rangeShift", v->rangeShift);
+	f->print(f->aux, "%*s%s: %#ux\n", indent, "", "sfntVersion", v->sfntVersion);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "numTables", v->numTables);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "searchRange", v->searchRange);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "entrySelector", v->entrySelector);
+	f->print(f->aux, "%*s%s: %ud\n", indent, "", "rangeShift", v->rangeShift);
 	for(int i = 0; i < v->numTables; i++){
 		f->print(f->aux, "%*s%s[%d]:\n", indent, "", "tableRecords", i);
 		print_TableRecord(f, indent+indentΔ, o, &v->tableRecords[i]);
--- a/plan9/otf.h
+++ b/plan9/otf.h
@@ -196,7 +196,7 @@
 typedef struct AxisValueMap AxisValueMap;
 typedef struct SegmentMaps SegmentMaps;
 typedef struct TableAvar TableAvar;
-typedef struct TableOS2 TableOS2;
+typedef struct TableOS∕2 TableOS∕2;
 typedef struct TableRecord TableRecord;
 typedef struct TableDirectory TableDirectory;
 
@@ -1496,7 +1496,7 @@
 int read_TableAvar(Otf *o, TableAvar *v);
 void print_TableAvar(Otfile *f, int indent, Otf *o, TableAvar *v);
 
-struct TableOS2 {
+struct TableOS∕2 {
 	u16int version;
 	s16int xAvgCharWidth;
 	u16int usWeightClass;
@@ -1538,8 +1538,8 @@
 	u16int usUpperOpticalPointSize;
 };
 
-int read_TableOS2(Otf *o, TableOS2 *v);
-void print_TableOS2(Otfile *f, int indent, Otf *o, TableOS2 *v);
+int read_TableOS∕2(Otf *o, TableOS∕2 *v);
+void print_TableOS∕2(Otfile *f, int indent, Otf *o, TableOS∕2 *v);
 
 struct TableRecord {
 	u32int tableTag;
@@ -1583,7 +1583,7 @@
 	TableGasp *gasp;
 	TableGvar *gvar;
 	TableAvar *avar;
-	TableOS2 *os2;
+	TableOS∕2 *os∕2;
 };
 
 int read_TableDirectory(Otf *o, TableDirectory *v);
--