KeitaiBasic

携帯BASIC

KEITAI BASIC (携帯BASIC) is a BASIC programming environment for cellular telephones developed by Japanese programmer SATOO SYOKUNIN (satoo職人) and released as free software in 2005. The application is available at the APPLI GET web site (requires i-Mode cellular telephone to access).

The following is the Japanese programming manual transcribed from the Docomo i-Appli version of KEITAI BASIC.

プログラムの作り方

言語解説

基本的にはiBASIC(Tabrisさん制作)と同じですがキャリアごとの互換性の為に変更した関数などもあります。また、簡単のためにサブルーチンでのローカル変数をなくしました。

行番号の概念はなく、ジャンプはラベルを使う、テキスト画面はなく、文字はtextでグラフィック画面へ描画、入力は押されているキーコード取得や入力待ちが可能。携帯のtextboxの文字数制限に対応するためにソースの中に別のソースファイルを挿入することが可能です。プログラムごのにゲーム中の得点などを保存する為のセーブ領域もあります。また、待受けアプリとしても動作可能でスクリーンセーバーをつくることもできます。

□データ型

データ型はなし、文字列形で格納し、必要に応じて数値に変換、数値は32bit符号付き整数(十進表記)のみ、文字列は""で囲んだ表記。

□変数

グローバル変数とローカル変数があり、グローバル変数は子スレッド中でも共通して使えますが、ローカル変数は呼び出し側のスレッドの変数うを引き継がず、独立しています。

変数名は任意の長さのアルファベット名をつけることが出来ます。変数の宣言は必要ありません。

グローバル変数は名前の一文字目をアルファベットの大文字からはじめ、ローカル変数は小文字からはじめてください。

これとは別に組み込み変数というのがあります。(後述)

□配列

配列は変数名の後に[index]をつけ操作できます。例) hensuu[i+1]

普通の変数と同じで宣言や要素数を確保する必要はありません。

□演算子

優先順位は以下の通り

( ) * / % + - not (単項演算子)

+ - (二項演算子)

= < <= > >= <> and or xor

□ソースの挿入

別ソースを挿入したい場所に#ソースファイル名#と書くことで可能です。

□セーブ領域について

ユーザが自由に使うこと出来るセーブ領域が用意されています。関数save()、load()によって操作することができ、一つの変数しか保存することが出来ません。

□キー入力取得に関して

キー入力取得にはinput()関数とscanをつかう方法があります。キーを押したときにinput()関数で取得しない限り、どんどんキーバッファに入力キーが溜まっていきます。溜まったキーバッファはclearinput()関数でクリアすることができます。とくにずっとscanでキー入力を取得した後にinput()を使うときは溜まったキーバッファに注意してください。

□待受け起動について

待受起動で起動してプログラムを選んでRUNした後に待受けボタンを押して下さい。

ステートメント

単独でステートメントとなり得る
値を返さない組み込み関数ステートメントとしてのみ使用可。式中に含められない
変数名=式式の値を変数に代入
if 式 then ステートメント [elseif 式 then ステートメント]* [else ステートメント] endif式の値に応じてどちらかを実行。式が真ならthen側、非ならelse側、elseifで条件式を続けることが可能。
label 名前ラベルを設定、if文などのループの中には設定できません。
goto 式式の演算結果を名前としてその名前のラベルへジャンプ。
gosub 式式の演算結果を名前としてその名前のラベルへジャンプ。実行位置の保存がされるreturnで実行位置に戻る
for 変数名=式 to 式 [step 式] ステートメント+ next一つ目の式で変数を初期化、stepで指定した値づつ増やし、toで指定した値より大きくなるまでループ。step省略時は1づつ増える
while 式 ステートメント wend式が真のときwhileとwendで囲まれた中を実行、終わるとまた式を評価し非になるまでループをくりかえす。
end現在のスレッドを終了。現在のスレッドからできた子スレッドは全て強制終了
exitezBASICアプリを終了。すべてのスレッドが強制終了
rem 文字列行末までコメントとして無視
'文字列行末までコメントとして無視。'コメント'のように囲むと行の一部だけ無視

戻り値なし関数

