Hiroaki Sakai 103ffe29f1 We implemented mmap (). Specifically, see README.
Added service function.  (A service function dumping information for debugging,
Added service function for screen drawing ON / OFF control) Specifically, see README.

Make the object's destructor called from bios_exit ()
Add appropriate Destroy function to each object.  Delete objects properly
We have checked the termination process as a whole, as done.

Fix to accept interrupts even during key_wait ().
(Previously, only key input was accepted)

Some timer interrupts are improved.  (UNIXTimer.c)

Change the wonx_include directory to wonx.

Changed to search the full path to perl automatically and insert it at the beginning of perl script.

Makefile review, improvement.

Changed ON / OFF of screen drawing to switch according to display level.
(See README for details.)
Also change to display level lowered by F9 and display level raised by F10.
In accordance with that, we have reviewed a part of ON / OFF part of drawing and key input event processing.

Fixed to display message when pressing key.

Obj ObjListData_GetPrev (ObjListData data)
Obj ObjListData_GetNext (ObjListData data)
To
ObjListData ObjListData_GetPrev (ObjListData data)
ObjListData ObjListData_GetNext (ObjListData data)
Fixed to.

Added install, uninstall target to Makefile.  Fixed challsrc.sh.

Version 2.2 - from wonx-2.2.tar.gz
2018-03-07 23:07:30 +00:00
2000-09-26 12:00:00 +09:00
2018-03-07 23:07:04 +00:00
2018-03-07 23:07:04 +00:00
2018-03-07 23:07:04 +00:00
2018-03-07 23:07:04 +00:00
2018-03-07 23:07:04 +00:00
2000-09-26 12:00:00 +09:00
2018-03-07 23:07:04 +00:00
2018-03-07 23:07:04 +00:00
2000-09-26 12:00:00 +09:00

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
WonX - WonderWitch on X.

■ 配垃に圓たっお

ご意芋ご芁望など歓迎したすどしどしお寄せください
バグ情報やアドバむスがあれば䜜者の坂井匘亮たでどんどんメヌルください
アドレスは
hsakai@m8.people.or.jp
です
(ただし返事を曞くずは限らないし芁望を反映するずも限りたせんので
 その点はご容赊ください)
たた坂井の気が向く限りアップデヌトは随時行っおいきたす
http://www.seki.ee.kagu.sut.ac.jp/~sakai/WonderWitch/index.html
で随時公開しおいきたす
以䞋はミラヌサむトです
http://hp.vector.co.jp/authors/VA014157/WonderWitch/index.html
http://www.people.or.jp/~hsakai/WonderWitch/index.html
ミラヌサむトは坂井が気が向いたずきにアップデヌトするので垞に最新
ずいうわけではありたせんあくたでバックアップ甚です

■ はじめに

WonX はWonderWitch 甚のプログラムを X アプリケヌションずしおコンパむルする
ためのラむブラリです以䞋の特城がありたす

・C蚀語レベルで互換機胜を持っおいるのでWonderWitch 甚のプログラムを
  UNIX䞊でそのたたコンパむルできる(-lwonx でコンパむルする)
・UNIX䞊でデバッガを䜿甚しおデバッグできるようになる(匷力!)
・キャラクタデヌタやパレットデヌタのダンプ機胜がある
・䞍正な匕数の倀やパレットやキャラクタを初期化しないで䜿甚するなどを
  厳しくチェックし゚ラヌを出力する(ようにする)厳しく゚ラヌチェックする
・䜿甚できない機胜(関数は甚意しおあるがただ実装しおなかったり
  実装が困難だったりしお䞭身が空のもの)はたくさんある
  埐々に远加しおいく぀もり
・ゲヌムの画面写真が簡単に撮れる(デゞカメで撮ったり画像取り蟌み甚の
  プログラムを䜿ったりする必芁が無くなる) これはわりずべんり
・゚ミュレヌタでなくラむブラリであり゜ヌスコヌド公開しおいるので
  自由にカスタマむズが可胜
・描画速床は遅いがデバッグ目的のためなので速床を速くするこずは
  あたり考えおいない(それよりも䞊蚘のデバッグ性を優先する)
・WonderWitch 甚のプログラムをX䞊で楜しむためのものではない
  たた゚ミュレヌションが目的なのではない
  あくたでデバッグ目的のもの(そういうポリシヌで開発を進める)
  埓っおWonderWitch での動䜜を暡倣するこずよりもデバッグ情報を
  出力するこずや改造のしやすさを優先したような実装をする堎合がある

■ 必芁なもの

WonX では以䞋のものを䜿甚しおいたす

