ページへ戻る

− Links

 印刷 

blike​/man​/p0002 のバックアップソース(No.3) :: OSASK計画

osaskwiki:blike/man/p0002 のバックアップソース(No.3)

« Prev[4]  Next »[5]
TITLE:x
* 上級者向けのblikeマニュアル(2) [#cd17d333]
-(by [[K]], 2011.03.08)
-C言語の文法が分からないという人を対象にはしていません。そういう人は[[blike/intro]]へ。
-ドライバ開発者向けの情報は[[blike/drv]]にあります。

*** グラフィック描画関数群 [#fe07220d]
-[01f以降] setPix(int x, int y, int c)
--画面に点を打つ。cは色で0x000000~0xffffffが有効。

-[01f以降] drawLine(int x0, int y0, int x1, int y1)
--線を引く。色は事前に color() か setCol() で指定しておくこと。
--アルゴリズムの関係で、drawLine(x0, y0, x1, y1) と drawLine(x1, y1, x0, y0) が厳密には重ならない場合もある。とはいえ、ズレは1ピクセル程度である。
---これがいやなら bball00a のようにすればいいだろう。
 if (x0 <= t[j].x)
     drawLine(x0, y0, t[j].x, t[j].y);
 else
     drawLine(t[j].x, t[j].y, x0, y0);

-[01f以降] drawRect(int sx, int sy, int x0, int y0)
--長方形を描く。sxとsyが大きさで、x0とy0は左上の頂点の座標である。色は事前に color() か setCol() で指定しておくこと。

-[01f以降] fillRect(int sx, int sy, int x0, int y0)
--塗りつぶした長方形を描く。色は事前に color() か setCol() で指定しておくこと。

-[01f以降] fillOval(int sx, int sy, int x0, int y0)
--塗りつぶした楕円を描く。引数の意味するところは、この4パラメータで「仮想的な」長方形を指定し、その長方形に内接するような楕円を描画するということである。このような仕様にしたのは、Javaアプレットの関数の仕様をまねたからである。色は事前に color() か setCol() で指定しておくこと。

-[01f以降] setCol(int c)
--描画色を設定する。0x000000~0xffffffが有効。これは文字表示色にもなる。だから color() よりも微妙な色指定ができることになる。

-[01f以降] setBCol(int b)
--背景色を設定する。0x000000~0xffffffが有効。といっても背景色は文字表示関数と cls() くらいしか参照してない。

-[01f以降] int iCol(int c)
--cは0~15が有効で、これを0x000000~0xffffffの整数に変換する。color()関数が内部で使っているものを表に出しただけ。

-[01f以降] int rgb(int r, int g, int b)
--r, g, b はそれぞれ0~255が有効。これらを0x000000~0xffffffの整数に変換する。

-[01f以降] drawStr(int x0, int y0, int rx, int ry, const char *s, ...)
--文字列を描画する。printfとの違いは、描き始めの位置をピクセル単位で制御できることと、重ねあわせができることと、拡大ができることである。
--rxやryは倍率で、整数倍のみ指定できる。

-[01f以降] setMode(int flags)
--flagsは以下のものが指定できる。
 #define BL_PSET     0x00000004
 #define BL_PAND     0x00000005
 #define BL_POR      0x00000006
 #define BL_PXOR     0x00000007
 #define BL_DBGFLSH  0x00000040
 #define BL_RLSFLSH  0x00000060
 #define BL_DEBUG    BL_DBGFLSH
 #define BL_RELEASE  BL_RLSFLSH
--PSET, PAND, POR, PXOR はどれか一つを指定することができる。デフォルトでは PSET になっている。指定しなければ変更されない。
---これらは setPix(), drawLine(), drawRect(), fillRect(), fillOval(), drawStr() に影響する。
--DBGFLSH, RLSFLSH もどれか一つを指定することができる。デフォルトでは DBGFLSH になっている。指定しなければ変更されない。
---これはフラッシュ忘れを分かりやすくする。リリースモードにするとフラッシュ忘れが分かりにくくなる代わりに(忘れていても結構それなりに画面に反映されてしまうことがある)、メモリが節約され、速度も向上する。
---リリースモードにしたいときは、一番最初に setMode(BL_RELEASE); と書くのが良いだろう。

-[01f以降] openVWin(int n, int sx, int sy)
--裏画面(仮想画面)を準備する。n=0は表画面のことなので、 openWin(sx, sy); は openVWin(0, sx, sy); と同等である。
--nは0~15が有効なので、裏画面は最大15枚持てるということになる。裏画面は何を描いても画面には反映されない。裏画面に対してなら、0x000000~0xffffff以外の色を使ってもよい。
--裏画面は、背景やキャラクタなどを描いておいて、重ね合わせ処理をするときなどに使う。詳しいことは copyRct0() などを参照のこと。

-[01f以降] slctWin(int n)
--描画関数がどの画面に対して描画を行うかを指定する。 openVWin() しないまま slctWin() して描画することもできて、その場合は表画面と同一サイズで blike が openVWin() する。

-[01f以降] copyRct0(int sx, int sy, int n0, int x0, int y0, int n1, int x1, int y1)
--ウィンドウのある領域の画像を、別のウィンドウの同じ大きさの領域にコピーする。sxとsyは領域のサイズで、n0やn1はウィンドウ番号。 n0, x0, y0 の内容が、 n1, x1, y1 へコピーされる。
--n0とn1が同じウィンドウを指していてもよく、その場合は同一画面内でのコピーになる。ただし領域が重なっていてはいけない。

-[01f以降] copyRct1(int sx, int sy, int n0, int x0, int y0, int n1, int x1, int y1, int ic)
--ウィンドウのある領域の画像を、別のウィンドウの同じ大きさの領域にコピーする。その際、 ic で指定した色が透明色として扱われる。

*** そのほかの関数群 [#g0dd6fe4]
-[01f以降] int rnd(int n)
--0からn-1の範囲の乱数を返す。

-[01f以降] srand(int s)
--乱数のパターンを指定する。

* ドライバ関数群 [#r913b417]
-[01f以降] 各OSのmain関数
--この関数は、ドライバに必要な初期化を行って、さらに bl_init(); で blike の内部を初期化したのち、 blMain(); を呼び出す。
--もし blMain(); から帰ってきた場合は、アプリの終了が期待されているので、速やかにドライバの終了処理や bl_exit(); で blike の内部の終了処理を完了させたのち、アプリそのものをそのOSのやり方で終了する。現状では終了コードは渡されないので、常に正常終了でかまわない。

-[01f以降] void *bld_malloc(unsigned int bytes)
--この関数は、そのOSにおけるメモリ確保を期待している。確保に失敗した場合は NULL (0) を返してほしい。

-[01f以降] void bld_free(void *p, unsigned int bytes)
--この関数は、そのOSにおけるメモリ開放を期待している。bytesは確保時と同じ値を渡すので、必要であれば利用してよい。

-[01f以降] void bld_openWin(int sx, int sy)
--この関数は、そのOSにおけるウィンドウオープンを期待している。sxは160以上、syは1以上を blike 側で保障する。
--ウィンドウに表示してほしいグラフィックのイメージバッファは、 bl_work.win[BL_SYSWIN].buf で参照できる(これは int * 型)。したがって、 int の配列で不都合がないのなら、ドライバ側でウィンドウのイメージを確保する必要はないだろう。
--sxやsyについても、 bl_work.win[BL_SYSWIN].xsiz, bl_work.win[BL_SYSWIN].ysiz を参照すればいつでも得られるので、ドライバ側で保存する必要はないだろう。

-[01f以降] void bld_flshWin(int sx, int sy, int x0, int y0)
--この関数は、イメージバッファ内の指定された範囲のフラッシュを期待している。sxやsyが0以下になるとか、画面外のピクセルが含まれてしまうなど、そういうやっかいなパラメータを渡すことはないので、その辺はドライバ関数が心配する必要はない。
--setMode(BL_DBGFLSH); では、不正なカラーコード(0x000000未満とか0xffffffより大きいとか)を渡さないようになっている。リリースモードの場合は、チェックを省略しているので、もしかしたら渡してしまうかもしれないが、しかしとりあえず常に不正なカラーコードが来ることはないと仮定していいと思われる。
---デバッグが完了しないうちにリリースモードを指定するほうがおかしいので。

« Prev[4]  Next »[5]