統合外字管理ツール
外字でお困り?
by JJworkshop.
 
Windows自動運転
マクロで自動制御
by JJworkshop.
 
YouTubeの動画  
ダウンローダ
by JJworkshop.
 

§EUF/TTEファイルの内部構造

外字ファイルのビットデータである「EUDC.EUF」を部分的に解析しました。
外字ザウルス」等は、このフォーマットで一時ファイル等を作成し外字を処理しています。

EUDC.TTE 処理用の C/C++ のヘッダファイル定義

// _EUF_FileFormat.h : コモンヘッダ
//
/////////////////////////////////////////////////////////////////////////////
//
// Program by Mitsuhiro Shirai
// E-mail shirai@as.email.ne.jp
//
// EUFのフォーマットに関わる設定
// Last update    2004.01.22
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(__EUF_FILE_FORMAT_H__)

#define __EUF_FILE_FORMAT_H__

// EUFは、完全に解析していないので、SPACE_XX.EUF ファイル(E000に空白1つの外字)
// の利用を前提にロジックを作成している
// EUFと認識するためのタグ
#define EUF_FILE_TAG    "Windows EUDC Editor Bitmap File (Uni-Code)"

// 構造体の定義をバイト境界で利用するためのプラグマ
#pragma pack( push, before_include1 )

#pragma pack(1)

// EUFの先頭部分を読み込み、外字ビットマップ管理テーブルの先頭を見つける定義体
typedef struct EUF_DATA_HEAD {
    BYTE    head1[98];      // Windows EUDtor Bitmap (Uni-Code)..
                            // 0x004A~2バイトに開始コード(0xE0,0x00)
                            // 0x004C~4バイトに終了コード(0xF8,0xFF)
    UINT    bitmapTblAddr;  // ビットマップ管理テーブルヘッダの開始アドレス+6(4バイト)
                            // この後ろに開始コード~終了コードの2バイト値が続く
                            // 0x00,0xE0 - 0x01,0x0E - 0x02,0x0E - ... 0xFF,0xF8
                            // 更にこの後ろにダミーのバイトもあるが未解析
                            // そして、ビットマップ管理テーブルが続く
} EUF_DATA_HEAD;
// EUFのビットマップ管理テーブルヘッダ定義体 (bitmapTblAddr値-6バイトの位置)
typedef struct EUF_BITMAP_TBL {
    USHORT    startCode;    // 外字の開始コード Unicode(2バイト)
    USHORT    endCode;      // 外字の終了コード Unicode(2バイト)
    BYTE    unclear_0[2];   // 未解析(2バイト)
    UINT    nextWriteAddr;  // 次に書き込むビットマップ開始アドレス(4バイト)
    BYTE    unclear_1[4];   // 未解析(4バイト)
    UINT    firstAddr;      // 最初のビットマップアドレス(4バイト)
    BYTE    unclear_2[2];   // 未解析(2バイト)
                            // これ以降は↓
                            // ビットマップのアドレステーブル(4バイト×(0xF8FF-0xE000)件)
                            // これは、 0xE000~0xF8FF の並びで、未使用アドレスには
                            // 0x0000 が代入されている
                            // 更にこの後ろにダミーのバイトもあるが未解析
                            // そして、ビットマップデータが続く
} EUF_BITMAP_TBL;
// EUFのビットマップヘッダ定義体
typedef struct EUF_BITMAP_DATA {
    UINT    dataLen;        // データ長(4バイト)
    USHORT    bitmapSizeX;  // ビットマップサイズ(2バイト)
    USHORT    bitmapSizeY;  // ビットマップサイズ(2バイト)
                            // これ以降は↓
                            // ビットマップ
                            // (bitmapSize × bitmapSize ÷ 8 バイト)
} EUF_BITMAP_DATA;
#pragma pack( push, before_include1 )

#endif // !defined(__EUF_FILE_FORMAT_H__)

EUDC.TTE につては、「TTF」のフォーマットと同じになります。
下記のリンクを参照して下さい。

 マイクロソフトのTTFフォーマット説明のページ[英語]

 アップルのTTFフォーマット説明のページ[英語]