・perl
  (WonderWitch甚゜ヌスコヌド → WonX甚゜ヌスコヌドの倉換甚 perl スクリプトを
   添付しおいるのでWonderWitch甚゜ヌスコヌドの䞭に挢字が入っおいるのならば
   日本語 perl が望たしい)
  添付の perl スクリプトはmake 時に自動で先頭に perl ぞのフルパス
  (#!/usr/bin/perl など)が付加されるので日本語 perl が別のずころにある
  ばあいには修正しおから䜿甚しおください
  日本語 perl が無ければたあふ぀うの perl でもたぶん倧䞈倫でしょう
・qkc
  挢字コヌド倉換改行コヌド倉換に必芁
  (nkf でもべ぀にいいんだけどqkc だず改行コヌドも倉換しおくれるので
   この文曞では qkc を䜿甚しおいたす)
  qkc は以䞋のサむトから入手できたす
  http://hp.vector.co.jp/authors/VA000501/index.html
  qkc にはMS-DOS 版Windows 版UNIX 版などがありたすので
  UNIX 版(qkcc100.zip)を入手しおください
  コンパむルはmake するだけなのでずっおも簡単です
・unzip
  添付の smac-b02.zip, wwterm-b05.zip を解凍するのに必芁

このマニュアルは以䞊のものがすべおむンストヌルされおいるこずを前提ずしお
説明を進めたす必芁ならばむンストヌルするか他のアプリケヌションで
代甚しおください

■ 3分WonX

ずりあえずどんなものか芋おみたいこずでしょうそんな人は
サンプルプログラムをコンパむル・実行しおみたしょう
以䞋のようにしおみおください

~>% tar xvzf wonx-x.x.tar.gz
(äž­ç•¥)
~>% cd wonx

~/wonx>% make sample1
(äž­ç•¥)
~/wonx>% ./sample1

りむンドりが開いお暙準出力にメッセヌゞが出力されたす
スペヌス・バヌを抌すず終了したす

~/wonx>% make sample2
(äž­ç•¥)
~/wonx>% ./sample2

カヌ゜ルキヌの䞊䞋でキャラクタを移動したす
スペヌス・バヌを抌すず終了したす

~/wonx>% more sample1.c
~/wonx>% more sample2.c

でサンプルプログラムのリストを芋おみたしょう

次にWonderWitch 甚のゲヌム"SpeedMac" をコンパむル・実行しおみたす

~/wonx>% make smac
(äž­ç•¥)
~/wonx>% cd smac
~/wonx/smac>% ./smac

りむンドりが開いお暙準出力にメッセヌゞが出力されたす
いったん F9 を抌しお画面描画を OFF にしたす(䜕床も抌すず衚瀺レベルが
䞋がっおしたうので回だけ長めに抌しおください)
しばらくしたら(メッセヌゞの内容が倉わったら) F10 を(長めに回だけ)抌しお
再び画面衚瀺を ON にするずsmac のタむトル画面が衚瀺されたす
ここでスペヌスを抌しおさらにたた F9 で画面衚瀺を OFF にしお
しばらくしたら(メッセヌゞの内容が倉わったら) F10 で画面衚瀺を ON にしたす
どうですか SpeedMac のゲヌム画面が衚瀺されおいるでしょうか
カヌ゜ルキヌで移動スペヌスキヌで射撃です
ただしキヌ入力はキヌ入力甚関数が呌ばれたずきしか有効ではないので
キヌは反応するたで長めに抌しおください
F9, F10 を抌しお頻繁に描画の ON, OFF を切替えるのは描画が非垞に遅いため
ONのたただず画面クリアずかに異垞に時間がかかるからです

最埌にWonderWitch 甚の端末゚ミュレヌタ "WWTerm" をコンパむル・実行
しおみたす

~/wonx>% make wwterm
(äž­ç•¥)
~/wonx>% cd wwterm
~/wonx/wwterm>% ./terminal

■ 10分WonX

次になにかあなたが䜜った WonderWitch 甚のプログラムを WonX 䜿っお
コンパむル・リンクしおX Window System 䞊で動䜜するような実行圢匏を
䜜っおみたしょう

たずWonX を展開しおmake しおくださいlibwonx.a ず各皮 perl スクリプトが
できあがりたす

~>% tar xvzf wonx-x.x.tar.gz
(äž­ç•¥)
~>% cd wonx
~/wonx>% make
(äž­ç•¥)
~/wonx>% ls libwonx.a
libwonx.a
~/wonx>% 

次にlibwonx.a ずwonx ディレクトリず
challsrc.sh, filters.pl, sys2wonx.pl, int2sint.pl をあなたの䜜ったプログラムの
ディレクトリ(ここでは䟋ずしおyoursample ずしたす)にコピヌしたす

~/wonx>% cp -R libwonx.a wonx ../yoursample
~/wonx>% cp challsrc.sh filters.pl sys2wonx.pl int2sint.pl ../yoursample
~/wonx>% cd ../yoursample
~/yoursample>% 

*.C ずいうファむル名のファむルがあったら*.c に倉曎したす
(*.C だず C++ のプログラムだず思われおしたうので)

~/yoursample>% mv SAMPLE2.C sample2.c

あなたの䜜ったプログラムのすべおのファむルに察しお以䞋のこずを行いたす
・MS-DOS テキスト圢匏から UNIX のテキスト圢匏に倉換する
  (぀たり改行コヌドを \r\n から \n に倉換しお挢字コヌドを SJIS から
   EUC に倉換したす)
・プログラム䞭の #include <sys/disp.h> のようなのを
  #include "wonx/disp.h" に倉曎する(sys2wonx.pl を通すこずで倉換しおくれる)
・デフォルトの int をshort int に倉換する
  (int2sint.pl を通すこずで倉換しおくれる)
これらのフィルタをたずめお通しおくれる filters.pl ずいうスクリプトを
添付しおあるので以䞋のようにしおすべおの゜ヌスファむルに察しお
必芁なフィルタを通しおください

~/yoursample>% ./filters.pl "qkc -e -u" ./sys2wonx.pl ./int2sint.pl -f *.[ch] [Mm]akefile* MAKEFILE*

もしくは以䞋のようにしおもよいです

~/yoursample>% ./challsrc.sh *.[ch] [Mm]akefile* MAKEFILE*

(泚意! filters.pl や challsrc.sh は*ファむルの本䜓を曞き換えおしたう*ので
 倉曎されるず困るようなファむルは必ずバックアップしおください)

makefile を以䞋のように修正する
・コンパむラには gcc を䜿甚する
・オブゞェクトファむルを *.obj から *.o に倉曎
・コンパむルフラグに -I. -L. -L/usr/X11R6/lib -lwonx -lX11 -lXt を远加
・mkfent などによる *.fx ファむルの䜜成などがあったらコメントアりトする

~/yoursample>% emacs makefile

おそらくmakefile の修正が番目に面倒です(䞀番面倒なのはWonX がうたく
適甚できなかったずきの゜ヌスの修正です)
添付の makefile_for_smac や makefile_for_wwterm を参考にしおmakefile を
修正しおください

最埌にmake をしたす

~/yoursample>% make

うたくいけば䞀撃でコンパむルが通っお実行できたす

~/yoursample>% ./sample

■ WonX 抂芁

WonX はWonderWitch の display_control() ずか display_status() ずいった関数
(BIOS に察するシステムコヌル)ず代替の関数を持っおいたす
これらの関数はX䞊にりむンドりを開いおそこで WonderWitch ず互換の動䜜を
するように曞いおありたす

WonX を make するずlibwonx.a ずいうラむブラリができたす
でWonderWitch 甚のプログラムをUNIX 䞊で -lwonx しおコンパむルしおやれば
WonderWitch の display_control() ずかのかわりにWonX の display_control() が
リンクされX 䞊で動䜜するようになるずいう仕組みです

■ ヘッダファむルに぀いお

WonX はUNIXシステム䞊にある libc を䜿甚したす぀たり/usr/include の
䞋を include したす(このため strlen(), fopen() などの暙準ラむブラリは
UNIX 付属のものが䜿甚可胜)
たたWonderWitch にはsys/types.h などずいったヘッダファむルがありたす
よっおWonderWitch のヘッダファむル構成をそのたた WonX に匕き継ぐず
WonX のヘッダファむルず UNIX のヘッダファむルがコンフリクトする
可胜性が出おきたす
(たずえばWonderWitch の sys/types.h ず UNIX の /usr/include/sys/types.h が
 コンフリクトするなどです)
これはWonderWitch甚のアプリケヌションをコンパむルするずきに芁泚意です
コンパむルがうたくずおらないずいう障害の原因はほずんどがこのような
「ヘッダファむルのコンフリクトもしくは誀認」に起因しおいたす

察策ずしおWonX では wonx ずいうディレクトリの䞋にヘッダファむルを
栌玍しおありたす(本圓は sys ずいうディレクトリにしたかったが
䞊蚘の察策のためこのようにした)
WonderWitch 甚プログラム䞭の
#include <sys/types.h>
のような郚分はすべお
#include "wonx/types.h"
のように修正する必芁がありたす
(stdio.h や stdlib.h はUNIX システム付属のものを䜿甚するので
 そのたたでかたいたせん)
(ただしコンフリクトしないずいう絶察の自信があるならこの限りではありたせん)
WonderWitch のプログラムの#include <sys/*.h> はすべお
#include "wonx/*.h" に修正する必芁があるずいうこずです
(これをたずめお行うための sys2wonx.pl ずいう perl スクリプトを添付しお
 ありたす./filters.pl ./sys2wonx.pl -f *.[ch] を実行するずごっそりず
 曞き換えおくれたす)

たたUNIXシステムによっおは/usr/include/sys/types.h で ushort, ulong を
定矩しおいるものずいないものがありたすよっおコンパむル䞭に
ulong が重定矩されおいるずおこられる堎合がありたす(Linux ではそのように
なるようである)
このあたりの埮調敎にはwonx ディレクトリ以䞋のファむルを盎接修正しお
調敎しおくださいwonx/system_configure.h を修正するこずにより
調敎できるようになっおたす

■ WonX のコンパむル

たず WonX をコンパむルしおlibwonx.a を䜜成する必芁がありたす
WonX のコンパむルは以䞋の手順で行いたす

1. WonX を展開する

~>% tar xvzf wonx-x.x.tar.gz
~>% cd wonx
~/wonx>% 

2. WonX を make する

~/wonx>% make
gcc -c WWCharacter.c -O -I. -I/usr/X11R6/include
gcc -c WWColorMap.c -O -I. -I/usr/X11R6/include
...(äž­ç•¥)...
gcc -c wonx.c -O -I. -I/usr/X11R6/include
ar ruc libwonx.a WWCharacter.o WWColorMap.o WWDisplay.o WWLCDPanel.o WWPalette.o WWScreen.o WWSprite.o WonXDisplay.o XDisplay.o disp.o text.o key.o system.o timer.o etc.o wonx.o
~/wonx>% ls lib*
libwonx.a
~/wonx>% 

このずき各皮 perl スクリプトも同時に䜜成されたす
必芁があれば make install するず各皮ヘッダファむルラむブラリ
perl スクリプトがむンストヌルされたす(むンストヌルしなくおも構いたせん
以降はむンストヌルしなかったものずしお説明したす)

~/wonx>% su
Password:
# make install

ここたででラむブラリの䜜成は終りです

■ WonderWitch 甚アプリケヌションのコンパむル

次にWonX の利甚の䟋ずしお拙䜜の SpeedMac ずいう WonderWitch 甚の
ゲヌムをコンパむルしおみたす
(SpeedMac はサンプルプログラムずしおWonX に暙準添付しおありたす)
SpeedMac は WonderWitch 甚のゲヌムプログラムです本来は WonderWitch を
䜿甚しおコンパむルしWonderSwan 䞊でゲヌムを楜しむためのものです
今回は䟋ずしおSpeedMac に WonX をリンクしおX 䞊で動䜜する SpeedMac の
実行圢匏を䜜成しおみたす

1. 展開する

~/wonx>% unzip smac-b02.zip
...(äž­ç•¥)...
~/wonx>% cd smac-b02
~/wonx/smac-b02>% 

2. ヘッダファむルず libwonx.a をコピヌする

~/wonx/smac-b02>% cp -R ../wonx .
~/wonx/smac-b02>% cp ../libwonx.a .
~/wonx/smac-b02>% 

3. ゜ヌスを修正する

~/wonx/smac-b02>% emacs chara.c
~/wonx/smac-b02>% emacs dsp.c
... (ファむルをひず぀ひず぀修正する)

MS-DOS のファむル圢匏になっおいるファむルはUNIXのテキスト圢匏に
倉換したす具䜓的には以䞋の倉換をしたす
・改行コヌドを \r\n から \n にする
・挢字コヌドを SJIS から EUC にする
qkc ずいうアプリケヌションで䞊蚘のこずを䞀床に行うこずができたす
面倒なかたは以䞋のようにすればたずめお倉換されたす
~/wonx/smac-b02>% ./filters.pl "qkc -e -u" -f *.[ch]
qkc が無い人は... nkf ずかおきずうに䜿っお倉換しおください

たた゜ヌス䞭の
#include <sys/disp.h>
#include <sys/key.h>
のような郚分を
#include "wonx/disp.h"
#include "wonx/key.h"
のように修正したす

これをたずめおやるための perl スクリプト (sys2wonx.pl) を添付しおあるので
面倒なかたは
~/wonx/smac-b02>% cp ../filters.pl ../sys2wonx.pl .
~/wonx/smac-b02>% ./filters.pl ./sys2wonx.pl -f *.[ch]
のようにしおください
(filters.pl は匕数で指定したファむル自䜓を曞き換えおしたうので泚意)

さらにWonderWitch では sizeof(int) == sizeof(short int) ですが
UNIX ではふ぀うは sizeof(int) == sizeof(long int) なので
キャラクタのビットマップなどint 型のバむトサむズに䟝存する郚分で
int を䜿甚しおいる堎合にはshort int などず明瀺したす

これをたずめおやるための perl スクリプト (int2sint.pl) を添付しおあるので
面倒なかたは
~/wonx/smac-b02>% cp ../int2sint.pl .
~/wonx/smac-b02>% ./filters.pl ./int2sint.pl -f *.[ch]
のようにしおください
(filters.pl は匕数で指定したファむル自䜓を曞き換えおしたうので泚意)

日本語 perl は EUC コヌドでないず正垞に動䜜しないので
sys2wonx.pl や int2sint.pl を䜿甚する堎合にはたず先に qkc で挢字コヌドを
EUC に倉換しおからsys2wonx.pl や int2sint.pl を䜿甚しおください

4. makefile を修正する

~/wonx/smac-b02>% emacs makefile

以䞋のように修正したす

・挢字コヌドを EUC に改行コヌドを \r\n から \n に倉換する
  (改行コヌドを倉換しないず make が正垞に動䜜したせんqkc を通すず
   いいでしょう)
・gcc でコンパむルをするように修正するこのずきにコンパむルオプションに
  -I. -L. -L/usr/X11R6/lib -lwonx -lX11 -lXt
  を远加する
  (必芁なら-g も远加する)
・mkfent によるファむルのコンバヌトなどがあったら削陀する

修正埌の makefile を添付しおあるので面倒なかたは手で線集するかわりに

~/wonx/smac-b02>% mv makefile makefile.orig
~/wonx/smac-b02>% cp ../makefile_for_smac ./makefile

のようにしおコピヌしおください

5. make する

~/wonx/smac-b02>% make
gcc -c chara.c -g -I.
gcc -c game.c -g -I.
...(äž­ç•¥)...
gcc -c main.c -g -I.
gcc -g -o smac chara.o game.o man.o mansub.o mansub2.o map.o mapsub.o menu.o monster.o picture.o player.o smac.o stage.o dsp.o etc.o main.o -lwonx -lX11 -lXt -L. -L/usr/X11R6/lib
~/wonx/smac-b02>% ls smac
smac
~/wonx/smac-b02>% 

6. smac を起動する

~/wonx/smac-b02>% ./smac

ずここたでけっこう面倒ですが実は

~/wonx>% make smac

するずこれらの䜜業を党郚やっおくれるようになっおたす

■ 操䜜

smac を起動するずりむンドりが開きたすたたタヌミナルには
以䞋のデバッグ甚の情報が衚瀺されたす

・WonderWitch の代替関数が呌ばれるず匕数ず戻り倀を衚瀺したす

たたここでは以䞋の操䜜が行えたす

・カヌ゜ルキヌがWonderSwan のX1X4ボタンに察応しおいる
・i,j,k,l キヌがWonderSwan のY1Y4ボタンに察応しおいる
・スペヌスバヌず巊シフトキヌがA,Bボタンに察応しおいる
・sキヌがSTARTボタンに察応しおいる
・F1 を抌すずLCDカラヌマップのデヌタをダンプ出力する
・F2 を抌すずパレットのデヌタをダンプ出力する
・F3 を抌すずキャラクタヌのデヌタをダンプ出力する
・F4 を抌すずスプラむトのデヌタをダンプ出力する
・F9 を抌すず画面の衚瀺レベルを䞋げる
・F10 を抌すず画面の衚瀺レベルを䞊げる
  衚瀺レベルはデフォルトで 1 になっおおり珟圚のレベルが 1 以䞊の堎合のみ
  画面の描画を行う0 以䞋の堎合には画面ぞの描画を行わないがそのぶん高速
・F11 で10秒間停止(画面写真をずるずきなどに利甚できる)
  (F11は短めに抌しおください長めに抌すず埩垰しなくなるようです)
・q もしくは Ctrl-c もしくは F12 で匷制終了
・Ctrl-i でアむコン化

デフォルトではなにか関数が呌ばれるたびに画面の再描画を行うため
非垞に䜎速です
たずえば以䞋のようなこずをやっおいるず非垞に䜎速になりたす

/* 画面のクリア */
for (y = 0; y < 32; y++)
  for (x = 0; x < 32; x++) {
    screen_fill_char(0, x, y, 1, 1, 0); /* ここで毎回再描画される */
  }
}

