図形科学・BASIC移植メモ

この文書について

この文書は、図形科学の課題プログラムを F-BASIC に書きかえるときに問題となると思われる点について、簡単に解説したものです。 プログラム書き換えの際の主な方針を以下に示します。

変更点を最小にする
書き換えの作業量が可能な限り少なくなるよう、 見栄えの調整などは一切行っていません。 座標値なども、一部の例外を除き、修正を加える必要ありません。 作業の大部分は、描画命令の書式を機械的に修正することです
行番号を使用しない
F-BASICは、あまり行番号に馴染まないように作られています。 行番号の使用は百害有って一利無しなので、 一切使用しないように変更しました。
日本語を使用しない
F-BASIC は自由に日本語が使えますが、 敢えて使わないようにしています。 学生が間違って全角文字をプログラム中で使用てしまう、 などの無用のトラブルを避けるためです。
こちらのページで、書き換え前・書き換え後の両方のプログラムを例示し、 変更の実例を示してあります。 また、描画命令の変更点を 命令対応早見表に簡単にまとめてあります。 気の短い人は、まず実例と早見表をみてください。

この文書に書かれていない命令がある、 この文書の説明では不充分、といった状況に出会った場合は、 F-BASIC のメニュー右端にあるオンラインヘルプを参照してください。 紙のマニュアルと完全に同じものがインストールされています。

お詫び:Netscape Navigator4.0 以降では、 プログラム部分が正しく表示されないことが判明しました。 Navigator3 以前か、Internet Explorer でご覧ください。

目次

大文字・小文字の区別について

F-BASIC自体は、大文字と小文字を区別しないので、どちらを使用しても問題ありません。しかし、付属のエディタ中で、標準の状態では次のような方針で自動変換するように設定されています。

この設定を変更することも可能ですが、わざわざ設定を変えるのも面倒なので、私はそのまま使っています。

行番号の扱いについて

プログラム中に行番号を打ち込む必要はありません。GOTOや GOSUB でジャンプする時は、行番号ではなく「ラベル」を使用します。 具体的な使用方法はサンプルプログラムを見てください。

コメントについて

旧機種で使用できたコメントは、REM! でした。 新機種で使用できるのは、rem' です。

先頭のSAVE文について

旧機種のプログラムの先頭部分には、必ず次のようなコメントがあります。

    !SAVE "C:E40-0401.BAS",A
この文はもはや不要なので、削除してください。

座標系について

旧機種ではいつも最初の方に以下の命令が書かれていました。

    CHANGE DISP "80HC0"
新機種では上記の命令は必要ありません。削除してください。

旧機種では、SCALE 命令を使って座標系の設定を 行っていました。以下に典型的な例を示します。

    SCALE -40,-200,599,199,0,0,639,399
新機種でこれに相当する命令は次のようになります。
    window (-40,-200)-(599,199)
また、旧機種ではプログラムの最後で座標系を初期化するために、 次のような命令が入っている場合があります。
    SCALE OFF
これは不要なので削除してください。

さらに、画面の背景色を濃紺にするために、以下の命令を window 命令の直後に挿入してください。

    color 7,2 : cls

書いていて自分でも混乱してきたので、実例を見てください。

角度の単位について

旧機種では、三角関数などで用いる角度の単位を切り替えるために、 DEGRAD というコマンドがありました。 ところが、新機種では、そのようなコマンドは用意されていません。

新機種では、角度の単位はラジアンのみです。 旧機種で DEG を使用している場合はプログラムを修正してください。

プログラムの一時停止について

旧機種では、プログラム終了後も画像が表示され続けていました。 しかし新機種では、プログラムの終了と同時に画面が消えてしまうため、 ゆっくりと画像を見ている余裕がありません。 そのため、プログラムが終了する直前に一時停止させる必要があります。

最も基本的な命令は stop 命令です。 プログラムの end 命令の直前に stop と書いておけば、 何かキーを入力するまでプログラムは停止します。

しかし、stop 命令を用いて一時停止している間、 画面左上に次のようなメッセージが表示されます。

    中断しました E40-0401.BAS[25行]
    任意のキーを押してください
これが邪魔となって、せっかくの画像が見えなくなってしまう場合があります。 学生が打ち込むプログラムは stop 命令でいいかもしれませんが、 教官が講義中にプレゼンテーションするプログラムでは、 stop命令の代わりに次のコマンドを用いて余計な画面表示を抑制した方がいいでしょう。
    input "",A$

また、旧機種のプログラム中で、エンターキーが押されるまでプログラムを一時停止させる目的で、 次のようなコマンドが用いられている場合があります。

    INPUT A
しかし、新機種では望みの動作にはならないので、やはり次のように修正してください。
    input "",A$

直線の描画

実線を描く

緑色の実線を描く場合、旧機種では次のようになります。

    LINE X1,Y1;X2,Y2,4,N
