Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ FSlib(3) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

fta(3)

fonttab(5)

FSLIB(3)  —  NEWS-OS Programmer’s Manual

名称

FSlib − ソニーフォーマットアウトラインフォント操作ライブラリ

形式

#include <FS.h>
int FS_open_font(fontname)
 char ∗fontname; /∗ アウトラインフォント名(絶対パス) ∗/ int FS_close_font(fd)
 int fd; /∗ アウトラインフォントのフォントディスクリプタ ∗/
int FS_get_outline(c, fd, buf)
 int c; /∗ 連続漢字コード ∗/
 int fd; /∗ アウトラインフォントのフォントディスクリプタ ∗/
 int ∗∗buf; /∗ 読み出し用バッファヘのポインタ ∗/
int FS_scan_conv(vk_buf, w, h, bw, bo, bm_buf, thick, frame, smooth)
 long ∗vk_buf; /∗ アウトラインフォントデータのアドレス ∗/
 int w; /∗ ビットマップフォントの横幅指定(ピクセル) ∗/
 int h; /∗ ビットマップフォントの縦幅指定(ピクセル) ∗/
 int bw; /∗ ビットマップフォントのラスタ間距離(バイト) ∗/
 int bo; /∗ ビットマップフォントの書き込み先頭位置ビットオフセット指定 ∗/
 char ∗bm_buf; /∗ ビットマップフォントの書き込み先頭位置アドレス指定 ∗/
 int thick; /∗ 輪郭線の太さ(1:太線、0:細線) ∗/
 int frame; /∗ 0:黒塗、1:白抜き ∗/
 int smooth; /∗ ベジェ曲線の滑らかさ ∗/
int FS_get_bitmap(c, fd, w, h, bw, bo, bm_buf, thick, frame, smooth)
 int c; /∗ 連続漢字コード ∗/
 int fd; /∗ アウトラインフォントのフォントディスクリプタ ∗/
 int w; /∗ ビットマップフォントの横幅指定(ピクセル) ∗/
 int h; /∗ ビットマップフォントの縦幅指定(ピクセル) ∗/
 int bw; /∗ ビットマップフォントのラスタ間距離(バイト) ∗/
 int bo; /∗ ビットマップフォントの書き込み先頭位置ビットオフセット指定 ∗/
 char ∗bm_buf; /∗ ビットマップフォントの書き込み先頭位置アドレス指定 ∗/
 int thick; /∗ 輪郭線の太さ(1:太線、0:細線) ∗/
 int frame; /∗ 0:黒塗、1:白抜き ∗/
 int smooth; /∗ ベジェ曲線の滑らかさ ∗/
void FS_set_f_xform(rotate, refx, refy)
 int rotate; /∗ 時計方向の 90度回転の回数 ∗/
 int refx; /∗ 上下反転指定フラグ ∗/
 int refy; /∗ 左右反転指定フラグ ∗/
void FS_fast_xform(vk, rotate, refx, refy)
 long ∗vk; /∗ アウトラインフォントデータが格納されているアドレス ∗/
 int rotate; /∗ 時計方向の 90度回転の回数 ∗/
 int refx; /∗ 上下反転指定フラグ ∗/
 int refy; /∗ 左右反転指定フラグ ∗/
void FS_set_m_xform(t1, t2, t3, t4, t5, t6)
 double t1, t2, t3, t4, t5, t6; /∗ 変換マトリックスパラメータ ∗/
void FS_mat_xform(x, y, t1, t2, t3, t4, t5, t6)
 int ∗x, ∗y; /∗ 座標値 ∗/
 double t1, t2, t3, t4, t5, t6; /∗ 変換マトリックスパラメータ ∗/

解説

ここに記す一連の関数は、ソニーフォーマットアウトラインフォント操作 ライブラリ libFSlib.a に用意されているものです。 これはソニーフォーマットアウトラインフォント(NWF-605、NWF-629〜)のデータ を読み出したり、ソニーフォーマットのアウトラインフォントデータからラスター コンバージョンによってビットマップイメージを生成したりするためのライブラリ です。以下に各関数についての説明をします。

int FS_open_font(fontname)
絶対パス名 fontname で指定されるアウトラインフォントファイルを オープンします。
成功した場合は 0 以上の整数がリターン値となります、この値をフォントディス クリプタと呼びます。(ファイルディスクリプタと混同しないようにご注意くだ さい。) 失敗したときは負のエラーコードがリターン値となります。

int FS_close_font(fd)
アウトラインフォントのフォントディスクリプタ fd をクローズします。
正常終了の場合は 0 がリターン値となります。 失敗したときは負のエラーコードがリターン値となります。

int FS_get_outline(c, fd, buf)
フォントディスクリプタ fd で示されるフォントデータからコードが c(連続漢字コード)であるフォントデータを読み出します。 その際、FS_set_f_xform() によって設定されたコンテクストがあれば、 それに従います。 読み出し用バッファは、本関数が割り当てます。割り当てられたアドレスは、buf で指示されるポインタに格納されます。(このバッファが不用になったときは UNIX 標準ライブラリ関数 free() で解放してください。)
正常終了の場合は 0 がリターン値となります。 失敗したときは負のエラーコードがリターン値となります。
ここで、連続漢字コードは以下のように定義されています。

 連続漢字コード =
 (JIS の上位 8 ビット - 0x21)∗94 + (JIS の下位 8 ビット − 0x21)