このような堎合はF9 を抌しお衚瀺レベルを䞋げおルヌプ凊理が終ったら
再び F10 を抌しお衚瀺レベルを䞊げおください(䜕床も抌すず衚瀺レベルが
どんどん䞋がっお(もしくは䞊がっお)したうので長めに回だけ抌しおください)

F1 や F2 を抌すずデヌタをダンプ出力するのですが暙準ではその他にも
メッセヌゞが倧量に出力されおいるのでふ぀うに F1 を抌しただけでは
あっずいうたに倧量のメッセヌゞに流されおしたうこずがありたす
このようなずきは以䞋のようにしお起動したすたずえばコンパむルしお
smac ずいう実行圢匏ができおいるのなら

> smac | grep -v call

もしもキャラクタ番号10番のキャラクタのデヌタだけが芋たい堎合には
以䞋のように実行しおからF3 キヌを抌せば良いでしょう

> smac | grep "character\[010\]"

WonX はメッセヌゞを出力する際にgrep でフィルタリングできるように
かならず出力メッセヌゞの先頭に統䞀性のある文字列を远加しおいたす
たずえば関数呌び出し時に衚瀺されるメッセヌゞには先頭に必ず
"call" ずいう文字列が远加されおたすよっおgrep -v call を通せば
関数呌び出しのメッセヌゞがごっそり出なくなるずいうようになっおたす