ここで、4 は緑色を表します。 N は、ここでは意味を持ちません。 省略されている場合もあります。 これを新機種に変更すると以下のようになります。
    line (X1,Y1)-(X2,Y2),,9 
ここで、9 が緑色を表します。 色番号の対応については後述します。

点線を描く

黄色の点線を描く場合、旧機種では次のようになります。
    LINE X1,Y1;X2,Y2,"A",6,N
ここで、"A" は点線を、 6 は黄色を表します。 N は、ここでは意味を持ちません。 省略されている場合もあります。 これを新機種に変更すると以下のようになります。
    line (X1,Y1)-(X2,Y2),,13,,dot
ここで、13 が黄色を、 dot が点線を表します。 色番号の対応についてはこちらで、 線種についてはこちらで示します。

実線で折れ線を描く

実線で折れ線を描く場合、旧機種では次のように座標を ; で区切って指定します。ここでは 3 点の場合を示します。

    LINE X1,Y1;X2,Y2;X3,Y3,6,N
これを新機種に変更すると、次のようになります。
    connect (X1,Y1)-(X2,Y2)-(X3,Y3),13
line 命令でなく connect 命令を使う点に注意してください。しかし次節で述べるように、connect は点線では使用できないので、 最初から connect は使わずに全て line で統一してしまった方が解り易いかもしれません。

点線で折れ線を描く

点線で折れ線を描く場合、旧機種では実線の場合とほとんど同じで、 線種の指定を追加するだけです。

    LINE X1,Y1;X2,Y2;X3,Y3,"A",6,N
ところが、新機種では、実線以外で折れ線を描く方法が用意されていません。 面倒ですが、直線を組み合わせる必要があります。
    line (X1,Y1)-(X2,Y2),,13,,dot
    line (X2,Y2)-(X3,Y3),,13,,dot

実線で多角形を描く

実線で多角形を描く場合、旧機種では折れ線を描く場合とほどんど同じです。 三点を指定して三角形を描く場合、次のようになります。

    LINE X1,Y1;X2,Y2;X3,Y3,6,F
最後の F が、始点と終点を結んで多角形を描くことを表します。 新機種の場合も、折れ線とほとんど同じで、次のようになります。
    connect (X1,Y1)-(X2,Y2)-(X3,Y3),13,,f
最後の f 始点と終点を結んで多角形を描くことを表します。 しかし次節で述べるように、connect は点線では使用できないので、 最初から connect は使わずに全て line で統一してしまった方が解り易いかもしれません。

点線で多角形を描く

実線で多角形を描く場合、旧機種では折れ線を描く場合とほどんど同じで、 線種の指定を追加するだけです。 三点を指定して三角形を描く場合、次のようになります。
    LINE X1,Y1;X2,Y2;X3,Y3,"A",6,F
最後の F が、始点と終点を結んで多角形を描くことを表します。 ところが、新機種では、実線以外で多角形を描く方法が用意されていません。 面倒ですが、直線を組み合わせる必要があります。
    line (X1,Y1)-(X2,Y2),,13,,dot
    line (X2,Y2)-(X3,Y3),,13,,dot
    line (X3,Y3)-(X1,Y1),,13,,dot

円の描画

旧機種の円描画命令の典型的な例を示します。

    CIRCLE X,Y,3;;6,N          半径3、色番号6(黄色)で塗りつぶさない円を描く
    CIRCLE X,Y,2;;7,P          半径2、色番号7(白色)で塗りつぶした円を描く
同じ命令を新機種で表すと次のようになります。
    circle (X,Y),3,13          半径3、色番号13(黄色)で塗りつぶさない円を描く
    circle (X,Y),2,15,,,,f     半径2、色番号15(白色)で塗りつぶした円を描く

文字の描画

旧機種の文字描画命令の典型的な例を示します。

    GCHR X,Y,"Hello",0,7
ここで、X,Y は文字列の左下隅の座標を、 "Hello" は表示したい文字列を、 0 は文字の表示角度を、 7 は文字の色番号(白色)を表します。 同じ命令を新機種で表すと次のようになります。
    symbol (X,Y),"Hello",1,1,15
ここで、X,Y は文字列の左上隅の座標を、 1,1 は文字の縦倍率と横倍率を、 15は白色を表します。 色番号の対応については後述します。

新旧BASICで座標の基準位置が異なるため、 座標値を修正しないと表示位置が狂います。 文字の高さが 16 ドットであるので、元のプログラムのY座標から 16 を減じておけば、ほぼ正しい位置が再現されます。 次のようにすればいいでしょう。

    symbol (X,Y-16),"Hello",1,1,15

色番号の対応

水色
旧機種 0 1 2 3 4 5 6 7
新機種 0 3 5 7 9 11 13 15

線種の対応

線種 破線 一点鎖線 二点鎖線 実線
旧機種 "A" "B" "C" 省略
新機種 DOT DASHDOT DASHDOUBLEDOT SOLID または省略

索引


[防衛大学校へ] [水工学研究室へ]
tada@nda.ac.jp