diff --git a/src/syncdraw/TDF_FORMAT b/src/syncdraw/TDF_FORMAT new file mode 100644 index 0000000000000000000000000000000000000000..11332c3f4cb2ada3fbe6611c92e81c8c24531328 --- /dev/null +++ b/src/syncdraw/TDF_FORMAT @@ -0,0 +1,75 @@ +<dig dig dig> +It does use pascal strings... +struct TDHeader { + /* Pascal string [23] - TheDraw Font signature */ + /* There may be unknown data after this string instead of a 23 char string */ + unsigned char sig_len; + char sig[23]; + /* Pascal string [16] - Font name */ + unsigned char name_len; + char name[16]; + unsigned char font_type; /* 0=outline, + * 1=Block (mono) + * 2=Block(colour) + */ + unsigned char font_spaces; /* Spaces between each letter */ + unsigned short font_data_len; /* Total bytes in the font data... file + * size is font_data_len+233 + */ + unsigned short chartable[94]; /* Offsets to character start from end of + * header ie: + * fseek(file, chartable[x]+233, SEEK_SET); + */ +}; + +So basically: +string[23] +string[16] +byte +byte +word +word[94] + +Is the header... which is 233 bytes long. + +sizeof(struct TDHeader)==233; + +Now on to the font data... + +index into the chartable array is asc(char)-asc("!") ie: ! is the first char. +The char data starts at file offset 233+chartable[char]. + +At that position are two bytes, the X and Y extents in that order for that char. +Following that is a series of font data **rows** each row is terminated by an +ASCII 10 (\x0a). The character data is terminated by an ASCII NULL (\x00) +This is true for all three font types. The meaning of each char however varies +as follows: +0) Outline fonts: + Each char *MUST* be between 'A' and 'Q'. Any other char is translated as an + empty space. + A: Horiz. Line #1 + B: Horiz. Line #2 + C: Vertical Line #1 + D: Vertical Line #2 + E: Top-left corner #1 + F: Top-right corner #1 + G: Top-left corner #2 + H: Top-right corner #2 + I: Bottom-left corner #1 + J: Bottom-right corner #1 + K: Bottom-left corner #2 + L: Bottom-right corner #2 + M: Left-facing tee + N: Right-facing tee + O: UNKNOWN + P: UNKNOWN + Q: UNKNOWN + I note that the Up-facing and Down-facing tees are absent and speculate that + they are O and P but have no hard evidence of this. If anyone has a TD + outline font editor, I would be happy to get a sample of a font using them. + I also suspect that Q is a blank space. +1) Block fonts + Each char is the ASCII value that should be displayed at this point. +2) Block colour fonts + Each char has an attribute, in char, attribute format. The newlines and NULL + terminator do NOT have an attribute byte... be carefull.