int FS_scan_conv(vk_buf,w,h,bw,bo,bm_buf,thick,frame,smooth)
vk_buf で示されたアウトラインフォントデータから横幅w、縦幅h のビットマップフォントデータを生成して bm_buf で示されるバッファに書き出 します。(bm_buf で示されるバッファは呼出し側があらかじめ割り当てておく 必要があります。)
各ラスタは、バイトバウンダリから bo ビット置いたところから始まり、 各ラスタの先頭が bw バイトづつ離れるようにデータを作成します。
FS_set_m_xform() で設定されたコンテクストがあればそれに従います。
thick に 1 が設定されると輪郭線が太くなり、0 が設定されると細くなります。 frame に 1 が設定されるとアウトラインの内部は塗り潰されません(白抜き)、 0 が設定されると塗り潰されます(黒塗)。
smooth には、ベジェ曲線を生成するときのスムースさを指定します。 有効な範囲は、1 以上 204800 以下で、数字が小さいほうがよりスムースとなり ます。ただし、0 が設定された場合はデフォルト値として以下の計算式で得られる 値が用いられます。

  ((int)sqrt(8192.0 / (double)((w < h) ? w : h) + 0.5)) << 16

正常終了の場合は 0 がリターン値となります。 失敗したときは負のエラーコードがリターン値となります。 [注意] 文字を書き込む先のページバッファが pa 番地から始まり、 幅が px ピクセル、高さが py ピクセルであるとします。 このとき、FS_scan_conv() の引数 bw はページバッファの 1ラスタあたりのバイト数 (px+7)/8 です。 このページバッファの座標 (x, y) にビットマップフォントを書き込む場合、 FS_scan_conv() の引数 bo, bm_buf はそれぞれ以下のようになります。

    bo = x % 8;
    bm_buf = pa + (bw ∗ y) + (x / 8);

int FS_get_bitmap(c,fd,w,h,bw,bo,bm_buf,thick,frame,smooth)
フォントディスクリプタ fd で示されるフォントファイルからコードが c(連続漢字コード)であるフォントデータを読み出し、 (FS_set_f_xform() で設定されたコンテクストがあればそれに従います) ビットマップフォントに展開し、(FS_set_m_xform() で設定されたコンテ クストがあればそれに従います) bm_buf で示されるバッファに書き込みます。 (bm_buf で示されるバッファは呼出し側があらかじめ割り当てておく必要が あります。)
thick に 1 が設定されると輪郭線が太くなり、0 が設定されると細くなります。 frame に 1 が設定されるとアウトラインの内部は塗り潰されません(白抜き)、 0 が設定されると塗り潰されます(黒塗)。
smooth には、ベジェ曲線を生成するときのスムースさを指定します。 smoothの詳細は FS_scan_conv() の説明を参照してください。
正常終了の場合は 0 がリターン値となります。 失敗したときは負のエラーコードがリターン値となります。 [注意] 文字を書き込む先のページバッファが pa 番地から始まり、 幅が px ピクセル、高さが py ピクセルであるとします。 このとき、FS_get_bitmap() の引数 bw はページバッファの 1ラスタあたりのバイト数 (px+7)/8 です。 このページバッファの座標 (x, y) にビットマップフォントを書き込む場合、 FS_get_bitmap() の引数 bo, bm_buf はそれぞれ以下のように なります。

    bo = x % 8;
    bm_buf = pa + (bw ∗ y) + (x / 8);

void FS_set_f_xform(rotate, refx, refy)
この設定を行うと、FS_get_outline(), FS_get_bitmap() が呼ばれたとき、 以下のような変換が行われます。

  rotate で指定された回数だけ時計方向に 90 度回転します。
  refx が 1 ならば上下反転します。
  refy が 1 ならば左右反転します。

この設定は再度設定し直すまで有効です。

void FS_fast_xform(vk, rotate, refx, refy)
vk で示されたアウトラインフォントデータを rotate, refx, refy の指定にしたがって変換します。rotate, refx, refyの詳細は  FS_set_f_xform() の説明を参照してください。

void FS_set_m_xform(t1, t2, t3, t4, t5, t6)
この設定を行うと FS_scan_conv(), FS_get_bitmap() によって ビットマップフォント生成時、x, y 座標について以下のような変換が行わ れます。

    x = t1∗x + t2∗y + t3;
    y = t4∗x + t5∗y + t6;

この設定は再度設定し直すまで有効です。

void FS_mat_xform(x, y, t1, t2, t3, t4, t5, t6)
以下に示すような座標値に対する 3x3 マトリクス座標変換を行います。

    ∗x = t1∗(∗x) + t2∗(∗y) + t3;
    ∗y = t4∗(∗x) + t5∗(∗y) + t6;

注意事項
各関数の実行に失敗した場合にリターン値として設定される負のエラーコードは /usr/sony/include/FS.h で定義されています。 エラーコードの絶対値 n に対し、err_message[n] はエラーメッセージを 表す文字列へのポインタとなります。

関連事項

fta(3), fonttab(5)
NEWS-OS Release 4.1 プログラマーズガイド「アウトラインフォント操作ライブラリ」

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026