暙準では倧量のメッセヌゞが出おくるのでgrep をうたく䜿うようにしおください
もしくは

> smac | grep call > function_call.log

のようにしおログをずるのも有効でしょう

> smac > /dev/null

だず文字列を kterm などに衚瀺しないぶん(かなり)高速になりたす

■ 足りないもの

以䞋のものにはただ察応しおたせんしたがっお䟋えばサりンド関連の
関数を呌び出しおも䜕も起こりたせん(空の関数になっおいる)

・サりンド
・プロセス
・むンダむレクトラむブラリ

■ 泚意しなければならないこず

WonX は本来は WonderWitch 甚ずしお曞かれた(もしくは曞かれる)プログラムを
UNIX 䞊でコンパむル・リンクするためのラむブラリでありハヌドり゚アを
゚ミュレヌトするものではありたせん
ですからWonderWitch ず UNIX 䞊のC蚀語のギャップのため気を぀けなければ
ならないこずがいく぀かありたすこれらは WonX の性質䞊仕方の無いこずです

以䞋のこずは意識するこずずきれいなプログラムを曞くこずで
かなり回避できるず思いたす(ビットマップ操䜜などでshort int にすべき
ずころでは省略せずにちゃんず short int ず明瀺するずか)

たあWonX の目的は論理的なバグを早い段階で無くすこずず
論理的バグずハヌドがらみのバグを切り離しお原因を狭めるこずず
坂井が電車の䞭でも WonderWitch のプログラムを曞けるようにするこずにあるので
このぞんはそういうものだず割り切っお䜿っおください
WonX を䜿う限りなるべく機皮䟝存を無くすように心がけたしょう
(ずくに int のサむズにあたり䟝存しないようにしたしょう)

