diff --git a/HISTORY b/HISTORY index 751aa2c..7f51a15 100644 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,20 @@ +2000/11/23(木) + +wonx-b05 公開 + +シリアル通信で,標準入力からの入力の \n は \r に変換して渡すように +comm.c の comm_input() を修正.([WitchFan 00462] のメール参照) + +画面外へのテキスト文字の表示時に,エラー終了するのでなく, +ワーニングを出して続行するように WWText_PutCharacter() を修正. +(ワンべぇへの対応) + +wonx_include/types.h に #define _WONX_ を追加.(WONX依存にしたい部分を +ソース中でくくりたいときのため) + + + + 2000/11/18(土) wonx-b04 公開 diff --git a/Makefile b/Makefile index e70169b..ae72465 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,8 @@ XINCLUDEDIR = /usr/X11R6/include INCLUDEDIR = . XLIBDIR = /usr/X11R6/lib -VERSION = Wonx-b04 -PKGNAME = wonx-b04 +VERSION = Wonx-b05 +PKGNAME = wonx-b05 SMAC = smac-b02 diff --git a/README b/README index cade4c6..4f9beda 100644 --- a/README +++ b/README @@ -329,6 +329,7 @@ wonx 関数を呼び出しても,何も起こりません.(空の関数になっている) ・サウンド +・カーソル表示 ・その他いっぱい ■ 注意しなければならないこと @@ -340,8 +341,8 @@ UNIX ならないことがいくつかあります.これらは Wonx の性質上,仕方の無いことです. 以下のことは,意識することと,きれいなプログラムを書くことで, -かなり回避できると思います.(short int にすべきところでは,省略せずに -ちゃんと short int と明示するとか) +かなり回避できると思います.(ビットマップ操作などで,short int にすべき +ところでは,省略せずにちゃんと short int と明示するとか) まあ,Wonx の目的は論理的なバグを早い段階で無くすことにあるので,このへんは そういうものだと割り切って使ってください. @@ -406,6 +407,115 @@ WonderWitch 反応しないからといってなんども押すのでなく,1回を長く確実に押すように してください. +[MS-DOS 形式ファイルの扱い] + +MS-DOS 形式ファイルは,行末の改行コードが UNIX のテキストファイルと +異なるので,注意してください.*.[ch] ファイルの場合は問題無いのですが, +makefile は注意してください. +(UNIX のテキストファイルでは,改行は \n ですが,MS-DOS では \r\n です) +例えば,makefile 中に, + +gcc -g -o smac $(OBJS) -L. -L/usr/X11R6/lib -lwonx -lX11 -lXt + +のような行があったとして,これが MS-DOS のテキスト形式のファイルだと, +-lXt のあとに余分な改行コード(\r)が付加されてしまうため,UNIX 上で make +しても,「-lXt に相当するライブラリが無い」と怒られてしまいます. +(しかも,ファイルを emacs や less などで参照しても,改行コードは表示されない + ため,原因がわかりにくい) +また, + +gcc -g -o smac $(OBJS) -lwonx -lX11 -lXt -L. -L/usr/X11R6/lib + +のようにしていると,/usr/X11R6/lib を指定したつもりなのに,実際には +/usr/X11R6/lib\r というディレクトリが指定されたことになってしまい, +-lX11, -lXt の検索に失敗します. + +漢字コードに関しても,同じことがいえます.UNIX での漢字コードは EUC なので, +ソースコード中に SJIS の漢字が入っていると,うまくコンパイルできなかったり, +make がうまく動作しなかったり,コンパイルできてもプログラム自体が +誤動作してしまい,しかも原因に気づきにくくなってしまう可能性があります. +makefile やソースコードは必ず, +> cat makefile | qkc -I -O -e -u > makefile.tmp +> mv makefile.tmp makefile +などを通して,UNIXのテキストファイルに変換しましょう. + +[ファイル名の問題] + +MS-DOS ではファイル名はすべて大文字ですが,gcc では *.C のような +ファイル名のファイルは C++ で書かれていると判断されるため, +SAMPLE.C のような名前のファイルをコンパイルすると,うまくリンクできない +ことがあります. +このような場合は,sample.c にリネームしてコンパイルしてください. + +[シリアル通信について] + +シリアル通信の受信用関数(comm_receive_char()等)は,fgetc(stdin) から +入力文字を取得して,\n は \r に変換して返します.これは,一般的な通信回線上の +端末をエミュレートするためです. + +また,comm_send_char() に渡した文字は,標準出力に出力されますが, +タブや改行コードは,"\t" "\n" のような文字列に変換されて出力されます. +添付の sout2str.pl を通すことにより,シリアル通信への出力のみ抽出して, +端末への出力のイメージで表示させることができます. + +[ソース中の WONX 依存部分のくくりかた] + +WonderWitch 用のプログラムを開発していく際に,WONX の場合のみ組み込みたくて, +WonderSwan 上で実行するときには取り除きたいコードがあったとします. +(例えば,デバッグ情報の出力のために printf() を入れる場合など) +このようなときのために,wonx_include/types.h で +#define _WONX_ +してあるので,そのような場所は #ifdef _WONX_ でくくってください. + +[ダンプデータの取りかた] + +ソース中に, + +#include "Wonx.h" +#include "WonxDisplay.h" +#include "WWDisplay.h" +#include "WWColorMap.h" +#include "WWPalette.h" +#include "WWCharacter.h" +#include "WWSprite.h" + +int i; +WWDisplay ww_display; + +ww_display = WonxDisplay_GetWWDisplay(Wonx_GetWonxDisplay()); + +WWColorMap_PrintData(WWDisplay_GetColorMap(ww_display), stdout); + +for (i = 0; i < 16; i++) + WWPalette_PrintData(WWDisplay_GetPalette(ww_display, i), stdout); + +for (i = 0; i < 512; i++) + WWCharacter_PrintData(WWDisplay_GetCharacter(ww_display, i), stdout); + +for (i = 0; i < 128; i++) + WWSprite_PrintData(WWDisplay_GetSprite(ww_display, i), stdout); + +のようなコードを挿入することにより,任意の場所でキャラクタやパレットの +ダンプデータを出力させることができます. + +プログラム中に,不安な場所があったら, + +#ifdef _WONX_ +ww_display = WonxDisplay_GetWWDisplay(Wonx_GetWonxDisplay()); +printf("Before setting:\n"); +WWSprite_PrintData(WWDisplay_GetSprite(ww_display, 0), stdout); +#endif + +/* ここにスプライトの設定についての不安なコードがある */ + +#ifdef _WONX_ +printf("After setting:\n"); +WWSprite_PrintData(WWDisplay_GetSprite(ww_display, 0), stdout); +#endif + +のようにして不安なコードの前後でダンプデータを取ると,デバッグに +役立つでしょう. + ■ 作者 Wonx は,坂井弘亮がその大部分を往復3時間の通勤電車の中で Libretto で書いた, diff --git a/WWText.c b/WWText.c index 8401248..5fe7e9b 100644 --- a/WWText.c +++ b/WWText.c @@ -73,8 +73,11 @@ int WWText_PutCharacter(WWText ww_text, int x, int y, int character, { WWCharacter ww_character; - if ((character < 0) || (character > 127)) - Wonx_Error("WWText_PutCharacter", "Character number is out of range."); + if ((character < 0) || (character > 127)) { + printf("warning : WWText_PutCharacter() : Character number is out of range.\n"); + fflush(stdout); + return (-1); + } /* * テキスト表示は,text_window_init() で指定したテキストウインドウの @@ -82,8 +85,11 @@ int WWText_PutCharacter(WWText ww_text, int x, int y, int character, */ if ( (x < 0) || (x > WWText_GetWidth( ww_text) - 1) || - (y < 0) || (y > WWText_GetHeight(ww_text) - 1) ) - Wonx_Error("WWText_PutCharacter", "Position is out of range."); + (y < 0) || (y > WWText_GetHeight(ww_text) - 1) ) { + printf("warning : WWText_PutCharacter() : Position is out of range.\n"); + fflush(stdout); + return (-1); + } #if 0 n = WWText_GetBase(ww_text) + diff --git a/comm.c b/comm.c index e72298c..6617387 100644 --- a/comm.c +++ b/comm.c @@ -144,6 +144,7 @@ static int comm_input(int timeout) select(fileno(stdin) + 1, &bitmap, NULL, NULL, t_p); c = FD_ISSET(fileno(stdin), &bitmap) ? fgetc(stdin) : -1; + c = (c == '\n') ? '\r' : c; return (c); } diff --git a/wonx_include/types.h b/wonx_include/types.h index ddcdda0..ba54aad 100644 --- a/wonx_include/types.h +++ b/wonx_include/types.h @@ -5,6 +5,10 @@ #include /* for NULL definition */ +#ifndef _WONX_ +#define _WONX_ +#endif + #ifdef TYPEDEF_USHORT typedef unsigned short int ushort; #endif