BTW: here's what I know about the format so far (the short integers are store low byte before high byte):
Code:
scribble =
{ header : header;
strokes : stroke list }
header =
{ b01_36 : 36bytes;
(* 0x010000000000000000000000000000000000000000000000000000000004000000050000 *)
num_strokes : 2bytes; (* more likely 16bit short than byte *)
b38_39 : 2bytes (* Always 0x0000? *) }
stroke =
{ stroke_header : stroke_header;
points : point list }
stroke_header =
{ b01 : 1byte; (* Always 0x00? *)
b02_03 : 2bytes; (* Always 3? 16bit short or byte?*)
b04_05 : 2bytes; (* Always 0x0000? *)
b06_09 : 4bytes; (* Always 0xB4276842 or 0x5A5A3143? *)
b10_17 : 8bytes; (* Always 0x0000000000000000? *)
width : 2bytes; (* 16bit short or byte? (the latter would suffice) *)
b20_21 : 2bytes; (* Always 0x0000? *)
num_points : 2bytes; (* more likely 16bit short than byte *)
b24 : 1byte (* Always 0x00? *) }
point =
{ b01 : 1byte; (* Always 0x00? *)
y : 2bytes;
b04_05 : 2bytes; (* Always 0x00? *)
x : 2bytes;
b08_09 : 2bytes; (* Always 0x00? *)
b10_12 : 4bytes (* Always 0x000000 for the first point,
0x88D32F or 0xE8021B for the middle points and
0xF0B115 or 0xB8A215 for the final point? *) }