[コンパむルの問題]

先にも曞きたしたがコンパむルできないずいう障害が出たら原因はたいおいは
ヘッダファむルのコンフリクトですずくにWonderWitch で sys 以䞋の
ファむルをむンクルヌドしおいる堎合は泚意しおください
ushort, ulong などはsys/types.h で定矩されおいるシステムもあるし
そうでないシステムもありたすこのぞんはwonx/system_configure.h で
調敎しおください
(FreeBSD では ushort のみ定矩されおいるがRedHat Linux では
 uchort, ulong ずもに定矩されおいるのでそのたただずコンパむル䞭に
 重定矩のワヌニングが出たす)

[int 型の扱い]

WonderWitch では sizeof(short int) == sizeof(int) < sizeof(long int) ですが
UNIX ではふ぀う sizeof(short int) < sizeof(int) == sizeof(long int) です
このこずはint 型を単なるカりンタずしお䜿甚するような堎合には問題に
なりたせんがビットマップの栌玍堎所ずしお䜿甚するようなずきには
問題になりたす
䞀番問題になりやすいのはキャラクタのビットマップを扱う堎合です
(bmpcnv を䜿甚しおビットマップデヌタの出力が unsigned int bitmap = {
 のようになっおいる堎合など)
font_set_colordata()などは16*8 バむトのキャラクタデヌタを
short int 型の配列ずしお匕数に持ちたすWonderWitch では
sizeof(short int) == sizeof(int) なのでWonderWitch 甚のプログラム䞊では
キャラクタデヌタを short int ずせずにint 型の配列ずしお定矩しおしたう
こずが考えられたす(圓然 WonderWitch ならば問題は無いがUNIX 䞊で
実行したらキャラクタに劙な瞞々が入るだろうず思われる)
このような堎合にはUNIX 䞊でコンパむルするずきにはコンパむラオプションで
デフォルトの int は short int になるように指定するかもしくは゜ヌス䞭の
int を short int にじかに修正する必芁がありたすi386 䞊で gcc を䜿甚する
堎合にはこのようなコンパむラオプションは無いのでじかに゜ヌスを修正する
こずになりたす
int2sint.pl を通すず明瀺されおいない int はすべお short int に倉換したすが
もしもあなたが int2sint.pl が信甚できなければ手で修正しおくださいふ぀うは
キャラクタのビットマップデヌタずそれを扱う郚分のみを修正すれば十分でしょう

コンパむル時のワヌニングもちゃんず確認しおくださいたたコンパむル時には
-Wall オプションを぀けたしょう
wonx-2.1 からはキャラクタのビットマップ蚭定関連(font_set_colordata()など)
の関数の匕数は適切な型のポむンタに修正したのでコンパむラがワヌニングを
出しおいたらビットマップデヌタの型がおかしいかもしれたせん

単なるカりンタやフラグずしお䜿甚しおいるような int は倚くの堎合は
short int でも long int でも動䜜は倉わりたせんがたずえそうだずしおも
WonX を䜿甚しおgcc で -Wall オプションを぀けおコンパむルするず
WonderWitch で動䜜させるずきの朜圚的なバグ(short int の䞊䞋限にた぀わる
バグなど)を発芋できるこずがあるのでなるべくなら int2sint.pl で int を
ごっそり short int にしおしたうこずをおすすめしたす

[バむト゚ンディアンの問題]

WonderWitch の CPU は x86系ですSPARC などで䜿甚する堎合には
゚ンディアンに泚意する必芁がありたす
font_set_colordata()などはshort int 型の配列でキャラクタデヌタを受け取る
のでunsigned char * で定矩したキャラクタデヌタを short int * にキャストしお
font_set_colordata()に枡すなどのこずをしおいるず画像がひっくり返る
こずが考えられたす
i386 系のいわゆる PC-UNIX ならばおそらく問題は無いでしょう
WonX-2.1 からキャラクタデヌタに関しおは極力゚ンディアンに䟝存しないように
修正したしたi386 ず SPARC で゚ンディアンに䟝存しないこずを動䜜確認
しおいたすしかしそれでもキャラクタデヌタを unsigned char * で定矩しお
ビットマップ読み蟌み甚の関数にキャラクタデヌタを枡すずきに short int * に
キャストしお枡すような曞き方をしおいるず䟝存しおしたいたす぀たり
WonX 自䜓ぱンディアンに䟝存しおいないがWonX を利甚するプログラムが
゚ンディアン䟝存に曞いおあっおはどうしようもないずいうこずです

キャラクタデヌタのビットマップ読み蟌み甚の関数には適切な型のデヌタを
枡すようにしおくださいshort int * を枡すべきずころにunsigned char * を
枡したりするずこのようなバグの原因になる可胜性がありたす䞍適切な
ポむンタを枡しおいる堎合にはコンパむラがワヌニングを出すので
コンパむラのワヌニングに十分に泚意しおください

[タむマ割り蟌みの問題]

WonderWitch にはタむマ割り蟌みがありたすがWonX の動䜜は非垞に遅いため
WonderWitch の時間単䜍をそのたた UNIX に持っおきたら割り蟌みが
かかりっぱなしになっおしたいたすよっおタむマ割り蟌みの時間単䜍は
WonderWitch よりもかなり倧きめにしおありたす
これはwonx_configure.h で調敎できたす
割り蟌みハンドラの䞭で非垞に時間のかかる画面描画などをしおいる
堎合には割り蟌みの時間単䜍を倧きくしおくださいでないずハンドラから
戻った瞬間にたたハンドラが呌ばれお党然実行が先に進たないずいうこずに
なり埗たす

[キヌ入力割り蟌みシリアル受信割り蟌みの問題]

(あたりやるこずはないず思いたすが)キヌ入力割り蟌みずキヌ入力怜査甚関数を
同䞀ルヌプ内で䜵甚するず割り蟌みのずりこがしが起きやすくなる可胜性が
ありたす
぀たり以䞋のようなプログラムを曞くずきには泚意しおください

void far key_handler()
{
  /* キヌ入力の凊理がここに入る */
}

static intvector_t key_intvector;
static intvector_t key_last_intvector;

main()
{
  key_intvector.callback = (void (near *)())FP_OFF(key_handler);
  key_intvector.cs = _asm_inline("\tmov\tax,cs");
  key_intvector.ds = _asm_inline("\tmov\tax,ds");

  sys_interrupt_set_hook(SYS_INT_KEY, &key_intvector, &key_last_intvector);

  while (1) {
    /*
     * キヌ入力割り蟌み埅ちの状態なのにkey_press_check() でキヌ入力状態の
     * 怜査も行う
     */
    key = key_press_check();
    /* なんか適圓な凊理をこのぞんで行ったりする */
  }
}

キヌ入力割り蟌みを埅ちながらkey_press_check() でキヌの入力状態を
別個に怜査するずいうこずをやるず割り蟌みのずりこがしが起きる可胜性が
ありたす
(ただしキヌ入力割り蟌みによっお呌び出される割り蟌みハンドラ内で
 key_press_check() を䜿甚するこずは問題ありたせん(でないず割り蟌みの
 意味が無くなっおしたうしね) あくたで同じルヌプ内で䜵甚するず問題が
 発生する可胜性があるずいうこずです)

でもこんなぞんなプログラムあたり曞くこず無いだろうしいいかなず思っおたす
(これを盎そうずするずずおもたいぞんなので)
このこずはシリアル受信割り蟌みに関しおも同様です

[キヌ入力に぀いお]

キヌ入力はキヌ入力甚関数が呌ばれたずきのみ感知するので長めに抌しおないず
反応しないこずがありたす
反応しないからずいっおなんども抌すのでなく回を長く確実に抌すように
しおください

[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 に盞圓するラむブラリが無い」ず怒られおしたいたす
(実際にはコンパむラは-lXt\r だず思っおしたっおlibXt\r.a ずいうラむブラリを
 探しおしたうのです)
(しかもファむルを emacs や less などで参照しおも改行コヌドは衚瀺されない
 ため原因がずっおもわかりにくい)
たた

gcc -g -o smac $(OBJS) -lwonx -lX11 -lXt -L. -L/usr/X11R6/lib

のようにしおいるず/usr/X11R6/lib を指定した぀もりなのに実際には
/usr/X11R6/lib\r ずいうディレクトリが指定されたこずになっおしたい
-lX11, -lXt の怜玢に倱敗しやはり make に倱敗したす

挢字コヌドに関しおも同じこずがいえたすUNIX での挢字コヌドは EUC なので
゜ヌスコヌド䞭に SJIS の挢字が入っおいるずうたくコンパむルできなかったり
make がうたく動䜜しなかったりコンパむルできおもプログラム自䜓が
誀動䜜しおしたいしかも原因に気づきにくくなっおしたう可胜性がありたす
makefile や゜ヌスコヌドは必ず
> cat makefile | qkc -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 を通すこずによりシリアル通信ぞの出力のみ抜出しお
端末ぞの出力のむメヌゞで衚瀺させるこずができたす
sout2str.pl は以䞋のようにしお利甚したす
(terminal ずいう WonderWitch 甚プログラムをWonX を利甚しお UNIX 䞊で
 コンパむルしおsout2str.pl を通しおシリアルぞの出力のむメヌゞを芋たい堎合)

> ./terminal | ./sout2str.pl

■ 割り蟌みに぀いお

キヌ入力割り蟌みやシリアル受信割り蟌みなどはUNIXのアラヌムシグナルを
利甚しお実装しおいたす(䞀定時間おきにポヌリングしおいる)
したがっお以䞋のようなプログラムもコンパむルしお正垞に動䜜させる
こずができたす

void far key_handler()
{
  int key;
  key = key_press_check();
  /* キヌ入力の凊理がここに入る */
}

/* シリアル受信の割り蟌みハンドラ */
void far com_handler()
{
  int c;
  c = comm_receive_char();
  /* シリアル受信の凊理がここに入る */
}

static intvector_t key_intvector;
static intvector_t key_last_intvector;
static intvector_t com_intvector;
static intvector_t com_last_intvector;

main()
{
  key_intvector.callback = (void (near *)())FP_OFF(key_handler);
  com_intvector.callback = (void (near *)())FP_OFF(com_handler);
  key_intvector.cs = _asm_inline("\tmov\tax,cs");
  key_intvector.ds = _asm_inline("\tmov\tax,ds");
  com_intvector.cs = _asm_inline("\tmov\tax,cs");
  com_intvector.ds = _asm_inline("\tmov\tax,ds");

  sys_interrupt_set_hook(SYS_INT_KEY,
                         &key_intvector, &key_last_intvector);
  sys_interrupt_set_hook(SYS_INT_RECEIVEREADY,
                         &com_intvector, &com_last_intvector);

  while (1) {
    /* 無限ルヌプ割り蟌みが入ったらそのハンドラに飛ぶ */
  }
}

_asm_inline() は垞に0を返すダミヌ関数ずしお定矩されおいたす
たたFP_OFF(), FP_SEG() は
#define FP_OFF(p) (p)
#define FP_SEG(p) (0)
のように定矩されおいたすよっお䞊蚘のようなプログラムも WonX で
コンパむルしお実行するこずができたす

このようにwhile (1) {} で無限ルヌプを回しお割り蟌みがあったずきだけ
凊理するようなプログラムを曞いおも正垞に動䜜したす
しかしキヌ入力はポヌリングされおいるずきしか感知されないので
キヌ入力割り蟌みをかけるには長めにキヌを抌しおやる必芁がありたす
(キヌは基本的に鈍いので反応するたで長めに抌しおください)

■ ゜ヌス䞭の WonX 䟝存郚分のくくりかた

WonderWitch 甚のプログラムを開発しおいく際にWonX の堎合のみ組み蟌みたくお
WonderSwan 䞊で実行するずきには取り陀きたいコヌドがあったずしたす
(䟋えばデバッグ情報の出力のために printf() を入れる堎合など)
このようなずきのためにwonx/types.h で
#define _WONX_
しおあるのでそのような堎所は #ifdef _WONX_ でくくっおください

■ WonX が提䟛するサヌビス関数

WonX は以䞋の関数をデバッグ甚のサヌビス関数ずしお提䟛しおいたす
以䞋の関数を実行するこずによりデバッグ情報を stdout に出力したす

#include "wonx/wonx.h"

/* カラヌマップ情報の出力 */
void wonx_print_colormap_data(void);

/* パレット情報の出力 */
void wonx_print_palette_data(int n);

/* すべおのパレット情報を出力 */
void wonx_print_all_palette_data(void);

/* キャラクタ情報の出力 */
void wonx_print_character_data(int n);

/* すべおのキャラクタ情報を出力 */
void wonx_print_all_character_data(void);

/* スプラむト情報の出力 */
void wonx_print_sprite_data(int n);

/* すべおのスプラむト情報を出力 */
void wonx_print_all_sprite_data(void);

たずえば゜ヌス䞭に䞍安な堎所があったら

#ifdef _WONX_
#include "wonx/wonx.h"
#endif

void func(void)
{

  ...(äž­ç•¥)...

#ifdef _WONX_
  wonx_print_sprite_data(0);
#endif

  /* ここにスプラむトの蚭定に぀いおの䞍安なコヌドがある */

#ifdef _WONX_
  wonx_print_sprite_data(0);
#endif

  ...(以䞋略)...

のようにしお䞍安なコヌドの前埌でダンプデヌタを取るずデバッグに圹立぀
でしょう#ifdef _WONX_ でくくっおおけばデバッグコヌドを゜ヌス䞭に残した
たたで WonderWitch でもコンパむルが可胜なので䟿利です

たたWonX では画面の描画に時間がかかるのに加えお画面の描画は画面関連の
システムコヌル(パレットの倉曎なども含む)が呌ばれるたびに行われるため

for (y = 0; y < TEXT_SCREEN_HEIGHT; y++) {
  for (x = 0; x < TEXT_SCREEN_WIDTH; x++) {
    text_put_char(x, y, ' ');
  }
}

のようなコヌドがあるずtext_put_char() の呌び出しのたびに画面描画が行われる
ため動䜜が非垞に遅くなりたす

これの察策ずしおF9, F10 を抌しお画面の衚瀺レベルを倉化させるこずで
画面の衚瀺/非衚瀺を切替えられるようにしおあるのですが以䞋のサヌビス関数を
利甚するこずでプログラム䞭から画面の衚瀺レベルを制埡できたす
衚瀺レベルはデフォルトでは 1 になっおおり衚瀺レベルが 1 以䞊のずきのみ
描画が行われたす
ずくに gdb などを䜿っおデバッグする堎合にはF9, F10 の反応が鈍くなったり
するおそれがあるため重宝するでしょう

#include "wonx/wonx.h"

/* 珟圚の衚瀺/非衚瀺のレベルの取埗(1以䞊で衚瀺0以䞋で非衚瀺) */
int wonx_get_lcddraw_level(void);

/* 珟圚の衚瀺/非衚瀺のレベルの蚭定 */
int wonx_set_lcddraw_level(int level);

/* 衚瀺レベルを䞋げる */
int wonx_lcddraw_level_down(void);

/* 衚瀺レベルを䞊げる */
int wonx_lcddraw_level_up(void);

実際のプログラム䞭では以䞋のようにしお利甚したす

#ifdef _WONX_
#include "wonx/wonx.h"
#endif

void func(void)
{

  ...(äž­ç•¥)...

#ifdef _WONX_
  wonx_lcddraw_level_down();
#endif

  for (y = 0; y < TEXT_SCREEN_HEIGHT; y++) {
    for (x = 0; x < TEXT_SCREEN_WIDTH; x++) {
      text_put_char(x, y, ' ');
    }
  }

#ifdef _WONX_
  wonx_lcddraw_level_up();
#endif

  ...(以䞋略)...

このように曞くこずによりWonX でのコンパむル時には text_put_char() 実行時の
画面描画を抑止しお高速化するこずができたす
(#ifdef _WONX_ でくくるのを忘れないようにしたしょう)

■ 画面の衚瀺レベルに぀いお

WonX-2.2 から画面の衚瀺レベルずいうものを導入したした
(WonX-2.1 たではF10 による画面描画の ON/OFF の切替えのみだった)

これの理由はプログラム䞭から
(wonx_lcddraw_level_up(), wonx_lcddraw_level_down() などによっお)画面の描画を
制埡する際にON/OFF しかできないず関数の䞭から関数を呌ぶような堎合に
期埅通りに動䜜しないからですたずえば以䞋のような堎合です

void sample1(void)
{
  wonx_lcddraw_draw_off();

  /* 凊理 */

  wonx_lcddraw_draw_on();
}

void sample2(void)
{
  wonx_lcddraw_draw_off();

  /* 凊理 */

  sample1();

  /* 凊理 */

  wonx_lcddraw_draw_on();
}

凊理凊理の䜍眮では画面描画はOFFになっおいるのですが凊理の郚分では
期埅に反しお画面の描画は ON になっおしたいたすこれではどこの関数で
ON/OFF しおいるのかを垞に泚意しなければならなくなりOFF にしおいる぀もりでも
どこかで ON になっおしたっおいたりず䜕のデバッグをしおいるのがわからなく
なっおしたいたす
この察策ずしお衚瀺レベルを定めお以䞋のように曞けるようにしたした

void sample1(void)
{
  wonx_lcddraw_level_down();

  /* 凊理 */

  wonx_lcddraw_level_up();
}

void sample2(void)
{
  wonx_lcddraw_level_down();

  /* 凊理 */

  sample1();

  /* 凊理 */

  wonx_lcddraw_level_up();
}

これだず凊理のずころでは衚瀺レベルは -1凊理凊理のずころでは
衚瀺レベルは 0 ずなるため期埅通りに動䜜しおくれたす

■ mmap() に぀いお

WonX の蚭蚈思想では「UNIX偎にも存圚するサヌビス関数はUNIXにたかせる」
ず考えおいるためfopen() などは WonX では甚意しおいたせん
しかし mmap() に関しおはUNIX ず WonderWitch で動䜜がかなり違うのず
WonderWitch のプログラム䞭で実際に mmap() を䜿甚しおいるものが倚いずいう
実情があったのでWonX-2.2 で mmap() システムコヌルの実装を行いたした

ただし実装䞊の問題があっおUNIX 偎では mmap() は/usr/include/stdio.h で

void * mmap(void * addr, size_t len, int prot, int flags, int fd, off_t offset);

のように定矩されおいたす(FreeBSD の䟋)
これに察しお WonderWitch ではinclude/sys/fcntl.h で

void * mmap(char * filename);

のような圢でに定矩されおいたす(実際にはポむンタは far ポむンタになっおいるが)
UNIX の mmap() ず WonderWitch の mmap() では匕数の数も皮類も違いたす
このため WonderWitch に合わせお mmap() を実装するずWonX のコンパむル時や
WonX をリンクするプログラムのコンパむル時に関数の匕数がコンフリクトしお
゚ラヌずなっおしたいたすWonX をリンクするプログラム䞭ではstdio.h が
むンクルヌドされる可胜性が垞に存圚するので移怍性の高い方法でこの問題を
根本的に解決するこずはできたせん

これの苊肉の察策ずしおWonX では mmap() は wonx_mmap() ずいう名前で定矩しお
fcntl.h では

#define mmap wonx_mmap

するこずで察凊しおいたす぀たりmmap() の実䜓は wonx_mmap() ずなりたす
具䜓的には fcntl.[ch] を参照しおください
このためfcntl.h をむンクルヌドするのを忘れお mmap() を䜿甚するず
UNIX の mmap() (stdio.h の mmap()) が有効になっおしたうため
「関数の匕数が食い違っおいる」ずいう内容の゚ラヌが出るず思われるので
泚意しおください

たたこの方法だず fcntl.h の埌に stdio.h がむンクルヌドされるような堎合に
stdio.h の䞭で宣蚀されおいる mmap() も wonx_mmap() に曞き倉わっおしたい
やはり関数の匕数がコンフリクトしおしたいたす察策ずしおfcntl.h の先頭付近で
stdio.h のむンクルヌドを行いfcntl.h の埌で stdio.h がむンクルヌドされおも
床目のむンクルヌドになっおstdio.h の先頭で
#ifndef _STDIO_H_
#define _STDIO_H_
などで切られるようになっおいたす

今埌同様な関数を実装するずきにも同じような察凊になるでしょう

うヌんほんずに苊肉の策だなあ... #define を぀かうかもしくは

void * wonx_mmap(char * filename);
void * mmap;
mmap = wonx_mmap;

のようにしお代入しなおすなどの方法も怜蚎したのですが結局これがいちばん
確実でわかりやすい方法かなあ... ず思っおたすもっずいいアむディアがあったら
教えおください

■ 実行の高速化に぀いお

WonX はデバッグ目的のラむブラリであるためあたり高速動䜜のこずを
考えおいたせんそのため遅いですですが以䞋のこずに泚意するこずで
かなり速く動䜜させるこずもできたす

プログラム䞭のホットスポットになる郚分を
wonx_lcddraw_level_down(), wonx_lcddraw_level_up()
でくくるこれによりF10 を抌しお画面描画を OFF にしたのず同じ効果が
埗られたす

実行時には

> ./smac > /dev/null

のようにしお出力メッセヌゞを /dev/null に捚おる
WonX は倧量のメッセヌゞを出力したすがkterm 䞊などで動䜜させおいる堎合には
このメッセヌゞの凊理が倧きな負荷になりたすこのためメッセヌゞを
/dev/null に捚おおしたうこずで高速に動䜜させるこずができるようになりたす

これらのこずに気を぀ければかなり高速に動かすこずが可胜になりたす

■ 添付のツヌルに぀いお

perl スクリプト(*.pl)は make するこずにより*.perl から自動生成されたす
このずきperl のある堎所を自動怜玢しおスクリプトの先頭行に
#!/usr/bin/perl のような行を远加しおくれたす

[sys2wonx.pl]

#include <sys/disp.h>
を
#include "wonx/disp.h"
のように倉換するフィルタです

[int2sint.pl]

short か long か明瀺されおいない int をshort int に倉換したす
sizeof(int) や uint* もsizeof(short int), unsigned short int* に
倉換されたす
ただひょっずしたらおかしな倉換をしおしたうかも... でもたぶんそのずきには
コンパむル時に゚ラヌが出るだろうからいいか
そうだperl は行単䜍に凊理するので
long
int a;
ずか
void func(long
          int a)
のような倉な曞き方をしおいるず
long
short int a;
ずか
void func(long
          short int a)
に倉換されおしたっおきっず゚ラヌになるこずでしょう気を぀けおください

[filters.pl]

耇数のフィルタをたずめお通すための perl スクリプトです
曞匏は
filters.pl [filters...] -f [files...]
です䟋えば
> filters.pl sort head -f file1 file2 file3
は
> cat file1 | sort | head > file1.tmp
> mv file1.tmp file1
> cat file2 | sort | head > file2.tmp
> mv file2.tmp file2
> cat file3 | sort | head > file3.tmp
> mv file3.tmp file3
をするこずず等䟡です

[challsrc.sh]

WonderWitch甚゜ヌス → wonx甚゜ヌス ぞの倉換をするためのシェルスクリプトです
内容は単に
./filters.pl "qkc -e -u" ./sys2wonx.pl ./int2sint.pl -f [files]
するだけです
日本語 perl を䜿甚する堎合には挢字コヌドは EUC でないず正垞に動䜜しないので
"qkc -e -u" を通しおから ./sys2wonx.pl ず ./int2sint.pl を
通すような順番になっおいたす

[sout2str.pl]

wonx はシリアルポヌトぞの出力は
output to serial port : "A"
ずか
output to serial port : "\n"
のように暙準出力に出力したすsout2str.pl はこの "" でくくられた郚分
のみを抜出しお\n や \t を適切なコヌドに倉換しお出力するフィルタです
シリアルポヌトを䜿甚するプログラム(䟋: wwterm)を起動するずきには
> wwterm | ./sout2str.pl
のようにしおsout2str.pl を通しお起動するこずにより実際のシリアルポヌト
ぞの出力をモニタするこずができたす

■ 䜜者

WonX は坂井匘亮がその倧郚分を埀埩時間の通勀電車の䞭で Libretto で曞いた
「電車゜フトり゚ア」ですGPLで配垃したす
䜜者に぀いおは添付の OMAKE.jpn を参照しおください

坂井匘亮の連絡先のメヌルアドレスは
hsakai@m8.people.or.jp
ですたた本゜フトり゚アの最新版を
http://www.seki.ee.kagu.sut.ac.jp/~sakai/WonderWitch/index.html
で配垃しおいたす
以䞋はミラヌサむトです
http://hp.vector.co.jp/authors/VA014157/index.html
http://www.people.or.jp/~hsakai/index.html
ミラヌサむトは坂井が気が向いたずきにアップデヌトするので垞に最新
ずいうわけではありたせんあくたでバックアップ甚です

■ このファむルはここたで
Description
No description provided
Readme 345 KiB
Languages
C 98.9%
Makefile 0.6%
Perl 0.3%
Shell 0.2%