引数には式を指定可

text(a1,a2,a3)座標(a2,a3)に文字列a1を描画。a3はベースライン(下)
setfont(a1)フォントのサイズを指定。a1は"T"(極小)、"S"(小)、"M"(中)、"L"(大)を指定。初期設定では"T"
clear(a1,a2,a3,a4)座標(a1,a2)から幅a3、高さa4を消去
line(a1,a2,a3,a4)座標(a1,a2)から座標(a3,a4)まで線を引く
rect(a1,a2,a3,a4)座標(a1,a2)から幅a3、高さa4の四角を描画
frect(a1,a2,a3,a4)座標(a1,a2)から幅a3、高さa4の矩形を塗りつぶす
color(R,G,B)描画色を設定
arc(a1,a2,a3,a4)座標(a1,a2)から幅a3、高さa4の楕円を描画
farc(a1,a2,a3,a4)座標(a1,a2)から幅a3、高さa4の楕円を塗り潰す
origin(a1,a2)座標(a1,a2)に以降の描画操作の原点を設定
lock()unlockするまで描画内容が画面へ反映されない
unlock(a1)lockした画面を描画。a1がゼロの場合前にlock()した回数だけ呼び出すと描画反映、a1が非ゼロならすぐに描画反映
clearinput()入力バッファを消去
thread(a1,a2)タイトルa1のプログラムを新たなスレッド名a2で起動。ローカル変数はコピーされる。描画原点や描画色はされない。スレッド名がすでに存在したら既存スレッド強制終了。アプリ内にスレッドが無くなるとアプリ終了
join(a1)スレッドa1の終了まで待機
kill(a1)スレッドa1を強制終了
yield()他スレッドにCPU時間を譲る
sleep(a1)a1ミリ秒スレッドを休眠
gc()ガベージコレクト
onvib()バイブON
offvib()バイブOFF
onlight()バックライトON
offlight()バックライトOFF
soft1(a1)ソフトキー1の名前にa1を設定
soft2(a1)ソフトキー2の名前にa1を設定
save(a1)プログラムのセーブ領域にa1を保存する
input()何かキー入力があるまで待つ

戻り値あり関数

式中で使用可

abs(a1)a1の絶対値
max(a1,a2)a1、a2で大きい方
min(a1,a2)a1、a2で小さい方
strwidth(a1)文字列a1を描画した時の幅
input()入力バッファから一文字読み込む。バッファが空なら入力を待つ
input(a1)input()の入力待ちがa1ミリ秒でタイムアウトし0を返る
pow(a1,a2)a1のa2乗
fact(a1)a1の階乗
sin(a1), cos(a1), tan(a1)角度はa1度。100倍した値を返す
strwidth(a1)指定した文字列a1の幅を取得します。
strlen(a1)a1の文字列の長さ
stridx(a1,a2)a1からa2を探して場所を返す。無いと-1
substr(a1,a2,a3)文字列a1のa2番目からa3文字
strat(a1)文字列のa1番目の文字を返す。最初の文字のインデックスは0からはじまる。
load()プログラムのセーブ領域の値をロードして返す

組み込み変数

tickUTC 1970/1/1 00:00:00からのミリ秒
randランダムな値(符号付)
width画面の幅
height画面の高さ
ascent現在のフォントのアセント(ベースラインから上端までの長さ)を取得します。
descent現在のフォントのディセント(ベースラインから下端までの長さ)を取得します。
strheightフォントの高さを取得します。この値はアセントとディセントの合計と等しくなります。
ampm午前中はゼロ、午後は1
date現在の日付
dayofmonth現在の日付(dateと同じ)
dayofweek現在の曜日(日曜日が1)
hour現在の時(午前または午後の何時か)
hourofday現在の時(24時間表記)
millisecond現在のミリ秒
minute現在の分
month現在の月
second現在の秒
year現在の年
scan現在押下されているキーコード
□キーコード:key<n>(key0等)(数字)、keyup(上)、keydown(下)、keyleft(左)、keyright(右)、keyast(アスタリスク)、keypound(#)、keyselect(選択)、keysoft1(左ソフト)、keysoft2(右ソフト)