リファレンス

コメント
代入
プログラム制御コマンド
データ構造
数学関数
文字列関数
時間とタイマー
コンソールI/O
グラフィックス
ユーザ入力
サウンド関連
ファイルの操作
通信
データベース(SQLite)
割り込みラベル
外部ファイルの使用
ユーザー定義関数
デバッグコマンド
システム
ハードウェア

コマンドリスト

記号
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
R
S
T
U
V
W
Z

DIM Array[<nexp>{, <nexp> } ... ] {, Array[<nexp>{, <nexp> } ... ] } ...

DIMコマンドは、配列が持つ次元数とそれらの次元の大きさをBASIC!に伝えます。 BASIC!は配列を作成し、配列データ用のメモリの予約と初期化を行います。 数値配列のすべての要素は、値0.0に初期化されます。 文字列配列要素は、空の文字列 ""に初期化されます。 既存の配列をUNDIMコマンドで指定すると、既存の配列が破棄され、新しい配列が作成されます。

複数の配列は、1つのDIMステートメントでディメンション化できます。 ストリングと数値配列は、1つのDIMコマンドでディメンション化できます。

例:


DIM A[15] 
DIM B$[2,6,8], C[3,1,7,3], D[8] 

UNDIM Array[]{, Array[] } ...

配列の次元を変更します。 配列は破壊され、使用されたすべてのメモリが解放されます。 1つのUNDIMステートメントで複数の配列を破壊することができます。 各配列[]はインデックスなしで指定されます。 このコマンドは、ARRAY.DELETEとまったく同じです。

ARRAY.AVERAGE <Average_nvar>, Array[{<start>,<length>}]

数値配列(Array [])または配列セグメント(Array [start,length])の値の平均を求め、その結果を< Average_nvar>に配置します。

ARRAY.COPY SourceArray[{<start>,<length>}], DestinationArray[{{-}<start_or_extras>}]

既存のSourceArray[]の要素をDestinationArray[]にコピーします。 DestinationArray[]が存在する場合、既存の配列の一部またはすべてが上書きされます。 DestinationArray[]が存在しない場合は、新しい配列が作成されます。 配列は数値配列でも文字列配列でも構いませんが、両方とも同じ型でなければなりません。

配列全体(SourceArray[])または配列セグメント(SourceArray[<start>,<length>])をコピーすることができます。 SourceArray[]またはDestinationArray[]のいずれかの終わりに達すると、コピーはエラーなしで停止します。

<start>が<1の場合、SourceArray[]の最初の要素である1に設定されます。 <length>が>0の場合は0に設定されます。

DestinationArray[]がすでに存在する場合、オプションの<start_or_extras>パラメータは、DestinationArray[]へのコピーを開始する場所を指定します。

DestinationArray[]が存在しない場合、オプションの<start_or_extras>パラメータは、コピーに追加する追加要素の数を指定します。 パラメータが負の数である場合、これらの要素は配列の先頭に追加されます。そうでない場合は、配列の末尾に追加されます。

新しい数値配列の余分な要素はゼロに初期化されます。 新しい文字列配列の余分な要素は、空の文字列""に初期化されます。

このコマンドの実際の使用例については、サンプル・プログラム・ファイルf26_array_copy.basを参照してください。

ARRAY.DELETE Array[]{, Array[]} ...

UNDIM Array[]と同じことをします。

ARRAY.DIMS Source[]{, {Dims[]}{, NumDims}}

Source[]配列パラメーターの寸法に関する情報を提供します。 Source[]パラメータは、大かっこ("[]")のない数値または文字列の配列名です。 配列はすでに存在していなければなりません。 Source[]パラメーターは必須であり、他のパラメーターは両方ともオプションです。

Source[]配列のディメンションは、Dims[]配列に書き込まれます。 Dims[]パラメータは、大括弧("[]")のない配列名でなければなりません。Dims[]配列が存在する場合は上書きされます。 それ以外の場合は、新しい配列が作成されます。 結果は常に1次元配列です。

Source[]配列の次元数は、NumDimsパラメータを指定すると、NumDimsパラメータに書き込まれます。NumDimsは数値変数でなければなりません。この値はDims[]配列の長さです。

ARRAY.FILL Array[{<start>,<length>}], <exp>

既存の配列または配列セグメントを値で埋めます。 配列と値の型は一致しなければなりません。

ARRAY.LENGTH <length_nvar>, Array[{<start>,<length>}]

配列全体(Array[]またはArray$[])または配列セグメント(Array[start,length]またはArray$[start,length])の要素数を<Length_nvar>に配置します。

ARRAY.LOAD Array[], <exp>, ...

新しい配列を作成し、式のリスト "<exp>,..."を評価し、値を新しい配列にロードします。 インデックスのない配列名を指定してください。 配列は1次元になります。サイズはリスト内の式の数と同じです。名前付き配列がすでに存在する場合は上書きされます。

配列は数値(Array[])でも文字列(Array$ [])でもかまいません。式は配列と同じ型でなければなりません。

式のリストは、"~"文字で行を終了することによって次の行に続くことができます。"~"文字は<exp>パラメータの間で使用できます。カンマが通常は現れます。"~"自体がパラメータを区切ります。 コンマはオプションです。

"~"文字を使用して、複数の行にまたがるパラメータを分割することはできません。

例:


ARRAY.LOAD Numbers[], 2, 4, 8 , n^2, 32 
ARRAY.LOAD Hours[], 3, 4,7,0, 99, 3, 66~  % ~の前にカンマは必要ありません
37, 66, 43, 83,~                          % コンマは~の前に許可されます
83, n*5, q/2 +j 
ARRAY.LOAD Letters$[], "a", "b","c",d$,"e" 

ARRAY.MAX <Max_nvar> Array[{<start>,<length>}]

数値配列(Array[])または配列セグメント(Array[start,length])の最大値を検索し、結果を数値変数<max_nvar>に配置します。

ARRAY.MIN <Min_nvar>, Array[{<start>,<length>}]

数値配列(Array[])または配列セグメント(Array[start,length])の最小値を検索し、結果を数値変数<min_nvar>に配置します。

ARRAY.REVERSE Array[{<start>,<length>}] Array[{<start>,<length>}]

数値配列または文字列配列(Array[]またはArray$[])または配列配列(Array[start,length]またはArray$[startlength])の値の順序を逆順にします。

ARRAY.SEARCH Array[{<start>,<length>}], <value_exp>, <result_nvar>{,<start_nexp>}

指定された数値または文字列値(式でもよい)の数値配列または文字列配列(Array[]またはArray$[])または配列セグメント(Array[start,length]またはArray$[start,length])を検索します。値が配列内にある場合、その位置は結果数値変数<result_nvar>に返されます。 値が見つからない場合、結果はゼロになります。

オプションのstart_nexpパラメータが存在する場合、検索は指定された要素から開始されます。 デフォルト値は1です。

ARRAY.SHUFFLE Array[{<start>,<length>}]}

指定された配列(Array[]またはArray$[])または配列セグメント(Array[start,length]またはArray$[start,length])の値をランダムにシャッフルします。

ARRAY.SORT Array[{<start>,<length>}]}

指定された配列(Array[]またはArray$[])または配列セグメント(Array[start,length]またはArray$[start,length])の値を昇順にソートします。

ARRAY.STD_DEV <sd_nvar>, Array[{<start>,<length>}]}

数値配列(Array[])または配列セグメント(Array[start,length])の値の標準偏差を求め、結果を数値変数<sd_nvar>に格納します。

ARRAY.SUM <sum_nvar>, Array[{<start>,<length>}]

数値配列(Array[])または配列セグメント(Array[start,length])の値の合計を求め、その結果を数値変数<sum_nvar>に配置します。

ARRAY.VARIANCE <v_nvar>, Array[{<start>,<length>}]

数値配列(Array[])または配列セグメント(Array[start,length])の値の分散を求め、結果を数値変数<v_nvar>に代入します。

LIST.CREATE N|S, <pointer_nvar>

NまたはSパラメータで指定された型の新しい空のリストを作成します。 パラメータがSの場合、文字列のリストが作成されます。パラメータがNの場合は数字のリストが作成されます。NまたはSの周りには引用符を入れないでください。

新しいリストへのポインタは<pointer_nvar>変数に返されます。

新しく作成されたリストは空です。 新しく作成されたリストの返されるサイズはゼロです。

LIST.ADD <pointer_nexp>{, <exp>}...

式の値を指定されたリストに追加します。 式はすべてリストと同じ型(数値または文字列)でなければなりません。

<exp>のリストは、行を "~"文字で終了することによって次の行に続くことができます。 "~"文字は<exp>パラメータの間で使用できます。カンマが通常は現れます。 "~"自体がパラメータを区切ります。 コンマはオプションです。

"~"文字を使用して、複数の行にまたがるパラメータを分割することはできません。

例:


List.add Nlist, 2, 4, 8 , n^2, 32 
List.add Hours, 3, 4,7,0, 99, 3, 66~  % ~の前にカンマは必要ありません
37, 66, 43, 83,~                      % コンマは~の前に許可されます
83, n*5, q/2 +j 

List.add Name~ 
"Bill", "Jones"~ 
"James", "Barnes"~ 
"Jill", "Hanson" 

LIST.ADD.LIST <destination_list_pointer_nexp>, <source_list_pointer_nexp>

ソースリストの要素を宛先リストの末尾に追加します。 2つのリストは、同じタイプ(文字列または数値)でなければなりません。

LIST.ADD.ARRAY <list_pointer_nexp>, Array[{<start>,<length>}]

指定された配列(Array[])または配列セグメント(Array[start,length])の要素を指定されたリストの末尾に追加します。

配列の型は、リストの型(文字列または数値)と同じでなければなりません。

LIST.REPLACE <pointer_nexp>, <index_nexp>, <sexp>|<nexp>

<pointer_nexp>が指すリスト内の<index_nexp>で指定されたList要素は、文字列または数値式の値に置き換えられます。 インデックスは1から始まります。 リストの最初の要素は1です。置き換えられる式の型(文字列または数値)は、リストの型と一致する必要があります。

LIST.INSERT <pointer_nexp>, <index_nexp>, <sexp>|<nexp>

インデックスポイント<index_nexp>で<pointer_nexp>が指すリストに<sexp>または<nexp>値を挿入します。 インデックスポイントがリストの現在のサイズより1大きい場合、新しい項目がリストの最後に追加されます。

インデックスは1ベースのインデックスです。 リストの最初の要素は1です。

挿入された要素の型は、リストの型(文字列または数値)と一致する必要があります。

LIST.REMOVE <pointer_nexp>,<index_nexp>

<pointer_nexp>が指すリストから<index_nexp>で指定されたリスト要素を削除します。インデックスは1ベースのインデックスです。リストの最初の要素は1です。

LIST.GET <pointer_nexp>, <index_nexp>, <var> <index_nexp>, <var>

<pointer_nexp>が指すリスト内の<index_nexp>で指定されたリスト要素は、指定された文字列または数値変数<var>に返されます。

インデックスは1から始まります。 リストの最初の要素は1です。

取得する要素の変数型は、リストの型(文字列または数値)と一致する必要があります。

LIST.TYPE <pointer_nexp>, <svar>

リストポインタが指すリストのタイプは、文字列変数<svar>に返されます。

リストが文字列のリストであれば大文字の "S"を返します。リストが数字のリストであれば大文字の "N"を返します。

LIST.SIZE <pointer_nexp>, <nvar>

リストポインタが指すリストのサイズは、数値変数<nvar>に返されます。

LIST.CLEAR <pointer_nexp>

リストポインタが指すリストをクリアし、リストのサイズをゼロに設定します。

LIST.SEARCH <pointer_nexp>, value|value$, <result_nvar>{,<start_nexp>}

指定された文字列または数値を検索します。 最初に一致した位置が数値変数<result_nvar>に戻されます。 値がリストにない場合、結果はゼロです。

オプションのstart式パラメータが存在する場合、指定された要素から検索が開始されます。 デフォルトの開始位置は1です。

LIST.TOARRAY <pointer_nexp>, Array$[] | Array[]

リストポインタが指すリストを配列にコピーします。 配列の型(文字列または数値)は、リストの型と同じでなければなりません。 配列が存在する場合は上書きされ、そうでない場合は新しい配列が作成されます。 結果は常に1次元配列です。

BUNDLE.CREATE <pointer_nvar>

新しい空のバンドルが作成されます。 バンドルポインタは<pointer_nvar>に返されます。

例:


BUNDLE.CREATE bptr 

BUNDLE.PUT <pointer_nexp>, <key_sexp>, <value_nexp>|<value_sexp> <pointer_nexp>, <key_sexp>, <value_nexp>|<value_sexp>

値式は、指定されたキーを使用して、指定されたバンドルに配置されます。 バンドルが存在しない場合は、新しいバンドルが作成されます。

値の型は、値式の型によって決まります。

例:


BUNDLE.PUT bptr, "first_name", "Frank" 
BUNDLE.PUT bptr,"age", 44 

BUNDLE.GET <pointer_nexp>, <key_sexp>, <nvar>|<svar>

キー文字列式で指定された値を、指定された数値または文字列変数に配置します。 宛先の変数の型(文字列または数値)は、キーに格納されている型と一致する必要があります。 バンドルが存在しないか、要求されたキーが含まれていない場合、コマンドは実行時エラーを生成します。

例:


BUNDLE.GET bptr,"first_name", first_name$ 
BUNDLE.GET bptr,"age", age 

BUNDLE.KEYS <bundle_ptr_nexp>, <list_ptr_nexp>

現在指定されたバンドルに含まれるキーのリストを返します。

バンドルポインタパラメータ<bundle_ptr_nexp>は、キーを取得するバンドルを指定します。 バンドルが存在しない場合は、新しいバンドルが作成されます。

リストポインタパラメータ<list_ptr_next>は、キーを書き込むリストを指定します。 リストの以前の内容は破棄されます。 パラメータが再利用する有効な文字列リストを指定せず、パラメータが文字列変数である場合、新しいリストが作成され、リストへのポインタが変数に書き込まれます。

返されるリストのキー名は、さまざまなLISTコマンドを使用して抽出できます。

例:


BUNDLE.KEYS bptr, list 
LIST.SIZE list, size 
FOR i =1 TO size 

 LIST.GET list, i, key$ 
 BUNDLE.TYPE bptr, key$, type$ 
 IF type$ = "S" 

  BUNDLE.GET bptr, key$, value$ 
  PRINT key$, value$ 

 ELSE 
  BUNDLE.GET bptr, key$, value 
  PRINT key$, value 

 ENDIF 
NEXT i 

BUNDLE.CONTAIN <pointer_nexp>, <key_sexp> , <contains_nvar>

キー文字列式で指定されたキーがバンドルのキーに含まれている場合、 "contains"数値変数はゼロ以外の値で返されます。 キーがバンドル内にない場合、返される値はゼロになります。 バンドルが存在しない場合は、新しいバンドルが作成されます。

BUNDLE.TYPE <pointer_nexp>, <key_sexp>, <type_svar>

指定した文字列変数の指定されたキーの値の型(文字列または数値)を返します。 型が数値の場合、<type_svar>には大文字の "N"が含まれます。 型が文字列の場合、<type_svar>には大文字の "S"が含まれます。 バンドルが存在しないか、要求されたキーが含まれていない場合、コマンドは実行時エラーを生成します。

例:


BUNDLE.TYPE bptr, "age", type$ 
PRINT type$  % 表示:N 

BUNDLE.REMOVE <pointer_nexp>, <key_sexp>

数値式<pointer_nexp>が指すバンドルから、文字列式<key_sexp>で指定されたキーを関連付けられた値とともに削除します。 バンドルにキーが含まれていない場合、何も起こりません。 バンドルが存在しない場合は、新しいバンドルが作成されます。

BUNDLE.CLEAR <pointer_nexp>

<pointer_nexp>が指すバンドルは、すべてのタグをクリアします。 空のバンドルになります。 バンドルが存在しない場合は、新しいバンドルが作成されます。

STACK.CREATE N|S, <ptr_nvar>

指定された型(N = Number、S = String)の新しいスタックを作成します。 スタックポインタは<ptr_nvar>にあります。

STACK.PUSH <ptr_nexp>, <nexp>|<sexp>

<nexp>または<sexp>を<ptr_nexp>で指定されたスタックの先頭にプッシュします。 プッシュされる値式のタイプは、作成されたスタックのタイプと一致する必要があります。

STACK.POP <ptr_nexp>, <nvar>|<svar>

<ptr_nexp>で指定されたスタックトップ値をポップし、<nvar>または<svar>に配置します。 値変数の型は、作成されたスタックの型と一致する必要があります。

STACK.PEEK <ptr_nexp>, <nvar>|<svar>

<ptr_nexp>で指定されたスタックのスタック最上位値を<nvar>または<svar>に返します。 値はスタックの最上部にとどまります。

値変数の型は、作成されたスタックの型と一致する必要があります。

STACK.TYPE <ptr_nexp>, <svar>

<ptr_nexp>で指定されたスタックの型(数値または文字列)は<svar>に返されます。 スタックが数値の場合は、大文字の "N"が返されます。 スタックが文字列スタックの場合は、大文字の "S"が返されます。

STACK.ISEMPTY <ptr_nexp>, <nvar>

<ptr_nexp>で指定されたスタックが空の場合、<nvar>に返される値は1になります。スタックが空でない場合、値は0になります。

STACK.CLEAR <ptr_nexp>

<ptr_nexp>で指定されたスタックはクリアされます。

!

単行コメントです。

行の最初の文字が"!"の場合、BASIC!は行全体をコメントと見なして無視します。行の途中にある場合はコメントではありません。

REM

単行コメントです。(旧式)

行の最初の3文字が "Rem"、 "REM"、または "rEm"であった場合、BASIC!は行全体をコメントと見なして無視します。「Rem」が行の他の場所にある場合は、コメントではありません。

!!

ブロックコメントです。

行が"!!"で始まるとき、 それ以降の行はすべてコメントとみなされ、BASIC!によって無視されます。ブロックコメントセクションは、次に"!!"で始まる行で終了します。

%

行途中のコメントです。

行に "%"文字がある場合(引用符で囲まれた文字列内を除く)、その行の残りはコメントです。

#

行の末尾に#文字がある場合、その行のキーワードは大文字になり、#が削除されます。仮想キーボードを使用している場合、この機能は機能しない可能性があります。設定オプション "Editor AutoIndent"がチェックされていない場合、この機能は動作しません。

LET

元のBasic言語では、コマンドLETを使用して、次のような代入操作を示しました。


LET <nvar> = <nexp> 

BASIC!にもLETコマンドがありますが、オプションです。 他のプログラミング言語を使用すると、あなたには奇妙に見えるかもしれませんが、LETを使用する理由は2つあります。

まず、変数名をBASIC!キーワードで始めるには、LETを使用する必要があります。 このようなキーワードは、改行の始めには表示されません。例えば:


Letter$ = "B" 

BASICには次のように見えます。


LET ter$ = "B" 

あなたが実際にLetter$を変数として使用したいのであれば、それをLET文に入れることで安全に使うことができます:


LET Letter$ = "B" 

1行のIFステートメントで代入を行う場合は、LETコマンドも使用する必要があります。


IF 1 < 2 THEN LET letter$ = "B" 

第2に、LETコマンドを使用した場合よりも割り当てが速くなります。

BOR(<nexp1>, <nexp2>)

<nexp1> OR <nexp2>の論理ビット単位の値を返します。 倍精度浮動小数点値は、操作の前に64ビット整数に変換されます。

BOR(1,2)は3です。

BAND(<nexp1>, <nexp2>)

<nexp1> AND <nexp2>の論理ビット単位の値を返します。 倍精度浮動小数点値は、操作の前に64ビット整数に変換されます。

BAND(3,1)は1です。

BXOR(<nexp1>, <nexp2>)

<nexp1> XOR <nexp2>の論理ビット単位の値を返します。 倍精度浮動小数点値は、操作の前に64ビット整数に変換されます。

BXOR(7,1)は6です。

BNOT(<nexp>)

<nexp>のビット補数値を返します。 倍精度浮動小数点値は、操作の前に64ビット整数に変換されます。

BNOT(7)は-8です。

HEX$(BNOT(HEX("1234")))はffffffffffffedcbです。

ABS(<nexp>)

<nexp>の絶対値を返します。

SGN(<nexp>)

記号を表す<nexp>の数値のsignum関数を返します。

値nexp戻り値
0より上1
00
0より下-1

RANDOMIZE({<nexp>})

RND()関数で使用する擬似乱数ジェネレータを作成します。 オプションのシードパラメータ<nexp>でジェネレータを初期化します。 パラメータを省略すると0を指定するのと同じです。最初にRANDOMIZE()を呼び出さずにRND()を呼び出すと、RANDOMIZE(0)を実行した場合と同じになります。

ゼロでないシードは、予測可能な一連の擬似乱数を初期化します。 つまり、指定された非ゼロのシード値に対して、後続のRND()コールは常に同じ一連の値を返します。

シードが0の場合、RND()からの数字のシーケンスは予測できず再現できません。 しかし、繰り返しのRANDOMIZE(0)呼び出しは、「よりランダムな」シーケンスは生成しません。

RANDOMIZE()関数は常にゼロを返します。

RND()

擬似乱数ジェネレータによって生成された乱数を返します。RANDOMIZE(n)が以前に実行されていない場合、RANDOMIZE(0)を使用して新しいランダムジェネレータが作成されます。

乱数は0以上1未満です。 (0≦n <1)。


d = FLOOR(6 * RND() + 1)  % 6面のダイスを転がす

MAX(<nexp>, <nexp>)

<nvar>として2つの数値の最大値を返します。

MIN(<nexp>, <nexp>)

<nvar>として2つの数値の最小値を返します。

CEIL(<nexp>)

正の無限大に向かって丸めます。 3.Xは4、-3.Xは-3となります。

FLOOR(<nexp>)

負の無限大の方向に丸めます。 3.Xは3になり、-3.Xは-4になります。

INT(<nexp>)

<nexp>の整数部分を返します。 3.Xは-3、-3.Xは-3となる。 この操作は切り捨て、切り捨て、またはゼロに向かっての丸めとも呼ばれます。

FRAC(<nexp>)

<nexp>の小数部分を返します。 3.4は0.4になり、-3.4は-0.4になります。

FRAC(n)は "n-INT(n)"に相当します。

MOD(<nexp1>, <nexp2>)

<nexp1>の余りを<nexp2>で割ったものを返します。 <nexp2>が0の場合、関数はランタイムエラーを生成します。

ROUND(<value_nexp>{, <count_nexp>{, <mode_sexp>}})

最も単純な形式のROUND(<value_nexp>)では、この関数は<nexp>に最も近い整数を返します。 オプションのパラメーターを使用して、より複雑な操作を指定することができます。

<count_nexp>は、オプションの小数点以下の桁数です。 小数点以下の桁数を設定します。 最後の桁は四捨五入されています。 小数点以下の桁数は> = 0でなければなりません。パラメータを省略すると、ゼロに設定することと同じです。

<mode_sexp>はオプションの丸めモードです。 これは1文字または2文字のニーモニックコードで、ROUND()にどのような丸めを行うかを指示します。 大文字と小文字は区別されません。 7つの丸めモードがあります。

モード意味-3.8-3.5-3.13.13.53.8
"HD"Half-down-4.0-3.0-3.03.03.04.0
"HE"Half-even-4.0-4.0-3.03.04.04.0
"HU"Half-up-4.0-4.0-3.03.04.04.0
"D"Down-3.0-3.0-3.03.03.03.0
"U"Up-4.0-4.0-4.04.04.04.0
"F"Floor-4.0-4.0-4.03.03.03.0
"C"Ceiling-3.0-3.0-3.04.04.04.0

この表において、Downは「0に向かって」を意味し、Upは「ゼロから離れて」(±∞に向かって)を意味し、Halfは、値が切り上げと切り捨て(x.5または-x.5)の中間にある場合の動作を指します。Half-downはx.5をゼロに向かって、Half-upはx.5をゼロに丸めます。Half-evenは、Half-downまたはHalf-upのいずれかで、結果を均一にします。Half-evenは、丸め誤差を平均化する傾向があるため、「バンカーの丸め」とも呼ばれます。

<mode_sexp>を指定しないと、ROUND()は+0.5を加算して切り捨て(ゼロに向かって)ます。 これは以前のバージョンのBASICからコピーされた従来の動作です。 ROUND()はROUND(n,0)と同じではありません。

<count_nexp> <0または<mode_sexp>が有効でない場合、ROUND()は実行時エラーを生成します。

例:


pi = ROUND(3.14159)              % pi = 3.0 
pi = ROUND(3.14159, 2)           % pi = 3.14 
pi = ROUND(3.14159, , "U")       % pi = 4.0 
pi = ROUND(3.14159, 4, "F")      % pi = 3.1415 
negpi = ROUND(-3.14159, 4, "D")  % negpi = -3.1416 
FLOOR(n)はROUND(n,0,"F")とまったく同じですが、FLOOR(n)は少し速いことに注意してください。 同様に、CEIL(n)はROUND(n,0,"C")と同じであり、INT(n)はROUND(n,0,"D")と同じです。

SQR(<nexp>)

<nexp>の正の平方根に最も近い倍精度浮動小数点近似を返します。

<nexp>の値が負の場合、関数は実行時エラーを生成します。

CBRT(<nexp>)

<nexp>の立方根に最も近い倍精度浮動小数点近似を返します。

LOG(<nexp>)

<nexp>の自然対数(base e)を返します。

LOG10(<nexp>)

<nexp>の底10の対数を返します。

EXP(<nexp>)

<nexp>に引き上げられたeを返します。

POW(<nexp1>, <nexp2>)

<nexp1>の<nexp2>乗を返します。

HYPOT(<nexp_x>, <nexp_y)

中間オーバーフローまたはアンダーフローなしで2乗の平方根を返します。直角三角形の斜辺の長さを計算します。

PI()

piに最も近い倍精度浮動小数点値を返します。

SIN(<nexp>)

角度<nexp>の三角関数正弦を返します。 角度の単位はラジアンです。

COS(<nexp>)

angle <nexp>の三角コサインを返します。 角度の単位はラジアンです。

TAN(<nexp>)

角度<nexp>の三角関数の正接を返します。 角度の単位はラジアンです。

SINH(<nexp>)

角度<nexp>の三角双曲線正弦を返します。 角度の単位はラジアンです。

COSH(<nexp>)

角度<nexp>の三角双曲線コサインを返します。 角度の単位はラジアンです。

ASIN(<nexp>)

-pi/2からpi/2までの範囲の角度<nexp>の逆正弦を返します。 角度の単位はラジアンです。 <nexp>の値が-1より小さいか1より大きい場合、関数は実行時エラーを生成します。

ACOS(<nexp>)

角度<nexp>のアークコサインを返します。角度範囲は0.0?piです。角度の単位はラジアンです。 <nexp>の値が-1より小さいか1より大きい場合、関数は実行時エラーを生成します。

ATAN(<nexp>)

-pi / 2からpi / 2までの範囲の角度<nexp>の逆正接を返します。 角度の単位はラジアンです。

ATAN2(<nexp_y>, <nexp_x>)

直交座標(x、y)から極座標(r、theta)への変換からの角度thetaを返します(この関数のパラメータの順序に注意してください)。

TODEGREES(<nexp>)

ラジアンで測定された<nexp>角度を、度で測定されたほぼ同等の角度に変換します。

TORADIANS(<nexp>)

度で測定された<nexp>角度をラジアンで測定されたほぼ同等の角度に変換します。

VAL(<sexp>)

符号付き10進数として解釈される文字列式<sexp>の数値を返します。 文字列が空( "")であるか、数値を表していない場合、関数は実行時エラーを生成します。

IS_NUMBER(<sexp>)

VAL()と同じ方法で文字列式<sexp>をテストし、論理値を返します。

LEN(<sexp>) <sexp>)

<sexp>の長さを返します。

HEX(<sexp>)

文字列式<sexp>の数値を16進整数として解釈して返します。 文字列の文字は、オプションの先頭記号( "+"または "-")を使用して16進数(0-9、a-h、またはA-H)のみにすることができます。

OCT(<sexp>)

8進整数として解釈される文字列式<sexp>の数値を返します。 文字列の文字は、オプションの先頭の記号( "+"または "-")を使用して8進数(0-7)にすることも、実行時エラーを生成することもできます。

BIN(<sexp>)

バイナリ整数として解釈される文字列式<sexp>の数値を返します。 文字列の文字は、オプションの先頭の記号( "+"または "-")を使用して2進数(0または1)にすることも、実行時エラーを生成することもできます。

SHIFT(<value_nexp>, <bits_nexp>)

<value_nexp>の値をビット数<bits_nexp>だけシフトします。 ビット数が<0の場合、値は左にシフトされます。 ビットカウントが> 0の場合、ビットは右にシフトされます。 右シフトは符号ビットを複製します。

倍精度浮動小数点値は、操作の前に64ビット整数に切り捨てられます。

ASCII(<sexp>{, <index_nexp>})

<sexp>の1文字のASCII値を返します。 デフォルトでは、最初の文字の値です。 オプションの<index_nexp>を使用して任意の文字を選択できます。 最初の文字のインデックスは1です。

有効なASCII値は0~255です。<sexp>が空の文字列( "")の場合、返される値は256(最大の8ビットASCII値の1つ以上)です。 ASCII以外のUnicode文字の場合、ASCII()は無効な値を返します。 代わりにUCODE()を使用してください。

UCODE(<sexp>{, <index_nexp>})

<sexp>の1文字のUnicode値を返します。 デフォルトでは、最初の文字の値です。

オプションの<index_nexp>を使用して任意の文字を選択できます。 最初の文字のインデックスは1です。

<sexp>が空の文字列( "")の場合、返される値は65536(最大の16ビットのUnicode値以上のもの)です。 <sexp>の選択された文字が有効なASCII文字の場合、この関数はASCII()と同じ値を返します。

IS_IN(<sub_sexp>, <base_sexp>{, <start_nexp>})

ベース文字列<base_sexp>内の部分文字列<sub_sexp>の位置を返します。

オプションの開始パラメータ<start_nexp>が存在しない場合、関数は最初の文字から開始し、前方を検索します。

開始パラメータが> = 0の場合、前方(左から右)検索の開始位置になります。 左端の文字は位置1です。パラメータが負の場合は、逆方向(右から左)検索の開始位置になります。 一番右の文字は-1です。

部分文字列がベース文字列にない場合、関数は0を戻します。ベース文字列の長さよりも大きな値を戻すことはできません。

STARTS_WITH(<sub_sexp>, <base_sexp>{, <start_nexp>})

部分文字列<sub_sexp>が<start_nexp>の位置で始まるベース文字列<base_sexp>の部分と正確に一致するかどうかを判定します。<start_nexp>パラメータはオプションです。それが存在しない場合、デフォルトの開始位置は1(最初の文字)なので、基本文字列は部分文字列で始まる必要があります。 <start_nexp>は> = 1でなければなりません。

この関数は、一致する部分文字列の長さを返します。 一致するものが見つからない場合、関数は0を返します。

ENDS_WITH(<sub_sexp>, <base_sexp>)

部分文字列<sub_sexp>がベース文字列<base_sexp>の終わりと完全に一致するかどうかを判別します。

ベース文字列が部分文字列で終わる場合、関数は部分文字列が始まるベース文字列の索引を戻します。 値は常に> = 1になります。一致するものが見つからない場合、関数は0を返します。

GR_COLLISION(<object_1_nvar>, <object_2_nvar>)

変数<object_1_nvar>および<object_2_nvar>は、オブジェクトの作成時に返されるオブジェクトポインタです。

2つのオブジェクトの境界ボックスが重なっている場合、関数はtrue(ゼロではない)を返します。 重複しない場合、関数はfalse(ゼロ)を返します。

衝突をテストできるオブジェクトは、Point、Rect、Bitmap、Circle、Arc、Oval、Textです。Circle、Arc、Oval、またはTextの場合、実際の描画オブジェクトではなく、オブジェクトの矩形境界ボックスが衝突テストに使用されます。

BACKGROUND()

実行中のBASIC!プログラムは、HOMEキーがタップされたときに実行され続けます。これはバックグラウンドでの実行と呼ばれます。バックグラウンドモードでない場合、BASIC!はフォアグラウンドモードになります。 BASIC!はバックグラウンドモードを終了し、ホーム画面のBASIC!アイコンをタップするとフォアグラウンドモードに入ります。

BASIC!プログラマーは、プログラムがバックグラウンドで実行されているかどうかを知りたいことがあります。この理由の1つは、バックグラウンドモードの間に音楽の再生を停止することです。

BACKGROUND()関数は、プログラムがバックグラウンドで実行されている場合はtrue(1)を返します。プログラムがバックグラウンドで実行されていない場合は、false(0)を返します。

グラフィックスが開いているときにバックグラウンドモードを検出できるようにするには、背景モードでGR.RENDERを呼び出さないでください。そうすることにより、フォアグラウンドモードが再入力されるまでプログラムの実行が停止されます。すべてのGR.RENDERコマンドに次のコード行を使用します。


IF !BACKGROUND() THEN GR.RENDER 

CLOCK()

最後のブートからのミリ秒単位の時間を返します。

TIME()

1970年1月1日午前12時00分(UTC:"エポック")からの時間をミリ秒単位で返します。 時間間隔は世界各地で同じなので、値はTIMEZONEコマンドの影響を受けません。

TIME(<year_exp>, <month_exp>, <day_exp>, <hour_exp>, <minute_exp>, <second_exp>)

TIME()と似ていますが、パラメータが瞬間を指定する点が異なります。 仕様はタイムゾーンを含まないため、完全ではありません。TIMEZONEコマンドでタイムゾーンを指定することができます。 タイムゾーンを指定しない場合は、ローカルのタイムゾーンが使用されます。

パラメータ式は、数値式または文字列式のいずれかです。 これはBASIC!の他の場所では許可されていないため、珍しいことです。 パラメータが文字列の場合は、数字のみ、小数点以下の任意の1つの小数点、オプションの先頭の記号、埋め込みスペースなしと評価する必要があります。

文字列パラメータがルールに従わない場合、BASIC!は、数値式が必要な場所で文字列を使用するなどの構文エラーを報告します。

TIME()(関数)とTIME(コマンド)は逆の演算です。 TIME()は、TIMEコマンドの最初の6つの戻りパラメーターを入力パラメーターとして直接使用できます。

USING$()またはFORMAT_USING$()関数を使用すると、ロケール用にフォーマットされた、さまざまな方法で文字列として時間を表現できます。

GETERROR$()

起こり得るエラー状態に関する情報を返します。

プログラムを停止させるエラーにより、コンソールにエラーメッセージが書き込まれます。ONERROR:割り込みラベルでエラーをトラップすると、プログラムは停止せず、エラーは出力されません。 GETERROR$()を使用してエラーメッセージを取得できます。

特定のコマンドは、プログラムを停止することなくエラーを報告できます。APP.BROADCASTAPP.STARTAUDIO.LOADBYTE.OPENTEXT.OPENZIP.OPENENCRYPTDECRYPTFONT.LOADGPS.OPENGRABFILEGRABURLGR.GET.TYPEENCODE$()およびDECODE$()関数、およびビットマップを作成できるコマンドが該当します。

これらのコマンドのいずれかを実行すると、エラー状態に関する情報を取得するためにGETERROR$()を呼び出すことができます。 たとえば、TEXT.OPENがファイルを開くことができない場合、ファイルポインタを-1に設定し、 "<filename> not found"のようなGETERROR$()メッセージを書き込みます。 エラーが発生しなかった場合、GETERROR$()は文字列 "No error"を返します。

エラーメッセージをクリアするコマンドがあるので、GETERROR$()がそのメッセージを保持するとは限りません。 できるだけ早く変数内のメッセージをキャプチャし、同じエラーに対して再度GETERROR$()を呼び出さないでください。

CHR$(<nexp>, ...)

数値式のリストの値で表される文字列を返します。各<nexp>は文字に変換されます。式は255より大きい値を持つ可能性があり、したがってUnicode文字を生成するために使用できます。


PRINT CHR$(16*4 + 3) % 16進数43は文字「C」です。表示: C 
PRINT CHR$(945, 946) % アルファとベータのコードです。表示: αβ 

LEFT$(<sexp>, <count_nexp>)

文字列<sexp>の一番左の文字を返します。 返される文字数は、パラメータ<count_nexp>によって設定されます。

MID$(<sexp>, <start_nexp>{, <count_nexp>})

開始位置<start_nexp>で開始または終了する文字列<sexp>の部分文字列を返します。 文字列の最初の文字は位置1にあります。開始位置が0または負の場合は1に設定されます。

count_nexpパラメータはオプションです。 省略されている場合は、開始位置から文字列の最後までのすべての文字を返します。


a$ = MID$("dinner", 2)  % a$の中身は"inner" 

それ以外の場合、count_nexpの絶対値は返される部分文字列の長さを指定します。count_nexpの絶対値は、返される部分文字列の長さを指定します。


a$ = MID$("dinner", 2, 3)   % a$の中身は"inn" 
a$ = MID$("dinner", 4, -3)  % a$の中身は"inn" 
a$ = MID$("dinner", 3, 0)   % a$の中身は"" 

RIGHT$(<sexp>, <count_nexp>)

文字列<sexp>の右端の文字を返します。 返される文字数は、countパラメータ<count_nexp>によって設定されます。

REPLACE$(<sexp>, <argument_sexp>, <replace_sexp>)

<argument_sexp>内の<sexp>をすべて<replace_sexp>に置き換えて返します。

TRIM$(<sexp>{, <test_sexp>})

<test_sexp>の前後のtest_sexpを削除して<sexp>を返します。

切り取る式<test_sexp>はオプションです。 省略すると、先頭と末尾のすべての空白が削除されます。 つまり、デフォルトの<test_sexp>は正規表現 "\s+"です。これは "すべての空白"を意味します。

この正規表現をBASIC!文字列で使用するには、"\\s+"(バックスラッシュをエスケープする)を記述する必要があります。

WORD$()関数とSPLITコマンドと同様に、<test_exp>は正規表現です。 正規表現についての注意点については、SPLITを参照してください。

LTRIM$(<sexp>{, <test_sexp>})

RTRIM$(<sexp>{, <test_sexp>})

LTRIM$()がソース文字列<sexp>の左端だけをトリムする点を除いて、TRIM$()とまったく同じです。

RTRIM$()は右端だけをトリムします。

WORD$(<source_sexp>, <n_nexp> {, <test_sexp>}) test_sexp>})

この関数は、文字列から単語を返します。 <source_sexp>文字列は、<test_sexp>が発生する各場所の部分文字列に分割されます。 <n_nexp>パラメータは、返す部分文字列を指定します。 番号は1から始まります。<test_sexp>は結果から削除されます。 <test_sexp>パラメータはオプションの正規表現です。 与えられていなければ、ソース文字列は空白で分割されます。 具体的には、デフォルトの<test_sexp>は "\s+"です。

<test_sexp>の先頭および末尾の出現は、分割される前に<source_sexp>から取り除かれます。 <n_nexp>が1より小さいか、<source_sexp>で見つかった部分文字列の数より大きい場合、空の文字列("")が返されます。 <source_sexp>内の<test_sexp>の隣接する2つの出現は空の文字列になります。 <n_nexp>は、この空文字列を戻り値として選択できます。

例:


string$ = "The quick brown fox" 
result$ = WORD$(string$, 2);  % result$は"quick" 

string$ = ":a:b:c:d" 
delimiter$ = ":" 
SPLIT array$[], string$, delimiter$      % array$[1]は"" 
result$ = WORD$(string$, 1, delimiter$)  % result$は"a"、""ではない 

この機能はSPLITコマンドに似ています。 正規表現についての注意点については、SPLITを参照してください。

ENCODE$(<type_sexp>, {<qualifier_sexp>}, <source_sexp>)

<type_sexp>で指定されているように、いくつかの方法のいずれかでエンコードされた文字列<source_sexp>を返します。 <qualifier_sexp>の使用法は、タイプによって異なります。

タイプ修飾子デフォルト結果
"ENCRYPT"password""(空)パスワードパラメータを使用してソース文字列を暗号化します。暗号化アルゴリズムは "PBEWithMD5AndDES"です。
ENCODE$()のこの使用法は、ENCRYPTコマンドと同じ方法で動作します。DECODE$()関数を使用して解読します。
"DECRYPT"password""タイプ"ENCRYPT"と同じです(暗号化され、解読しません)。
"ENCRYPT_RAW"password""入力と出力がバッファー文字列であることを除いて、タイプ "ENCRYPT"と同じです。 バイナリデータを暗号化するのに便利です。
"DECRYPT_RAW"password"""ENCRYPT_RAW"と同じです(暗号化され、解読しません)。
"URL"charset"UTF-8"HTMLアプリケーション/ x-www-form-urlencodedに必要な形式を使用してソース文字列をエンコードします。
charsetパラメータは省略してください。
"BASE64"charset"UTF-8"元の文字列を、バイナリデータのBase64表現にエンコードします。 RFC2045および3548を参照してください。
この関数を使用する最も簡単な方法は、charsetパラメータを省略することです。

型は必須ですが、ENCODE$()とDECODE$()の2つのパラメータの形式については以下を参照してください。

タイプは大文字と小文字を区別しません。「BASE64」、「base64」、および「Base64」はすべて同じです。

修飾子はオプションですが、コンマは必須です。

パスワードまたは文字セットのいずれかの修飾子を指定すると、大/小文字が区別されます。 パスワードか文字セットかに関わらず、修飾子を指定すると大文字と小文字が区別されます。

ソース文字列を指定された文字セット(またはパスワード)でエンコード(または暗号化)できない場合、関数は空の文字列("")を返します。エラーメッセージを表示するには、GETERROR$()関数を呼び出すことができます。

"ENCRYPT"、 "DECRYPT"、 "URL"はすべてのBASIC文字列で使用できます。文字列はバイトストリームに変換され、バイトストリームは暗号化またはURLエンコードされます。暗号化されたバイトストリームは、バイナリデータのBase64表現を使用して文字列形式に変換されます(上の表の「BASE64」のコメントを参照してください)。

"ENCRYPT_RAW"と "DECRYPT_RAW"は、バッファ・ストリング内のバイナリ・データとの使用を意図しています。バッファ文字列はBASIC!文字列の特別な使い方で、各16ビット文字は1バイトの0と1バイトのデータで構成されます。 "ENCRYPT_RAW"はバッファ文字列またはASCIIテキスト文字列を暗号化できますが、Unicodeテキストで使用すると文字列が破損します。暗号化の後、結果は別のバッファー文字列に戻されます。

「BASE64」は、その文字列をバイト・ストリームに変換してからBase64にエンコードします。 UTF-8を使用するデフォルトの変換は、任意のBASIC!文字列で動作します。別の文字セットエンコーディングを指定するとデータが破損する可能性があります。

通常、バッファ文字列のバイナリデータには "BASE64"を使用します。この場合、データ破損のない任意の有効な文字セットを指定することができます。エンコーディング文字列は変更されますが、常に同じ文字セットを使用してデコードできます。

有効な文字セットの部分的なリストについては、下記のENCODE$()の2パラメータ形式を参照してください。

ENCODE$(<charset_sexp>, <source_sexp>)

<source_sexp>という文字列を<charset_sexp>の文字エンコードを使用してエンコードし、その結果をバッファ文字列に返します。ストリングをバッファーとして使用する場合、各16ビット文字の下位8ビットに1バイトのデータが書き込まれ、上位8ビットは0になります。

charsetは、ソース文字列をバイトストリームに変換するために使用される規則を指定します。ストリームはバッファ文字列に書き込まれ、1文字につき1バイトです。バイトは16ビット文字に再構成されません。

「UTF-8」、「UTF-16」、「UTF-16BE」、「UTF-16LE」、「US-ASCII」、および「ISO-8859-1」の文字セットは常に使用できます。デバイスに追加の文字セットが含まれている可能性があります。文字セット名は大文字小文字を区別しますが、標準の文字セットにはエイリアスが付いています。たとえば、「utf8」が有効です。 ソース文字列を指定された文字セットでエンコードできない場合、関数は空の文字列( "")を返します。エラーメッセージを表示するには、GETERROR$()関数を呼び出すことができます。

ENCODE$()でバッファ文字列を作成する場合は、バイトをBYTE.WRITE.BUFFERでファイルに書き込むことができます。

暗号化とURLまたはBase64エンコーディングについては、上のENCODE$()の3つのパラメータの形式を参照してください。

DECODE$(<type_sexp>, {<qualifier_sexp>}, <source_sexp>)

ENCODE$()でエンコードされた文字列<source_sexp>をデコードした結果を返します。 <type_sexp>と<qualifier_sexp>は、文字列のエンコード方法を記述します。 ソース・ストリングをエンコードするのに使用されたものと同じタイプおよび修飾子を使用する必要があります。そうしないと、予期しない結果が生じる可能性があります。

タイプ修飾子デフォルト結果
"ENCRYPT"password""(空)パスワードパラメータを使用してソース文字列を復号化します。暗号化アルゴリズムは "PBEWithMD5AndDES"です。
DECODE$()のこの使用法はDECRYPTコマンドと同じ方法で動作します。
"DECRYPT"password""タイプ "ENCRYPT"と同じです(復号化され、暗号化されません)。
"ENCRYPT"password""入力と出力がバッファー文字列であることを除いて、タイプ "DECRYPT"と同じです。
バイナリデータを復号化するのに便利です。
"DECRYPT"password""タイプ "ENCRYPT"と同じです。
"URL"charset"UTF-8"HTMLアプリケーション/ x-www-form-urlencodedに必要な形式であると想定されるソース文字列をデコードします。
charsetパラメータは省略してください。
"BASE64"charset"UTF-8"バイナリデータのBase64表現を保持するソース文字列をデコードします。 RFC2045と3548を参照してください。

型は必須ですが、ENCODE$()とDECODE$()の2つのパラメータの形式については以下を参照してください。

タイプは大文字と小文字を区別しません。「BASE64」、「base64」、および「Base64」はすべて同じです。

修飾子はオプションですが、コンマは必須です。

パスワードまたは文字セットのいずれかの修飾子を指定すると、大/小文字が区別されます。

ソース文字列は、その型に従ってバイトストリームにデコードされます。 次に、バイトストリームを解釈する方法を記述する文字エンコーディング(charsetパラメータ)に従って、バイトストリームをBASIC!文字列(UTF-16)に変換します。 この文字セットは、復号化のために常にUTF-8であり、他の型の場合はデフォルトでUTF-8になります。 この関数の最も一般的な使い方は、文字セットを省略することです。

元の文字列がバイナリデータ( "ENCRYPT_RAW"または "BASE64")からエンコードされている場合、結果のBASIC!文字列はバッファ文字列になります。 文字列をバッファとして使用すると、各16ビット文字の下位8ビットに1バイトのデータが書き込まれ、上位8ビットは0に書き込まれます。文字列から1バイトずつバイナリデータを抽出できます ASCII()またはUCODE()関数を使用します。

ソース文字列を指定された文字セット(またはパスワード)でデコード(または復号化)できない場合、関数は空の文字列("")を返します。 エラーメッセージを表示するには、GETERROR$()関数を呼び出すことができます。

有効な文字セットの部分的なリストについては、下記のDECODE$()の2パラメータ形式を参照してください。

DECODE$(<charset_sexp>, <buffer_sexp>)

<charset_sexp>を使用してエンコードされたバッファー文字列<buffer_sexp>をデコードし、結果を標準のBASIC!文字列で返します。 バッファ文字列はBASIC!文字列の特別な使い方で、各16ビット文字は1バイトの0と1バイトのデータで構成されます。

ソース文字列を指定された文字セットでデコードできない場合、関数は空の文字列("")を返します。 エラーメッセージを表示するには、GETERROR$()関数を呼び出すことができます。

バッファー文字列ではない文字列をデコードしようとすると、予期しない結果が生じることがあります。 ENCODE$()関数のほかに、BYTE.READ.BUFFERおよびBT.READ.BYTESコマンドはバッファ文字列を書き込むことができます。

あなたのプログラムは、このような文字列を文字ごとに直接構築することもできます。

BYTE.READ.BUFFERを使用してファイルからデータを読み取る場合は、DECODE$()を使用してバイトをBASIC!(UTF-16)文字列に再構成できます。 charsetは、元の文字列がバイトとしてファイルに書き込まれたときのエンコード方法を指定します。

たとえば、バイナリファイルには、名前やタイトルのテキスト文字列が埋め込まれている場合があります。 Unicodeを可能にするために、テキストをエンコードすることができます。 32バイトのバイナリデータを読み込み、8バイトのバイナリと24バイトのUTF-8エンコードされたテキストで構成されているとします。


BYTE.READ.BUFFER file, 32, bfr$ 
namebfr$ = MID$(bfr$, 9) 
name$ = DECODE$("UTF-8", namebfr$) 

暗号化とURLまたはBase64デコードについては、上のDECODE$()の3パラメータ形式を参照してください。

STR$(<nexp>)

<nexp>の文字列表現を返します。

LOWER$(<sexp>)

すべて小文字で<sexp>を返します。

UPPER$(<sexp>)

すべて大文字で<nexp>を返します。

VERSION$()

BASIC!のバージョン番号を文字列で返します。

INT$(<nexp>)

数値式の整数部分を表す文字列を返します。

HEX$(<nexp>)

数値式の16進表現を表す文字列を返します。

OCT$(<nexp>)

数値式の8進表現を表す文字列を返します。

BIN$(<nexp>)

数値式のバイナリ表現を表す文字列を返します。

USING$({<locale_sexp>} , <format_sexp> { , <exp>}...) {<locale_sexp>} , <format_sexp> { , <exp>}...)

ロケールと書式式を使用して式リストを書式設定する文字列を返します。

この関数は、BASIC!プログラムがAndroidプラットフォームのFormatterクラスにアクセスできるようにします。詳細はhttp://developer.android.com/reference/java/util/Formatter.htmlをご覧ください。

<locale_sexp>は、特定の言語、地域または国の書式設定規則を使用するようにフォーマッタに指示する文字列です。たとえば、 "en_US"はアメリカ英語の規則を指定します。

<format_sexp>は、 "%d"や "%7.2f"のような書式指定子を含む文字列であり、これはフォーマッタに続く式をどうするかを指示します。

書式文字列の後には、0個以上の式のリストが続きます。ほとんどの書式指定子は、リストから1つの引数を順番にとります。書式文字列が必要とする引数を多く指定しないと、詳細なJavaエラーメッセージが表示されます。

各式は、対応する書式指定子の型とも一致していなければなりません。"%-7s"のような文字列形式指定子を数値に適用しようとしたり、文字列に"%5.2f"のような浮動小数点指定子を指定すると、Javaエラーメッセージが表示されます。

ロケール式

USING$()関数は、言語と地域に基づいて出力文字列をローカライズできます。ロケールは、言語と地域を標準化されたコードで指定します。 <locale_sexp>は、0個以上のコードがアンダースコアで区切られた文字列です。

この関数は最大3つのコードを受け入れます。最初は "en"、 "de"、 "ja"などの言語コードでなければなりません。

2つ目は、 "FR"、 "US"、 "IN"などの地域コードまたは国コードでなければなりません。一部の言語と国の組み合わせでは、「バリアントコード」と呼ばれる第3のコードを使用できます。

この関数は、国または地域の標準3文字コードおよび数値コードも受け入れます。たとえば、「fr_FR」、「fr_FRA」、および「fr_250」はすべて同等です。

Androidデバイスのデフォルトのロケールを使用する場合は、<locale_exp>を空の文字列("")にするか、まったく省略します。除外する場合は、カンマを使用する必要があります。例:USING$(,"%f",x)

<locale_sexp>に間違いがあると、Javaエラーメッセージが表示されることがありますが、ロケールは無視され、文字列はデバイスのデフォルトロケールを使用してフォーマットされます。

Androidデバイスは、すべての可能なロケールをサポートしていません。デバイスが認識できない有効なロケールを指定すると、文字列はデフォルトのロケールを使用してフォーマットされます。

フォーマット式

C/C++、Perl、または他の言語のprintf関数に精通している場合は、この関数のフォーマット指定子のほとんどを認識します。 フォーマット式は、Java Formatterクラスのformat文字列、またはJava Stringのformat(String,Object ... class,format(String,Object ...)メソッドとまったく同じですが、ブール形式指定子は サポートされており、16進ハッシュ指定子は数値型と文字列型に制限されています。

これらの他の言語のいずれかでプログラミングしていない場合は、テキストを書式設定するための強力なツールの紹介になります。

フォーマット式は、フォーマット指定子が埋め込まれた文字列です。フォーマット指定子でないものは、文字通り関数出力文字列にコピーされます。 各埋め込みフォーマット指定子は、指定子に従ってフォーマット設定されたリストの式の値に置き換えられます。 例えば:


PRINT USING$("","Pi is approximately %f.", PI())
Pi is approximately 3.141593.  [英語ロケールでの表示]

<locale_exp>は ""で、 "デフォルトロケールを使用する"を意味します。

<format_exp>、 "Pi is approximately %f."は、1つのフォーマット指定子 "%f"を持っています。

"%f"は、 "デフォルトの10進浮動小数点出力形式を使用する"ことを意味します。

式リストには1つのアイテム、数学関数PI()があります。

出力では、 "%f"はPI()関数の値に置き換えられます。

ロケール言語が英語でない場合は、出力が異なる場合があります。

フォーマット指定子

利用可能なフォーマット指定子の簡単な概要を次に示します。

データのタイプフォーマットコメント
文字列%s %S%Sは大文字に出力する
数値%f標準のBASIC数値は浮動小数点です。小数点出力には%fを使用します:"1234.567"
%e %E指数表記に%eまたは%Eを使用します:"1.234e + 03"。%Eは大文字を書き込みます:"1.234E + 03"。
%g %G%g(%G)はシステムが%fまたは%e(%E)選択できるようにします。
%a %A%aと%Aは "16進浮動小数点"です。
整数%d %o %x %XUSING$はいくつかの数学関数を整数として使うことができます。
10進数は%d、8進数は%o、16進数は%x%Xを使用します。
特殊整数%c %C %tこれらの指定子は整数で文字%c%Cを出力できます。%tは時間形式指定子のファミリを表します。
なし%% %nこれらの指定子は式リストを読み込みません。%%は出力に単一の"%"を書き込みます。%nは\nと全く同じ改行を書き込みます。

%aと%Aの詳細については、上記のAndroidのマニュアルを参照してください。

BASIC!にはブール型がないため、Androidの%bと%Bはサポートされていません。

Androidの%hおよび%Hハッシュコード指定子は、BASIC!の文字列と数字に限定されています。

USING$()の整数型指定子の説明については、下記を参照してください。

%t <x>ここで<x>は別の文字です。 それらは1970年1月1日のUTC("エポック")の初めからのミリ秒数として解釈される整数で動作します。 タイム・フォーマット指定子をTIME()関数の出力に適用することができます。 ただし、%t時間指定子はTIMEZONE.SET値ではなく、ローカルタイムゾーンを使用します。

30を超える時間形式指定子があります。 以下にいくつかの例を示しますが、完全なリストを取得するには、上にリンクされているAndroidのドキュメントを読むべきです。


PRINT USING$("", "The time is: %tI:%<tM:%<tS %<Tp", time())  % 難しい表現
PRINT USING$("", "The time is: %tr", time())                          % 同じこと!

02:27:16PM  [表示出力の例]

t = TIME(2001, 2, 3, 4, 5, 6)  % 2001/02/03 04:05:06、ローカルタイムゾーンを設定 
PRINT USING$("sv", "%tA", int(t))  % スウェーデン語で日、 "lordag"
PRINT USING$("es", "%tB", int(t))  % スペイン語で月に "febrero" 
PRINT USING$("", "%tY/%tm/%td", int(t) , int(t), int(t))  % 表示"2001/02/03" 
PRINT USING$( , "%tY/%<tm/%<td", int(t))  % 表示"2001/02/03" 
PRINT USING$("en_GB", "%tH:%<tM:%<tS", int(t)) % 表示"04:05:06" 
PRINT USING$("in_IN", "%tT", int(t)) % 表示"04:05:06" 

注:TIMEZONE.SET設定またはロケール・パラメーターのいずれかに関係なく、現地時間帯の日時が印刷されます。 TIMEZONE.SET "UTC"で同じサンプルセットを試してみてください。 それがあなたのローカルタイムゾーンでない限り、別の時間とおそらく異なる日が表示されます。

オプションの修飾子

フォーマット指示子は、表に示すとおり正確に使用できます。 それらの動作方法を制御するデフォルト設定があります。 設定を自分で制御し、必要に応じて動作を微調整することができます。

次の例に示すように、フォーマット指定子をインデックス、フラグ、幅、および精度で変更できます。

"%3$-,15.4f"

"%3$-,15.4f"
<インデックス><フラグ><幅><精度><指定子>

整数値

BASIC!には倍精度浮動小数点数しかありません。整数型はありません。USING$()関数は、整数値にのみ適用される書式指定子("%d"、"%t"、"%x")をサポートしています。

USING$()は、整数結果を本質的に生成する数学関数と特別な関係があります。 BASIC!は、これらの関数の出力を浮動小数点に変換して数値変数に格納しますが、USING$()は元の整数値を取得できます。例えば:


PRINT USING$("", "%d", 123)       % ERROR! 
PRINT USING$("", "%d", INT(123))  % No error 

USING$()の整数値を生成する関数は次のとおりです。

INT() BIN() OCT() HEX() CEIL() FLOOR() ASCII() UCODE() BAND() BOR() BXOR() SHIFT() TIME()

FORMAT_USING$(<locale_sexp>, <format_sexp> { , <exp>}...)

USING$()の別名です。 2つの同等の関数を使用すると、コードを読みやすくすることができます。 例えば:


string$ = FORMAT_USING("", "pi is not %d", int(pi())) 
Print USING$("en_US", "Balance: $%8.2f", balance) 

FORMAT$(<pattern_sexp>, <nexp>)

パターン<pattern_sexp>でフォーマットされた<nexp>の文字列を返します。

サイン0より下の場合はマイナス"-"文字、0の場合はスペース。サインと浮動文字が一緒に浮動フィールドを形成します。
浮動文字パターンの最初の文字が "#"または"."でない場合 または "-"の場合、その文字は 浮動文字になります。このパターン文字は通常"$"です。浮動文字が指定されていない場合は、空白文字が使用されます。 下のオーバーフローも参照してください。
小数点パターンには、任意の小数点文字(".")を1つ含めることができます。パターンに小数点がない場合は、整数だけが出力されます。小数点の後に表示される数字は出力されません。
#文字(小数点無し)各"#"は数字の数字に置き換えられます。数字よりも"#"文字が多い場合、先頭の"#"文字はスペースで置き換えられます。
#文字(小数点以下)各"#"は数字の数字に置き換えられます。有効数字よりも"#"文字が多い場合、末尾の"#"文字はゼロに置き換えられます。 パターンの小数点以下の"#"文字の数は、出力される小数点以下の桁数を指定します。
%文字(小数点無し)各"%"は数字の数字に置き換えられます。 数字よりも "%"文字が多い場合、先頭の "%"文字はゼロに置き換えられます。
%文字(小数点以下)小数点の後に"%"文字は使用できません。 これは構文エラーです。
パターン以外の文字いずれかのパターン文字(最初の文字以外)が#または%でなければ、その文字は直接出力にコピーされます。 文字が数字の最初の桁の前に表示される場合は、スペースで置き換えられます。 この機能は通常カンマで使用されます。
オーバーフロー桁数が#および%文字の数を超える場合、出力には浮動フィールドの代わりに**文字が挿入されます。
出力サイズ:出力される文字数は、パターンに浮動文字がない場合は常に、パターン内の文字数+符号用の文字数+スペース用の文字数です。

ノート

符号と浮動文字は、フォーマットされた出力の最初の桁の直前に常に現れる2文字幅の浮動小数点フィールドを形成します。 フォーマットされた出力に先行スペースがある場合、それらは浮動フィールドの前に置かれます。

"#"文字は先行スペースを生成し、先行ゼロは生成しません。"##.###"は0.123を ".123"とフォーマットします。 先行ゼロを使用する場合は、"%"を使用します。 たとえば、"%.###"、"#%.###"、または "##%"はすべて先頭のゼロを保証します。

#と%の文字を混同しないように注意してください。 表示されている以外は、予期しない結果が生じることがあります。

出力される文字数は、常にパターン内の文字数に2つの浮動文字を加えたものです。

例:

関数呼び出し出力
Format$( "##,###,###", 1234567)1,234,56712文字
Format$( "%%,%%%,%%%.#", 1234567.89)01,234,567.814文字
Format$( "$###,###", 123456)$123,4569文字
Format$( "$###,###", -1234)-$1,2349文字
Format$( "$###,###", 12)$129文字
Format$( "$%%%,%%%", -12)-$000,0129文字
Format$( "##.#", 0).06文字
Format$( "#%.#", 0)0.06文字
Format$( "$###.##", -1234.5)**234.508文字

FN.DEF name|name$( {nvar}|{svar}|Array[]|Array$[], ... {nvar}|{svar}|Array[]|Array$[])

関数の定義を開始します。このコマンドは、関数に名前を付け、パラメータがあればそれをリストします。

関数名が$文字で終わると、関数は文字列を返します。そうでない場合は数値を返します。パラメータリストには、必要な数のパラメータを含めることができます。 パラメータは、数値または文字列、スカラーまたは配列である可能性があります。

名前付き関数を呼び出す前に、プログラムはFN.DEFを実行しなければなりません。プログラムは、同じ名前を持つ関数を複数作成したり、同じ関数を複数回作成したりしてはなりません。ただし、同じ名前の独自の関数を定義することで、組み込み関数をオーバーライドできます。

以下はすべて有効です:


FN.DEF cut$(a$, left, right) 
FN.DEF sum(a, b, c, d, e, f, g, h, i, j) 
FN.DEF sort(v$[], direction) 
FN.DEF pi()  % Overrides built-in. You can make π = 3! 

パラメータは、関数内でのみ表示される変数を作成します。 これらは、関数内で作成された他の変数と同様に使用できます(次の変数スコープを参照)。

変数スコープ

ユーザー定義関数を実行している間に作成されたすべての変数は、関数専用です。メインプログラムの変数v$は、関数内の変数v$と同じではありません。 さらに、再帰的に呼び出される関数の変数v$は、呼び出し元関数のv$と同じではありません。関数は、関数の外部で作成された変数にアクセスすることはできません。ユーザー定義関数の実行中に作成されたすべての変数は、関数が戻るときに破棄されます。

配列変数が破棄されると、その変数は再利用されます。 ただし、データ構造体ポインタが破棄された場合、データ構造体は破棄されません(次のセクションを参照)。

パラメータには、参照による呼び出しと値による呼び出しの2種類があります。 値による呼び出しは、呼び出した変数値(または式)が呼び出された変数にコピーされることを意味します。 関数内の呼び出された変数に対する変更は、呼び出し元の変数の値に影響しません。 参照による呼び出しは、関数内で呼び出された変数の値が変更された場合、呼び出した変数の値が変更されることを意味します。

スカラー(非配列)関数の変数は、値で呼び出すか、参照で呼び出すことができます。 どのタイプの変数が呼び出されるかによって異なります。 呼び出し元変数の前に "&"文字がある場合、変数は参照によって呼び出されます。 呼び出し変数名の前に "&"がない場合、変数は値で呼び出されます。

ユーザー定義関数のデータ構造

データ構造(リスト、スタック、バンドル、ビットマップ、グラフィカルオブジェクト、ポインタを介して参照されるもの)は、グローバルスコープです。 つまり、変数がデータ構造体へのポインタとして使用されている場合、変数が関数の内部または外部で使用されているかどうかにかかわらず、同じデータ構造体を指します。 データ構造は、メインプログラム、同じユーザー定義関数、または他のユーザー定義関数で作成されている可能性があります。これは、例えば、ポインターをバンドルに渡してその関数内でそのバンドルを変更すると、 関数が返っても変更は保持されます。 また、関数が関数の外部で作成されたグラフィックオブジェクトを変更できることを意味します。ユーザー定義関数の実行中に作成されたデータ構造(リスト、スタック、バンドル、またはグラフィックオブジェクト)は、関数が戻るときに破棄されません。 データ構造体を指すローカル変数は失われますが、データ構造体のポインタを関数の戻り値または参照渡しのパラメータで返すことができます。


FN.DEF test(a) 
a= 9 
FN.RTN a 
FN.END 

a =1 
PRINT test(a), a   %will 表示: 9, 1 
PRINT test(&a), a  %will 表示: 9, 9 

配列パラメータは常に参照によって呼び出されます。


FN.DEF test(a[]) 
a[1] = 9 
FN.RTN a[1] 
FN.END 

DIM a[1] 
a[1] = 1 
PRINT test(a[]), a[1] % prints: 9, 9 

関数の戻り値とともに、参照渡しのパラメーターを使用して、関数の呼び出し側に情報を返すことができます。

FN.RTN <sexp>|<nexp>

関数が実行を終了し、戻り式<sexp> | <nexp>の値を返します。 戻り式の型、文字列または数値は、関数名の型と一致する必要があります。 FN.RTNステートメントは、必要なプログラムのどこにでも置くことができます。

関数はスカラ値を1つだけ返すことができます。 配列を返すことはできません。 データ構造(リスト、スタック、バンドル、またはグラフィックオブジェクト)を返すことはできませんが、データ構造体へのポインタを返すことができます。 データ構造(リスト、スタック、バンドル、またはグラフィックオブジェクト)を返すことはできませんが、データ構造体へのポインタを返すことができます。

注意:参照渡しのパラメータを使用して、関数の呼び出し側に情報を返すこともできます。

FN.END

ユーザー定義関数の定義を終了します。 すべての関数定義はFN.ENDで終わらなければなりません。

関数が実行されているときにFN.ENDステートメントを実行すると、関数は終了してデフォルト値を返します。関数型が数値の場合、デフォルトの戻り値は0.0です。文字列関数は、空の文字列("")を返します。

CALL <user_defined_function>

ユーザー定義関数を実行します。 関数が返す値はすべて破棄されます。

CALLコマンド・キーワードはオプションです。 BASIC!は変数で始まる行からLETコマンドを推測できるのと同様に、関数名で始まる行からCALLコマンドを推論することができます。たとえば、次のような関数を定義したとします。


FN.DEF MyFunction(x, y$, z) 
< your code here > 
FN.END 

次のいずれかのステートメントで、戻り値を無視して関数を実行できます。


CALL MyFunction(a, b$, c) 
MyFunction(a, b$, c) 

LETと同様に、関数名がBASIC!コマンド・キーワードで始まる場合は、CALLを使用する必要があります。 BASIC!にコマンドを推論させるよりも、CALLで関数を実行する方が少し速いです。 詳細についてはLETを参照してください。

IF/THEN

IFコマンドは、文のブロックの条件付き実行を提供します。 (注:中括弧{}はコマンド構文の一部ではなく、オプションの部分を表示するためだけに使用されます)。


IF <condition> { THEN } 
 <statement> 
 <statement> 
 ... 
 <statement> 
{ ELSEIF<condition> { THEN } 
 <statement> 
 <statement> 
 ... 
 <statement> } 
{ ELSE 
 <statement> 
 <statement> 
 ... 
 <statement> } 
ENDIF 

コマンドを任意の深さにネストすることができます。 つまり、ブロック内のすべての<statement>は、すべての独自の<statement>ブロックを含む完全なIFコマンドです。

IFコマンドの実際の例については、サンプル・プログラム・ファイルF04_if_else.basを参照してください。

IF/THEN/ELSE

条件ブロックに1つのステートメントしか含まれていない場合、より簡単な形式のIFコマンドを使用することができます。


IF <condition> THEN <statement> { ELSE <statement> } 

この形式では、THENは必須で、ELSEIFまたはENDIFはありません。

このフォームはネストされません。どちらの<statement>もIFコマンドではありません。

単一のステートメントはブロックとして扱われないため、埋め込みステートメントのいずれかがブレーク、継続、または移動の場合は、これが優先されます。

<statement>は、コロン(":")文字で区切られた複数の文で置き換えることができます。これを行うと、複数のステートメントのセットがブロックとして扱われ、1行のIF/THEN/ELSEはIF/THEN/ELSE/ENDIFになります。

これらの2つの行はまったく同じです:


IF (x > y) THEN x = y : PRINT a$ ELSE y = x : PRINT b$ 
IF (x > y) : x = y : PRINT a$ :ELSE :y = x: PRINT b$: ENDIF 

IF/THEN/ELSEのこの形式でコロン区切り文を使用する場合は、キーワードTHENとELSEにスペースを入れるように注意する必要があります。スペースはBASIC!インタプリタにとって重要ではありませんが、シングル・ラインのIF文をマルチ・ステートメント・ブロックを複数行のIFにENDIFで変換するプリプロセッサに必要です。

FOR/NEXT


FOR <nvar> = <nexp_1> TO <nexp_2> {STEP <nexp_3>} 
 <statement> 
 ... 
 <statement> 
NEXT {<nvar>} 

最初に、<nvar>に<nexp_1>の値が割り当てられ、<nexp_2>と比較されます。 {STEP <nexp_3>}は省略可能で省略することができます。 省略すると、ステップ値は1になります。

<nexp_3>が正の場合、<nvar> <= <nexp_2>の場合、ForとNextの間のステートメントが実行されます。

<nexp_3>が負の場合、<nvar>> = <nexp_2>の場合、ForとNextの間のステートメントが実行されます。

Nextステートメントが実行されると、<nvar>がStep値だけ増分または減分され、テストが繰り返されます。 <statement>は、テストが真である限り実行されます。 毎回、<nvar>は<nexp_2>の元の値と比較されます。 <nexp_2>は、次のそれぞれについて再評価されません。

TOとSTEPというキーワードは、変数を含む可能性のある式を持つ行の途中にあるため、BASIC!を混乱させる可能性があります。 BASIC!インタプリタは、変数とキーワードの間にスペースを入れていないことを覚えておいてください。 FOR a TO mはforatomとみなされます。 混乱の可能性がある場合は、カッコを使用して名前が変数であることをBASICに伝えます。


FOR WinTop TO WinBot    % エラー:"FOR win TO ptowinbot"と解釈されます。
FOR (WinTop) TO WinBot  % 意図通りに解釈されます。
FOR/NEXTループはどのレベルにもネストできます。FOR/NEXTループがネストされると、実行されたNEXTステートメントは、現在実行中のFORステートメントに適用されます。 これは、NEXTでコーディングされた<nvar>が何であっても同じです。 すべての実際的な目的のために、次へとコード化された<nvar>はコメント以上のものではないと考えられるべきです。

NEXTまたはF_N.BREAKなしでFORループを終了することは可能です。 ただし、デバッグが困難な微妙なロジックエラーが発生する可能性があります。 デバッグモード(DEBUG.ONコマンドを参照)を設定すると、BASIC!はこれらのバグを見つけるのを手助けすることができます。 プログラムが終了してデバッグがオンになっているときに、プログラムがFORループに入ってきてもそれをきれいに残さなかった場合、BASIC!は実行時エラーを表示します。:"Program ended with FOR without NEXT"

F_N.CONTINUE

このステートメントがFOR/NEXTループ内で実行されると、ループの現在のパスの残りの部分はスキップされます。 NEXTステートメントはすぐに実行されます。

F_N.BREAK

このステートメントがFOR/NEXTループ内で実行されると、ループの現在のパスの残りの部分はスキップされ、ループは終了します。 [NEXT]の直後の文が実行されます。

WHILE/REPEAT


WHILE <lexp> 
 <statement>
 … 
 <statement> 
REPEAT

WHILEとREPEATの間の<statement>は、<lexp>がtrue(真)と評価される限り実行されます。 <statements>は、<lexp>がfalse(偽)から始まる場合はまったく実行されません。

WHILE/REPEATループはどのレベルにもネストできます。 WHILE/REPEATがネストされると、実行されたREPEATステートメントは最も内側のWHILEループに適用されます。

W_R.CONTINUE

このステートメントがWHILE-REPEATループ内で実行されると、ループの現在のパスの残りの部分はスキップされます。 REPEATステートメントはすぐに実行されます。

REPEATまたはW_R.BREAKを使わずにWHILEループを終了することができます。 FOR/NEXTループの場合と同様に、微妙なバグが発生する可能性があり、BASIC!を使用して見つけることができます。 デバッグがオンで(DEBUG.ONコマンドを参照)、プログラムが終了したときにWHILEループに残っている場合、BASICは実行時エラーを表示します:"Program ended with WHILE without REPEAT"

W_R.BREAK

このステートメントがWHILE/REPEATループ内で実行されると、ループの現在のパスの残りの部分はスキップされ、ループは終了します。 REPEATの直後の文が実行されます。

DO/UNTIL


DO
 <statement> 
… 
 <statement> 
UNTIL <lexp> 

DOとUNTILの間の文は<lexp>が真になるまで実行されます。 <statement>は常に少なくとも1回は実行されます。

DO/UNTILループはどのレベルにもネストすることができます。 発生したUNTILステートメントは、最後に実行されたDOステートメントに適用されます。

UNTILまたはD_U.BREAKなしでDOループを終了することができます。 FOR/NEXTループの場合と同様に、微妙なバグが発生する可能性があり、BASIC!を使用して見つけることができます。 デバッグがオンで(DEBUG.ONコマンドを参照)、プログラムが終了したときにDOループに残っている場合、BASIC!は実行時エラーを表示します。"Program ended with DO without UNTIL"

D_U.CONTINUE

このステートメントがDO/UNTILループ内で実行されると、ループの現在のパスの残りの部分はスキップされます。 UNTILステートメントはすぐに実行されます。

D_U.BREAK

このステートメントがDO/UNTILループ内で実行されると、ループの現在のパスの残りの部分はスキップされ、ループは終了します。 UNTILの直後のステートメントが実行されます。

GOTO <label>

実行される次のステートメントは、<ラベル>に続くステートメントになります。

ラベル

ラベルはコロン":"文字のあとに続く単語です。 ラベル名は、BASIC!コマンドキーワードで始まってはならないという点を除いて、変数名と同じ規則に従います。

他のコマンドで行にラベルを付けることができます。 2つのコロンを使用します。1つは単語がラベルであることを示し、もう1つはライン上の他のコマンドからラベルを区切ります。


Here: : IF ++a < 5 THEN GOTO here ELSE PRINT a 

このプログラムは5.0を表示してから停止します。

コロンは単語がラベルであることを示しますが、ラベルの一部ではありません。

例:


This_is_a_Label: 
@Label#3: 
Loop: % "GOTO Loop"でこの行にジャンプします

<statement> 
… 
<statement> 
GOTO Loop 

GOTO <index_nexp>, <label>...

「計算されたGOTO」。 インデックス式は評価され、最も近い整数に丸められ、ラベルのリストへのインデックスとして使用されます。 インデックス付きラベルの後のステートメントにジャンプします。 インデックスがラベルを選択しない場合、プログラムはGOTOの後のステートメントで処理を続けます。

例については、GOSUBを参照してください。

GOSUB <label> /RETURN

実行される次のステートメントは、<ラベル>に続くステートメントになります。

ラベルについては、GOTOコマンドを参照してください。

<label>で始まる行の後のステートメントは、RETURNステートメントが出現するまで実行され続けます。 GOSUBステートメントに続くステートメントで実行が継続されます。

例:


Message$ = "Have a good day" 
GOSUB xPrint 
PRINT "Thank you" 
<statement> 
… 
<statement> 
END 
xPrint: 
PRINT Message$ 
RETURN 

表示:
Have a good day 
Thank you 

GOSUB <index_nexp>, <label>... /RETURN

「計算されたGOSUB」。 インデックス式は評価され、最も近い整数に丸められ、ラベルのリストへのインデックスとして使用されます。 インデックス付きラベルの後のステートメントにジャンプします。 次のRETURN命令が実行されると、プログラムはこのGOSUBの後のステートメントに戻ります。

インデックスがラベルを選択しない場合、プログラムはGOSUBの後のステートメントに進みます。 サブルーチンは実行されず、RETURN文も必要ありません。

例:


d = FLOOR(6 * RND() + 1) % サイコロを転がす
GOSUB d, Side1, Side2, Side3, Side4, Side5, Side6
PRINT "Welcome back!"
END
Side1:

RETURN
…
Side6:

RETURN

INCLUDE FilePath

プログラムが実行される前に、BASIC!プリプロセッサはすべてのINCLUDE文を、指定されたファイルのテキストで置き換えます。この時点で、別のBASIC!プログラムファイルをプログラムに挿入することができます。プログラムがまだ実行されていないため、ファイルパスを文字列式にすることはできません。

ファイルは1回だけ含めることができます。 複数のINCLUDEステートメントが同じファイルの名前を持つ場合、プリプロセッサは最初のINCLUDEステートメントの代わりにファイルの内容を挿入し、他のステートメントを削除します。 これにより、インクルードファイルが原因で発生したOut-of-Memoryクラッシュを防ぐことができます。


INCLUDE functions/DrawGraph.bas 

ファイル "<pref base drive> /rfo-basic/source/functions/DrawGraph.bas"のコードをプログラムに挿入します。

ファイルパスは、上の例のように引用符をつけずに書くことも、引用符で書くこともできます。


INCLUDE "functions/DrawGraph.bas" 

引用符が存在する場合、プリプロセッサがファイルパスを小文字にするのを防ぎます。SDカードのファイルシステムは大文字と小文字を区別しないため、通常、これはBASIC!の動作を変更しません。 DrawGraph.basとdrawgraph.basは両方とも同じファイルを参照します。

ただし、プログラムをスタンドアロンのAndroidアプリケーション(付録Dを参照)に組み込むと、Androidファイルシステムで仮想ファイルを使用できます。 アセットのファイル名では大文字と小文字が区別されるので、INCLUDE FilePathで引用符を使用する必要があります。

プログラムが実行を開始する前にインクルードが処理されるため、プログラムロジックの影響を受けません。


IF 0 
 INCLUDE functions/DrawGraph.bas 
ENDIF 

この例では、プログラムファイルの内容がIF/ENDIFの本文にあるINCLUDEステートメントを置き換えますが、IF 0が常にfalseのためステートメントは実行されません。

しかし、単一行のIFに含まれるINCLUDEは無視されます。


IF x THEN INCLUDE functions/DrawGraph.bas ELSE PRINT "bad!" 

この例では、ファイルはINCLUDEステートメントの代わりに挿入されません。

RUN <filename_sexp>{, <data_sexp>}

このコマンドは、現在のプログラムの実行を終了し、ファイル名文字列式で指定されたBASIC!プログラムをロードして実行します。ファイル名はBASIC!の"source/"ディレクトリに相対的です。ファイル名が "program.bas"で<pref base drive>が "/sdcard"(デフォルト)の場合、"/sdcard/rfo-basic/source/program.bas"というファイルが実行されます。

filenameパラメータを省略し、現在実行中のプログラムが名前を持つ場合、プログラムは再起動します。 最初にプログラムを保存せずにBASIC!エディタから実行すると、プログラムには名前はありません。 この場合、RUNは構文エラーでプログラムを終了します。

オプションのデータ文字列式は、次のプログラムへのデータの受け渡しを提供します。 渡されたデータは、特別な変数##$を参照することにより、次のプログラムでアクセスすることができます。

実行プログラムは連鎖することができます。 実行コマンドによってロードされ実行されるプログラムは、別のプログラムファイルを実行することもできます。 この鎖は必要に応じて長くすることができます。

実行チェーンの最後のプログラムが終了するか、BACKキーをタップすると、元のプログラムがBASIC!エディタに表示されます。

プログラムがエラーで終了すると、エディタはエラーが発生した行を強調表示しようとします。 RUNコマンドでエラーが発生したプログラムが起動した場合、エディタにはそのプログラムがロードされません。 表示されるハイライトは無意味です。

PROGRAM.INFO <nexp>|<nvar>

現在実行中のプログラムに関する情報を報告するバンドルを返します。 有効なバンドルポインターではない変数を指定すると、新しいバンドルが作成され、変数にバンドルポインターが戻されます。 それ以外の場合は、変数または式のポイントをバンドルに書き込みます。

バンドルキーと可能な値は、以下の表にあります。

キータイプ
BasPathStringフルパス+現在実行中のプログラムの名前。 パスはBASIC!の "source/"ディレクトリに相対的です。
BasNameString現在実行中のプログラムの名前。
SysPathStringBASIC!のプライベートファイルストレージディレクトリへのフルパス。 パスはBASIC!の "data/"ディレクトリに相対的です。
UserApkNumeric(Logical)現在のプログラムがスタンドアロンのユーザ作成APK(付録D)から実行されている場合は、1.0(真)を返します。プログラムがBASIC!エディタまたはランチャーショートカットからのものである場合は、0.0(false)を返します(付録C)。

たとえば、次のように仮定します。

次に、返される値は次のようになります。

キー
BasPath../../Download/my_program.bas
BasNamemy_program.bas
SysPath../../../../../data/data/com.rfo.basic
UserApk0.0

SysPath: BASIC!は通常、プログラムとデータをベースディレクトリに保持します。ベースディレクトリはパブリックストレージスペースにあります。 BASIC!プログラムには、プライベートストレージ領域へのアクセス権もあります。 あなたのプログラムは、SysPathディレクトリ内にサブディレクトリを作成してそこにプライベートファイルを格納することができます。 BASIC!をアンインストールすると、プライベートストレージ内のファイルはすべて削除されることに注意してください。

付録Dで説明されているように、スタンドアロンのapkでアプリケーションとしてBASIC!プログラムを構築する場合は、SysPathが特に重要です。AndroidManifest.xmlファイルのパーミッション変更を参照してください。

SWITCH

SWITCHコマンドは、ネストされたIF-THEN-ELSE操作を置き換えるために使用できます。


SW.BEGIN a 
 SW.CASE 1 
 <statement1> 
 … 
 <statement2> 
 SW.BREAK 
 SW.CASE 2, 4 
 <statement3> 
 … 
 <statement4> 
 SW.BREAK 
 SW.CASE < 0 
 <statement5> 
 … 
 <statement6> 
 SW.BREAK 
 SW.DEFAULT 
 <statement7> 
SW.END 

SW.BEGINの引数の値は、順番に各SW.CASEの引数と比較されます。SW.CASEがSW.BEGINと一致する場合、一致するSW.CASEに続く文が実行されます。SW.CASEが一致しない場合、SW.DEFAULTの後のステートメントが実行されます。BASIC!は、SW.CASEまたはSW.DEFAULTのステートメントの実行を開始すると、SW.BREAKまたはSW.ENDが見つかるまで実行を継続し、他のSW.CASEまたはSW.DEFAULTは無視します。SW.BREAKはSW.ENDにジャンプします。

この例では

SW.BEGINの後にはSW.ENDが続かなければならず、同じスイッチのSW.CASEとSW.DEFAULT(もしあれば)がその間に現れなければなりません。 BASIC!がコンパイルされたかのように、SWITCHコマンドのセットは単一のユニットとして扱われます。

SWITCHコマンドの入れ子操作

スイッチは入れ子にすることができます。SW.CASEまたはSW.DEFAULTに続く文のブロックには、一連のスイッチコマンドが含まれている場合があります。ネストされたスイッチは別のSW.BEGINで始まり、別のSW.ENDで終了し、その間に独自のSW.CASEステートメントとSW.DEFAULTステートメントがあります。入れ子になったSWITCH内の他のSWITCHは、必要な数だけネストできます。

必要に応じて、内部SWITCH操作をラベル付きGOSUBルーチンまたはユーザー定義関数に入れ、GOSUBまたは関数呼び出しをSW.CASEまたはSW.DEFAULTブロックに配置することができます。これにより、コードを読みやすくなり、SWITCHの初期スキャンを少し速くすることができます。

SW.BEGIN <exp>

SWITCH操作を開始します。BASIC!は、SW.BEGINとSW.ENDの間ですべてのSW.CASE、SW.BREAK、およびSW.DEFAULTステートメントを検索し、SW.ENDに達するまで前方をスキャンします。

数値式または文字列式<exp>が評価されます。 その値は、各SW.CASEステートメントの式と順に比較されます。 BASIC!は比較の結果を使用して、次に実行するステートメントを決定します。

この条件が満たされている場合次にステートメントにジャンプする
1つまたは複数のSW.CASEステートメントがSW.BEGINと一致する最初に一致するSW.CASE
SW.CASEは一致せず、SW.DEFAULTが存在するSW .DEFAULTの後
SW.CASEは一致せず、SW.DEFAULTは存在しないSW.ENDの後

SW.CASEには2つの形式があります。両方の書式を自由に混在させることができます。各フォームは、SW.BEGINと「一致する」ことを定義します。 最初に一致するSW.CASEだけが効果を持ちます。

SW.CASE <exp>, ... exp>, ...

この形式のSW.CASEは、1つ以上の式のリストを提供します。 少なくとも1つの式の値がSW.BEGINパラメータの値と正確に等しい場合、このフォームのSW.CASEはSW.BEGINと一致します。SW.BEGINおよびSW.CASEパラメータの型(数値または文字列)は一致する必要があります。

SW.CASE <op><exp>

上記のSW.CASEの最初の形式は、そのパラメータのいずれかの値がSW.BEGINパラメータの値と等しい場合、SW.BEGINと一致します。この2番目の形式は1つの式expを取ることができますが、異なる論理演算子<op>を指定することができます。 次のいずれかの比較演算子を使用できます。

例えば:


SW.BEGIN a 
SW.CASE < b  % a < b 

表現<exp>は、任意に複雑であってもよいです。 式全体が書かれているかのように評価されます:


<value of SW.BEGIN argument> <op> <exp> 

オペレータの優先順位は通常通り適用されます。

SW.BREAK

このステートメントは、SW.CASEまたはSW.DEFAULTに続くステートメントのブロックを終了するために使用できます。SW.BREAKによって、BASIC!はSW.ENDステートメントにジャンプし、その間をすべてスキップします。

SW.BREAKが特定のSW.CASEに存在しない場合、その後のSW.CASEはSW.BREAKまたはSW.ENDに遭遇するまで実行されます。

SW.DEFAULT

このステートメントは、任意の値に一致するSW.CASEのように動作します。SW.CASEがSW.BEGIN値と一致する場合、一致するSW.CASEがSW.DEFAULTの後ろであっても、SW.DEFAULTは無視されます。

SWITCHはSW.DEFAULTを持つ必要はありませんが、複数のSW.DEFAULTを持つことはできません。 同じSWITCH内の2番目のSW.DEFAULTは構文エラーです。

SW.END

SW.ENDはスイッチ操作を終了します。SW.ENDは最終的にSW.BEGINに従わなければなりません。

ONERROR:

実行時エラーがイベントであるかのようにトラップする特別な割り込みラベルです。

BASIC!プログラムにONERROR:ラベルがなく、プログラムの実行中にエラーが発生すると、エラーメッセージが出力コンソールに出力され、プログラムの実行が停止します。

プログラムにONERROR;ラベルがある場合、BASIC!はエラーで停止しません。代わりに、ONERROR:ラベルにジャンプします(上記の「割り込みラベル」を参照)。 エラーメッセージは表示されませんが、GETERROR$()関数で取得できます。

注意:ONERROR:コード内で実行時エラーが発生すると、無限ループが発生します。 プログラムが完全にデバッグされるまで、ONERROR:ラベルをプログラムに配置しないでください。ONERROR:を早期に使用すると、プログラムをデバッグするのが難しくなります。

ONCONSOLETOUCH:

出力コンソールに印刷された行のタップをトラップする割り込みラベル。 BASIC!は、CONSOLETOUCH.RESUMEに到達するまで、ONCONSOLETOUCH:ラベルに続くステートメントを実行します。PRINTコマンドで書かれた行には必ず触れなければならないことに注意してください。BASIC!は表示された線の下にある画面の空白部分のタッチを無視します。

コンソール行に触れた後、CONSOLE.LINE.TOUCHEDコマンドを使用して、どの行のテキストがタッチされたかを調べることができます。

このラベルは、ユーザがコンソールモード(グラフィックモードではない)で実行中のBASIC!プログラムを中断することを可能にします。このような割り込みの一般的な理由は、INPUTステートメントを使用してプログラム要求を入力することです。その例については、サンプルファイルf35_bluetooth.basを参照してください。

グラフィックスモードで画面のタッチを検出するには、ONGRTOUCH:を使用します。

CONSOLETOUCH.RESUME

ONCONSOLETOUCH:割り込みが発生したBASIC!プログラム内のポイントで実行を再開します。

ONBACKKEY:

BACKキーをトラップする割り込みラベルです。BASIC!は、BACK.RESUMEに到達するまで、ONBACKKEY:ラベルに続くステートメントを実行します。BASIC!プログラムにONBACKKEY:ラベルがない場合、BACKキーは通常、プログラムの実行を停止します。

ONBACKKEY:でBACKキーをトラップすると、BACKキーはプログラムを停止しません。 ONBACKKEY:コードで実行を終了するか、プログラムが停止するようにプログラムに指示する別の方法を提供する必要があります。特に、メニューがないグラフィックスモードのプログラムの場合、あなたがしない場合は、(Androidの設定やタスクキラーアプリケーションを使用する以外の)プログラムを停止することができません。

BACK.RESUME

OnBackKey:割り込みが発生したBASICプログラム内のポイントで実行を再開します。

ONMENUKEY:

MENUキーをトラップする割り込みラベルです。BASIC!は、MENUKEY.RESUMEに到達するまでONMENUKEY:ラベルに続くステートメントを実行します。注:デバイスにMENUキーがないと、この割り込みは機能しません。 Honeycombは通常、MENUキーを持っていないAndroidデバイスです。

MENUKEY.RESUME

ONMENUKEY:割り込みが発生したBASIC!プログラム内のポイントで実行を再開します。

ONKEYPRESS:

任意のキーのタップをトラップする割り込みラベルです。BASIC!は、ONKEYPRESS:のラベルに続くステートメントをKEY.RESUMEに到達するまで実行します。

KEY.RESUME

ONKEYPRESS:割り込みが発生したBASIC!プログラム内のポイントで実行を再開します。

ONLOWMEMORY:

Androidの「メモリ不足」警告をトラップする割り込みラベル。 BASIC!は、ONLOWMEMORY:割り込みラベルとLOWMEMORY.RESUMEコマンドの間のプログラム行を実行します。

Androidのメモリが不足している場合、バックグラウンドで実行されているアプリケーションは強制終了される可能性がありますが、まずすべてのアプリケーションに「メモリ不足」という警告が表示されます。プログラムにONLOWMEMORY:ラベルがない場合は、コンソールに「Warning:Low Memory」と表示されます。

LOWMEMORY.RESUME

ONLOWMEMORY:割り込みが発生したBASIC!プログラム内のポイントで実行を再開します。

END{ <msg_sexp>}

メッセージを出力し、プログラムの実行を停止します。デフォルトのメッセージは"END"です。別のメッセージを指定するには、オプションの<msg_sexp>引数を使用できます。空文字列("")は空白行でも何も出力しません。ENDステートメントは、ステートメントにエラーがあっても常に実行を停止します。

ENDステートメントは、プログラム内のどこにでも置くことができます。

EXIT

BASIC!の実行を停止し、Androidのホーム画面を終了します。

READ.DATA <number>|<string>{,<number>|<string>...,<number>|<string>}

READ.NEXTで読み取るデータ値を提供します。

READ.DATAステートメントは、プログラム内のどこにでも置くことができます。 必要なだけ多くのREAD.DATAステートメントを持つことができます。

例:


READ.DATA 1,2,3,"a","b","c" 

READ.DATAはDartmouth BasicのDATAステートメントと同等です。

READ.NEXT <var>, ...

内部NEXTポインタが指すデータを次の変数に読み込みます。NEXTポインタは "1"に初期化され、新しい値が読み込まれるたびに1ずつインクリメントされます。 データ値は、プログラムREAD.DATAステートメントに出現した順序で読み込まれます。

変数のデータ型(番号または文字列)は、NEXTポインタが指すデータ型と一致する必要があります。

例:


READ.NEXT a,b,c,c$ 
READ.NEXT d$,e$ 

READ.NEXTはDartmouth BasicのREAD文と同等です。

READ.FROM <nexp>

内部NEXTポインタを式の値に設定します。このコマンドは、ランダムにデータにアクセスするように設定できます。

READ.FROM 1コマンドは、Dartmouth BasicのRESTOREコマンドと同等です。

DEBUG.ON

デバッグモードをオンにします。すべてのデバッグコマンドは、デバッグモードのときに実行されます。

DEBUG.ONはまた、BASIC!に組み込まれた簡単なデバッグ支援を可能にします。デバッグがオンで、プログラムがループに入ったのにループをきれいに終了しなかった場合は、実行時エラーが発生します。 詳細については、ループ・コマンド(FORWHILEDO)を参照してください。

DEBUG.OFF

デバッグモードをオフにします。すべてのデバッグコマンド(DEBUG.ONを除く)は無視されます。プログラムが終了すると、ループのチェックは実行されません。

DEBUG.ECHO.ON

エコーモードをオンにします。実行中のBASIC!プログラムの各行は、実行前に出力されます。これはデバッグに非常に役立ちます。実行される最後の数行は通常、プログラムの問題の原因です。エコーモードは、DEBUG.ECHO.OFFコマンドまたはDEBUG.OFFコマンドのいずれかによってオフになります。

ECHO.ON

DEBUG.ECHO.ONと同じです。

DEBUG.ECHO.OFF

エコーモードをオフにします。

ECHO.OFF

DEBUG.ECHO.OFFと同じです。

DEBUG.PRINT

このコマンドは、表示がデバッグモードの間だけ行われる点を除き、PRINTコマンドとまったく同じです。

DEBUG.DUMP.SCALARS

スカラーのすべての変数名と値のリストを表示します。スカラー変数は、配列や関数ではない変数名です。とりわけ、このコマンドは間違った変数名を探すのに役立ちます。

DEBUG.DUMP.ARRAY Array[]

指定された配列の内容をダンプします。 配列が多次元である場合、配列全体が線形にダンプされます。

DEBUG.DUMP.BUNDLE <bundlePtr_nexp>

バンドルポインタの数値式が指し示すバンドルをダンプします。

DEBUG.DUMP.LIST <listPtr_nexp>

リストポインタの数値式が指すリストをダンプします。

DEBUG.DUMP.STACK <stackPtr_nexp>

スタックポインタの数値式がポイントするスタックをダンプします。

DEBUG.SHOW.SCALARS

プログラムの実行を一時停止し、ダイアログボックスを表示します。このダイアログボックスには、スカラーのすべての変数名と値のリスト、実行されたばかりのプログラム行の行番号、およびその行のテキストが表示されます。スカラー変数は、配列や関数ではない変数名です。とりわけ、このコマンドは間違った変数名を探すのに役立ちます。

ダイアログボックスコントロールの説明については、DEBUG.SHOWコマンドを参照してください。

DEBUG.SHOW.ARRAY Array[]

プログラムの実行を一時停止し、ダイアログボックスを表示します。このダイアログボックスは、指定された配列の内容、実行されたばかりのプログラム行の行番号、およびその行のテキストを出力します。配列が多次元である場合、配列全体が線形に表示されます。

ダイアログボックスコントロールの説明については、DEBUG.SHOWコマンドを参照してください。

DEBUG.SHOW.BUNDLE <bundlePtr_nexp>

プログラムの実行を一時停止し、ダイアログボックスを表示します。 ダイアログボックスは、バンドルポインタの数値式が指し示すバンドル、実行したプログラム行の行番号、およびその行のテキストを出力します。

ダイアログボックスコントロールの説明については、DEBUG.SHOWコマンドを参照してください。

DEBUG.SHOW.LIST <listPtr_nexp>

プログラムの実行を一時停止し、ダイアログボックスを表示します。 このダイアログボックスは、リストポインタの数値式が指すリスト、実行したプログラム行の行番号、およびその行のテキストを出力します。

ダイアログボックスコントロールの説明については、DEBUG.SHOWコマンドを参照してください。

DEBUG.SHOW.STACK <stackPtr_nexp>

プログラムの実行を一時停止し、ダイアログボックスを表示します。 ダイアログボックスは、スタックポインタの数値式が指すスタック、実行したプログラム行の行番号、およびその行のテキストを出力します。

ダイアログボックスコントロールの説明については、DEBUG.SHOWコマンドを参照してください。

DEBUG.WATCH var, ...

監視するスカラ変数(配列ではない)のリストを与えます。これらの変数の値は、DEBUG.SHOW.WATCHコマンドが実行されたときに表示されます。このコマンドは累積的です。つまり、後続の呼び出しで新しい変数が監視リストに追加されます。

DEBUG.SHOW.WATCH

プログラムの実行を一時停止し、ダイアログボックスを表示します。ダイアログボックスには、監視されている変数の値、実行されたプログラム行の行番号、およびその行のテキストが表示されます。

ダイアログボックスコントロールの説明については、DEBUG.SHOWコマンドを参照してください。

DEBUG.SHOW.PROGRAM

プログラムの実行を一時停止し、ダイアログボックスを表示します。このダイアログボックスには、プログラム全体と、行番号と、実行された最後の行を示すマーカーが表示されます。

注:デバッガは関数呼び出しで停止しません。 関数の最初の行が実行され、マーカーはその行をポイントします。 FN.RTNまたはFN.ENDが実行されると、マーカーは関数呼び出しを指し示します。

ダイアログボックスコントロールの説明については、DEBUG.SHOWコマンドを参照してください。

DEBUG.SHOW

プログラムの実行を一時停止し、ダイアログボックスを表示します。ダイアログボックスには、最後に使用されたDEBUG.SHOW.<command>の結果、またはデフォルトでDEBUG.SHOW.PROGRAMが含まれます。

ダイアログには3つのボタンがあります:

BACKキーはデバッグダイアログを閉じ、プログラムを停止します。

FONT.LOAD <font_ptr_nvar>, <filename_sexp>

<filename_sexp>で指定されたファイルからフォントをロードします。 変数<font_ptr_nvar>内のフォントへのポインタを返します。 このポインタは、GR.TEXT.SETFONTコマンドなどで、読み込まれたフォントを参照するために使用できます。

フォントファイルをロードできない場合、ポインタは-1に設定されます。 エラーメッセージを表示するには、GETERROR$()関数を呼び出すことができます。

FONT.DELETE {<font_ptr_nexp>}

フォントポインタパラメータ<font_ptr_nexp>で指定された以前に読み込まれたフォントを削除します。削除されたフォントを指す変数は無効なフォントポインタになります。削除されたフォントを使用しようとするとエラーになります。同じフォントをもう一度削除するのはエラーではありません。

フォントポインタが省略されている場合は、まだ削除されていない最も最近読み込まれたフォントが削除されます。この操作を繰り返すと、読み込まれたフォントが最初から最後まで削除されます。フォントがロードされていないときにこれを行うのはエラーではありません。

FONT.CLEAR

以前に読み込まれたフォントをすべて削除して、フォントリストをクリアします。フォントを指す変数は無効なフォントポインタになります。削除されたフォントを使用しようとするとエラーになります。

注:FONT.DELETEはフォントリストにマーカーを残すので、他のフォントへのポインタは影響を受けません。そのため、同じフォントを複数回FONT.DELETEできます。FONT.CLEARはリスト全体をクリアし、すべてのフォントポインタ変数を無効にします。FONT.CLEARを実行した後、消去されたフォントはFONT.DELETEできません。

PRINT {<exp> {,|;}} ...

? {<exp> {,|;}} ...

式<exp>を評価し、その結果を出力コンソールに出力します。 コマンドキーワードPRINTの代わりに疑問符(?)を使用できます。

コンマ(,)区切り記号が式の後に続く場合、式の値の後にコンマとスペースが出力されます。

セミコロン(;)区切り記号が使用されている場合、式の値は何も区切られません。

セミコロンが行末にある場合、最後にセミコロンを付けずにPRINTコマンドを実行するまで、出力は表示されません。

パラメタなしでPRINTすると、改行が表示されます。

例:


PRINT "New", "Message"    % 表示: New, Message 
PRINT "New";" Message"    % 表示: New Message 
PRINT "New" + " Message"  % 表示: New Message 
RINT "New", "Message"     % 表示: New, Message 
PRINT "New";" Message"    % 表示: New Message 
PRINT "New" + " Message"  % 表示: New Message 

? 100-1; " Luftballons"              % 表示: 99.0 Luftballons 
? FORMAT$("##", 99); " Luftballons"  % 表示: 99 Luftballons 

PRINT "A";"B";"C";  % 表示: nothing 
PRINT "D";"E";"F"   % 表示: ABCDEF 

ユーザー定義関数で印刷する

注:PRINTなどの一部のコマンドは、文字列または数字のどちらでも操作できます。 時には、それが何をすべきかを知る前に両方の方法を試みなければならない場合もあります。まず、式を数値として評価しようとします。それが失敗すると、同じ式を文字列として評価しようとします。

これが起こり、式に関数が含まれていると、その関数は2回呼び出されます。コンソールに出力する、ファイルに書き込む、グローバルパラメータを変更するなどの副作用がある場合は、副作用も2回発生します。

最終的にこの問題はBASIC!で修正する必要がありますが、それまではPRINTコマンドの一部として関数、特にユーザー定義関数を呼び出さないように注意する必要があります。その代わりに、関数の戻り値を変数に代入し、変数を出力します。代入文は、評価する式のタイプを常に知っているため、2回評価されることはありません。


! こうして下さい
y = MyFunction(x) 
Print y 
! 副作用あり
Print MyFunction(x) 

CLS

出力コンソール画面をクリアします。

CONSOLE.FRONT

出力コンソールをユーザーが見ることができる前面に移動します。

BASIC!が画面が表示されていない状態でバックグラウンドで実行されている場合、このコマンドはフォアグラウンドに移動します。フォアグラウンドで別のアプリケーションを実行している場合は、バックグラウンドにプッシュされます。

BASIC!がフォアグラウンドで実行されているがグラフィックスまたはHTML画面がフォアグラウンドにある場合、このコマンドはコンソールをフォアグラウンドにします。 BASIC!はグラフィックスモードまたはHTMLモードのままです。

CONSOLE.LINE.COUNT <count_nvar>

戻り値<count_nvar>に、コンソールに書き込まれた行数を設定します。このコマンドは、カウントを報告する前に、保留中のコンソール書き込みが完了するのを待ちます。

CONSOLE.LINE.TEXT <line_nexp>, <text_svar>

コンソールの指定行番号のテキストが<text_svar>にコピーされます。

CONSOLE.LINE.TOUCHED <line_nvar> {, <press_lvar>} {, <press_lvar>}

ONCONSOLETOUCH:割り込みがユーザーがコンソールに触れたことを示すと、このコマンドはタッチに関する情報を返します。

ユーザーがタッチした行の番号が<line_nvar>に返されます。

オプションの<press_lvar>が存在する場合、ユーザーのタッチのタイプ(短いタップまたは長いプレス)が返されます。タッチが短いタップだった場合、その値は0(false)になります。 タッチが長押しの場合、その値は1(真)になります。

CONSOLE.SAVE <filename_sexp>

コンソールの現在の内容は、ファイル名文字列式で指定されたテキストファイルに保存されます。

CONSOLE.TITLE { <title_sexp>}

コンソールウィンドウのタイトルを変更します。 <title_sexp>パラメータを省略すると、タイトルはデフォルトのタイトル"BASIC! Program Output"に変更されます。

DIALOG.MESSAGE {<title_sexp>}, {<message_sexp>}, <sel_nvar> {, <button1_sexp>{, <button2_sexp>{, <button3_sexp>}}}

タイトル、メッセージ、最大3つのボタンを含むダイアログボックスを生成します。ユーザがボタンをタップすると、選択されたボタンの番号が<sel_nvar>に返されます。ユーザーがメッセージダイアログの外で画面をタップするか、またはBACKキーを押すと、戻り値は0になります。

文字列<title_sexp>がダイアログボックスのタイトルになります。<message_sexp>という文字列がダイアログの本体のボタンの上に表示されます。<button1_sexp>、<button2_sexp>、および<button3_sexp>という文字列は、ボタンのラベルを提供します。

0,1,2,3のボタンがあります。 ほとんどのデバイスでは、ボタンは右から左に番号が付けられています。Androidスタイルのガイドでは、右側にポジティブアクションを、左側にネガティブアクションを推奨しているためです。一部のデバイスは異なります。対応デバイスでは、一番右のボタンをタップすると1が返されます。

変数<sel_nvar>を除くすべてのパラメータはオプションです。 パラメータを省略すると、メッセージダイアログの対応する部分は表示されません。 カンマを使用して、省略されたパラメータを指定します。

例:


DIALOG.MESSAGE "Hey, you!", "Is this ok?", ok, "Sure thing!", "Don’t care", "No way!" 
DIALOG.MESSAGE "Continue?", , go, "YES", "NO" 
DIALOG.MESSAGE , "Continue?", go, "YES", "NO" 
DIALOG.MESSAGE , , b 

最初のコマンドは、タイトル、メッセージ、および3つのボタンを含む完全なダイアログを表示します。

2番目のコマンドはタイトル付きのボックスを表示し、2つのボタンはYESボタンが右側に、NOボタンが左側にあることを示します。

3番目は同じ情報を表示しますが、テキストはタイトルではなくメッセージとして表示されるため、少し違って見えます。コンマに注意してください。

4番目のコマンドは何も表示しません。 画面が暗くなり、プログラムは、何もしないようにユーザーに知らせるためにフィードバックなしでタップまたはBACKキーを待ちます。

DIALOG.SELECT <sel_nvar>, <Array$[]>|<list_nexp> {,<title_sexp>}

ユーザーの選択肢のリストを含むダイアログボックスを生成します。ユーザがリスト項目をタップすると、選択された行のインデックスが<sel_nvar>に返されます。ユーザーが選択ダイアログの外で画面をタップするか、またはBACKキーを押すと、戻り値は0になります。

<Array $ []>は、選択する項目のリストを保持する文字列配列です。配列はインデックスなしで指定されていますが、前もってARRAY.LOAD経由でディメンション化またはロードされている必要があります。

配列の代わりに、<list_nexp>に文字列型のリストを指定することもできます。

<title_sexp>は、選択ダイアログの上部に表示されるオプションの文字列式です。パラメータが指定されていない場合、または式が空の文字列("")と評価された場合、タイトルなしのダイアログボックスが表示されます。

このコマンドでは、SELECTコマンドで説明したようなオプションの<message_sexp>および<press_lvar>パラメータも使用できますが、使用しないでください。 <message_sexp>は無視され、<press_lvar>は常に0に設定されます。

INPUT {<prompt_sexp>}, <result_var>{, {<default_exp>}{, <canceled_nvar>}} {<prompt_sexp>}, <result_var>{, {<default_exp>}{, <canceled_nvar>}}

入力領域と[OK]ボタンを持つダイアログボックスを生成します。ユーザーがボタンをタップすると、入力領域の値が変数<result_var>に書き込まれます。

<prompt_sexp>がダイアログボックスのタイトルになります。プロンプト式が空("")または省略されている場合、ダイアログボックスはタイトル領域なしで描画されます。

戻り値<result_var>が数値の場合、入力は数値でなければなりません。したがって、受け入れられるキータップは0-9、"+"、"-"および"."だけです。<result_var>が文字列変数の場合、入力は任意の文字列になります。

<default_exp>が指定されている場合、その値はダイアログボックスの入力領域に配置されます。デフォルトの式タイプは、<result_var>タイプと一致する必要があります。

変数<cancelled_nvar>は、ユーザーがBACKキーをタップするか、ダイアログボックスの外に触れることによってダイアログをキャンセルした場合の動作を制御します。

<cancelled_nvar>を指定すると、その値は、ユーザーがOKボタンをタップするとfalse(0)に設定され、ユーザーがダイアログをキャンセルした場合はtrue(1)に設定されます。

<cancelled_nvar>を指定しないと、キャンセルされたダイアログはエラーとして報告されます。"ONERROR:"がない限り、ユーザーにメッセージが表示されます。
Input dialog cancelled
Execution halted

"ONERROR:"ラベルがある場合、ラベルの後のステートメントで実行が再開されます。<result_var>パラメータは必須です。他はすべてオプションです。

以下のこれらはすべて有効です:


INPUT "prompt", result$, "default", isCanceled 
INPUT , result$, "default" 
INPUT "prompt", result$, , isCanceled 
INPUT "prompt", result$ 
INPUT , result$ 

パラメータのプレースホルダとしてカンマを使用することに注意してください。

INKEY$ <svar>

a-z、0-9、スペース、およびD-padのキータップをレポートします。キー値は<svar>に返されます。

D-padのキーは、"up"、"down"、"left"、"right"および"go"として報告されます。それ以外のキーがタップされている場合は、文字列 "key nn"が返されます。 nnはそのキーのAndroidキーコードです。キーがタップされていない場合、"@"文字が<svar>に返されます。ラピッドキータップは、BASIC!プログラムが処理できる速度よりも速くなる場合に備えてバッファリングされます。

POPUP <message_sexp> {{, <x_nexp>}{, <y_nexp>}{, <duration_lexp>}}

限られた期間、小さなメッセージをポップアップします。メッセージは<message_sexp>です。

メッセージを除くすべてのパラメータはオプションです。省略された場合のデフォルト値は0です。カンマを使用して、省略されたパラメータを示します。

POPUPコマンドの最も単純な形式である[POPUP "Hello!"]は、画面の中央にメッセージを2秒間表示します。

ポップアップのデフォルトの場所は、画面の中央です。オプションの<x_nexp>および<y_nexp>パラメータは、中央からの変位を与えます。

オプションの"long flag"<duration_lexp>を使用して、ポップアップの長さを2秒または4秒で選択します。フラグがfalseの場合(式は0と評価されます)、メッセージは2秒間表示されます。フラグが真(ゼロ以外)の場合、メッセージは4秒間表示されます。フラグが省略されると、持続時間は短くなります。

SELECT <sel_nvar>, <Array$[]>|<list_nexp> {,<title_sexp> {, <message_sexp> } } {,<press_lvar> }

SELECTコマンドは、ユーザーの選択肢のリストを含む新しい画面を生成します。ユーザがスクリーン行をタップすると、選択された行のインデックスが<sel_nvar>に返されます。ユーザーがBACKキーを押すと、戻り値は0になります。

<Array $ []>は、選択する項目のリストを保持する文字列配列です。配列はインデックスなしで指定されていますが、事前にディメンション化されているか、ARRAY.LOAD経由でロードされているか、別のコマンドで作成されている必要があります。

配列の代わりに、<list_nexp>に文字列型のリストを指定することもできます。

<title_sexp>は、オプションの文字列式で、選択画面の上部にあるタイトルバーに配置されます。パラメータがない場合は、デフォルトのタイトルが表示されます。式が空の文字列("")に評価される場合、タイトルは空白になります。

<message_sexp>は、オプションの文字列式で、短いポップアップメッセージに表示されます。メッセージが空文字列("")の場合、ポップアップはありません。パラメータが指定されていない場合、代わりに<title_sexp>文字列が使用されますが、<title_sexp>も欠けていたり空であれば、ポップアップはありません。

<press_lvar>はオプションです。存在する場合、ユーザー長押し、短いタップどちらかのタイプかが<press_lvar>に返されます。ユーザーが短いタップで項目を選択した場合、返される値は0(偽)です。ユーザーが長押しでアイテムを選択した場合、返される値は1(真)です。

カンマを使用して省略されたオプションのパラメータを指定します。

TEXT.INPUT <svar>{, { <text_sexp>} , <title_sexp> }

このコマンドは、大量のテキストの入力や編集に使用されることを除いて、 "INPUT"に似ています。スクロールバーとフルテキスト編集機能を備えた新しいウィンドウが開きます。 オプションの<title_sexp>パラメータを使用して、新しいウィンドウのタイトルを設定することができます。

オプションの<text_sexp>が存在する場合、そのテキストは編集のためにテキスト入力ウィンドウに読み込まれます。 <text_sexp>が存在しない場合、TEXT.INPUTテキスト領域は空になります。<title_sexp>が必要でTEXT.INPUTテキスト領域が最初は空白の場合、2つのカンマを使用して<sexp>がタイトルを指定し、最初のテキストは指定しないことを示します。

編集が完了したら、Finishボタンをタップします。 編集されたテキストは<svar>に返されます。

BACKキーをタップすると、すべてのテキスト編集が破棄されます。 <svar>は元の<sexp>テキストを返します。

次の例では、サンプル・プログラム・ファイルf01_commands.basを文字列s$に取り込みます。次に、編集のためにs$をTEXT.INPUTに送ります。編集の結果は文字列r$に返されます。r$がコンソールに出力されます。


GRABFILE s$, "../source/Sample_Programs/f01_commands.bas"
TEXT.INPUT r$,s$
PRINT r$
END

TGET <result_svar>, <prompt_sexp> {, <title_sexp>}

端末をシミュレートします。Output Consoleの現在の内容が新しいウィンドウに表示されます。表示される最後の行は、プロンプト文字列とそれに続くカーソルで始まります。ユーザーが入力を入力し、タップを入力します。ユーザーが入力した文字は<result_svar>に返されます。プロンプトと応答が出力コンソールに表示されます。

オプションの<title_sexp>パラメータを使用して、テキスト入力ウィンドウのタイトルを設定することができます。

KB.HIDE

ソフトキーボードを非表示にします。

キーボードが表示されていて、ONKBCHANGE:割り込みラベルを持っている場合、BASIC!はキーボードが閉じると割り込みラベルにジャンプします。

ソフトキーボードは、エディタに表示されているかどうかに関係なく、プログラムの実行が開始されると常に非表示になります。

注:BASIC!は、画面を変更すると自動的にソフトキーボードを非表示にします。たとえば、キーボードが出力コンソール上に表示されていて、GR.OPENを実行してグラフィックモードを開始すると、キーボードは非表示になります。グラフィックスモードを終了してコンソールに戻ると、キーボードは表示されません。同様に、グラフィックス画面上にキーボードを表示し、GR.CLOSEを実行してコンソールに戻ると、キーボードは非表示になります。

ONKBCHANGE:割り込みラベルがある場合にキーボードを自動的に隠しても、割り込みラベルへのジャンプは発生しません。

KB.SHOW

ソフトキーボードを表示します。

キーボードが表示されておらず、ONKBCHANGE:割り込みラベルを持っている場合、BASIC!はキーボードが開くと割り込みラベルにジャンプします。

ソフトキーボードが表示されている場合、そのキーはINKEY$コマンドを使用して読み取ることができます。このコマンドは、ハードキーボードまたはスライドアウトキーボードを備えたデバイスでは機能しない可能性があります。

最初にコンソールに表示しないかぎり、出力コンソールにソフトキーボードを表示することはできません。

KB.TOGGLE

ソフトキーボードの表示/非表示を切り替えます。キーボードが表示されている場合、キーボードは表示されません。それが隠されている場合は、それが表示されます。

KB.SHOWING <lvar>

ソフトキーボードの表示を報告します。キーボードが表示されている場合、<lvar>は1.0(true)に設定され、そうでない場合は<lvar>が0.0(false)に設定されます。

このコマンドは、KB.SHOWによって表示されるキーボードのステータスのみを報告します。たとえば、入力コマンドダイアログボックスに接続されたキーボードは、KB.SHOWまたはKB.HIDEによって制御されず、そのステータスはKB.SHOWINGによって報告されません。

ONKBCHANGE:

KB.SHOWでソフトキーボードを表示するか、KB.HIDEで同じキーボードを閉じるか、またはBACKキーをタップすると、変更には時間がかかります。キーボードは、要求されてから数百ミリ秒後に開くか閉じることができます。変更が完了するまでKB.SHOWおよびKB.HIDEブロックをブロックしますが、BACKキーをタップするとプログラムは認識しません。

あなたのプログラムにONKBCHANGE:割り込みラベルがある場合、キーボードが上記のように変化するとBASIC!はプログラムを中断し、割り込みラベルの後のステートメントを実行します。

割り込みが発生した場所に制御を戻すには、割り込みハンドラでKB.RESUMEを実行します。

この割り込みは、KB.SHOWで表示するキーボードでのみ発生します。 TGETや入力ダイアログボックスなどの他の画面に接続されているキーボードでは、ONKBCHANGE:割り込みは発生しません。

KB.RESUME

ONKBCHANGE:割り込みが発生した時点でプログラムの実行を再開します。

割り込みが発生すると、対応するレジュームが実行されるまで"ONERROR:"を除く他の割り込みは発生しません。

FILE.DELETE <lvar>, <path_sexp>

<path_sexp>にあるファイルまたはディレクトリが削除されます(存在する場合)。ファイルまたはディレクトリが削除前に存在しなかった場合、<lvar>にはゼロが含まれます。ファイルまたはディレクトリが存在し、削除された場合、<lvar>はゼロでないものとして返されます。

デフォルトのパスは "<pref base drive>/rfo-basic/data/"です。

FILE.DIR <path_sexp>, Array$[] {,<dirmark_sexp>} dir <path_sexp>, Array$[] {,<dirmark_sexp>}

DIR <path_sexp>, Array$[] {,<dirmark_sexp>} dir <path_sexp>, Array$[] {,<dirmark_sexp>}

<path_sexp>で指定されたパス内のファイルとディレクトリの名前を返します。パスは "<pref base drive>/rfo-basic/data/"に相対的です。

名前はArray$[]に配置されます。配列は、リストの先頭にあるディレクトリとアルファベット順にソートされます。配列が存在する場合は上書きされ、そうでない場合は新しい配列が作成されます。結果は常に1次元配列です。

ディレクトリは、その名前に付けられたマーカーで識別されます。デフォルトのマーカーは文字列"(d)"です。オプションのディレクトリマークパラメータ<dirmark_sexp>を使用して、マーカーを変更できます。 ディレクトリをマークしたくない場合は、<dirmark_sexp>に空の文字列""を設定します。

DIRはこのコマンドの有効な別名です。

FILE.EXISTS <lvar>, <path_sexp>

<path_sexp>ディレクトリまたはファイルが存在するかどうかを報告します。ディレクトリまたはファイルが存在しない場合、<lvar>にはゼロが含まれます。ファイルまたはディレクトリが存在する場合、<lvar>はゼロでないとして返されます。

デフォルトのパスは "<pref base drive> / rfo-basic / data /"です。

FILE.MKDIR <path_sexp>

MKDIR <path_sexp>

ディレクトリを使用するには、そのディレクトリが存在する必要があります。このコマンドを使用して、パス文字列<path_sexp>で指定されたディレクトリを作成します。

新しいディレクトリは、デフォルトディレクトリ "<pref base drive>/rfo-basic/data/"を基準に作成されます。

例えば:

MKDIRはこのコマンドの有効な別名です。

FILE.RENAME <old_path_sexp>, <new_path_sexp>

RENAME <old_path_sexp>, <new_path_sexp>

<old_path_sexp>のファイルまたはディレクトリは、<new_path_sexp>の名前に変更されます。<new_path_sexp>という名前のファイルがすでに存在する場合、それは置き換えられます。

デフォルトのパスは "<pref base drive>/rfo-basic/data/"です。名前の変更操作では、ファイルまたはディレクトリの名前を変更できるだけでなく、ファイルまたはディレクトリを別のディレクトリに移動することもできます。

例:


RENAME "../../testfile.txt", "testfile1.txt" 

"<pref base drive>/"からtestfile.txtファイルを削除し、 "sdcard/rfo-basic/data/"に置き、testfile1.txtに名前を変更します。

RENAMEは、このコマンドの有効な別名です。

FILE.ROOT <svar>

<svar>のデフォルトのデータディレクトリである "<pref base drive>/rfo-basic/data"への標準的なパスをファイルシステムルートから返します。<pref base drive>は、ファイルシステムルート "/"から完全な絶対Androidパスに展開されます。

BASIC!パスはコマンドに依存するデフォルトのディレクトリからの相対パスであるため、このパスはBASIC!コマンドでは使用できません。しかし、これを使ってBASIC!のベースパス<pref base drive>の外にあるAndroidファイルシステムの部分への相対パスを計算することができます。

FILE.SIZE <size_nvar>, <path_sexp>

<path_sexp>にあるファイルのサイズは、<size_nvar>に返されます。<path_sexp>にファイルがない場合、このコマンドは実行時エラーを生成します。

<path_sexp>は、デフォルトパス "<pref base drive>/rfo-basic/data/"に追加されます。

FILE.TYPE <type_svar>, <path_sexp>

<path_sexp>にあるファイルの<type_svar>に1文字のタイプインジケータを返します。<path_sexp>は、デフォルトのデータパス "<pref base drive>/rfo-basic/data/"に追加されます。 タイプインジケータの値は次のとおりです。

インジケータ意味
d"directory"パスはディレクトリ名です。
f"file"パスは通常のファイルの名前です。
o"other"パスは特別なファイルの名前です。
xファイルが存在しません

TEXT.OPEN {r|w|a}, <file_table_nvar>, <path_sexp>

パス文字列式<path_sexp>で指定されたファイルが開きます。デフォルトのパスは "<pref base drive>/rfo-basic/data/"です。<path_sexp>文字列がデフォルトパスに追加されます。

最初のパラメータは、このファイルのI/Oモードを設定する1文字です。

パラメータモードノート
rreadファイル有:ファイルの先頭から読み取ります。
ファイル無:ファイルが存在しません:エラー(下記参照)。
wwriteファイル有:ファイルの先頭から書き込みます。既存のデータを上書きします。
ファイル無:新しいファイルを作成します。 ファイルの先頭から書き込みます。
aappendファイル有:書き込みはファイルの最後の行の後から開始されます。
ファイル無:新しいファイルを作成します。ファイルの先頭から書き込みます。

ファイルテーブルポインタは、数値変数<file_table_nvar>に入れられます。この値は、後続のTEXT.READLNTEXT.WRITELNTEXT.EOF、TEXT.POSITION.*、またはTEXT.CLOSEコマンドで使用されます。

読み取りのために開いているファイルが存在しない場合、<file_table_nvar>は-1に設定されます。BASIC!プログラマはこれをチェックし、ファイルを作成するか、エラーをユーザに報告することができます。エラーに関する情報は、GETERROR$()関数から入手できます。

存在しないファイルをappendのために開くと、空のファイルが作成されます。最後に、既存の書き込み用ファイルを開くと、そのファイルの内容が削除されます。つまり、既存のファイルを新しい空のファイルに置き換えます。

TEXT.CLOSE <file_table_nexp>

<file_table_nexp>で表される以前に開いたファイルは閉じられます。

注:出力ファイルを8kバイト以上書き込んだ場合、出力ファイルを閉じることが不可欠です。 ファイルを閉じないと、ファイルには最初の8kバイトしか含まれません。

TEXT.READLN <file_table_nexp> {,<svar>}...

指定した以前に開いたファイルから行を読み込み、<svar>パラメータに書き出します。<file_table_nexp>が-1でTEXT.OPENが失敗したことを示しているか、または有効なファイルテーブルポインタでない場合、コマンドは実行時エラーをスローします。

ファイルの最後の行が読み取られた後、ファイルからの読み取りを試みると、 "EOF"という文字が<line_svar>パラメーターに挿入されます。これは、実際のデータとして読み込まれる文字列 "EOF"と区別できません。ただし、実際のデータを読み込んだ後でTEXT.EOFコマンドの結果はfalseになり、ファイルの終わり(EOF)で読み込んだ後でtrueになります。

この例では、ファイル全体を読み取り、各行を出力します。


TEXT.OPEN r, file_number, "testfile.txt" 
DO 
 TEXT.READLN file_number, line$ 
 PRINT line$ 
UNTIL line$ = "EOF" 
TEXT.CLOSE file_number 

ファイルの終わりが読み取られると、ファイルは自動的に閉じられません。その後のファイルからの読み込みは、引き続き「EOF」を返します。

ファイルの読み込みが完了したら、TEXT.CLOSEコマンドを使用してファイルを閉じます。

TEXT.WRITELN <file_table_nexp>, <parms same as Print>

ファイルテーブルポインタに続くパラメータは、解析され、PRINTコマンドパラメータとまったく同じように処理されます。 このコマンドは基本的にはファイルへのPRINTです。

パラメータ行の終わりがセミコロンの場合、データはファイルに書き込まれません。データはセミコロンで終わらない次のTEXT.WRITELNコマンドまでテンポラリバッファに格納されます。あなたが開いているファイルの数にかかわらず、一時バッファは1つしかありません。 一度に複数のファイルに対して部分的なTEXT.WRITELN行を作成する場合は、セミコロンで終わるTEXT.WRITELNコマンドを使用しないでください。その代わりに、文字列変数を使用して一時的な結果を格納します。

最後の行がファイルに書き込まれた後、TEXT.CLOSEコマンドを使用してファイルを閉じます。

パラメタなしのTEXT.WRITELNは改行を書き込みます。

TEXT.EOF <file_table_nexp>, <lvar>

開いているファイルのファイルの終わりの状態を報告します。ファイルがEOFの場合、<lvar>はtrue(ゼロ以外)に設定されます。ファイルまたはディレクトリがEOFにない場合、<lvar>はfalse(ゼロ)に設定されます。

書き込みまたは追加用に開かれたファイルは、常にEOFにあります。読み取りのために開いたファイルは、すべてのデータを読み取ってからもう一度読み取りを試みるまで、EOFにはありません。その読み込みは文字列 "EOF"を返します。 TEXT.POSITION.SETは、ファイルをEOFに配置することもできます。

TEXT.POSITION.GET <file_table_nexp>, <position_nvar>

ファイルに読み書きする次の行の位置を取得します。ファイル内の最初の行の位置は1です。読み書きされた行ごとに1つずつインクリメントされます。位置情報は、ランダムファイルデータアクセスの設定に使用できます。

注:ファイルがappendのために開かれた場合、返される位置はファイルの終わりを基準とした相対位置になります。ファイルがappendのために開かれた後に最初の行が書き込まれる位置は、1になります。ランダムアクセステーブルを作成するときに、ファイルの最後の既知の位置にこれらの新しい位置を追加する必要があります。

TEXT.POSITION.SET <file_table_nexp>, <position_nexp>

読み込む次の行の位置を設定します。 位置値が1の場合、ファイルの最初の行が読み込まれます。

TEXT.POSITION.SETは、テキストを読むために開いているファイルに対してのみ使用できます。

位置の値がファイル内の行数より大きい場合、ファイルはファイルの最後に配置されます。 EOFにTEXT.POSITION.GETが返す位置は、行数にファイルの1を加えたものになります。

ファイル内の位置をマークした場合は、マークの前に位置を設定することはできません。あなたの位置があなたが要求したものと異なることはあなたに通知されません。 詳細については、TEXT.POSITION.MARKを参照してください。

TEXT.POSITION.MARK {{<file_table_nexp>}{, <marklimit_nexp>}}

ファイルの現在の行をマークし、マーク制限を<marklimit_nexp>バイトに設定します。

両方のパラメータはオプションです。ファイルテーブル番号<file_table_nexp>が省略された場合、デフォルトファイルは最後に開いたファイルです。最後に開いたファイルが読み込み用に開かれたテキストファイルであることを確認する必要があります。マーク制限<marklimit_exp>が省略されている場合、デフォルト値はファイルの現在のマーク制限です。

マークとマーク制限

注:これは、ほとんど使用する必要のない高度なファイル管理手法です。ただし、非常に大きなファイルを読み込むときのメモリ不足エラーについては、以下の注意を参照してください。

すべてのファイルにマークとマーク制限があります。マークは位置であり、マーク制限はサイズです。ファイルを読み込むと、そのデータはバッファにコピーされます。 バッファはマークから始まり、その長さはマーク制限です。BASIC!はバッファを使用してファイル内の位置を変更します。

ファイルにマークを付けていない場合、最初にファイルを読み込むとマークは位置1に設定され、マーク制限はファイルのサイズに設定されます。 これにより、ファイルの任意の場所を読み取ります。

TEXT.POSITION.MARKおよびBYTE.POSITION.MARKコマンドは、デフォルトのマークとマークの制限を上書きします。頻繁にマークとマークの制限を変更できますが、ファイルにはマークが1つしかありません。

マークの前に位置を設定することはできません。試してみると、ファイルはマークの位置に配置されます。現在の位置が要求したものと異なることは通知されませんが、TEXT.POSITION.GET / BYTE.POSITION.GETを使用して実際の位置を取得することができます。デフォルトのマーク位置は1であるため、マークを設定しないとどこにでも配置できます。

バッファを小さくすることはできません。バッファをファイルよりも小さくしたい場合は、ファイルを読み込んだり位置を設定する前にTEXT.POSITION.MARK / BYTE.POSITION.MARKを実行する必要があります。利用可能な最小のバッファサイズは8096バイトですが、小さい方の値を指定するのはエラーではありません。デフォルトのマーク制限はファイルサイズであるため、マーク制限を設定しないとどこにでも配置できます。

バッファの終わりを超えて(マークを超えて、マーク制限バイト以上)読み書きすると、マークは無効になります。マークが無効の場合、位置を逆方向に移動しようとするとエラーになります。エラーメッセージ "Invalid mark"が表示されます。デフォルトのバッファはファイル全体であるため、マークを設定しないとこのエラーは表示されません。

このコマンドを使用する必要がある条件は1つだけです。非常に大きなファイルを開くと、デフォルトのバッファサイズが大きすぎる可能性があります。ファイルの最後まで読み込みまたは配置すると、メモリ不足エラーが発生することがあります。このエラーを回避するには、TEXT.POSITION.MARK / BYTE.POSITION.MARKを使用してバッファサイズを小さくする必要があります。

GRABURL <result_svar>, <url_sexp>{, <timeout_nexp>}

URL<url_sexp>のソーステキスト全体を文字列変数<result_svar>にコピーします。URLは、インターネットリソースまたはローカルファイルを指定することができます。URLが存在しないか、データを読み取ることができない場合、<result_svar>は空の文字列("")に設定され、GETERROR$()関数を使用して詳細情報を取得できます。

オプションの<timeout_nexp>パラメータがゼロ以外の場合は、タイムアウトをミリ秒単位で指定します。これは、URLがリモートホスト上のリソースに名前を付ける場合にのみ意味があります。タイムアウト時間が経過してホストが接続しなかったり、データを返さなかったりすると、GETERROR$()はソケットのタイムアウトを報告します。

指定されたリソースが空の場合、<result_svar>は空("")で、GETERROR$()は "No error"を返します。

分割コマンドを使用して、<result_svar>を行の配列に分割できます。

GRABFILE <result_svar>, <path_sexp>{, <unicode_flag_lexp>}

<path_sexp>にあるファイルの内容全体を文字列変数<result_svar>にコピーします。デフォルトでは、GRABFILEはファイルにバイナリバイトまたはASCII文字が含まれていることを前提としています。オプションの<unicode_flag_lexp>がtrue(ゼロ以外の数値)と評価された場合、GRABFILEはUnicodeテキストを読み取ることができます。

ファイルが存在しないか、開くことができない場合、<result_svar>は空の文字列("")に設定され、GETERROR$()関数を使用して詳細情報を取得できます。 ファイルが空の場合、<result_svar>は空の文字列("")ですが、GETERROR$()は "No error"を返します。

ASCIIまたはUnicodeのテキストファイルの場合、SPLITコマンドを使用して、<result_svar>を行の配列に分割することができます。GRABFILEは、TEXT.INPUTで直接使用するためにテキストファイルの内容を取得するためにも使用できます。


GRABFILE text$, "MyJournal.txt" 
TEXT.INPUT EditedText$, text$ 

BYTE.OPEN {r|w|a}, <file_table_nvar>, <path_sexp>

パス文字列式<path_sexp>で指定されたファイルが開きます。パスが "http ..."で始まるURLの場合、インターネットファイルが開きます。それ以外の場合は、<path_sexp>文字列がデフォルトパス"<pref base drive>/rfo-basic/data/"に追加されます。

最初のパラメータは、このファイルのI/Oモードを設定する1文字です。

パラメータモードノート
rreadファイル有:ファイルの先頭から読み取ります。
ファイル無:エラー(下記参照)。
wwriteファイル有:ファイルの先頭から書き込みます。 既存のデータを上書きします。
ファイル無:新しいファイルを作成します。ファイルの先頭から書き込みます。
aappendファイル有:書き込みは、ファイルの最後の行の後に開始されます。
ファイル無:新しいファイルを作成します。ファイルの先頭から書き込みます。

ファイルテーブル番号は、数値変数<file_table_nvar>に入れられます。この値は、その後のBYTE.READ.*、BYTE.WRITE.*、BYTE.EOF、BYTE.POSITION.*、BYTE.TRUNCATEBYTE.COPY、またはBYTE.CLOSEコマンドで使用されます。

読み取りのために開いているファイルが存在しない場合、<file_table_nvar>は-1に設定されます。BASIC!プログラムはこれをチェックし、ファイルを作成するか、エラーをユーザーに報告します。エラーに関する情報は、GETERROR$()関数から入手できます。

BYTE.CLOSE <file_table_nexp>

以前に開いたファイルを閉じます。

BYTE.READ.BYTE <file_table_nexp> {,<nvar>}...

ファイルからバイトを読み込みます。<file_table_nexp>パラメータは、前のBYTE.OPENによって返されたファイルテーブル番号です。 ファイルテーブル番号が-1の場合、コマンドは実行時エラーをスローします。

ファイル内の最後のバイトが読み取られた後、さらにファイルからの読み取りを試みると値-1が返されます。BYTE.EOFコマンドの結果は、実際のデータを読み取った後はfalseになり、ファイルの終わり(EOF)で読み取った後にtrueになります。

この例では、ファイルを読み取り、各バイトを出力し、最後に "-1"を出力して、ファイル全体が読み取られたことを示します。


BYTE.OPEN r, file_number, "testfile.jpg" 
DO 
 BYTE.READ.BYTE file_number, Byte 
 PRINT Byte 
UNTIL Byte < 0 
BYTE.CLOSE file_number 

BYTE.WRITE.BYTE <file_table_nexp> {{,<nexp>}...{,<sexp>}}

ファイルテーブル番号パラメータ<file_table_nexp>で指定されたファイルにバイトを書き込みます。 バイトは、コンマで区切られた任意の数式のリスト、単一のオプションの文字列式、またはその両方から書き込まれます。

例:


BYTE.OPEN w, f1, "tmp.dat" % ファイル作成
Byte.write.byte f1, 10 % 1バイト書き込み
Byte.write.byte f1, 11, 12, 13 % 3バイト書き込み
Byte.write.byte f1, "Hello!" % 6バイト書き込み
Byte.write.byte f1, 1,2,3,"abc" % 6バイト書き込み
Byte.write.byte f1, "one", "two" % 構文エラー:1つの文字列しか使用できません 

注:バイトが文字列式から書き込まれる場合、式は2回評価されます。式にユーザー定義関数への呼び出しを入れないでください。

BYTE.READ.NUMBER <file_table_nexp> {,<nvar>...}

ファイルテーブル番号パラメータ<file_table_nexp>で指定されたファイルから数値を読み込み、それらを "{,<nvar>} ..."パラメータリストの数値変数に配置します。各数字は8バイトのグループです。

ファイルにすべての変数で使用可能なデータが十分でない場合、1つまたは複数の<nvar>の値が-1に設定されます。これは、BYTE.EOFコマンドの結果が実際のデータに対しては偽であり、EOFに対しては真であることを除いて、-1と実際のデータとの間に見分けがつきません。

通常、このコマンドは、BYTE.WRITE.NUMBERで書き込まれた値の読み取りにのみ使用されます。ファイルが8バイト表現の最初のバイトに配置されていることを確認する必要があります。そうしないと、予期しない結果が発生します。

BYTE.WRITE.NUMBER <file_table_nexp> {,<nexp>}...

数値式<nexp>の値を、ファイルテーブル番号パラメータ<file_table_nexp>で指定されたファイルに書き込みます。このコマンドは、常に各式の8バイトをパラメータリストに書き込みます。

BYTE.READ.BUFFER <file_table_nexp>, <count_nexp>, <buffer_svar> file_table_nexp>, <count_nexp>, <buffer_svar>

ファイルから指定されたバイト数(<count_nexp>)をバッファ文字列変数(<buffer_svar>)に読み込みます。文字列の長さ(LEN(<buffer_svar>))は、実際に読み取られるバイト数になります。ファイルの終わりに達すると、文字列の長さが要求された数より少なくなる可能性があります。

バッファ文字列は、BASIC!文字列の特別な使い方です。文字列の各文字は16ビットです。バッファとして使用すると、各16ビット文字の下位8ビットに1バイトのデータが書き込まれます。上位8ビットは0です。ASCII()またはUCODE()関数を使用して、バイナリデータを一度に1バイトずつ文字列から抽出します。

このコマンドで読み取られるバッファ文字列の形式は、DECODE$()関数と互換性があります。データの一部にエンコードされた文字列が含まれていることがわかっている場合は、MID$()などの関数を使用して部分文字列を抽出し、部分文字列をDECODE$()に渡してBASIC!文字列に変換します。

BYTE.WRITE.BUFFER <file_table_nexp>, <buffer_sexp>

文字列式の内容全体をファイルに書き込みます。この文字列は、BYTE.READ.BUFFERで説明されているように、バイナリデータを保持するバッファ文字列と見なされます。ライターは各16ビット文字の上位8ビットを破棄し、文字列内の各文字のファイルに1バイトを書き込みます。

BYTE.READ.BUFFERコマンドとENCODE$()関数は、常にこれらの "バッファ文字列"を作成します。たとえば、CHR$()関数を256より小さい値で使用して1つを構築することができます。

文字列にASCII文字のみを使用する場合は、この関数を使用して文字列をファイルに書き込むことができます。TEXT.WRITELNで書き出したのと同じ出力ですが、改行が追加されていない点が異なります。

BYTE.EOF <file_table_nexp>, <lvar>

開いているファイルのファイルの終わりの状態を報告します。ファイルがEOFの場合、<lvar>はtrue(ゼロ以外)に設定されます。ファイルまたはディレクトリがEOFにない場合、<lvar>はfalse(ゼロ)に設定されます。

書き込みまたは追加用に開かれたファイルは、常にEOFにあります。 読み取りのために開いたファイルは、すべてのデータを読み取ってからもう一度読み取りを試みるまで、EOFにはありません。その読み取り値は-1を返しています。 BYTE.POSITION.SETは、ファイルをEOFに配置することもできます。

BYTE.POSITION.GET <file_table_nexp>, <position_nvar>

読み書きする次のバイトの位置を取得します。最初のバイトの位置は1です。読み込みまたは書き込みが行われるたびに、位置の値が1ずつ増えます。

位置情報は、ランダムファイルデータアクセスの設定に使用できます。

ファイルがappendのために開かれている場合、返される位置はファイルの長さに1を加えたものになります。

BYTE.POSITION.SET <file_table_nexp>, <position_nexp>

ファイルから読み込む次のバイトの位置を設定します。位置の値がファイルの最後のバイトの位置より大きい場合、位置はファイルの終わりを示します。

このコマンドは、バイト読み取り用に開いているファイルでのみ使用できます。

BYTE.POSITION.MARK {{<file_table_nexp>}{, <marklimit_nexp>}}

ファイル内の現在の位置をマークし、マーク制限を<marklimit_nexp>バイトに設定します。

両方のパラメータはオプションです。ファイルテーブル番号<file_table_nexp>が省略された場合、デフォルトファイルは最後に開いたファイルです。最後に開いたファイルが、読み込み用に開かれたバイトファイルであることを確認する必要があります。マーク制限<marklimit_exp>が省略されている場合、デフォルト値はファイルの現在のマーク制限です。

TEXT.POSITION.MARKのマークとマーク制限をお読みください。

BYTE.TRUNCATE <file_table_nexp>,<length_nexp>

ファイルを<length_nexp>バイトに切り詰めてファイルを閉じます。切り詰める長さ<length_nexp>を現在の長さ(現在の書き込み位置-1)より大きく設定しても効果はありません。

このコマンドは、バイト書き込みまたは追加のために開いているファイルでのみ使用できます。

BYTE.COPY <file_table_nexp>,<output_file_sexp>

<file_table_nexp>で表される以前に開いた入力ファイルを、<output_file_sexp>で指定されたパスのファイルにコピーします。デフォルトのパスは "<pref base drive>/rfo-basic/data/"です。

<file_table_nexp> = -1の場合、実行時エラーがスローされます。

入力ファイルの現在の位置から最後までのすべてのバイトが出力ファイルにコピーされます。両方のファイルが閉じられます。

入力ファイルから読み込んだファイル全体をコピーする場合は、BYTE.POSITION.SETを使用してファイルの位置を0にリセットする必要があります。ただし、BYTE.POSITION.MARKでファイルマークを変更した場合、または非ローカル(インターネット)ファイルを読み取っている場合は、ファイルの位置を0にリセットすることはできません。代わりに、ファイルを閉じてから再度開く必要があります。

コピーの唯一の目的でバイトファイルI/Oを使用している場合は、BYTE.COPYを使用する必要があります。BYTE.READ / BYTE.WRITEを使うよりも速いです。

ZIP.COUNT <path_sexp>, <nvar>

<path_sexp>にあるZIPファイル内のエントリ数を返します。パスは "<pref base drive>/rfo-basic/data/"に相対的です。

カウントは<nvar>に返されます。 ZIPファイルが存在しない場合、返されるカウントは0です。

ZIP.DIR <path_sexp>, Array$[] {,<dirmark_sexp>}

<path_sexp>にあるZIPファイル内のファイルとディレクトリの名前を返します。パスは "<pref base drive>/rfo-basic/data/"に相対的です。

名前はArray$[]に配置されます。配列は、リストの先頭にあるディレクトリとアルファベット順にソートされます。配列が存在する場合は上書きされ、そうでない場合は新しい配列が作成されます。結果は常に1次元配列です。

ディレクトリは、その名前に付けられたマーカーで識別されます。デフォルトのマーカーは文字列"(d)"です。オプションのディレクトリマークパラメータ<dirmark_sexp>を使用して、マーカーを変更できます。ディレクトリをマークしたくない場合は、<dirmark_sexp>に空の文字列("")を設定します。

ZIP.OPEN {r|w}, <file_table_nvar>, <path_sexp>

パス文字列式<path_sexp>で指定されたZIPファイルが開きます。 パスは "<pref base drive>/rfo-basic/data/"に相対的です。

最初のパラメータは、このファイルのI/Oモードを設定する1文字です。

パラメータモードノート
rreadファイル有:ファイルの先頭から読み取ります。
ファイル無:エラー(下記参照)。
wwriteファイル有:ファイルの先頭から書き込みます。既存のデータを上書きします。
ファイル無:新しいファイルを作成します。ファイルの先頭から書き込みます。

注:TEXT.OPENおよびBYTE.OPENとは異なり、ZIP.OPENは追加モードをサポートしていません。

ファイルテーブ表番号は、数値変数<file_table_nvar>に入れられます。この値は、後続のZIP.READZIP.WRITE、またはZIP.CLOSEコマンドで使用されます。

ZIPファイルを開くときにエラーが発生した場合、<file_table_nvar>は-1に設定され、GETERROR$()関数から得られる詳細が表示されます。

ZIP.CLOSE <file_table_nexp>

以前開いたZIPファイルを閉じます。

ZIP.READ <file_table_nexp> ,<buffer_svar>, <file_name_sexp>

ZIPファイルの中のファイル<file_name_sexp>の内容を読み込み、結果のバイトをバッファ文字列変数<buffer_svar>の中に置きます。

<file_table_nexp>パラメータは、以前のZIP.OPENコマンドによって返されたファイルテーブル番号です。 ファイルテーブル番号が-1の場合、コマンドは実行時エラーをスローします。

ファイル<file_name_sexp>がZIPに見つからない場合、<buffer_svar>は "EOF"に設定されます。

ユーザーが圧縮されたファイルではなく、圧縮されたディレクトリの内容を読み込もうとすると、コマンドは実行時エラーをスローします。圧縮されたディレクトリの内容を読み取るには、ZIP.DIRを使用します。

ZIP.WRITE <file_table_nexp> ,<buffer_sexp>, <file_name_sexp>

文字列式<buffer_sexp>の内容全体を<file_name_sexp>という名前のファイルとしてZIPに書き込みます。ZIPは以前にZIP.OPENで開いたファイルにあります。

文字列<buffer_sexp>は、バイナリデータを保持するバッファ文字列、通常BYTE.READ.BUFFERでローカルファイルを読み取ってくる文字列と見なされます。

HTML.OPEN {<ShowStatusBar_lexp> {, <Orientation_nexp>}}

このコマンドは、HTMLインタフェースを使用する前に実行する必要があります。

<ShowStatusBar_lexp>がtrue(ゼロでない)の場合、ステータスバーはWeb画面に表示されます。<ShowStatusBar_lexp>が存在しない場合、ステータスバーは表示されません。

HTML画面を開くときの方向は、<Orientation_nexp>値によって決まります。<Orientation_nexp>の値は、HTML.ORIENTATIONコマンドの値と同じです。<Orientation_nexp>が存在しない場合、デフォルトの方向はデバイスの向きによって決定されます。

<ShowStatusBar_lexp>と<Orientation_nexp>はオプションです。ただし、<Orientation_nexp>を指定するには、<ShowStatusBar_lexp>が存在していなければなりません。

HTML.CLOSEを実行する前に2番目のHTML.OPENを実行すると、実行時エラーが生成されます。

HTML.ORIENTATION <nexp>

<nexp>の値は、画面の向きを次のように設定します。

HTML.LOAD.URL <file_sexp>

文字列<file_sexp>で指定されたファイルをロードして表示します。このファイルは、インターネットまたはAndroidデバイスに存在している可能性があります。いずれの場合も、URL全体を指定する必要があります。

例:


HTML.LOAD.URL "http://laughton.com/basic/" 

BASICホームページを読み込んで表示します。


HTML.LOAD.URL "htmlDemo1.html" 

"Base Drive"プリファレンスで設定したBASIC!のデフォルト "data"ディレクトリ(<pref base drive>/rfo-basic/data/)にあるhtmlファイル "htmlDemo1.html"をロードして表示します。また、完全修飾パス名を使用することもできます。既定の ベースドライブ設定では、このコマンドは同じファイルを読み込みます。


HTML.LOAD.URL "file:///sdcard/rfo-basic/data/htmlDemo1.html" 

最初に読み込まれたページでBACKキーをタップすると、HTMLビューアが閉じられ、BASIC!出力コンソールが表示されます。最初に読み込まれたページが別のページにリンクし、BACKキーがタップされている場合は、BASIC!プログラマーが何をすべきかを決定することになります。

HTML.LOAD.STRING <html_sexp>

文字列式に含まれるHTMLを読み込んで表示します。このHTMLの基本ページは次のようになります。


<pref base drive>/rfo-basic/data/

HTML.POST <url_sexp>, <list_nexp> tml.post <url_sexp>, <list_nexp>

インターネットロケーションへのPOSTコマンドを実行します。

<url_sexp>は、POSTを受け入れるURLを与える文字列式です。

<list_nexp>は、POSTに必要な名前/値のペアを含む文字列リストへのポインタです。

HTML.GET.DATALINK <data_svar>

データリンクは、HTMLプログラムからBASIC!プログラマーにメッセージを送信するためのメソッドを提供します。 HTMLファイルのデータリンクには2つの部分があります。

  1. データリンク関数を定義するJavaScript
  2. datalink関数を呼び出すHTMLコード

BASIC!プログラムには、WebサイトのHTMLコードと通信するためのメカニズムが必要です。

HTML.GET.DATALINKは、データリンクバッファから次のデータリンク文字列を取得します。利用可能なデータがない場合、返されるデータは空の文字列("")になります。データを待っているループをプログラムする必要があります。


DO 
 HTML.GET.DATALINK data$ 
UNTIL data$ <> "" 

返されるデータ文字列は、常に4つの文字の特定のセットで始まります。3つのアルファベット文字の後にコロン(":")が続きます。これら4つの文字は、戻りデータリンクのデータ型を識別します。ほとんどのタイプコードには、何らかの種類のデータが続きます。コードは次のとおりです。

HTML.GO.BACK

可能であれば、1つのHTML画面に戻ります。

HTML.GO.FORWARD

可能であれば、1つのHTML画面に進みます。

HTML.CLOSE

HTMLエンジンを閉じて表示します。

HTML.CLEAR.CACHE

HTMLキャッシュをクリアします。

HTML.CLEAR.HISTORY

HTML履歴をクリアします。

BROWSE <url_sexp>

<url_sexp>が "http ..."で始まる場合、<url_sexp>で指定されたインターネットサイトが開き、表示されます。

<url_sexp>が "file:///sdcard/ ..."で始まる場合、ファイルはThinkFree Mobileアプリケーションによって開かれます。ThinkFree Mobileの無料版が開くことができるファイルの種類は、 ".txt、.doc、.xls、.rtf"です。

お使いのAndroid搭載端末にThinkFree Mobile Viewerが搭載されていない場合は、Google Playストアの[アプリ]セクションで見つけることができます。追加のファイルタイプを管理する有償の「プロ」バージョンもあります。

注:HTMLコマンドを使用して、デバイスまたはWeb上のWebページを表示(および操作)することもできます。

HTTP.POST <url_sexp>, <list_nexp>, <result_svar>

インターネットロケーションへのPOSTコマンドを実行します。

<url_sexp>には、POSTを受け入れるURL("http:// ....")が含まれています。

<list_nexp>は、POSTに必要な名前/値のペアを含む文字列リストへのポインタです。

<result_svar>は、POST応答が配置される場所です。 事後対応が行われます。

SOCKET.CLIENT.CONNECT <server_sexp>, <port_nexp> { , <wait_lexp> }

クライアントのTCP/IPソケットを作成し、ポート数値式で指定されたポートを使用してサーバー文字列式でホスト名またはIPアドレスが指定されているサーバーに接続しようとします。

オプションの waitパラメータwait_lexpは、このコマンドがサーバーとの接続が確立されるまで待機するかどうかを決定します。パラメータがないか真(ゼロ以外)の場合、接続が確立されるかエラーが検出されるまでコマンドは戻りません。サーバーが応答しない場合、コマンドは数分後にタイムアウトするはずですが、これは不明です。

パラメータがfalse(ゼロ)の場合、コマンドはすぐに完了します。SOCKET.SERVER.STATUSを使用して、接続が確立された時点を判断します。ソケットの状態を監視する場合は、独自のタイムアウトポリシーを設定できます。完了していない接続試行を停止するには、SOCKET.CLIENT.CLOSEコマンドを使用する必要があります。

SOCKET.CLIENT.STATUS <status_nvar>

現在のクライアントソケットの接続状態を取得し、その値を数値変数status_nvarに配置します。値の意味は下記のとおりです。

SOCKET.CLIENT.SERVER.IP <svar>

このクライアントが接続しているサーバのIPを文字列変数に返します。

SOCKET.CLIENT.READ.LINE <line_svar>

以前に接続したサーバーから行を読み込んで、その行を行ストリング変数line_svarに置きます。サーバーが回線を送信するまで、コマンドは戻りません。サーバーが回線を送信するのを待つ無限の遅延を避けるために、SOCKET.CLIENT.READ.READYコマンドをタイムアウトで繰り返し実行することができます。

SOCKET.CLIENT.READ.READY <nvar>

以前に作成したクライアントソケットがSOCKET.CLIENT.READ.LINEによって読み込み用の行を受け取らなかった場合は、戻り変数<nvar>をゼロに設定します。それ以外の場合は、ゼロ以外の値を返します。

SOCKET.CLIENT.READ.LINEコマンドは、サーバーから行が受信されるまで戻りません。このコマンドを使用して、所定の時間内に回線が受信されなかった場合に、プログラムがタイムアウトするようにすることができます。SOCKET.CLIENT.READ.READYがゼロ以外の値を返した場合、SOCKET.CLIENT.READ.LINEが1行のデータと共に返ることを確認できます。

SOCKET.CLIENT.READ.FILE <file_nexp>

>

サーバーが送信したファイルデータを読み取り、ファイルに書き込みます。<file_nexp>は、BYTE.OPENコマンドwriteモードによって書き込まれるファイルテーブル番号です。 例えば:


BYTE.OPEN w, fw, "image.jpg" 
SOCKET.CLIENT.READ.FILE fw 
BYTE.CLOSE fw 

SOCKET.CLIENT.WRITE.BYTES <line_sexp>

文字列式<line_sexp>を以前に接続したサーバーにUTF-16文字として送信します。行末に行末の文字が追加されます。

SOCKET.CLIENT.WRITE.LINE <sexp>

文字列式<sexp>を以前に接続したサーバーに8ビットのバイトとして送信します。文字列の各文字は1バイトとして送信されます。文字列はエンコードされません。BASIC!では行末文字は追加されません。 もしCRまたはLF文字が必要な場合は、文字列の一部にする必要があります。

SOCKET.SERVER.READ.LINEはこれらのバイトを受け取るために使用され、SOCKET.SERVER.READ.LINEコマンドはLF(10,0x0A)文字を受け取るまで戻りません。

SOCKET.CLIENT.WRITE.FILE <file_nexp>

ファイルをサーバーに送信します。 <file_nexp>は、BYTE.OPENでreadのために開かれたファイルテーブル番号です。

例:


BYTE.OPEN r, fr, "image.jpg" 
SOCKET.CLIENT.WRITE.FILE fr 
BYTE.CLOSE fr 

SOCKET.CLIENT.CLOSE

開いているクライアント側の接続を閉じます。

TCP/IP Server Socket Commands

SOCKET.MYIP <svar>

文字列変数<svar>内のデバイスのIPを返します。デバイスにアクティブなIPアドレスがない場合、返される値は空の文字列("")です。

デバイスがWiFiまたはイーサネットLAN上にある場合、返されるIPはデバイスのLAN IPです。

注:外部IPまたはWAN IPは、次のものを使用して検出できます。


GRABURL ip$, "http://icanhazip.com" 

SOCKET.MYIP <array$[]>{, <nvar>}

文字列配列<array$[]>にあるデバイスのすべてのアクティブなIPアドレスを返します。オプションのアドレスカウント変数<nvar>を指定すると、アクティブなIPアドレスの数に設定されます。

デバイスにアクティブなIPアドレスがない場合、配列には1つの要素として空の文字列("")があり、<nvar>のアドレスカウントは0です。この場合のみ、アドレスカウントは配列と同じではありません。

ほとんどのデバイスは、通常、0または1つのIPアドレスを持っています。複数あることが可能です。たとえば、WiFi接続を有効にした後でも、アクティブなセルラデータ接続が残っている可能性があります。通常、この接続は短時間で終了しますが、場合によっては開いたままになることもあります。

SOCKET.SERVER.CREATE <port_nexp>

数値式<port_nexp>で指定されたポートをリッスンするサーバーを確立します。

SOCKET.SERVER.CONNECT {<wait_lexp>}

キュー内の次のクライアントからの接続を受け入れるように、以前に作成したサーバーに指示します。オプションの waitパラメータwait_lexpは、コマンドがクライアントとの接続が確立されるまで待機するかどうかを決定します。パラメーターがないか真(ゼロ以外)の場合、コマンドは接続を待機します。パラメータがfalse(ゼロ)の場合、コマンドはすぐに完了します。SOCKET.SERVER.STATUSを使用して、接続が確立された時点を判断します。

一般に、接続が確立されずにプログラムが終了した場合に問題を回避できるので、パラメータをfalse(待機しない)に設定し、接続のステータスを明示的に監視する方が安全です。 完了していない接続試行を停止するには、SOCKET.SERVER.CLOSEコマンドを使用する必要があります。

SOCKET.SERVER.STATUS <status_nvar>

現在のサーバーソケット接続状況を取得し、数値変数<status_nvar>に値を置きます。

SOCKET.SERVER.READ.LINE <svar>

以前に接続されたクライアントから送信された行を読み取り、行を文字列変数<svar>に置きます。クライアントが回線を送信するまで、コマンドは戻りません。クライアントが回線を送信するのを待つ無限の遅延を避けるために、SOCKET.SERVER.READ.READYコマンドをタイムアウトで繰り返し実行することができます。

SOCKET.SERVER.READ.READY <nvar>

以前に接続されたクライアントソケットがSOCKET.SERVER.READ.LINEで読み取りのための行を送信していない場合は、戻り変数<nvar>を0に設定します。それ以外の場合は、ゼロ以外の値を返します。

SOCKET.SERVER.READ.LINEコマンドは、クライアントから回線が受信されるまで戻りません。このコマンドを使用して、所定の時間内に回線が受信されなかった場合に、プログラムがタイムアウトするようにすることができます。SOCKET.SERVER.READ.LINEがゼロ以外の値を返す場合は、データ行とともに返されることを確認できます。

SOCKET.SERVER.WRITE.LINE <line_sexp>

文字列式<line_sexp>を以前に接続したクライアントにUTF-16文字として送信します。行末に行末の文字が追加されます。

SOCKET.SERVER.WRITE.BYTES <sexp>

文字列式<sexp>を以前に接続したクライアントに8ビットのバイトとして送信します。文字列の各文字は1バイトとして送信されます。文字列はエンコードされません。BASIC!では行末の文字は追加されません。CRまたはLF文字が必要な場合は、文字列の一部にする必要があります。SOCKET.CLIENT.READ.LINEを使用してこれらのバイトを受け取った場合、SOCKET.CLIENT.READ.LINEコマンドはLF(10、0x0A)文字を受け取るまで戻りません。

SOCKET.SERVER.WRITE.FILE <file_nexp> ile_nexp>

ファイルをクライアントに送信します。<file_nexp>は、BYTE.OPENでreadで開かれたファイルテーブル番号です。

例:


BYTE.OPEN r, fr, "image.jpg" 
SOCKET.SERVER.WRITE.FILE fr 
BYTE.CLOSE fr 

SOCKET.SERVER.READ.FILE <file_nexp>

クライアントから送信されたファイルデータを読み取り、ファイルに書き込みます。<file_nexp>は、BYTE.OPENによって書き込まれるように開かれたファイルのファイルインデックスです。

例:


BYTE.OPEN w, fw, "image.jpg" 
SOCKET.SERVER.READ.FILE fw 
BYTE.CLOSE fw 

SOCKET.SERVER.DISCONNECT

以前に接続したクライアントとの接続を閉じます。新しいSOCKET.SERVER.CONNECTを実行して、キュー内の次のクライアントに接続することができます。

SOCKET.SERVER.CLOSE

以前に作成したサーバーを閉じます。現在接続されているクライアントはすべて切断されます。

SOCKET.SERVER.CLIENT.IP <nvar>

サーバーに現在接続されているクライアントのIPを返します。

FTP.OPEN <url_sexp>, <port_nexp>, <user_sexp>, <pw_sexp>

指定されたURLとポートに接続します。指定されたユーザー名とパスワードを使用してサーバーにログオンします。例えば:


FTP.OPEN "ftp.laughton.com", 21, "basic", "basic" 

FTP.CLOSE

FTPサーバーから切断します。

FTP.PUT <source_sexp>, <destination_sexp>

指定されたソースファイルを、接続されたFTPサーバー上の指定された宛先ファイルにアップロードします。

ソースファイルはディレクトリ "<pref base drive>/rfo-basic/data/"からの相対パスです。BASIC!ソースファイルをアップロードする場合、ファイル名の文字列は "../source/xxxx.bas"になります。

宛先ファイルは、サーバー上の現行作業ディレクトリーを基準にしています。現在の作業ディレクトリのサブディレクトリにアップロードする場合は、そのディレクトリへのパスを指定します。たとえば、 "etc"という名前のサブディレクトリがある場合、ファイル名 "/etc/name"はファイルをそのサブディレクトリにアップロードします。

FTP.GET <source_sexp>, <destination_sexp>

接続されたftpサーバー上のソースファイルは、Androidデバイス上の指定された宛先ファイルにダウンロードされます。

サーバー・ソース・ファイル<source_sexp>にサブディレクトリーを指定することができます。

宛先ファイルのパスは "<pref base drive>/rfo-basic/data/"を基準にしています。BASIC!ソースファイルをダウンロードする場合、パスは "../source/xxx.bas"になります。

FTP.DIR <list_nvar> {,<dirmark_sexp>}

現在の作業ディレクトリにあるファイルとディレクトリの名前のリストを作成し、それをBASIC!リストのデータ構造に配置します。新しいリストへのポインタが変数<list_nvar>に返されます。

ディレクトリは、その名前に付けられたマーカーで識別されます。 デフォルトのマーカーは文字列"(d)"です。 オプションのディレクトリマークパラメータ<dirmark_sexp>を使用して、マーカーを変更できます。ディレクトリをマークしたくない場合は、<dirmark_sexp>に空の文字列("")を設定します。

次のコードを使用して、そのリスト内のファイル名を出力することができます。


FTP.DIR file_list 
LIST.SIZE file_list,size 
FOR i = 1 TO size 
 LIST.GET file_list,i,name$ 
 PRINT name$ 
NEXT i 

FTP.CD <new_directory_sexp>

現在の作業ディレクトリを指定された新しいディレクトリに変更します。

FTP.RENAME <old_filename_sexp>, <new_filename_sexp>

指定された古いファイル名を指定された新しいファイル名に変更します。

FTP.DELETE <filename_sexp>

指定されたファイルを削除します。

FTP.RMDIR <directory_sexp>

指定されたディレクトリが空の場合に限り、そのディレクトリを削除(削除)します。

FTP.MKDIR mkdir <directory_sexp>

指定された名前の新しいディレクトリを作成します。

BT.OPEN {0|1}

リッスンモードでBluetoothを開きます。Bluetoothを有効にしていない場合(Android設定アプリケーションを使用している場合)、プログラムを実行している人にBluetoothを有効にする必要があるかどうか尋ねられます。BT.OPENが正常に実行された後、コードは接続したいデバイスを待ち受けます。

オプションのパラメータは、Bluetoothが安全な接続または安全でない接続をリッスンするかどうかを決定します。パラメータが指定されていない場合、またはパラメータが1の場合、セキュアな接続要求が待機されます。そうしないと、セキュアでない接続が聴かれます。セキュアかセキュアでないかを聞くことはできません。

Android APIは特定のセキュア/セキュアでないオープンを宣言する必要があるため、1つのBT.OPENコマンドとの接続が必要です。

BT.OPENコマンドは、Android APIが特定のセキュア/セキュアでないオープンを宣言する必要があるためです。

BT.OPENをグラフィックモード(GR.OPENの後)で使用する場合は、BT.OPENステートメントの後にPAUSE 500ステートメントを挿入する必要があります。

BT.CLOSE

以前に開いたBluetooth接続をすべて閉じます。プログラムの実行が終了すると、Bluetoothは自動的に閉じられます。

BT.CONNECT {0|1}

BASIC!コマンドを使用して特定のデバイスに接続します。このコマンドを実行すると、ペアになっているデバイスのリストが表示されます。これらのデバイスの1つが選択されると、BT.STATUSはデバイスが接続されるまで「接続中」になります。

オプションのパラメータは、Bluetoothがセキュアでないかセキュアでない接続を求めるかどうかを決定します。パラメータが指定されていない場合、またはパラメータが1の場合、セキュアな接続が要求されます。 そうしないと、セキュアでない接続が要求されます。

BT.DISCONNECT

接続されているBluetoothデバイスとの接続を切断し、リッスン状態になります。 これにより、BT.CLOSE+BT.OPENを使用して接続を切断し、新しい接続を待つ必要がなくなります。

BT.RECONNECT

このコマンドは、BT.CONNECTまたは以前のBT.RECONNECTで以前に(この実行中に)接続されたデバイスに再接続を試みます。このコマンドは、BT.OPENコマンドまたはBT.DISCONNECTコマンドに続いて接続されたデバイス(リスニングステータス)に再接続するために使用することはできません。

BT.RECONNECTを実行した後、BT.STATUSでConnected(3)のBluetoothステータスを監視する必要があります。

BT.STATUS {{<connect_var>}{, <name_svar>}{, <address_svar>}}

現在のBluetoothステータスを取得し、情報を戻り変数に格納します。使用可能なデータは、現在の接続状態(<connect_var>)、およびBluetoothハードウェアのフレンドリ名(<name_svar>)とMACアドレス(<address_svar>)です。

すべてのパラメータはオプションです。 カンマを使用して省略されたパラメータを指定します。

接続状況変数<connect_var>が存在する場合は、数値変数または文字列変数のいずれかになります。下の表は、各タイプの戻り値の可能性を示しています。

数値文字列意味
-1Not enabledBluetoothが有効になっていない
0Idle何も起こっていない
1Listening接続のリッスン中
2Connecting別のデバイスに接続中
3Connected別のデバイスに接続済

デバイス名文字列変数<name_svar>が存在する場合、それはフレンドリーなデバイス名に設定されます。デバイスにBluetooth radio場合、文字列は空になります。

アドレス文字列変数<address_svar>が存在する場合は、コロンで区切られた6桁の16進数文字列 "00:11:22:AA:BB:CC"で表されるBluetoothハードウェアのMACアドレスに設定されます。

BT.WRITE {<exp> {,|;}} ...

Bluetooth接続にデータを書き込みます。

コンマ(,)区切り文字を使用すると、式の値の間にカンマが印刷されます。

セミコロン(;)区切り記号が使用されている場合、式の値は何も区切られません。

セミコロンが行末にある場合、出力は直ちに送信され、改行文字は追加されません。

パラメータは、PRINTパラメータと同じです。このコマンドは基本的にBluetooth接続への印刷ですが、2つの違いがあります。

1文字につき1バイトだけが送信されます。上位バイトは破棄されます。バイナリデータとASCIIテキストは正しく送信されますが、Unicode文字は正しく送信されません。

パラメータを指定しないでこのコマンドを実行すると、Bluetooth接続に改行文字が送信されます。

BT.READ.READY <nvar>

数値変数の読み込み可能なメッセージ数を報告します。値が0より大きい場合、キューが空になるまでメッセージを読み取る必要があります。

ONBTREADREADY:

Bluetoothチャネルで受信したメッセージの到着をトラップする割り込みラベルです。 Bluetoothメッセージが準備できている場合(BT.READ.READYはゼロ以外の値を返します)、BASIC!はメッセージを読み込んで処理できるONBTREADREADY:ラベルの後ろにあるステートメントを実行します。 終了したら、BT.ONREADREADY.RESUMEコマンドを実行して中断したプログラムを再開します。

BT.ONREADREADY.RESUME

Bluetooth Read Readyイベントによって中断されたプログラム内のポイントで実行を再開します。

BT.READ.BYTES <svar>

次に使用可能なメッセージは、指定された文字列変数に格納されます。メッセージがない場合、文字列変数は空の文字列("")とともに返されます。

各メッセージバイトは、文字列の1文字に配置されます。各文字の上位バイトは0です。これはバイナリデータをファイルからバッファ文字列に読み込むBYTE.READ.BUFFERと似ています。

BT.DEVICE.NAME <svar>

文字列変数に接続されているデバイスの名前を返します。デバイスが接続(BT.STATUSでStatus 3)されていないと、ランタイムエラーが発生します。

BT.SET.UUID <sexp>

Universally Unique Identifier(UUID)は、情報を一意に識別するために使用される文字列IDの標準化された128ビット形式です。UUIDのポイントは、ランダムな128ビットの番号を選択できるだけの大きさで、同様に選択された他の番号と衝突しないことです。この場合、それは一意的に使用されています。

アプリケーションのBluetoothサービスを識別します。アプリケーションで使用するUUIDを取得するには、Web上の多数のランダムなUUIDジェネレータの1つを使用できます。

多くのデバイスは、特定のアプリケーションに共通のUUIDを持っています。デフォルトのBASIC! UUIDは、標準シリアルポートプロファイル(SPP)UUID:"00001101-0000-1000-8000-00805F9B34FB"です。

このコマンドを使用して、デフォルトのUUIDを変更できます。

16ビットと128ビットのUUIDに関するいくつかの情報は、次の場所にあります。

http://farwestab.wordpress.com/2011/02/05/some-tips-on-android-and-bluetooth/

EMAIL.SEND <recipient_sexp>, <subject_sexp>, <body_sexp>

本文文字列式の電子メールメッセージは、指定された件名の見出しを持つ名前付き受信者に送信されます。

MYPHONENUMBER <svar>

Androidデバイスの電話番号が文字列変数に返されます。デバイスがセルラーネットワークに接続されていない場合、戻り値は不確実です。

PHONE.CALL <sexp>

文字列式に含まれる電話番号が呼び出されます。電話をかけるには、携帯電話を携帯電話ネットワークに接続する必要があります。

PHONE.DIAL <sexp>

電話ダイヤルアプリを開きます。文字列式に含まれる電話番号がダイヤラーに表示されます。あたかも電話パッドの対応するキーがタッチされたかのように、文字列のアルファベット文字が数字に変換されます。

PHONE.RCV.INIT

あなたの携帯電話の状態を検出する準備をします。PHONE.RCV.NEXTを使用して電話を検出する場合、またはPHONE.INFOで信号強度を報告する場合は、まずこのコマンドを実行する必要があります。

PHONE.RCV.INITは、電話の状態の変化を検出するバックグラウンドの「リスナー」タスクを開始します。このリスナーを無効にするコマンドはありませんが、プログラムが終了すると停止します。

PHONE.RCV.NEXT <state_nvar>, <number_svar>

電話機の状態は状態数値で返されます。文字列変数に電話番号が返されることがあります。

状態意味
0電話機はアイドル状態です。電話番号は空の文字列になります。
1電話が鳴っています。 電話番号は文字列になります。
2電話はオフフックです。 電話番号(空文字列)がない場合は、発信呼び出しが行われています。電話番号がある場合、着信電話が進行中です。

電話機が鳴っているか、電話機がオフフックしている間は、状態1と2は継続的に報告されます。

SMS.SEND <number_sexp>, <message_sexp>

文字列式<message_sexp>内のSMSメッセージは、文字列式<number_sexp>の電話番号に送信されます。このコマンドは、メッセージの送信に関するフィードバックを提供しません。SMSメッセージを送信するには、デバイスをセルラーネットワークに接続する必要があります。

SMS.RCV.INIT

SMS.RCV.NEXTコマンドを使用して、受信したSMSを受信する準備をします。

SMS.RCV.NEXT <svar>

受信したSMSメッセージキューから文字列変数内の次の受信SMSメッセージを読み取ります。キューにSMSメッセージがない場合、返される文字列には "@"が含まれます。SMS.RCV.INITコマンドは、最初のSMS.RCV.NEXTコマンドが実行される前に呼び出す必要があります。

例:


SMS.RCV.INIT 
DO 
 DO                     % SMSが受信されるまでループ
  PAUSE 5000            % 5秒のスリープ
  SMS.RCV.NEXT m$       % 新しいメッセージを得る
 UNTIL m$ <> "@"  % "@"は新しいメッセージがないことを示す 
 PRINT m$               % 新しいメッセージを表示する
UNTIL 0                 % 永遠にループ

TIME {<time_nexp>,} Year$, Month$, Day$, Hour$, Minute$, Second$, WeekDay, isDST

変数に現在の(デフォルト)または指定された日付、時刻、曜日、夏時間フラグを返します。

オプションの最初のパラメータ(<time_nexp>)を使用して、変数に返す時間を指定することができます。これはTIME()関数から返される1970年1月1日午前12時00分(UTC)からのミリ秒の数値式です。それは負であってもよく、その日より前の時刻を示します。

曜日/日付と時刻は、必要に応じて先頭がゼロの2桁の数値文字列として返されます。ただし、Year$は4文字です。

WeekDayは1から7までの数字で、1は日曜日を意味します。選択した言語で曜日名の配列にインデックスを付けることができます。

isDSTフラグは次のとおりです。

1現在または指定された時刻が現在のタイムゾーンの夏時間にある
0時刻が夏時間(標準時)ではない
-1時刻がDSTであるかどうかをシステムが判別できない

現在のタイムゾーンは、TIMEZONEコマンドで変更しない限り、ローカルのタイムゾーンです。

すべての戻り変数はオプションです。つまり、それらのうちのどれかを省略することができますが、それらのうちのいくつかだけを返す場合は、省略された戻り変数にカンマを含めることによって、その位置を保持する必要があります。

例えば:


t = TIME(2001, 2, 3, 4, 5, 6) 
TIME t, Y$, M$, D$ % sets only the year, month, and day 
TIME t, Y$, M$, D$,,,, W % adds the day of the week (7, Saturday) 

現在の時刻と同じにするには、最初のパラメータとコンマの両方を省略します。


TIME ,, day$,,,, wkday  % 今日の日と曜日を返します。

TIMEZONE.SET { <tz_sexp> }

プログラムのタイムゾーンを設定します。タイムゾーンを指定しないと、デバイスのデフォルトに設定されます。これは現在の場所に基づいています。デバイスが認識できないタイムゾーンを指定すると、"GMT"に設定されます。(Androidでは、GMTはUTCとまったく同じです)。

TIMEZONE.GET <tz_svar>

現在のタイムゾーンを文字列変数で返します。これは、TIMEZONE.SETで変更した場合を除き、デバイスとロケーションのデフォルトのタイムゾーンです。

TIMEZONE.LIST <tz_list_pointer_nexp>

タイムゾーンは国際標準で定義されていますが、プログラムで重要なのは自分のデバイスで認識されるタイムゾーンだけです。このコマンドはすべての有効なタイムゾーン文字列を返し、<tz_list_pointer_nexp>が指すリストにそれらの文字列を入れます。リストの以前の内容は破棄されます。ポインタが有効な文字列リストを指定せず、式が数値変数である場合、新しいリストが作成され、変数は新しいリストを指すように設定されます。

TIMER.SET <interval_nexp>

指定された時間間隔後にプログラムの実行を繰り返し中断するタイマーを設定します。インターバル時間単位はミリ秒です。プログラムにはONTIMER:ラベルも含まれていなければなりません。

例:


n=0 
TIMER.SET 2000 
DO 
UNTIL n=4 
TIMER.CLEAR 
PRINT "タイマーがクリアされました。これ以上の割り込みはありません。" 
DO 
UNTIL 0 
ONTIMER: 
n = n + 1 
PRINT n*2; " seconds" 
TIMER.RESUME 

ONTIMER:

タイマー割込みの割込みラベルです。

TIMER.RESUME

ONTIMER:割り込みが発生したBASICプログラム内のポイントで実行を再開します。

TIMER.CLEAR

繰り返しタイマーをクリアします。それ以上のタイマー割り込みは発生しません。

CLIPBOARD.GET <svar>

クリップボードの現在の内容を<svar>にコピーします。

CLIPBOARD.PUT <sexp>

クリップボードに<sexp>を配置します。

ENCRYPT {<pw_sexp>}, <source_sexp>, <encrypted_svar>

パスワード<pw_sexp>を使用して<source_sexp>という文字列を暗号化します。結果は変数<encrypted_svar>に配置されます。

パスワードパラメータはオプションですが、カンマが必要です。パスワードを省略すると空の文字列("")を使用するのと同じです。

ソース文字列を暗号化できない場合、結果は空の文字列("")になります。エラーメッセージを表示するには、GETERROR$()関数を呼び出すことができます。

このコマンドは、ENCODE$("ENCRYPT",<pw_sexp>,<source_sexp>)と同じです。

DECRYPT <pw_sexp>, <encrypted_sexp>, <decrypted_svar>

パスワード<pw_sexp>を使用して、暗号化された文字列<encrypted_sexp>を復号化します。結果は<decrypted_svar>に配置されます。

パスワードパラメータはオプションですが、カンマが必要です。パスワードを省略すると空の文字列("")を使用するのと同じです。

ソース文字列を指定されたパスワードで復号化できない場合、結果は空の文字列("")になります。エラーメッセージを表示するには、GETERROR$()関数を呼び出すことができます。

このコマンドは、DECODE$("ENCRYPT",<pw_sexp>,<source_sexp>)と同じです。

RINGER.GET.MODE <nvar>

数値変数に現在の着信音モードを返します。

着信音モード

意味動作
0Silent着信音なしで、振動しない
1Vibrate着信音なしで、振動する
2Normalデバイス設定に従う

RINGER.SET.MODE <nexp>

着信音モードを指定した値に変更します。値が有効なモードでない場合、デバイスモードは変更されません。

着信音モードについてはRINGER.GET.MODEを参照して下さい。

注:これはシステム設定です。プログラムが終了した後も変更はそのままです。プログラムの終了時に元の設定を記録して戻すことができます。

RINGER.GET.VOLUME <vol_nvar> { , <max_nvar> }

数値変数に着信音の音量レベルを返します。<max_nvar>が存在する場合、<max_nvar>に設定されている最大音量を返します。

RINGER.SET.VOLUME <nexp>

着信音の音量を指定した値に変更します。値が0より小さい場合、音量はゼロに設定されます。音量が0の場合、呼び出し音は鳴りません。値がデバイス固有の最大値より大きい場合、ボリュームは最大レベルに設定されます。

注:これはシステム設定です。プログラムが終了した後も変更はそのままです。プログラムの終了時に元の設定を記録して戻すことができます。

JOIN <source_array$[]>, <result_svar> {, <separator_sexp>{, <wrapper_sexp}}

JOIN.ALL <source_array$[]>, <result_svar> {, <separator_sexp>{, <wrapper_sexp}}

<source_array$[]>の要素は、<result_svar>内の単一の文字列として結合されています。デフォルトでは、ソース要素は、要素間または要素の周りに何も結合されていません。

文字列に文字を追加するオプションの修飾子を指定できます。セパレータ文字列<separator_sexp>のコピーは、ソース要素間に書き込まれます。ラッパー・ストリング<wrapper_sexp>のコピーは、残りの結果ストリングの前後に置かれます。

JOINコマンドは、空のソース要素をすべて省略します。 JOIN.ALLコマンドは、たとえ空であっても、結果文字列内のすべてのソース要素を含みます。空ではないセパレータ文字列を指定しない限り、2つのコマンドに違いはありません。JOIN.ALLは空の要素を含むすべての要素の間にセパレータのコピーを配置します。

セパレータとラッパーの両方を使用する操作の例は、「カンマ区切り値」のCSV文字列です。


InnerPlanets$ = "Mercury Venus Earth Mars" 
SPLIT IP$[], InnerPlanets$ 
JOIN IP$[], PlanetsCSV$, "\",\"", "\""
PRINT PlanetsCSV$ 

"Mercury","Venus","Earth","Mars"(すべての引用符を含む)の文字列を出力します。 区切り記号は惑星の名前の間に ","を置き、ラッパーは文字列の先頭と最後に"を置きます。

SPLIT <result_array$[]>, <sexp> {, <test_sexp>}

SPLIT.ALL <result_array$[]>, <sexp> {, <test_sexp>}

ソース文字列<sexp>を複数の文字列に分割し、<result_array $ []>に配置します。配列はインデックスなしで指定されます。配列が存在する場合は上書きされます。それ以外の場合は、新しい配列が作成されます。結果は常に1次元配列です。

文字列は、<test_sexp>が発生する各場所で分割されます。 <test_sexp>は結果文字列から削除されます。<text_sexp>パラメータはオプションです。与えられていなければ、文字列は空白で分割されます。パラメータを省略することは、"\\s+"を指定することと同じです。

ソース文字列の先頭がテスト文字列と一致する場合、結果配列の最初の要素は空の文字列になります。これは、WORD$()関数とは異なります。WORD$()関数は、分割前にソース文字列の先頭と末尾のテスト文字列を取り除きます。

ソース式のテスト式の隣接する2つの出現は、結果配列のどこかに空の要素をもたらします。 SPLITコマンドは、空の文字列が結果配列の末尾にある場合、これらの空の文字列を破棄します。これらの末尾に空の文字列を保持するには、SPLIT.ALLコマンドを使用します。

例:


string$ = "a:b:c:d" 
delimiter$ = ":" 
SPLIT result$[], string$, delimiter$ 
ARRAY.LENGTH length, result$[] 
FOR i = 1 TO length 
 PRINT result$[i] + " "; 
NEXT i 
PRINT "" 

表示: abcd 

注:<test_sexp>は実際には正規表現です。<test_sexp>から期待される結果が得られない場合は、以下の正規表現の規則を調べる必要があります。

http://developer.android.com/reference/java/util/regex/Pattern.html

TTS.INIT

このコマンドは、発言する前に実行する必要があります。

あなたのプログラムは、TTS.SPEAKコマンドで即座に再生するために、またはTTS.SPEAK.TOFILEでサウンドファイルを作成するために、テキストからスピーチを合成することができます。

お使いの端末には、既に使用可能になっているテキスト読み上げエンジンが付属している場合や、Android設定アプリケーションで自分で設定する必要がある場合があります。詳細はAndroidのさまざまなデバイスとバージョンによって異なります。通常、メニューナビゲーションは次のようになります。

テキスト読み上げの設定で出力言語を設定しない限り、生成されたスピーチはデバイスの現在のデフォルト言語で読み上げられます。デフォルト言語を設定するためのメニューパスは、通常次のようになります。

ほとんどのスピーチエンジンは、話すことができる文字数を制限します。この制限は、すべてのデバイスまたはすべてのスピーチエンジンで同じではありませんが、通常は約4000文字です。制限を超えると、ほとんどの場合エンジンは黙って失敗します。エラーメッセージは表示されませんが、スピーチ出力も表示されません。

TTS.SPEAK <sexp> {, <wait_lexp>}

文字列式を話します。この文は、オプションのwaitパラメータwait_lexpにfalse(数値0)と評価されない限り、文字列が完全に話されるまで返されません。音声表現は重なり合うことはできません。2番目のTTS.SPEAK(またはTTS.TOFILE)は、waitパラメータがfalseであっても、以前のTTSTS.SPEAKからの音声が終了するのを待ちます。

TTS.SPEAK.TOFILE <sexp> {, <path_sexp>}

文字列式を音声に変換し、wavファイルに書き込みます。オプションのパスパラメータpath_sexpを使用してファイルの名前と場所を指定することができます。デフォルトのパスは "<pref base drive>/rfobasic/data/tts.wav"です。この文は、音声合成が完了するまで返されませんが、ファイル書き込みが完了したという保証はありません。以前のTTS.SPEAKがまだ話している場合、この文はその音声が完了するまで開始しません。

TTS.STOP

未処理の音声が終了するのを待ち、Androidのテキスト読み上げエンジンをリリースします。TTS.STOPに続いて、TTS.SPEAKまたはTTS.SPEAK.TOFILEを再度実行する場合は、再度TTS.INITを実行する必要があります。

STT.LISTEN {<prompt_sexp>}

[Speak Now]ダイアログボックスを表示して、音声認識プロセスを開始します。オプションのプロンプト文字列式<prompt_sexp>は、ダイアログボックスのプロンプトを設定します。プロンプトパラメータを指定しないと、デフォルトのプロンプト "BASIC! Speech To Text"が使用されます。

ダイアログボックスが表示されたら、発言を開始します。

話し中に一時停止があると認識が停止します。

STT.RESULTSは次に実行する必要があります。

注:STT.LISTENはHTMLモードでは使用しないでください。

Androidの音声認識機能は、Googleサーバーを使用して認識を実行します。つまり、この機能が動作するには、インターネットに接続してGoogleアカウントにログインする必要があります。

以下に各モードのサンプルを示します。

コンソールモード

次のコードは、コンソールモードのコマンドを示しています(HTMLモード、グラフィックスモードではありません)。


PRINT "Starting Recognizer" 
STT.LISTEN 
STT.RESULTS theList 
LIST.SIZE theList, theSize 
FOR k = 1 TO theSize 
 LIST.GET theList, k, theText$ 
 PRINT theText$ 
NEXT k 
END 

グラフィックスモード

このコマンドシーケンスはグラフィックスモードで使用されます。グラフィックスモードは、GR.OPENの後とGR.CLOSEの前に存在します。注:GR.FRONT 0の後にグラフィックモードが一時的に終了します。GR.FRONT 0を呼び出した場合はコンソールモードを使用してください。

主な違いは、GR.RENDERはSTT.LISTENの後とSTT.RESULTSの前に呼び出さなければならないことです。


PRINT "Starting Recognizer" 
STT.LISTEN 
GR.RENDER 
STT.RESULTS theList 
LIST.SIZE theList, theSize 
FOR k =1 TO theSize 
 LIST.GET theList, k, theText$ 
 PRINT theText$ 
NEXT k 
END 

HTMLモード

このコマンドシーケンスは、HTMLモードで使用されます。HTMLモードはHTML.OPENの後とHTML.CLOSEの前に存在します。

主な違いは、HTMLモードではSTT.LISTENコマンドが使用されないことです。STT.LISTENコマンドは、文字列"STT"を返送するHTMLデータリンクによって実行されます。データリンクを使用して「STT」を送信すると、[Speak Now]ダイアログボックスが表示されます。

データリンク"STT"ストリングがBASIC!プログラムによって受信されると、STT.RESULTSコマンドは、認識されたテキストを含むので、正常に実行されます。

サンプルファイルf37_html_demo.basは、関連付けられたhtmlファイルhtmlDemo1.html( "rfo-basic/data/"にあります)は、HTMLモードでの音声認識の使用方法を示しています。

STT.RESULTS <string_list_ptr_nexp>

このコマンドは、STT.LISTENが実行されるまで(HTMLモードでない限り)実行されてはなりません。

レコグナイザは、聴いたと思ったもののいくつかのバリエーションを文字列のリストとして返します。リストの最初の文字列が最良の推測です。

文字列は、<string_list_ptr_nexp>が指すリストに書き込まれます。リストの以前の内容は破棄されます。ポインタが有効な文字列リストを指定せず、式が数値変数である場合、新しいリストが作成され、変数は新しいリストを指すように設定されます。

DEVICE <svar>

文字列変数<svar>にAndroidデバイスに関する情報を返します。取得できる情報の種類を下の表に示します。

キー意味例(エミュレータの場合)
Brand任意の文字列デバイスによって割り当てられたブランド名メーカーgeneric
Model任意の文字列デバイスメーカーが割り当てたモデル識別子sdk
Device任意の文字列デバイスメーカーが割り当てたデバイス識別子generic
Product任意の文字列デバイスメーカーが割り当てた製品IDsdk
OSOSのバージョンAndroidオペレーティングシステムのバージョン番号4.1.2
Language言語名この端末のデフォルト言語English
Localeロケールコードデフォルトロケールコード(通常は言語と国)en_US
PhoneTypeGSM,CDMA,SIP,or Noneこのデバイスの電波の種類GSM
PhoneNumber数字の文字列このデバイスに登録されている電話番号(ある場合)15555215554
DeviceID数字の文字列固有のデバイスID(IMEIなど)000000000000000
SIM SN数字の文字列またはNot availableSIMカードが存在し、アクセス可能であれば、SIMカードのシリアル番号8901410321111851 0720
SIM MCC/MNC数字の文字列またはNot availableSIMのプロバイダの「数値名」(存在し、アクセス可能な場合)310260
SIM Provider名前文字列またはNot availableSIMの提供者の名前(存在し、アクセス可能な場合)Android

最後の6つの項目は、デバイスの電話システムとSIMカードにアクセスします。デバイスに電話がない場合、またはBASIC!にアクセス権がない場合、フィールドは中立値に設定されます。"None"、"Not Available"、または"0"文字列です。

各項目の形式は次のとおりです。


key = value 

keyとvalueの名前は、上の表の最初の2つの列に示されます。 アイテムは改行文字で区切られた単一の文字列に置かれます。この方法の書式設定で文字列を表示すると、各行に1つの項目が表示されます。 a href="#SPLIT">SPLITで個々の商品を分けることができます。


DEVICE info$                         % 1つの文字列のすべての情報 
SPLIT info$[], info$, "\\n"          % 各配列要素は1つの項目です"<k> = <v>" 
SPLIT lang_line$[], info$[6], " = "  % 言語項目、2要素配列を分割する
lang$ = lang_line$[2]                % lang$は"Englishのような言語名です 

Device <nexp>|<nvar>

Androidデバイスに関する情報をバンドルで返します。有効なバンドルポインターではない変数を指定すると、新しいバンドルが作成され、変数にバンドルポインターが戻されます。それ以外の場合は、変数または式のポイントをバンドルに書き込みます。

バンドルキーは、上のデバイス概要の表の最初の列に表示されます。


DEVICE info                         % バンドル内のすべての情報 
BUNDLE.GET info, "Language", lang$  % lang$は"Englishのような言語名です 

DEVICE.LANGUAGE <svar>

文字列変数<svar>にわかりやすい文字列値としてデバイスのデフォルト言語を返します。

この便利なショートカットは、DEVICEコマンドの数値形式によって返されるバンドルの "Language"キーと同じ値を返します。

DEVICE.LOCALE <svar> Locale <svar>

標準ロケール形式のデバイスのデフォルトロケールコードを返します。通常、言語と国コードが含まれます。

この便利なショートカットは、DEVICEコマンドの数値形式によって返されるバンドルの "Locale"キーと同じ値を返します。

PHONE.INFO <nexp>|<nvar>

Androidデバイスの電話電波に関する情報を返します(ある場合)。情報はバンドルに置かれます。有効なバンドルポインタではない変数を指定すると、新しいバンドルが作成され、変数にバンドルポインタが戻されます。それ以外の場合は、変数または式のポイントをバンドルに書き込みます。

バンドルキーと可能な値は以下の表にあります。各エントリのタイプは、N(数値)またはS(文字列)です。

キータイプ意味
PhoneTypeSGSM,CDMA,SIP,or None このデバイスの電波の種類GSM
NetworkTypeSGPRS,EDGE,UMTS,CDMA,EVDOrev0,EVDOrevA,1xRTT,HSDPA,HSUPA,HSPA,iDen,EDVOrevB,LTE,EHRPD,HSPAP+,or Unknown現在のデータ接続のネットワークタイプLTE

PhoneTypeは、DEVICEコマンドによって返されたものと同じです。静的です。

PhoneTypeがGSMで、電話機がネットワークに登録されている場合、PHONE.INFOコマンドはバンドル内の次の項目も返します。

正の数またはCIDが不明な場合は-1
キータイプ意味
CIDNGSM Cell ID342298497
LACN正の数またはLACが不明の場合は-1GSM Location Area Code11090
MCC/MNCS5桁または6桁の10進数の文字列登録されたネットワークオペレータの「数値名」310260
OperatorN名前文字列登録されたネットワークのオペレータの名前T-Mobile

PhoneTypeがCDMAで、電話機がネットワークに登録されている場合、PHONE.INFOコマンドはバンドル内の次の項目も返します。

キータイプ意味
BaseIDN正の数またはBaseIDが不明な場合は-1CDMA基地局識別番号
NetworkIDN正の数またはNetworkIDが不明な場合は-1CDMAネットワーク識別番号
SystemIDN正の数またはSystemIDが不明な場合は-1CDMAシステム識別番号

あなたのプログラムがPHONE.RCV.INITを実行した場合、PHONE.INFOは携帯電話をセルタワーに接続する信号の強度を報告することができます。信号強度が利用可能な場合、PHONE.INFOは、次のバンドルキーのうちの1つまたは2つを報告しようとします(最初の3つは相互に排他的です)。

""Arbitrary Strength Units",範囲はネットワークの種類によって異なります。
キータイプ意味
SignalLevelN正の数0~4ステータスバーに表示される信号品質の一般的な尺度。高い方が良いです。
GsmSignalN正の数0~31不明の場合は99"SignalLevel"は利用できません。電話の種類はGSMですが、代わりにGSMレベルを取得してください。
CdmaDbmN負の数通常-90(強)~-105(弱)"SignalLevel"は利用できません。電話機のタイプはCDMAで、生の電力レベルをdBmで取得します。
SignalASUN0~31,99(ほとんど)0~97,99(LTE)

この情報は、一部のAndroidデバイスでは利用できません。デバイスの製造元と携帯通信会社によって異なります。

SCREEN rotation, size[], realsize[], density

画面に関する情報を返します。

すべてのパラメータはオプションです。 カンマを使用して、省略されたパラメータを指定します。

SCREEN.ROTATION <nvar>

<nvar>パラメータに、デバイスの「自然な」向きに対するスクリーンの現在の向きを表す数値を返します。自然の方向は、製造者が定義しています。 戻り値は0~3の数値です。

SCREEN.SIZE size[], realsize[], density

画面のサイズと密度に関する情報を返します。

すべてのパラメータはオプションです。 カンマを使用して、省略されたパラメータを指定します。

プログラムがグラフィックスモードで実行されている場合、"SCREEN.SIZE xy[],,dens"は"GR.SCREEN x,y,dens"と同じ値を返します。SCREEN.SIZEは、GR.SCREENとは異なり、コンソールモードとHTMLモードでも動作します。

WIFI.INFO {{<SSID_svar>}{, <BSSID_svar>}{, <MAC_svar>}{, <IP_var>}{, <speed_nvar>}}

現在のWi-Fi接続に関する情報を取得し、それを戻り変数に格納します。

すべてのパラメータはオプションです。 カンマを使用して省略されたパラメータを指定します。 次の表は利用可能なデータを示しています:

変数タイプ返されるデータ形式
SSID文字列現在の802.11ネットワークの「名前」または16進数のSSID(下記参照)
BSSID文字列現在のアクセスポイントのBSSID xx:xx:xx:xx:xx:xx(MACアドレス)
MAC文字列あなたのWiFiのMACアドレス xx:xx:xx:xx:xx:xx
IP数値または文字列WiFi番号またはオクテットのIPアドレス(下記参照)
speed数値現在のリンク速度(Mbps単位)

フォーマットノート:

HOME

HOMEコマンドは、HOMEキーをタップされたように実行します。 BASIC!プログラムがバックグラウンドで実行されている間、ホーム画面が表示されます。

ONBACKGROUND:

バックグラウンド/フォアグラウンド状態の変更をトラップする割り込みラベルです。 BASIC!は、BACKGROUND.RESUMEコマンドに到達するまで、ONBACKGROUND:ラベルに続くステートメントを実行します。新しい状態を判断するには、BACKGROUND()関数を使用する必要があります。

BACKGROUND.RESUME

ONBACKGROUND:割り込みが発生したBASIC!プログラム内のポイントで実行を再開します。

WAKELOCK <code_nexp>{, <flags_nexp>}

WAKELOCKコマンドは、システム画面のタイムアウト機能を変更します。コードパラメータ<code_nexp>は5つの値のいずれかになります。値1~4は、さまざまな方法で画面のタイムアウトを変更します。 コード値5はWakeLockを解放し、システム画面のタイムアウト機能を復元します。

コードWakelockタイプCPUスクリーンキーボードライト
1Partial WakeLockOn*OffOff
2Screen DimOnDimOff
3Screen BrightOnBrightOff
4Full WakeLockOnBrightBright
5No WakeLockOff OffOff

*WakeLockの一部を保持すると、タイマーに関係なく、またユーザーが電源ボタンをタップした後でも、CPUは引き続き実行されます。他のすべてのWakeLockでは、CPUは動作しますが、電源ボタンを使用してデバイスをスリープ状態にすることはできます。次の表に示すように、オプションのFlagsパラメータ<flags_nexp>を使用して画面の動作を変更できます。WakeLockタイプがPartial WakeLock(Code 1)の場合、Flagsパラメータは無視されます。

/tr>
Flag(s) Set意味
1Acquire causes wakeupWakelockを取得したら画面をオンにします。
2On after releaseWakelockが解放されたときに画面のタイムアウトをリセットします。
3両方
otherその他

あなたが本当に必要なときだけ、WakeLockを使用してください。WakeLockを取得すると、電力使用量が増加し、バッテリ寿命が短くなります。WakeLockは、プログラムの実行が停止すると常に解放されます。

WakeLockの一般的な用途の1つは、システム画面のタイムアウト間隔のあとに音楽を再生する必要のある音楽プレーヤーにあります。これを実装するには、BASIC!を実行し続ける必要があります。これを行う1つの方法は、BASIC!を無限ループに置くことです。


AUDIO.LOAD n,"B5b.mp3" 
AUDIO.PLAY n 
WAKELOCK 1 
DO
 PAUSE 30000 
UNTIL 0 

システム画面のタイムアウト時間が経過して画面はオフになりますが、音楽は引き続き再生されます。

WIFILOCK <code_nexp>

WIFILOCKコマンドを使用すると、タイムアウトが通常オフになったときにWiFi接続を起床させたままにすることができます。<code_nexp>は4つの値のいずれかです。値1~3はWifiLockを取得し、画面が消灯したときにWiFiの動作を変更します。コード値4はWifiLockを解放し、通常のタイムアウト動作を復元します。

CodeWiFiLockタイプ画面がオフのときのWiFiの操作
1ScanWiFiのみが有効になっていますが、スキャンを開始してスキャン結果を報告している操作のみです
2FullWiFiは正常に動作します
3Full High-PerformanceWiFiは最小限のパケット損失と低遅延で高性能で動作*します
4No WiFiLockWiFiがオフになります(一部のデバイスで設定可能)

*Full High-Performanceモードは、すべてのAndroid搭載端末で利用できるわけではありません。Android 3.0.x以前を実行しているデバイスと、必要なハードウェアのないデバイスは、代わりにフルモードで動作します。

WifiLockは、本当に必要なときにのみ使用してください。WifiLockを取得すると、電力使用量が増え、バッテリ寿命が短くなります。WifiLockは、プログラムの実行が停止すると常に解放されます。

HEADSET <state_nvar>, <type_svar>, <mic_nvar>

デバイスにヘッドセットが接続されていることを報告し、ヘッドセットに関するデータを返します。パラメータは、データを受け取るすべての変数の名前です。

ヘッドセットを抜き差しすると、新しい情報が利用可能になります。更新後の情報を入手するには、プログラムでヘッドセットコマンドを再度実行する必要があります。

NOTIFY <title_sexp>, <subtitle_sexp>, <alert_sexp>, <wait_lexp>

このコマンドを実行すると、通知オブジェクトが通知(ステータス)バーに表示されます。通知オブジェクトは、BASIC!アプリアイコンと<alert_sexp>テキストを表示します。ユーザーは、通知オブジェクトをタップして通知ウィンドウを開きます。プログラムの通知は<title_sexp>と<subtitle_sexp>のテキストを表示します。

以下に示すコードは、パラメータ文字列の配置を示しています。

<wait_lexp>が0(真)でない場合、BASIC!プログラムの実行は、ユーザーが通知オブジェクトをタップするまで中断されます。値がゼロ(偽)の場合、BASIC!プログラムは実行を継続します。

通知オブジェクトは、ユーザーがオブジェクトをタップしたとき、またはプログラムが終了したときに削除されます。


PRINT "通知の実行" 
NOTIFY "BASIC! Notify", "タップして実行中のプログラムを再開する","BASIC Notify Alert", 1 
! 実行が中断され、ユーザが通知オブジェクトをタップするのを待ちます
PRINT "通知されました"

注意:通知オブジェクトに表示されるアイコンは、ユーザー作成のapk内のアプリケーションのアイコンになります。

PAUSE <ticks_nexp>

<ticks_nexp>ミリ秒のBASIC!プログラムの実行を停止します。1ミリ秒=1/1000秒です。1000を一時停止すると、1秒間プログラムが一時停止します。一時停止を中断することはできません。

無限ループは、プログラムで非常に便利な構成になります。たとえば、ユーザーが画面上のコントロールをタップするのを待つために使用することができます。タイトなスピン・ループにより、BASIC!は何もしなくても忙しくなります。PAUSEは、短くてもCPUの負荷やバッテリの放電が減少します。アプリケーションに応じて、バッテリ電源を節約するためにループにPAUSEを追加することができます。


DO : PAUSE 50: UNTIL x<> 0 

SWAP <nvar_a>|<svar_a>, <nvar_b>|<svar_b>

2つの変数の値は入れ替えられます。

TONE <frequency_nexp>, <duration_nexp> {, <duration_chk_lexp}

ミリ秒単位で指定された周波数の音をヘルツ(1秒あたりのサイクル数)で再生します。

生成された持続時間は、指定された持続時間と正確には一致しません。正確な時間を取得する必要がある場合は、実験してください。

各Android搭載端末には最低限のトーンが設定されています。デフォルトでは、この最小値より短い継続時間を指定すると、デバイスの最小値を示す実行時エラーメッセージが表示されます。ただし、オプションの継続時間チェックフラグ<duration_chk_lexp>を0(false)に設定すると、チェックを抑制できます。これを行うと、結果はあなたのデバイスによって異なります。実行時のエラーメッセージは表示されませんが、期待する音長が得られるかもしれません。

VIBRATE <pattern_array[{<start>,<length>}]>,<nexp>

VIBRATEコマンドは、デバイスを指定されたパターンで振動させます。パターンは数値配列(pattern_array[])または配列セグメント(pattern_array[start,length])に保持されます。

パターンは、休止時間、オン時間、...、休止時間、オン時間の形式です。休止時間と稼働時間の値は、ミリ秒単位の継続時間です。パターンは任意の長さで設定できます。最初の値が一時停止であるため、1つの振動を取得するには少なくとも2つの値が必要です。

振動の例については、サンプルプログラムf21_sos.basを参照してください。

VOLKEYS

VOLKEYS.OFF

下記のテーブルにリストされているキーの通常のアクションを無効にします。プログラムはこれらのキー押下を検出することができますが、BASIC!はイベントをAndroidシステムに渡しません。

キーの名前(Android docs)キーコード通常のアクション
VOLUME_UP24スピーカーの音量を上げる
VOLUME_DOWN25スピーカーの音量を下げる
VOLUME_MUTE164スピーカーをミュート(Android 3.0以降)
MUTE91マイクをミュート
HEADSETHOOK79電話を切って、メディアの再生を停止する

特定のキーとボタンは、Androidデバイスにとって特別な意味を持ちます。BASIC!はデフォルトで、これらの特殊なキーコードを、プログラムが検出したとしてもAndroidシステムに伝播します。たとえば、「音量アップ」ボタンを押したとき、INKEY$で検知して音量を抑えるようにプログラムできますが、画面上に音量コントロールウィンドウが開いていて、オーディオが大きくなっています。

VOLKEYS.OFFおよびVOLKEYS.ONコマンドを使用すると、5つのキーの動作を制御できます。これらのキーは、Androidデバイスまたはデバイスに接続されたヘッドセットにある可能性があります。

VOLKEYS.ON

VOLKEYS.OFFのテーブルにリストされているキーの通常のアクションを有効にします。これはBASIC!プログラムが起動するときのデフォルト設定です

SQL.OPEN <DB_pointer_nvar>, <DB_name_sexp>

アクセスするデータベースを開きます。 データベースが存在しない場合は作成されます。

Androidオペレーティングシステムは、SQLiteデータベースの作成、保守、およびアクセスを可能にします。SQLiteは、自己完結型でサーバレスでゼロ設定のトランザクション型SQLデータベースエンジンを実装しています。SQLiteは、世界で最も広く配備されたSQLデータベースエンジンです。SQLiteの詳細については、SQLiteホームページ(http://www.sqlite.org/)を参照してください。SQLに関する優れたオンラインチュートリアルは、www.w3schools.comをご覧ください。(http://www.w3schools.com/sql/default.asp)。

データベースファイルは、ディレクトリ "/rfo-basic/databases/"のベースドライブ(通常はSDカード)に作成されます。

<DB_pointer_nvar>は、新しく開かれたデータベースへのポインタです。この値は、SQL.OPENコマンド操作によって設定されます。<DB_pointer_nvar>は後続のデータベースコマンドで使用されるため、変更しないでください。

<DB_name_sexp>は、このデータベースを保持するために使用されるファイル名です。ベース参照ディレクトリは "<pref base drive>/com.rfo.basic/databases/"です。<DB_name_sexp> = ":memory:"の場合、一時データベースがメモリに作成されます。

注:複数のデータベースを同時に開くことができます。オープンされた各データベースには、独自の別個のポインターが必要です。

SQL.CLOSE <DB_pointer_nvar>

以前に開いたデータベースを閉じます。<DB_pointer_nvar>はゼロに設定されます。この変数は、別のSQL.OPENコマンドで再利用できます。終了したら、開いたデータベースを閉じてください。データベースを閉じないと、Androidデバイスで使用可能なメモリ量が減少する可能性があります。

SQL.NEW_TABLE <DB_pointer_nvar>, <table_name_sexp>, C1$, C2$, ...,CN$

単一のデータベースには多くのテーブルが含まれることがあります。テーブルはデータの行でできています。データの行は値の列で構成されます。各値列には列名が関連付けられています。

このコマンドは、参照されているデータベースに<table_name_sexp>という名前の新しいテーブルを作成します。その表の列名は、C1$,C2$,...,CN$で定義されます。少なくとも1つの列名が必要です。必要なだけ多くの列名を作成できます。

BASIC!は常にすべてのテーブルに"_id"という行インデックス列を追加します。この行インデックス列の値は、挿入された新しい行ごとに1つずつ自動的に増分されます。これにより、テーブルの各行に固有の識別子が与えられます。この識別子は、あるテーブルの情報を別のテーブルに接続するために使用できます。たとえば、顧客テーブル内の顧客情報の_id値を使用して、未処理の注文データベース内の特定の顧客に特定の注文をリンクさせることができます。

SQL.DROP_TABLE <DB_pointer_nvar>, <table_name_sexp>

<DB_pointer_nvar>が指す開いたデータベースの<table_name_sexp>という名前のテーブルが存在する場合、データベースから削除されます。

SQL.INSERT <DB_pointer_nvar>, <table_name_sexp>, C1$, V1$, C2$, V2$, ..., CN$, VN$

以前に開いたデータベースのテーブルにデータ列と値の新しい行を挿入します。

<table_name_sexp>は、データが挿入されるテーブルの名前です。 新しく挿入された行は、表の最後の行の後に挿入されます。

C1$, V1$, C2$, V2$, ..., CN$, VN$:新しい行の列名と値のペアです。 これらのパラメータはペアでなければなりません。 列名は、表の作成に使用された列名と一致する必要があります。値はすべて文字列であることに注意してください。列に数値が必要な場合は、BASIC!のSTR$(n)を使用して数値を文字列に変換します。 BASIC!のFORMAT$(pattern$,N)を使用して、値のフォーマット番号を作成することもできます。(値が文字列であるという要件は、SQLiteの要件ではなくBASIC! SQL Interfaceの要件です。SQLite自体はすべての値を文字列として格納しますが、他のデータ型には透過的な変換が行われます。BASIC!は独自の変換機能を提供しているので、これらのSQLite変換に変換できます。)

SQL.QUERY <cursor_nvar>, <DB_pointer_nvar>, <table_name_sexp>, <columns_sexp> {, <where_sexp> {, <order_sexp>} }

特定のデータに対して、以前に開いたデータベースのテーブルを照会します。このコマンドは、<Cursor_nvar>という名前のカーソルを戻し、クエリ結果をステップ実行します。

<columns_sexp>は、返される列の名前のリストを含む文字列式です。列名はコンマで区切る必要があります。例は、Columns$="First_name,Last_name,Sex,Age"です。自動的にインクリメントされた行インデックス列を取得する場合は、列リストに"_id"列名を含めます。列は任意の順序でリストされます。クエリで使用される列の順序は、行が返される順序です。

オプションの<where_sexp>は、返す行を選択するために使用されるSQL式文字列です。一般に、SQL式は<Column Name> <operator> <Value>の形式です。 たとえば、Where$="First_name='John'"です。値は一重引用符で囲む必要があります。このパラメーターを省略すると、すべての行が返されます。

オプションの<order_sexp>は、行が返される順序を指定します。出力行がソートされる列を識別します。行が昇順(ASC)か降順(DESC)のどちらでソートされるかを指定します。たとえば、Order$="Last_Name ASC"はLast_Nameでソートされた行をAからZに返します。このパラメーターを省略すると、行はソートされません。

order_sexpパラメーターが存在する場合、where_sexpパラメーターが存在する必要があります。 すべての行を返す場合は、where_sexp=""を設定するだけです。

SQL.QUERY.LENGTH <length_nvar>, <cursor_nvar>

以前のクエリコマンドによって戻されたレコードの数を報告します。クエリによって戻されたカーソルを指定すると、このコマンドはレコードの数を<length_nvar>に書き込みます。このコマンドは、すべてのデータが読み込まれた後は使用できません。

SQL.QUERY.POSITION <position_nvar>, <cursor_nvar>

クエリコマンドのカーソルを使用して、最も最近読み込まれたレコード番号を報告します。クエリによって返されたカーソルが与えられた場合、コマンドはカーソルの位置を<Position_nvar>に書き込みます。最初の次のコマンドの前に、位置は0です。これは、各次のコマンドによって増分されます。最後の行が読み取られた後の次のコマンドは、Done変数をtrueに設定し、カーソル0にリセットします。カーソルは使用できなくなり、このコマンドをそのカーソルで使用することはできません。

SQL.NEXT <done_lvar>, <cursor_nvar>{, <cv_svars>} next <done_lvar>, <cursor_nvar>{, <cv_svars>}

以前のクエリコマンド(SQL.QUERYまたはSQL.RAW_QUERY)によって生成されたカーソルを使用して、クエリによって返された次のデータ行に移動し、データを取得します。

<done_lvar>は、クエリデータの最後の行が読み込まれたことを通知するブール変数です。

<cursor_nvar>は、クエリコマンドによって返されるカーソルポインタを保持する数値変数です。一度に複数のカーソルを開くことができます。

<cv_svars>は、データベースからプログラムにデータを返すオプションの列値文字列変数です。 カーソルは、クエリにリストされている表の列から値を受け取ります。SQL.NEXTは、カーソルから文字列値として1行を取り出し、<cv_svars>に書き込みます。いずれかの列が数値の場合は、BASIC!のVAL()関数を使用して文字列を数値に変換できます。

このコマンドがデータ行を読み取ると、Doneフラグ<done_lvar>がfalse(0.0)に設定されます。読み取るデータが見つからない場合は、Doneフラグをtrue(1.0)に変更し、カーソル変数<cursor_nvar>をゼロにリセットします。カーソルはSQL.NEXT操作に使用できなくなりました。カーソル変数は、異なるクエリからの別のカーソルで使用できます。

最も単純な形式の<cv_svars>は、コンマで区切られた文字列変数名のリストです。各変数は1つの列のデータを受け取ります。列より多くの変数がある場合、余分な変数は変更されません。変数より多くの列がある場合、余分なデータは破棄されます。


SQL.NEXT done, cursor, cv1$, cv2$, cv3$  % 最大3つの列からデータを取得する

最後の(または唯一の)変数は、インデックスのない文字列配列名です。


SQL.NEXT done, cursor, cv$[]  % 利用可能なすべての列からデータを取得する

文字列変数に書き込まれていない列のデータは、配列に書き込まれます。列データが配列に書き込まれない場合、配列には空の文字列 ""が1つあります。 変数が既に存在する配列に名前を付けると、その配列は上書きされます。

最後の(または唯一の)<cv_svars>変数が配列の場合、数値変数<ncol_nvar>を(別のカンマの後に)追加することもできます。 この変数は、カーソル内の列の総数を受け取ります。 これは必ずしも配列のサイズと同じではありません。


SQL.NEXT done, cursor, cv$[], nCols  % 利用可能な列の数を報告する

オプションの配列と列数を含むこのコマンドの完全な仕様は、次のとおりです。

SQL.NEXT <done_lvar>, <cursor_nvar> {, svar}... {, array$[] {, <ncol_nvar>}}

SQL.DELETE <DB_pointer_nvar>, <table_name_sexp>{,<where_sexp>{,<where_sexp>} }

以前に開いたデータベースの名前付きテーブルから、Where文字列式where_sexpによって設定された条件で選択された行を削除します。 Count変数where_sexpは、削除された行の数を報告します。

Where文字列の作成は、SQL.QUERYコマンドで説明したのとまったく同じです。WhereとCountの両方がオプションです。Where文字列を省略すると、すべての行が削除され、Count変数も省略する必要があります。

SQL.UPDATE <DB_pointer_nvar>, <table_name_sexp>, C1$, V1$, C2$, V2$,...,CN$, VN${: <where_sexp>}

以前に開いたデータベースの名前付きテーブルで、Where$パラメータ<where_sexp>で選択した特定の行の列値を変更します。C$,V$パラメータはペアでなければなりません。コロン文字はC$,V$リストを終了し、このコマンドのWhere$の前になければなりません。Where$パラメーターとコロンはオプションです。

BASIC!では、コロン文字を使用して複数のコマンドを1行に区切ります。このコマンドでコロンを使用すると、その機能と競合します。両方を併用する場合は注意が必要です。

このコマンドの後にコロンを置くと、プリプロセッサはコロンがコマンドの一部ではなくコマンドの一部であると常に仮定します。結果が確実でない場合は、SQL.UPDATEコマンドを単独で、または複数のコマンドラインの最後に置くのが最も安全な方法です。

SQL.EXEC <DB_pointer_nvar>, <command_sexp>

以前に開いたデータベースを使用して、ANY以外のSQLコマンド文字列( "CREATE TABLE"、 "DELETE"、 "INSERT"など)を実行します。

SQL.RAW_QUERY <cursor_nvar>, <DB_pointer_nvar>, <query_sexp>

以前に開いたデータベースを使用してANY SQL Queryコマンドを実行し、結果のカーソルを返します。

GR.OPEN {{alpha}{, red}{, green}{, blue}{, <ShowStatusBar_lexp>}{, <Orientation_nexp>}}

グラフィックス画面を開き、BASIC!をグラフィックモードにします。色の値はグラフィックス画面の背景色になります。デフォルトの色は不透明な白です(255,255,255,255)。

すべてのパラメータはオプションです。カンマを使用して省略されたパラメータを指定します(オプションのパラメータを参照)。

4つのカラーコンポーネントのそれぞれは、0~255の値を持つ数値式です。値がこの範囲外の場合、値の最後の8ビットのみが使用されます。たとえば、257と1025は1と同じです。色パラメータを省略すると、255に設定されます。

<ShowStatusBar_lexp>が真(ゼロでない)の場合、グラフィックス画面にステータスバーが表示されます。<ShowStatusBar_lexp>が存在しない場合、ステータスバーは表示されません。

グラフィックを開く際の方向は、<Orientation_nexp>値によって決定されます。 <Orientation_nexp>の値は、GR.ORIENTATIONコマンドの値と同じです。 <Orientation_nexp>が存在しない場合、デフォルトの向きは横向きです。

グラフィックス画面とグラフィックスモード

グラフィックはBASIC!のテキスト出力画面とは異なる新しい画面に表示されます。グラフィックモードでもテキスト出力画面はまだ存在し、書き込むことができます。BACKキーを使用するか、プログラムにGR.FRONTコマンドを実行させることで、テキスト画面に戻すことができます。

グラフィックスコマンドを実行するには、グラフィックスモードでなければなりません。グラフィックスモードでないときにグラフィックスコマンドを実行しようとすると、ランタイムエラーが発生します。GR.CLOSEコマンドはグラフィックス画面を閉じ、グラフィックスモードをオフにします。 BACKキーまたはMENUキーをタップすると、グラフィックモードは自動的にオフになります。グラフィックスモードでBACKキーまたはMENUキーをタップしてもBASIC!は実行を続けますが、出力コンソールが表示されます。

グラフィックス画面が表示されているときは、BASIC!出力コンソールは表示されません。ランタイムエラーメッセージは観測できません。ランタイムエラーを振動アラートで通知します。この振動アラートは、はっきりとした短い振動です。このアラートを感じたら、[BACK]キーをタップしてグラフィックス画面を閉じて、BASIC!出力コンソールからエラーメッセージを読み取ることができます。

プログラムが終了すると、グラフィックス画面が閉じます。グラフィックスのスクリーンショットを表示したい場合は、長いポーズまたは無限ループを使用してプログラムが終了しないようにします。


! グラフィックス画面を表示したままにする
do 
until 0 

アプリケーションに応じて、バッテリ電源を節約するためにループにポーズを追加することができます。無限ループから脱出するには、BACKキーをタップします。ONBACKKEY:割り込みラベルでトラップしない限り、BACKキーはプログラムを終了します。

GR.COLOR {{alpha}{, red}{, green}{, blue}{, style}{, paint}}

描画オブジェクトの色とスタイルを設定します。このコマンドを使用するには、2つの方法があります。

すべてのパラメータはオプションです。カラーコンポーネントまたはスタイルが省略されている場合、そのコンポーネントは変更されません。 たとえば、GR.COLOR ,, 0は緑だけを0に設定し、アルファ、赤、青、およびスタイルをそのままにします。カンマを使用して、省略されたパラメータを指定します。

4つの色成分(アルファ(透過度)、赤、緑、青)のそれぞれは、0~255の値を持つ数値式です。値がこの範囲外の場合、値の最後の8ビットのみが使用されます。たとえば、257と1025は両方とも1と同じです。

styleパラメータは、オブジェクトのストロークと塗りつぶしを決定する数値式です。このパラメータの効果については下記のスタイル項目を参照して下さい。<style_nexp>で使用可能な値を次の表に示します。

意味
0STROKE
1FILL
2STROKE_AND_FILL
-1変更なし

-1,0,1,2以外の値を指定すると、styleは2に設定されます。style-に1を指定すると、省略された場合と同様に、スタイルは変更されません。スタイルを設定しない場合、デフォルト値は1、FILLです。

GR.SET.STROKEやさまざまなテキストスタイルコマンドなどのコマンドを使用して、ストロークの重みを変更することができます。

例:


GR.OPEN 
! 基本的な使用法
GR.COLOR ,0,0,255,2        % 不透明な青、ストロークと塗りつぶし 
GR.RECT r1, 50,50,100,100  % 2つの四角形を描く 
GR.RECT r2, 100,100,150,150 
GR.COLOR 128,255,0,0       % 半透明赤
GR.RECT r3, 75,75,125,125  % 重なり合う正方形を描く
GR.RENDER : PAUSE 2000 
! 高度な使い方
GR.GET.VALUE r1, "paint", p  % 最初のペイントのインデックスを取得する
GR.COLOR 255,0,255,0,,p      % そのペイントの色を不透明な緑色に変更します
GR.RENDER : PAUSE 2000       % r1とr2の両方が変化する 
GR.RECT r4, 125,125,175,175  % 現在のペイントをそのまま使用する
GR.RENDER : PAUSE 2000       % まだ半透明の赤を描く
GR.CLOSE : END 

基本的な色は赤、緑、青が混在しています。各コンポーネントの数値は0~255です。黒は、3つの値がすべてゼロの場合に発生します。白は、3つの値がすべて255であるときに発生しますソリッドレッドは赤に255の値を持ち、青と緑はゼロです。

色にはアルファチャンネルと呼ばれるものもあります。 アルファチャンネルは、色の不透明度を表します。アルファ値255は完全に不透明です。アルファ値が255のオブジェクトでは、どの色のオブジェクトも透過して表示できません。アルファ値が0の場合、オブジェクトは非表示になります。

ペイント

BASIC!は、ペイントオブジェクトに色、フォントサイズ、スタイルなどの描画情報を保持します。ペイントオブジェクトはペイントリストに格納されます。最後に作成されたペイントオブジェクト(「現在のペイント」)は、描画コマンドが実行されるときにグラフィックオブジェクトに関連付けられます。ペイントは、レンダラ(GR.RENDER参照)にグラフィックオブジェクトを描画する方法を伝えます。同じペイントが多くのグラフィックオブジェクトに添付されるため、すべて同じ色、スタイルなどで描画されます。

スタイル

ほとんどのグラフィックスオブジェクトは、アウトラインと中心という2つの部分で構成されています。それぞれの部分がどのように描かれているかを管理する規則には、微妙ではあるが重要な違いがあります。2つの部分は、GR.COLORコマンドのstyleパラメータで設定されたペイントオブジェクトのスタイル設定によって制御されます。

注:GR.POINTおよびGR.LINEはスタイルの影響を受けません。ストローク部分(アウトライン)のみが描画されます。

GR.SET.ANTIALIAS {{<lexp>}{,<paint_nexp>}}

このコマンドが発行された後に描画されたオブジェクトのアンチエイリアスをオンまたはオフにします。

アンチエイリアスは一般的にオンにする必要があります。 これはデフォルトでオンになっています。

単一ピクセルピクセルと単一ピクセル幅の水平および垂直線を描画するには、アンチエイリアスをオフにする必要があります。

オプションのペイントポインタパラメータ<paint_nexp>を使用して、変更するペイントオブジェクトを指定することができます。通常、このパラメータは省略されます。詳細については、GR.COLORの高度な使い方を参照してください。

GR.SET.STROKE {{<nexp>}{,<paint_nexp>}}

このコマンドの発行後に描画されるオブジェクトの線の幅を設定します。<nexp>の値は0以上でなければなりません。ゼロは最も薄い線を作成し、デフォルトのストローク値です。

アンチエイリアスがオンの場合、最も細い水平線と垂直線は2ピクセル幅になります。アンチエイリアスをオフにして、単一ピクセル幅の水平線と垂直線を描画します。

アンチエイリアスがオンの場合、GR.SET.PIXELSコマンドで描画されるピクセルは2x2のマトリックスとして描画されます。単一ピクセルのピクセルを描画するには、アンチエイリアスをオフに設定し、ストロークを0に設定します。

オプションのペイントポインタパラメータ<paint_nexp>を使用して、変更するペイントオブジェクトを指定することができます。通常、このパラメータは省略されます。詳細については、GR.COLORの高度な使い方を参照してください。

GR.ORIENTATION <nexp>

<nexp>の値は、画面の向きを次のように設定します。

-1向きはセンサーによって異なります
0横向き
1縦向き
2逆の横向き
3逆の縦向き

GR.SCREENまたはSCREENコマンドを使用して画面の幅と高さを読み取ることで、方向の変化を監視できます。

GR.STATUSBAR {<height_nvar>} {, showing_lvar}

ステータスバーに関する情報を返します。高さ変数<height_nvar>が存在する場合は、ステータスバーの公称高さに設定されます。表示フラグ<showing_lvar>が存在する場合、グラフィックモードがどのように開かれたかに基づいて0(偽、非表示)または1(真、表示)に設定されます。

パラメータは両方ともオプションです。最初のパラメータを省略して2番目のパラメータを使用する場合は、コンマを使用する必要があります。

GR.STATUSBAR.SHOW <nexp>

このコマンドは推奨されていません。グラフィックス画面にステータスバーを表示するには、GR.OPENのオプションの5番目のパラメータを使用します。

GR.RENDER

このコマンドは、現在の表示リストにリストされているすべてのオブジェクトを表示します。GR.RENDERの後でPAUSEコマンドを実行する必要はありません。GR.RENDERコマンドは、表示リストの内容が完全に表示されるまで完了しません。

GR.RENDERは、次の画面が更新されるまで常に待機します。ほとんどのAndroid搭載端末では、1秒間に60回画面が更新されます。あなたのデバイスはより速くまたは遅くなるかもしれません。したがって、2つの連続したGR.RENDERコマンドを実行すると、2つのコマンドの間に(ほとんどのデバイスで)16.7ミリ秒の遅延が発生します。

スムーズなアニメーションを実現するには、最大リフレッシュレートを達成するために、GR.RENDERコマンド間で16.7 ms以上の作業を避けてください。これはBASIC!プログラムには時間がかかりませんので、フレームレートを低くする必要があります。ただし、16.7 msより頻繁にレンダリングしようとするメリットはありません。

BASIC!がバックグラウンドで実行されている場合(BACKGROUND()関数とHOMEコマンドを参照)、GR.RENDERは実行されません。BASIC!をフォアグラウンドに戻すまで、プログラムは一時停止します。

表示リスト

グラフィカルオブジェクト(線、円、テキストなど)を描画する各コマンドは、そのオブジェクトをオブジェクトリストと呼ばれるリストに配置します。各コマンドはオブジェクトのオブジェクト番号を返します。このオブジェクト番号は、オブジェクトリスト内のオブジェクトの位置です。このオブジェクト番号は、オンザフライでオブジェクトを変更するために使用できます。GR.MODIFYコマンドを使用して、オブジェクトリスト内の任意のオブジェクトのパラメータを変更できます。この機能を使用すると、オブジェクトリスト内のすべてのオブジェクトを再作成しなくても、アニメーションを簡単に作成できます。

グラフィックス画面上にグラフィックオブジェクトを描画するために、BASIC!は表示リストを使用します。表示リストには、オブジェクトリスト上のグラフィックオブジェクトへのポインタが含まれています。グラフィカルオブジェクトがオブジェクトリストに追加されるたびに、そのオブジェクト番号も表示リストに追加されます。オブジェクトは、表示リストに表示される順序で画面に描画されます。表示リストオブジェクトは、GR.RENDERコマンドが呼び出されるまで画面に表示されません。

GR.SCREEN width, height{, density } screen width, height{, density }

数値変数に画面の幅と高さ、およびオプションでその密度を返します。密度は、インチ当たりのドット数(dpi)で標準化されたAndroid密度値(通常120,160,240 dpi)であり、画面の実際の物理密度とは限りません。

GR.ORIENTATIONコマンドで方向が変更された場合、以前のGR.SCREENコマンドの幅と高さの値は無効です。

Androidの向き変更アニメーションには時間がかかります。GR.SCREENを実行する前に、GR.OPENまたはGR.ORIENTATIONの後に1秒ほど待たなければならない場合があります。そうしないと、方向の変更が完了する前に幅と高さの値が設定されます。

GR.SCREENは、新しいSCREENコマンドによって返された情報のサブセットを返します。

GR.SCALE x_factor, y_factor

すべての描画コマンドを数値のxとyの倍率でスケーリングします。このコマンドは、デバイスに依存しない方法で描画し、プログラムが実行されている画面の実際のサイズに図面を拡大することができます。 例えば:


! デバイスに依存しないサイズを設定する
di_height = 480 
di_width = 800 
! 実際の幅と高さを取得する
gr.open   % デフォルト: 白、ステータスバーなし、横向き風景
gr.screen actual_w, actual_h 
! スケール係数を計算する
scale_width = actual_w /di_width 
scale_height = actual_h /di_height 
! スケールを設定する
gr.scale scale_width, scale_height 

次に、di_heightとdi_widthに基づいて描画を開始します。図面は、プログラムを実行しているデバイスに合わせてスケーリングされます。

GR.CLS

グラフィックス画面をクリアします。以前に描画されたすべてのオブジェクトを削除します。既存のオブジェクト参照はすべて無効です。既存のすべてのペイントを削除し、すべてのGR.COLORまたはGR.TEXT.{size|align|bold|strike|underline|skew}の設定をリセットします。現在のオブジェクトリストと表示リストを破棄し、新しい初期表示リストを作成します。

注:ビットマップは削除されません。グラフィカルオブジェクトがそれらを指していないので、描画されませんが、ビットマップはまだ存在します。それらを指す変数は有効なままです。

クリアされた画面をユーザーに表示させるには、GR.RENDERコマンドを呼び出す必要があります。

GR.CLOSE

開いているグラフィックモードを閉じます。プログラムは引き続き実行されます。グラフィック画面が削除されます。テキスト出力画面が表示されます。

GR.FRONT flag

グラフィックス画面または出力コンソールを最前面の画面にするかどうかを指定します。flag = 0の場合、出力コンソールは最前面に表示され、ユーザーに表示されます。フラグ<> 0の場合、グラフィックス画面は最前面に表示され、ユーザーに表示されます。

このコマンドの1つの用途は、グラフィックスモードで出力コンソールをユーザーに表示することです。GR.FRONT 0を使用してテキスト出力を表示し、GR.FRONT 1を使用してグラフィックス画面に戻ります。

注:出力コンソールがグラフィックス画面の前にある場合でも、グラフィックス画面に描画することはできますが、レンダリングはできません。GR.FRONT 1は、GR.RENDERの前に実行する必要があります。

グラフィック画面が前面に表示されている間も、PRINTコマンドは出力コンソールに表示され続けます。

GR.BRIGHTNESS <nexp>

グラフィックス画面の明るさを設定します。 数値式の値は、0.01(最も暗い)と1.00(最も明るい)の間にある必要があります。

GR.POINT <obj_nvar>, x, y

点オブジェクトを作成します。ポイントは(x,y)に配置されます。<obj_nvar>に、この点オブジェクトの表示リスト上のオブジェクト番号を返します。このオブジェクトは、GR.RENDERコマンドが呼び出されるまで表示されません。

点オブジェクトの外観は、現在の線の太さとアンチエイリアス設定の影響を受けます。オブジェクトは(x,y)を中心とし、現在のストロークと同じ大きさの四角形としてレンダリングされます。アンチエイリアスがオンになっていると、点がぼやけて大きくます。 1つのピクセルをカラーリングするには、GR.SET.STROKE 0とGR.SET.ANTIALIAS 0を使用します。

GR.POINTのGR.MODIFYパラメータは、"x"と"y"です。

GR.LINE <obj_nvar>, x1, y1, x2, y2 line <obj_nvar>, x1, y1, x2, y2

線オブジェクトを作成します。線は(x1,y1)で始まり、(x2,y2)で終わります。<obj_nvar>に、この線オブジェクトの表示リストのオブジェクト番号を返します。このオブジェクトは、GR.RENDERコマンドが呼び出されるまで表示されません。

最も細い水平線と垂直線は、GR.SET.STROKE 0で描画されます。これらの線は、アンチエイリアスがオンの場合、2ピクセル幅になります。 アンチエイリアスをオフにして、1ピクセル幅の水平線と垂直線を描画します。

GR.LINEのGR.MODIFYパラメータは、"x1","y1","x2","y2"です。

GR.RECT <ob_nvar>, left, top, right, bottom

矩形オブジェクトを作成します。矩形はパラメータの範囲内に配置されます。矩形は、GR.COLORのstyleのパラメータに応じて塗りつぶされます。<obj_nvar>は、この矩形オブジェクトの表示リストのオブジェクト番号を返します。このオブジェクトは、GR.RENDERコマンドが呼び出されるまで表示されません。

GR.RECTのGR.MODIFYパラメータは、"left","top","right","bottom"です。

GR.OVAL <obj_nvar>, left, top, right, bottom

楕円オブジェクトを作成します。楕円はパラメータの境界内に配置されます。GR.COLORスタイルパラメータに応じて、楕円が塗りつぶされるか、塗りつぶされません。<obj_nvar>は、この楕円オブジェクトの表示リストのオブジェクト番号を返します。このオブジェクトは、GR.RENDERコマンドが呼び出されるまで表示されません。

GR.OVALのGR.MODIFYパラメータは、"left","top","right","bottom"です。

GR.ARC <obj_nvar>, left, top, right, bottom, start_angle, sweep_angle, fill_mode

円弧オブジェクトを作成します。円弧は、パラメータによって記述された長方形内に作成されます。指定されたstart_angleから開始し、指定されたsweep_angleを通して時計回りにスイープします。角度値は度です。

fill_modeパラメータの効果は、GR.COLORのstyleパラメータによって異なります。

style 0
fill_mode false
弧のみが描画されます。
style 0
ill_mode true
各端点を境界矩形の中心に結ぶ線で円弧を描きます。結果の閉じた図形は塗りつぶされません。
style 0以外
fill_mode false
円弧の端点は1本の直線で結ばれます。 結果の図形が塗りつぶされます。
style 0以外
fill_mode true
円弧は各端点を境界矩形の中心に結ぶ線で描画されます。結果の閉じた図形が塗りつぶされます。

<obj_nvar>は、この弧オブジェクトの表示リストのオブジェクト番号を返します。 このオブジェクトは、GR.RENDERコマンドが呼び出されるまで表示されません。

GR.ARCのGR.MODIFYパラメータは、"left"."top","right","bottom","start_angle","sweep_angle","fill_mode"です。"fill_mode"の値は、false(0)またはtrue(0以外)です。

GR.CIRCLE <obj_nvar>, x, y, radius circle <obj_nvar>, x, y, radius

円オブジェクトを作成します。 円は、指定された中心(x,y)座標の周りの指定された半径で作成されます。 円は、GR.COLORのstyleパラメータに応じて塗りつぶされるか、塗りつぶされません。<obj_nvar>は、この円オブジェクトの表示リストのオブジェクト番号を返します。このオブジェクトは、GR.RENDERコマンドが呼び出されるまで表示されません。

GR.CIRCLEのGR.MODIFYパラメータは"x","y","radius"です。

GR.SET.PIXELS <obj_nvar>, pixels[{<start>,<length>}] {,x,y}

ピクセルポイントの配列をオブジェクトリストに挿入します。配列(pixels[])または配列セグメント(pixels[start,length])には、各ピクセルのx座標とy座標のペアが含まれます。pixels[]配列または配列セグメントは任意のサイズでも構いませんが、偶数の要素を持つ必要があります。

オプションのx,y式の対が存在する場合、値は配列のx座標とy座標のそれぞれに加算されます。これは、ピクセル配列を画面の周りに移動する能力を提供します。x,yペアのデフォルト値は0,0です。x、yペアは負の値が有効です。

アンチエイリアスがオンで、ストローク=0の場合、ピクセルは2x2マトリックスピクセルとして描画されます。単一ピクセルピクセルを描画するには、アンチエイリアスをオフに設定し、ストロークを0に設定します。

<obj_nvar>は、このオブジェクトの表示リストのオブジェクト番号を返します。ピクセルは、GR.RENDERコマンドが呼び出されるまで表示されません。

このコマンドのGR.MODIFYパラメータは"x"と"y"です。

変更に加えて、ピクセル配列の個々の要素は、オンザフライで変更することができます。例えば:


Pixels[3] = 120 
Pixels[4] = 200 

次のレンダリングで第2のピクセルをx = 120、y = 200に配置します。

GR.POLY <obj_nvar>, list_pointer {,x, y}

任意の辺数の閉じたポリゴンを描画するオブジェクトを作成します。<obj_nvar>は、このポリゴンオブジェクトの表示リストのオブジェクト番号を返します。このオブジェクトは、次のGR.RENDERまで表示されません。

list_pointerは、リストデータ構造体を指す式です。リストには、x,y座標のペアが含まれます。最初の座標ペアは、ポリゴンの描画が開始されるポイントを定義します。後続の各座標対は、前の座標対からこの座標対に引かれた線を定義します。最後の点から最初の点に戻ってきた最後の線がポリゴンを閉じます。

オプションのx,y式の対が存在する場合、値はリストのx座標とy座標のそれぞれに加算されます。これにより、ポリゴン配列を画面上で移動することができます。デフォルトのx,yペアは0,0です。 xとyは負の値が有効です。

ポリゴンの線幅、線の色、アルファおよび塗りは、ほかの描画オブジェクトと同様に、以前のGR.COLORコマンドとGR.SET.STROKEコマンドで決定されます。これらの属性は、リストではなく、ポリゴンオブジェクトによって所有されます。異なるGR.POLYコマンドで同じリストを使用すると、色、ストロークなどが異なる場合があります。

LISTコマンドでリストを直接操作することで、ポリゴン(ポイントの追加、削除、移動)を変更することができます。 GR.MODIFYを使用して、タグパラメータとして "list"を使用して、別のポイントリストに変更できます。変更は、GR.RENDERコマンドが呼び出されるまで表示されません。

GR.POLYでポリゴンを作成するか、GR.MODIFYで新しいリストを追加する場合、リストには偶数の値と少なくとも2つの座標ペア(4つの値)が必要です。これらのルールは、実行時エラーによって強制されます。 LISTコマンドを使用してリストを変更すると、ルールを適用することはできません。代わりに、座標が奇数の場合、最後の座標は無視されます。ポイントが1つしかない場合、GR.RENDERは何も描画しません。

GR.MODIFYパラメータは"x","y","list"です。

GR.POLYの動作例については、サンプルプログラムファイルf30_polyを参照してください。

GR.GROUP <object_number_nvar>{, <obj_nexp>}...

グラフィカルオブジェクトのグループを作成します。すべての数値式<obj_nexp>は、有効なグラフィックオブジェクト番号を評価する必要があります。オブジェクト番号はリストに入れられ、グループに添付されます。<object_number_nvar>は、グループのオブジェクトの表示リストのオブジェクト番号を戻します。

GR.MODIFYパラメータは"list"です。

グループ

グラフィカルオブジェクトをグループにまとめることができます。グループは、グラフィカルオブジェクトのリストです。グループに対して特定の操作を実行すると、グループ内の各オブジェクトに対して操作が実行されます。

表示リストにグループオブジェクトを作成して、グラフィカルオブジェクトをグループ化します。グループを使用するには、そのオブジェクト番号を他のグラフィックオブジェクト番号を使用するグラフィックスコマンドに入れます。

このバージョンのBASIC!では、次のコマンドでグループオブジェクトを使用できます。

グラフィックコマンドを使用して、グループのリスト内のオブジェクトを操作します。LISTコマンドを使用して、リストの処理(オブジェクトの追加、オブジェクトのカウント、リストのクリアなど)を実行します。

この例を実行してみてください。 トップサークルが右に移動し、次にトップ2が移動し、最後にトップ3が移動し、グループに関連付けられたリストにサークルが1つずつ追加されます。


GR.OPEN ,,,,,1 : GR.COLOR ,255,0,0,2 
GR.CIRCLE c1,100,100,40 : GR.CIRCLE c2,100,200,40 
GR.CIRCLE c3,100,300,40 : GR.CIRCLE c4,100,400,40 
GR.RENDER : PAUSE 1000         % 4つの赤いサークルを描く
GR.GROUP g, c1                 % 1つのサークルでグループを作成する
GR.GET.VALUE g, "list", gList  % グループのオブジェクトのリストを取得する
GR.MOVE g, 0, 50               % グループ0全体を上下に移動する、50右に移動する
GR.RENDER : PAUSE 1000         % 1つの円だけが動く
LIST.ADD gList, c2             % グループのリストに別のサークルを追加する
GR.MOVE g, 0, 50 
GR.RENDER : PAUSE 1000         % 2つの円が動く
LIST.ADD gList, c2             % グループのリストに別のサークルを追加する
GR.MOVE g, 0, 50               % 3つの円が動く
GR.RENDER : PAUSE 1000 
GR.CLOSE : END 

GR.GROUP.LIST <object_number_nvar>, <list_ptr_nexp>

グラフィカルオブジェクトのリストからグループを作成します。リストには有効なグラフィカルオブジェクト番号が含まれていると見なされますが、チェックされません。リストは単にグループに添付されます。

リストポインタパラメータ<list_ptr_nexp>はオプションです。有効なリストポインタに評価される式を指定すると、ポインタがアドレス指定するリストはグループに入れられたグラフィックオブジェクトを提供します。それ以外の場合、グループは空です。リストをまだ指していない数値変数を指定すると、変数はグループの空のリストを指すように設定されます。

<object_number_nvar>は、グループのオブジェクト・リスト・オブジェクト番号を戻します。

GR.MODIFYパラメータは "list"です。

GR.GROUP.GETDL <object_number_nvar>

現在の表示リストからグループを作成します。表示リストは、グループに添付された新しいリストにコピーされます。<object_number_nvar>は、グループのオブジェクト・リスト・オブジェクト番号を戻します。

GR.MODIFYパラメータは"list"です。

GR.GROUP.NEWDL <object_number_nvar>

既存の表示リストを、指定されたグループから読み取られた新しいリストに置き換えます。<object_number_nvar>は、グループのオブジェクト・リスト・オブジェクト番号を戻します。

GR.MODIFYパラメータは"list"です。

GR.HIDE <object_number_nexp>

指定されたオブジェクト番号でオブジェクトを非表示にします。オブジェクトがグループの場合、グループ内のすべてのグラフィカルオブジェクトは非表示になります。この変更は、GR.RENDERコマンドが呼び出されるまで表示されません。

GR.SHOW <object_number_nexp>

指定されたオブジェクト番号でオブジェクトを表示します。オブジェクトがグループの場合、グループ内のすべてのグラフィカルオブジェクトが表示されます。この変更は、GR.RENDERコマンドが呼び出されるまで表示されません。

GR.SHOW.TOGGLE <object_number_nexp>

指定されたオブジェクト番号でオブジェクトの表示を切り替えます。それが隠されている場合は、それが表示されます。表示されている場合は非表示になります。オブジェクトがグループの場合、グループ内のすべてのグラフィカルオブジェクトがトグルされます。この変更は、GR.RENDERコマンドが呼び出されるまで表示されません。

GR.TOUCH touched, x, y

グラフィック画面のタッチをテストします。画面がタッチされている場合、タッチの(x,y)座標でtouchedに真(0ではない)として返されます。画面が現在タッチされていない場合、タッチは、直前のタッチの(x,y)座標でtouchedにfalse(0)を返します。画面に一度も触れていない場合は、xおよびy変数は変更されません。 画面がタッチされている間は、コマンドはtrueを返し続けます。1回の短いタップを検出したい場合は、タッチを検出した後、touchedがfalseになるまでループする必要があります。


DO 
 GR.TOUCH touched, x, y 
UNTIL touched 
! タッチが検出されましたが、今すぐ指が離されるのを待ちます
DO 
 GR.TOUCH touched, x, y 
UNTIL !touched 

返される値は、実際の画面サイズに相対的です。画面を拡大/縮小した場合は、同様に返されるパラメータをスケーリングする必要があります。GR.SCALEで使用したパラメータがscale_xとscale_y(GR.SCALE scale_x,scale_y)だった場合、返されたxとyを同じ値で除算して、同様に返されるパラメータをスケーリングします。


GR.TOUCH touched, x, y 
Xscaled = x / scale_x 
Yscaled = y / scale_y 

GR.BOUNDED.TOUCH touched, left, top, right, bottom

touchedパラメータは、left、top、right、bottomパラメータで定義された矩形内の画面にユーザーが触れた場合にtrue(ゼロではない)が返されます。画面がタッチされていないか、または外接矩形外にタッチされた場合、タッチされたパラメータはfalse(ゼロ)として返されます。このコマンドは、画面がタッチされたままタッチが境界矩形内にある限り、trueを返し続けます。

境界矩形パラメータは、実際の画面サイズ用です。画面を拡大縮小した場合、同様に境界矩形のパラメータを拡大/縮小する必要があります。GR.SCALEで使用したパラメータがscale_xおよびscale_y(GR.SCALE scale_x,scale_y)だった場合、scale_xで左右を除算し、scale_yで上下を除算します。

GR.TOUCH2 touched, x, y

GR.TOUCHと同じですが、画面の2回目の同時タッチについて報告します。

GR.BOUNDED.TOUCH2 touched, left, top, right, bottom

GR.BOUNDED.TOUCHと同じですが、画面の2回目の同時タッチについて報告します。

ONGRTOUCH:

グラフィックス画面のタッチをトラップする割り込みラベルです。 BASIC!は、GR.ONGRTOUCH.RESUMEコマンドに達するまで、ONGRTOUCH:ラベルに続くステートメントを実行します。

出力コンソール(グラフィックスモードではない)のタッチを検出するには、ONCONSOLETOUCH:を使用します。

GR.ONGRTOUCH.RESUME

ONGRTOUCH:割り込みが発生したBASIC!プログラム内のポイントで実行を再開します。

GR.TEXT.ALIGN {{<type_nexp>}{,<paint_nexp>}}

GR.TEXT.DRAWコマンドで指定された(x,y)座標を基準にしてテキストを揃えます。

オプションのペイントポインタパラメータ<paint_nexp>を使用して、変更するペイントオブジェクトを指定することができます。通常、このパラメータは省略されます。詳細については、GR.COLORの高度な使い方を参照してください。

GR.TEXT.BOLD {{<lexp>}{,<paint_nexp>}}

このコマンドが発行された後に描画されるテキストオブジェクトの太字をオンまたはオフにします。

GR.COLORのstyleパラメータが0の場合、太字のテキストの輪郭のみが表示されます。styleが0以上の場合、テキストのアウトラインが塗りつぶされます。

これはグラフィカルな手法でシミュレートされた「偽の太字」です。GR.TEXT.SETFONTまたはGR.TEXT.TYPEFACEで「太字」スタイルを設定した後に描画されるテキストと同じには見えない場合があります。

オプションのペイントポインタパラメータ<paint_nexp>を使用して、変更するペイントオブジェクトを指定することができます。通常、このパラメータは省略されます。詳細については、GR.COLORの高度な使い方を参照してください。

GR.TEXT.SIZE {{<size_nexp>}{,<paint_nexp>}}

テキストのサイズをピクセル単位で指定します。サイズ<nexp>は、文字の公称高さを設定します。文字幅は高さに比例してスケーリングされます。

オプションのペイントポインタパラメータ<paint_nexp>を使用して、変更するペイントオブジェクトを指定することができます。通常、このパラメータは省略されます。詳細については、GR.COLORの高度な使い方を参照してください。

GR.TEXT.SKEW {{<skew_nexp>}{,<paint_nexp>}}

イタリック効果を与えるためにテキストを傾けます。<nexp>の負の値は、テキストが前方に傾くようになります。 正の値は正反対です。従来のイタリック体は、<nexp> = -0.25でもっともよく模倣することができます。

オプションのペイントポインタパラメータ<paint_nexp>を使用して、変更するペイントオブジェクトを指定することができます。通常、このパラメータは省略されます。詳細については、GR.COLORの高度な使い方を参照してください。

GR.TEXT.STRIKE {{<lexp>}{,<paint_nexp>}}

このコマンドが発行された後に描画されたテキストオブジェクトに対して、オーバーストライクをオンまたはオフにします。

オプションのペイントポインタパラメータ<paint_nexp>を使用して、変更するペイントオブジェクトを指定することができます。通常、このパラメータは省略されます。詳細については、GR.COLORの高度な使い方を参照してください。

GR.TEXT.UNDERLINE {{<lexp>}{,<paint_nexp>}}

このコマンドが発行された後に描画されるテキストオブジェクトの下線をオンまたはオフにします。

オプションのペイントポインタパラメータ<paint_nexp>を使用して、変更するペイントオブジェクトを指定することができます。通常、このパラメータは省略されます。詳細については、GR.COLORの高度な使い方を参照してください。

GR.TEXT.SETFONT {{<font_ptr_nexp>|<font_family_sexp>} {, <style_sexp>} {,<paint_nexp>}}

書体とスタイルを指定して、テキストフォントを設定します。これらのパラメータは両方ともオプションです。このコマンドは古いGR.TEXT.TYPEFACEに似ていますが、より柔軟です。

fontパラメータが数値式<font_ptr_nexp>の場合、FONT.LOADコマンドによって返されるフォントポインタ値でなければなりません。フォントがロードされるとフォントのスタイルを変更することはできないので、スタイルパラメータ<style_sexp>は無視されます。

fontパラメータが文字列式<font_family_sexp>の場合、Androidデバイスで使用できるフォントファミリの1つを指定する必要があります。デバイスが文字列を認識しない場合、フォントはシステムのデフォルトのフォント書体に設定されます。ほとんどのシステムでは、デフォルトは "sans serif"です。

標準フォントファミリは、"monospace"、"serif"、"sans serif"です。Androidの最近のバージョンでは、"sans-serif"、"sans-serif-light"、"sans-serif-condensed"、"sans-serif-thin"もサポートしています。フォントファミリー名は大文字と小文字が区別されません。 "Serif"または "SERIF"は "serif"と同様に機能します。

fontパラメータを省略すると、コマンドは直近に読み込まれたフォントを設定します(FONT.LOADを参照)。フォントを削除した場合(FONT.DELETEを参照)、コマンドは削除されていない最も新しいフォントを設定します。フォントをロードしていない場合、またはフォントをクリアした場合(FONT.CLEARを参照)、コマンドはデフォルトのフォントファミリを設定します。

フォントファミリを指定する場合は、スタイルパラメータ<style_sexp>を使用してフォントの外観を変更できます。パラメータ値は、次の表に示すスタイル文字列のいずれかでなければなりません。表示されているように、完全なスタイル名または省略形を使用できます。このパラメータは大文字小文字の区別ではありません。"BOLD","bold","Bold","bOlD"はすべて同じです。他の文字列を使用する場合、またはstyleパラメータを省略すると、スタイルは "NORMAL"に設定されます。

スタイル名略語
NORMALN
BOLDB
ITALICI
BOLD_ITALICBI

注:"monospace"フォントファミリは、スタイルパラメータに関係なく、常に"NORMAL"として表示されます。一部のデバイスは、すべてのスタイルをサポートしていません。

オプションのペイントポインタパラメータ<paint_nexp>を使用して、変更するペイントオブジェクトを指定することができます。通常、このパラメータは省略されます。詳細については、GR.COLORの高度な使い方を参照してください。

GR.TEXT.TYPEFACE {{<font_nexp>} {, <style_nexp>} {,<paint_nexp>}}

テキストの書体とスタイルを設定します。これらのパラメータは両方ともオプションです。パラメータを省略した場合のデフォルト値は1です。すべての有効な値とその意味を次の表に示します。

<font_nexp>の値は次のとおりです。

1デフォルト font
2Monospace font
3Sans-serif font
4Serif font

<style_nexp>の値は次のとおりです。

1Normal
2Bold
3Italic
4Bold and italic

このコマンドは、新しいGR.TEXT.SETFONTに似ていますが、表に記載されている4つの書体に制限されています。FONT.LOADコマンドで読み込んだフォントを指定することはできません。

注:"monospace"フォント(フォント2)は、スタイルパラメータに関係なく、常に "Normal"(スタイル1)として表示されます。 一部のデバイスは、すべてのスタイルをサポートしていません。

オプションのペイントポインタパラメータ<paint_nexp>を使用して、変更するペイントオブジェクトを指定することができます。通常、このパラメータは省略されます。詳細については、GR.COLORの高度な使い方を参照してください。

GR.TEXT.HEIGHT {<height_nvar>} {, <up_nvar>} {, <down_nvar>}

現在のフォントとテキストサイズの高さ情報を返します。すべてのパラメータはオプションです。カンマを使用して省略されたパラメータを指定します。

高さ変数<height_nvar>が存在する場合、ほとんどの言語でほとんどのテキストを印刷するために表示されるスペースのピクセル単位の高さに設定されます。これはGR.TEXT.SIZEで設定した値です。

ポーランド語の "?"などの文字は、このスペースに収まらない場合があります。 可能なすべての文字を含むのに十分な高さの行の位置は、アップ変数<up_nvar>(存在する場合)に返されます。

ダウン変数<down_nvar>が存在する場合、"descent"に設定されます。 この位置は、「y」の尾など、可能なすべての文字の最下部を含むのに十分なほど低いです。

GR.TEXT.DRAWは、文字の本文がベースラインと呼ばれる行に配置されるようにテキストを配置します。ダウンおよびアップ値はこのベースラインからのオフセットとして報告されます。<up_nvar>の値は、ベースラインより上の位置を定義するため、負の値です。<down_nvar>の値は、ポジションがベースラインを下回っているため、正の値です。高さの値はオフセットではないので、常に正の値です。ダウンアップは常に高さよりも大きいです。GR.TEXT.DRAWはテキストの位置を決めるので、文字の本文はベースラインと呼ばれる行に置かれます。ダウンおよびアップ値はこのベースラインからのオフセットとして報告されます。

時には、そこに描かれる実際のテキストとは関係なく、テキストが描かれる領域の上部と下部の実際のスクリーン位置を知りたいことがあります。この領域の下部は、GR.TEXT.DRAWのy座標にGR.TEXT.HEIGHTの下限値を加えたものです。 ほとんどのアプリケーションでは、テキスト領域の一番上は下部位置からGR.TEXT.HEIGHTの高さ値を差し引いた値なので、y + down-heightです。いくつかのアプリケーション(ポーランド語のテキストフィールドなど)では、y + upで余分な高さが必要になることがあります。


GR.TEXT.SIZE 40 
GR.TEXT.HEIGHT ht, up, dn % ht is 40 
GR.TEXT.DRAW t, x, y, "Hello, World!" 
txtBottom = y + dn 
txtTop = txtBottom -ht  % ほとんどのアプリケーションに適しています
txtTop = y + up         % 可能なすべてのテキストに対して十分高い(上が負である)

GR.TEXT.WIDTH <nvar>, <exp>

変数<nvar>の文字列(<exp>から)のピクセル幅を返します。

高度な使い方

寸法を計算するには、GR.TEXT.WIDTHGR.GET.TEXTBOUNDSの両方でテキスト文字列と一連のテキスト属性を使用します。テキスト属性はペイントオブジェクトに保持されます。文字列とペイントのソースは、<exp>パラメータのタイプによって異なります。

<exp>が<exp>の値はテキスト文字列のソースはテキスト属性のソースは
文字列式測定する文字列<exp>の値現在のペイント(最新のGR.TEXT.*設定)
数値式GR.TEXT.DRAWのオブジェクト番号GR.TEXT.DRAWの文字列(オブジェクトに保持)オブジェクトに添付されたペイント(下記の注を参照)

注:GR.TEXT.DRAWは、その時点で現在のテキスト属性を使用してテキストオブジェクトにペイントを添付します。これは、GR.RENDERがスクリーン上にテキストを表示するために使用するペイントです。 このペイントを変更すると、変更はGR.TEXT.WIDTHおよびGR.GET.TEXTBOUNDSによって返された値に反映され、次のGR.RENDERとともに画面にも表示されます。

GR.GET.TEXTBOUNDS <exp>, left, top, right, bottom

スクリーン上に描画される文字列の境界矩形を取得します。返された座標値は、境界矩形の寸法を与えますが、その位置は指定しません。

パラメータ<exp>は、GR.TEXT.WIDTHと同じ規則に従って、文字列とその文字列を測定するために使用されるテキスト属性(font,size,style)を取得します。

矩形の座標は、GR.TEXT.DRAWがテキストを0,0に置いたかのようにレポートされます。取得した値をGR.TEXT.DRAWコマンドの実際のx、y座標に追加することにより、テキストオブジェクトの実際の境界を取得します。

タイプフェイスの用語では、座標値はテキストのベースラインの始めからのオフセットです(テキストが描画される場所を定義する行の詳細については、GR.TEXT.DRAWおよびGR.TEXT.HEIGHTを参照してください)。このため、 "top"に対して返される値は常に負の数になります。

これが混乱する場合は、次の例を実行してみてください


GR.OPEN ,,,,,-1 
GR.COLOR 255,255,0,0,0 
GR.TEXT.SIZE 40 
GR.TEXT.ALIGN 1 
s$ = "This is only a test" 
GR.GET.TEXTBOUNDS s$,l,t,r,b 
PRINT l,t,r,b 
x=10 : y=50 
GR.RECT rct,l+x,t+y,r+x,b+y 
GR.TEXT.DRAW txt,x,y,s$ 
GR.RENDER 
PAUSE 5000 

GR.TEXT.DRAW <object_number_nvar>, <x_nexp>, <y_nexp>, <text_object_sexp>

テキストオブジェクト(<text_object_sexp>)を作成して表示リストに挿入します。テキストオブジェクトは、最新のカラーとテキストの準備コマンドを使用します。<object_number_nvar>は、このテキストの表示リストのオブジェクト番号を返します。このオブジェクトは、GR.RENDERコマンドが呼び出されるまで表示されません。

GR.TEXT.DRAWは、文字の本文がベースラインと呼ばれる行に配置されるようにテキストを配置します。"y"のような文字の尾はベースラインの下にあります。yの値<y_nexp>はこのベースラインの位置を設定します。

GR.TEXT.HEIGHTコマンドは、テキストを描画するために使用されるさまざまな行の位置を示します。GR.TEXT.WIDTHコマンドは、特定の文字列が描画される領域の幅を示します。GR.GET.TEXTBOUNDSコマンドは、特定のテキスト文字列に対して実際に描画される左上、上端、右端、および最下部のピクセルの位置を示します。

GR.TEXT.DRAWのGR.MODIFYパラメータは、"x","y","text"です。"text"の値は、新しいテキストを表す文字列です。

GR.BITMAP.CREATE <bitmap_ptr_nvar>, width, height

指定された幅と高さの空のビットマップを作成します。必要に応じて、指定された幅と高さが画面のサイズより大きくなることがあります。

<bitmap_ptr_nvar>変数に作成されたビットマップへのポインタを返し、他のGR.BITMAPコマンドで使用します。ビットマップを作成するのに十分なメモリがない場合、返されるビットマップポインタは-1です。 失敗の詳細については、GETERROR$()を呼び出します。

GR.BITMAP.LOAD <bitmap_ptr_nvar>, <file_name_sexp>

file_name文字列式で指定されたファイルからビットマップを作成します。他のGR.BITMAPコマンドで使用するために作成されたビットマップへのポインタを返します。ビットマップが作成されない場合、返されるビットマップポインタは-1です。失敗の詳細については、GETERROR$()を呼び出します。考えられる原因のいくつかは次のとおりです。

ビットマップイメージファイルは、"<pref base drive>/rfo-basic/data/"ディレクトリに置かれているものとします。

注:ファイル名にパスフィールドを含めることができます。たとえば、"../../Cougar.jpg"を指定すると、ベースドライブの最上位ディレクトリ(通常はSDカード)にCougar.jpgがあります。"images/Kitty.png"を指定すると、BASIC!は "/sdcard/rfo-basic/data/"のimages(d)サブディレクトリ("/sdcard/rfo-basic/data/images/Kitty.png")を参照します。

注:このコマンドでロードされるビットマップは、GR.BITMAP.DRAWINTOコマンドでは変更できません。ファイルからロードされたイメージを描画するには、まず空のビットマップを作成してから、ロードしたビットマップを空のビットマップに描画します。

GR.BITMAP.SIZE <bitmap_ptr_nexp>, width, height

<bitmap_ptr_nexp>が指すビットマップのピクセル幅と高さをwidthとheightの変数に戻します。

GR.BITMAP.SCALE <new_bitmap_ptr_nvar>, <bitmap_ptr_nexp>, width, height {, <smoothing_lexp>}

以前に読み込まれたビットマップ(<bitmap_ptr_nexp>)を指定された幅と高さに拡大縮小し、新しいビットマップ<new_bitmap_ptr_nvar>を作成します。古いビットマップはまだ存在します。削除されません。新しいビットマップを作成するのに十分なメモリがない場合、返されるビットマップポインタは-1です。 失敗の詳細については、GETERROR$()を呼び出します。

widthとheightの値を負にすると、イメージが左から右に、または逆さまに反転されます。

widthの値もheightの値もゼロであってはいけません。

オプションのスムージング論理式(<smoothing_lexp>)を使用して、スケーリングされたイメージをスムージングしないように要求します。式が偽(ゼロ)の場合、画像は平滑化されません。式がtrue(ゼロ以外)または指定されていない場合、イメージはスムージングされます。

GR.BITMAP.DELETE <bitmap_ptr_nexp>

既存のビットマップを削除します。ビットマップのメモリがシステムに返されます。

これは、ビットマップを指すグラフィックオブジェクトを破壊しません。このようなオブジェクトをGR.HIDEしないか、または表示リストから削除しないと、次のGR.RENDERコマンドからランタイムエラーが発生します。

GR.BITMAP.CROP <new_bitmap_ptr_nvar>, <source_bitmap_ptr_nexp>, <x_nexp>, <y_nexp>、<width_nexp>、<height_nexp>

<source_bitmap_ptr_nexp>で指定された既存のソースビットマップのクロップコピーを作成します。ソースビットマップは影響を受けません。長方形のセクションが新しいビットマップにコピーされます。新しいビットマップへのポインタが<new_bitmap_nvar>に返されます。新しいビットマップを作成するのに十分なメモリがない場合、返されるビットマップポインタは-1です。失敗の詳細については、GETERROR$()を呼び出します。

<x_nexp>、<y_nexp>のペアは、ソースビットマップ内でクロップを開始するポイントを指定します。<width_nexp>、<height_nexp>のペアは、切り抜く矩形領域のサイズを定義します。

GR.BITMAP.SAVE <bitmap_ptr_nvar>, <filename_sexp>{, <quality_nexp>}

指定されたビットマップをファイルに保存します。デフォルトのパスは "<pref base drive>/rfo-basic/data/"です。

ファイル名が".jpg"で終わると、ファイルはJPEGファイルとして保存されます。

ファイル名が(.pngを含む)他のファイルで終わると、ファイルはPNGファイルとして保存されます。

オプションの<quality_nexp>は、保存されたJPEGファイルの品質を指定するために使用されます。 値は0(不良)から100(非常に良い)までの範囲です。デフォルト値は50です。qualityパラメータは、常に最高品質のレベルで保存されるPNGファイルには影響しません。

注:JPEGファイルのサイズは画質によって異なります。 品質値が低いと、ファイルが小さくなります。

GR.BITMAP.DRAW <object_ptr_nvar>, <bitmap_ptr_nexp>, x , y

ビットマップを含むグラフィカルオブジェクトを作成し、そのオブジェクトをオブジェクトリストに挿入します。ビットマップは、ビットマップポインタ<bitmap_ptr_nexp>によって指定されます。ビットマップは、その左上隅が提供された(x,y)座標で描画されます。コマンドは、<object_ptr_nvar>変数にグラフィックオブジェクトの表示リストのオブジェクト番号を返します。このオブジェクトは、GR.RENDERコマンドが呼び出されるまで表示されません。

最新のGR.COLORのアルファ値は、ビットマップの透明度を決定します。

GR.BITMAP.DRAWのGR.MODIFYパラメータは、"bitmap",x","y"です。

GR.GET.BMPIXEL <bitmap_ptr_nvar>, x, y, alpha, red, green, blue

指定されたビットマップのピクセルのカラーデータを指定されたx,y座標に返します。 xとyの値は、ビットマップの長さまたは幅を超えてはいけません。

GR.BITMAP.FILL <bitmap_ptr_nexp>, <x_nexp>, <y_nexp>

ビットマップの領域内のすべての点を現在の描画色に変更します。ビットマップポインタパラメータ<bitmap_ptr_nexp>は、既存のビットマップを指定する必要があります。xおよびyパラメータ<x_nexp>および<y_nexp>は、ビットマップ内のポイント(x,y)を指定する必要があります。色付けする領域は、すべて同じ色の連結ピクセルのセットです。領域は任意の形状であってもよく、点(x,y)は領域内の任意の点であってもよいです。

このコマンドは実際のビットマップピクセルカラーを読み取ります。したがって、アンチエイリアス設定の影響を受けます。アンチエイリアスがオンの場合、色付き領域の端にあるピクセルが正しく再着色されないことがあります。

GR.BITMAP.DRAWINTO.START <bitmap_ptr_nexp>

BASIC!をビットマップ描画モードにします。

このモードで発行されたすべての描画コマンドは、直接ビットマップに描画されます。このモードで描画されたオブジェクトは、表示リストに配置されません。このモードで描画コマンドによって返されるオブジェクト番号は無効であり、GR.MODIFYなどの目的には使用しないでください。

注:GR.BITMAP.LOADコマンドでロードされたビットマップは、GR.BITMAP.DRAWINTOで変更することはできません。ファイルからロードされたイメージを描画するには、まず空のビットマップを作成してから、ロードしたビットマップを空のビットマップに描画します。

GR.BITMAP.DRAWINTO.END

ビットマップ描画モードを終了します。次の描画コマンドは、オブジェクトを表示リストに置き、画面上に描画します。描画されたビットマップを画面に表示する場合は、そのビットマップのGR.BITMAP.DRAWコマンドを発行します。

GR.PAINT.COPY {{<src_nexp>}{, <dst_nexp>}}

ソースポインタ<src_nexp>のペイントオブジェクトを宛先ポインタ<dst_next>にコピーします。

両方のパラメータはオプションです。宛先を指定する場合は、ソースを指定するかどうかにかかわらず、カンマを含める必要があります。いずれかのパラメータが省略された場合、またはその値が-1の場合、現在のペイントが使用されます。

すでに宛先ポインタにペイントがある場合、置き換えられます。 宛先ポインタが現在のペイントの場合、新しく作成されたペイントが現在のペイントになります。 このコマンドには、存在するパラメータに応じて4つの形式があります。


GR.PAINT.COPY       % 現在のペイントを複製する
GR.PAINT.COPY m     % ペイントmを現在のペイントにコピーする
GR.PAINT.COPY , n   % 現在のペイントと同じになるようにペイントnを上書きする
GR.PAINT.COPY m, n  % ペイントnを上書きしてペイントmと同じにする

GR.PAINT.GET <object_ptr_nvar>

最後に作成されたペイントオブジェクトへのポインタ(<object_ptr_nvar>)を取得します。ペイントオブジェクトの詳細については、GR.COLORのペイントを参照してください。

このポインタは、GR.MODIFYコマンドを使用して描画オブジェクトに関連付けられたペイントオブジェクトを変更するために使用できます。GR.MODIFYパラメータは"paint"です。

オブジェクトのペイント特性を変更する場合は、これらのパラメータを変更して現在のペイントオブジェクトを作成する必要があります。 例えば:


GR.COLOR 255,0,255,0,0 
GR.TEXT.SIZE 20 
GR.TEXT.ALIGN 2 
GR.PAINT.GET the_paint 
GR.MODIFY shot, "paint", the_paint 

現在のテキストサイズと配置、および色を変更します。

GR.PAINT.RESET {<nexp>}

指定したペイントをデフォルト設定に強制します。

不透明な黒 (255, 0, 0, 0)
アンチエイリアスON
スタイルFILL (0)
最小ストローク幅(0.0)

パラメータはオプションです。 パラメータを省略するか、-1に設定すると、新しい現在のペイントがデフォルト設定で作成されます。

GR.ROTATE.START angle, x, y{,<obj_nvar>}

GR.ROTATE.STARTとGR.ROTATE.ENDの間に描画されたオブジェクトは、指定された(x,y)点を中心に指定角度(度)で回転します。角度が正の場合、オブジェクトは時計回りに回転します。

オプションの<obj_nvar>には、GR.ROTATE.STARTオブジェクトの表示リストのオブジェクト番号が格納されます。配列内の回転オブジェクトをGR.NEWDLに使用する場合は、GR.ROTATE.STARTおよびGR.ROTATE.ENDオブジェクトを含める必要があります。

GR.ROTATE.STARTのGR.MODIFYパラメータは、"angle"、"x"、"y"です。

GR.ROTATE.STARTには、GR.ROTATE.ENDが続かなければなりません。そうしないと、期待した結果が得られません。

このコマンドは、グラフィックスオブジェクトをGR描画コマンドと同様に表示リストに配置しますが、何も描画しません。代わりにリストのマーカーとして働きます。レンダラーがGR.ROTATE.STARTマーカーを見ると、レンダラーはその座標系を一時的に回転させます。GR.ROTATE.ENDマーカーはレンダラーに座標系を通常に戻すように指示します。

GR.ROTATE.END {<obj_nvar>}

回転したオブジェクトの描画を終了します。このコマンドの後に作成されたオブジェクトは回転しません。

オプションの<obj_nvar>には、GR.ROTATE.ENDオブジェクトの表示リストのオブジェクト番号が含まれます。配列内の回転オブジェクトをGR.NEWDL

に使用する場合は、GR.ROTATE.STARTおよびGR.ROTATE.ENDオブジェクトを含める必要があります。

GR.CAMERA.SELECT 1|2

2台のカメラを搭載した機器の背面(1)または正面(2)カメラを選択します。デフォルトのカメラは背面(画面の反対側)のカメラです。

カメラが1つだけ存在する場合、デフォルトはそのカメラになります。たとえば、端末(Nexus 7など)にフロントカメラしかない場合は、デフォルトのカメラになります。デバイスにカメラアプリケーションがインストールされていない場合は、"This device does not have a camera.(このデバイスにはカメラがありません)"というランタイムエラーメッセージが表示されます。さらに、デバイスにカメラのタイプ(前面または背面)が選択されていない場合、ランタイムエラーメッセージが表示されます。

GR.CAMERA.SHOOT <bm_ptr_nvar>

このコマンドは、カメラの内蔵カメラのユーザーインターフェイスを呼び出して画像を撮影します。イメージは、bm_ptr数値変数が指すビットマップとしてBASIC!に返されます。カメラインタフェースがなんらかの理由で画像を撮らない場合、bm_ptrはゼロの値で返されます。

多くのデバイスカメラインタフェースは、キャプチャされた画像を日付コード化されたファイル名でメモリ内の他の場所に保存します。これらの画像は、ギャラリーアプリケーションで見つけることができます。BASIC!はこれらの無関係なファイルが作成されるのを防ぐことはできません。

注:Nexus 7などの一部の端末には、カメラインターフェイスが組み込まれていません。アフターマーケットカメラアプリケーションをインストールした場合、このコマンドを実行すると呼び出されます。カメラアプリケーションをインストールしていない場合でも、他のコマンドを使用してNexus 7(または同様のデバイス)で写真を撮ることができます。デバイスにカメラアプリケーションがインストールされていない場合は、"This device does not have a camera.(このデバイスにはカメラがありません)"というランタイムエラーメッセージが表示されます。

画像はフルカメラ解像度で撮影され、"<pref base drive>/rfo-basic/data/image.png"という100%jpgの品質で保存されます。

このコマンドは、ビットマップへのポインタ<bm_ptr_nvar>を返します。生成されたビットマップは4の倍率で縮小されます。これらの返されたビットマップからいくつかの他のビットマップが生成されることがあります。たとえば、返されたビットマップを拡大して画面に合わせる必要がある人がいます。描画したり描画したりしないビットマップは、GR.BITMAP.DELETEを使用して削除して、メモリ不足の状況を回避する必要があります。

GR.CAMERA.AUTOSHOOT <bm_ptr_nvar>{, <flash_ mode_nexp> {, focus_mode_nexp} }

コマンドが実行されるとすぐにイメージがキャプチャされます。ユーザーの操作は不要です。このコマンドは、タイムアップのない画像キャプチャには使用できません。

オプションのflash_mode数値式は、フラッシュ操作を指定します。

0オートフラッシュ
1フラッシュオンFlash On
2フラッシュオフ
3トーチ
4レッドアイ

パラメータが指定されていない場合のデフォルトは、オートフラッシュです。

オプションのfocus_mode数値式は、カメラのフォーカスを指定します。

0オートフォーカス
1固定焦点
2無限の焦点
3マクロフォーカス(クローズアップ)

パラメーターが指定されていない場合のデフォルトは、オートフォーカスです。

フォーカスモードを指定する場合は、フラッシュモードも指定する必要があります。

このコマンドは、キャプチャしたイメージをファイル "<pref base drive>/rfobasic/data/image.png"に保存します。

このコマンドは、ビットマップへのポインタ<bm_ptr_nvar>を返します。生成されたビットマップは4の倍率で縮小されます。これらの返されたビットマップからいくつかの他のビットマップが生成されることがあります。たとえば、返されたビットマップを拡大して画面に合わせる必要がある人がいます。描画したり描画したりしないビットマップは、GR.BITMAP.DELETEを使用して削除して、メモリ不足の状況を回避する必要があります。

GR.CAMERA.MANUALSHOOT <bm_ptr_nvar> {,<flash_ mode_nexp> {,focus_mode_nexp}}

このコマンドはGR.CAMERA.AUTOSHOOTによく似ていますが、ライブプレビューが画面に表示される点が異なります。ユーザーが画面をタップするまで、イメージはキャプチャされません。

GR.SCREEN.TO_BITMAP <bm_ptr_nvar>

画面の現在の内容がビットマップに配置されます。ビットマップへのポインタは、bm_ptr変数に返されます。ビットマップを作成するのに十分なメモリがない場合、返されるビットマップポインタは-1です。失敗の詳細については、GETERROR$()を呼び出します。

コマンドの特有のアンダースコアに注意してください。

このコマンドは、キャプチャしたイメージをファイル "<pref base drive>/rfobasic/data/image.png"に保存します。

このコマンドは、ビットマップへのポインタ<bm_ptr_nvar>を返します。生成されたビットマップは4の倍率で縮小されます。これらの返されたビットマップからいくつかの他のビットマップが生成されることがあります。たとえば、返されたビットマップを拡大して画面に合わせる必要がある人がいます。描画したり描画したりしないビットマップは、GR.BITMAP.DELETEを使用して削除して、メモリ不足の状況を回避する必要があります。

GR.GET.PIXEL x, y, alpha, red, green, blue

指定されたx,y座標のスクリーンピクセルのカラーデータを返します。xとyの値は、画面の幅と高さを超えてはならず、ゼロより小さくしてはいけません。

画面からピクセルを取得するには、まずBASIC!が画面からビットマップを作成する必要があります。ビットマップを作成するのに十分なメモリがない場合、 "out-of-memory(メモリ不足)"ランタイムエラーが発生します。

GR.SAVE <filename_sexp> {,<quality_nexp>}

現在の画面をファイルに保存します。デフォルトのパスは "<pref base drive>/rfo-basic/data/"です。

ファイル名が".jpg"で終わると、ファイルはJPEGファイルとして保存されます。

ファイル名が(.pngを含む)他のファイルで終わると、ファイルはPNGファイルとして保存されます。

オプションの<quality_nexp>は、保存されたJPEGファイルの品質を指定するために使用されます。 値は0(不良)から100(非常に良い)までの範囲です。デフォルト値は50です。qualityパラメータは、常に最高品質のレベルで保存されるPNGファイルには影響しません。

注:JPEGファイルのサイズは画質によって異なります。 品質値が低いと、ファイルが小さくなります。

GR.GET.TYPE <object_ptr_nexp>, <type_svar>

指定された表示リストオブジェクトの型を取得します。タイプは、オブジェクトを作成したコマンドの名前と一致する文字列です。"point"、"circle"、"rect"などです。タイプの完全なリストについては、GR.MODIFYの表を参照してください。

<object_ptr_nexp>パラメータで有効な表示リストオブジェクトが指定されていない場合、返される型は空の文字列""です。エラーに関する情報を得るには、GETERROR$()関数を呼び出すことができます。

GR.GET.PARAMS <object_ptr_nexp>, <param_array$[]>

指定された表示リストオブジェクトの変更可能なパラメータを取得します。パラメータ文字列は、特別な順序で<param_array $ []>に返されます。配列はインデックスなしで指定されます。配列が存在する場合は上書きされます。それ以外の場合は、新しい配列が作成されます。結果は常に1次元配列です。

パラメータの完全な一覧については、GR.MODIFYの表を参照してください。

GR.GET.POSITION <object_ptr_nexp>, x, y

指定された表示リストオブジェクトの現在のx、y位置を取得します。オブジェクトが矩形パラメータ(left,top,right,bottom)で指定された場合、leftにはxが、topにはyが返されます。Lineオブジェクトの場合、x1およびy1パラメータが返されます。

GR.MOVE <object_ptr_nexp> {{, dx}{, dy}}

グラフィックスオブジェクトを量dxとdyだけ移動します。オブジェクトがグループの場合、グループ内のすべてのグラフィックオブジェクトが移動されます。dxおよびdyパラメータはオプションです。省略した場合のデフォルトは0です。

GR.GET.VALUE <object_ptr_nexp> {, <tag_sexp>, <value_nvar | value_svar>}...

表示リストオブジェクト<object_ptr_nvar>の<tag_sexp>("left","radius"など)というパラメータの値が変数<value_nvar>または<value_svar>に返されます。このコマンドは一度に1つのオブジェクトからのみ値を返すことができますが、必要な数だけタグ/変数のペアをリストすることができます。

ほとんどのパラメータは数値です。GR.TEXT.DRAWの"text"パラメータのみが文字列varに返されます。各オブジェクトのパラメータは、このマニュアルのコマンドの説明とともに与えられています。パラメータの完全な一覧については、GR.MODIFYの表を参照してください。

GR.MODIFY <object_ptr_nexp> {, <tag_sexp>, <value_nexp | value_sexp>}...

表示リストオブジェクト<object_ptr_nvar>の<tag_sexp>という名前のパラメータの値が、式<value_nexp>または<value_sexp>の値に変更されます。このコマンドは、一度に1つのオブジェクトのみを変更できますが、必要な数のタグ/値のペアをリストできます。

このコマンドを使用すると、表示リスト内の任意のオブジェクトのパラメータを変更できます。変更可能なパラメータは、このマニュアルのコマンドの説明に記載されています。さらに、"paint"と "alpha"の2つの汎用パラメータがあります(詳細は下記参照)。指定されたオブジェクトに有効なパラメータ名を指定する必要があります。

GR.RENDERコマンドが実行されるまで、GR.MODIFYコマンドの結果は観察されません。

タイプ位置1(数値)位置2(数値)角度/半径(数値)特殊ペイント(リストポインタ)透過度(数値)
arclefttoprightbottomstart_angle
sweep_angle
fill_modepaintalpha
bitmapxybitmappaintalpha
circlexyradiuspaintalpha
linex1y1x2y2paintalpha
ovallefttoprightbottompaintalpha
pixelsxypaintalpha
pointxypaintalpha
polyxylistpaintalpha
rectlefttoprightbottompaintalpha
textxytextpaintalpha
cliplefttoprightbottomROpaintalpha
grouplistpaintalpha
rotatexyanglepaintalpha

表の注釈:

たとえば、ビットマップオブジェクトがGR.BITMAP.DRAW BM_ptr,galaxy_ptr,400,120で作成されたとします。

汎用パラメータ

グラフィカルオブジェクトを作成すると、すべてのグラフィックス設定(色、ストローク、テキスト設定など)がペイントオブジェクトに取り込まれます。"PAINT"パラメータを使用してペイントオブジェクトを置き換え、必要なグラフィックス設定を変更することができます。詳細は、GR.PAINT.GETコマンドの説明を参照してください。

通常、グラフィカルオブジェクトは最新のGR.COLORコマンドからアルファチャンネル値(透明度)を取得します。"alpha"パラメータは0から255までの任意の値に変更できます。"alpha"を256に設定すると、BASIC!は最新のカラー値からアルファを使用するように指示します。

たとえば、GR.MODIFYでアルファを変更するだけで、オブジェクトをゆっくりと表示して消滅させることができます。


DO
 FOR a = 1 TO 255 STEP 10
  GR.MODIFY object,"alpha",a
  GR.RENDER
  PAUSE 250
 NEXT a
 FOR a = 255 TO 1 STEP -10
  GR.MODIFY object,"alpha",a
  GR.RENDER
  PAUSE 250
 NEXT a
UNTIL 0

GR.CLIP <object_ptr_nexp>, <left_nexp>, <top_nexp>, <right_nexp>, <bottom_nexp>{, <RO_nexp>}

このコマンドが発行された後に描画されるオブジェクトは、"left,top,right,bottom"の数式で指定されたクリップ矩形の境界(クリップ)内にのみ描画されます。

最後のパラメータはRegion Operator<RO_nexp>です。 Region Operatorは、このクリップが画面やビットマップに描画している他のすべてとどのように作用するかを規定しています。複数のGR.CLIPコマンドを発行すると、ROは現在のGR.CLIP矩形と前のGR.CLIP矩形との間の相互作用を規定します。ROの値は次のとおりです。

0交差
1
2置換
3逆差
4結合
5XOR

具体的な作用はマニュアルを見てください!画像つきでわかりやすく載ってます。

Region Operatorパラメーターはオプションです。省略された場合、デフォルトのアクションは交差です。

GR.CLIPは表示リストオブジェクトです。GR.MODIFYで変更できます。変更パラメータは、"left","top","right","bottom"および"RO"です。

GR.CLIPオブジェクトでは、GR.SHOWコマンドとGR.HIDEコマンドを使用できます。

GR.NEWDL <dl_array[{<start>,<length>}]>

既存の表示リストを、オブジェクト番号の数値配列(dl_array[])または配列セグメント(dl_array[start,length])から読み取った新しい表示リストに置き換えます。 配列内のゼロ値は、表示リストのnullオブジェクトとして扱われます。 Nullオブジェクトは描画されず、実行時エラーも発生しません。

詳細な説明については、GR.RENDERの「表示リスト」サブトピックを参照してください。

このコマンドの実際の例については、サンプル・プログラム・ファイルf24_newdlを参照してください。

GR.GETDL <dl_array[]> {, <keep_all_objects_lexp> }

現在の表示リストを数値配列<dl_array[]>に書き込みます。配列はインデックスなしで指定されます。配列が存在する場合は上書きされます。それ以外の場合は、新しい配列が作成されます。結果は常に1次元配列です。表示リストが空の場合、配列には何も表示されない項目が1つあります。

デフォルトでは、GR.HIDEで隠されたオブジェクトは返された配列に含まれません。隠しオブジェクトを含むすべてのオブジェクトを取得するには、オプションのkeep_all_objectsフラグをtrue(0以外の値)に設定します。

AUDIO.LOAD <aft_nvar>, <filename_sexp>

オーディオファイルテーブル(AFT)に音楽ファイルまたはインターネットストリームを読み込みます。AFTインデックスは<aft_nvar>に戻されます。ファイルまたはストリームをロードできない場合、<aft_nvar>は0に設定されます。プログラムはAFTインデックスをテストして、オーディオがロードされたかどうかを調べる必要があります。AFTインデックスが0の場合は、GETERROR$()関数を呼び出してエラーに関する情報を取得できます。別のAUDIOコマンドでインデックス0を使用すると、実行時エラーが発生します。

音楽ファイルを読み込むには、オプションのパスとファイル名を指定します。例えば:

インターネットストリームを読み込むには、完全なURLを指定します。

BASIC!は音楽ファイルを再生するためにAndroid Media Playerインターフェースを使用します。このインターフェースはAndroidの中で最も安定した部分ではありません。それは時にはそれが何をしているのか混乱します。これにより、ランダムな「強制終了」イベントが発生する可能性があります。これらのイベントはまれですが、発生します。

オーディオファイルの種類

再生できるファイルの種類は、お使いのデバイスと実行されているAndroidのバージョンによって異なります。現在のリストについては、Androidのドキュメントを確認してください。部分的な要約があります。

Androidバージョンで再生されるオーディオファイルの種類

AUDIO.PLAY <aft_nexp>

<aft_nexp>が指すオーディオファイルテーブルからファイルを選択し、再生を開始します。このコマンドを実行すると、すでにオーディオファイルが再生されていてはいけません。再生中のファイルがある場合、まずaudio.stopを実行します。

プログラムの実行が停止すると、音楽の再生が停止します。単に音楽ファイルを再生して再生を続けるには、プログラムを実行したままにしておきます。次の無限ループは次のことを実現します。

AUDIO.LOAD ptr, "my_music.mp3" AUDIO.PLAY ptr DO PAUSE 5000 UNTIL 0

AUDIO.STOP

AUDIO.STOPは現在再生中の音楽ファイルを終了します。ファイルが再生されていない場合このコマンドは無視されます。各AUDIO.PLAYコマンドの前には、AUDIO.STOPコマンドを置くことをお勧めします。

AUDIO.PAUSE

このファイルの次のAUDIO.PLAYが、再生が一時停止した時点で再生を再開することを除いて、一時停止は停止に似ています。

AUDIO.LOOP

現在再生中のファイルがファイルの終わりに達すると、ファイルはファイルの先頭から再生を再開します。このコマンドが実行されるとき、現在再生中のファイルが存在する必要があります。

AUDIO.VOLUME <left_nexp>, <right_nexp>

左右のステレオチャンネルの音量を変更します。このコマンドが実行されるとき、現在再生中のファイルが存在する必要があります。

値は0.0(最小)~1.0(最大)の範囲でなければなりません。人間の耳は音の変化のレベルを対数スケールで知覚します。耳は10dbの変化を2倍の大きさで知覚します。20dbの変更は4倍の大きさになります。

1dbの変化は約0.89であろうと思われます。ボリュームコントロールを実装する1つの方法は、1dbレベルの変更を伴うボリュームテーブルを設定することです。次のコードは16ステップテーブルを作成します。


DIM volume[16]
x =1
volume [1] = x
FOR i = 2 TO 16
 x = x * 0.89
 volume [i] = x
NEXT i

あなたのコードは、AUDIO.VOLUMEコマンドで使用するためにテーブルからボリューム値を選択することができます。一番大きな音量はvolume[1]になります。

AUDIO.POSITION.CURRENT <nvar>

現在再生中のファイルの現在の位置(ミリ秒)が<nvar>に返されます。

AUDIO.POSITION.SEEK <nexp>

現在再生中のファイルの再生位置をミリ秒単位で表した<nexp>に移動します。

AUDIO.LENGTH <length_nvar>, <aft_nexp>

<aft_nexp>が指すオーディオファイルテーブル内のファイルの合計長を返します。ミリ秒単位の長さが<length_nvar>に返されます。

AUDIO.RELEASE <aft_nexp>

<aft_nexp>が指すオーディオファイルテーブルのファイルで使用されているリソースを解放します。ファイルは現在再生中であってはなりません。指定したファイルは再生できなくなります。

AUDIO.ISDONE <lvar>

現在の再生ファイルがまだ再生されている場合、<lvar>は0に設定されます。それ以外の場合は1に設定されます。これは、プレイリスト内の次のファイルの再生を開始するタイミングを決定するために使用できます。


AUDIO.PLAY f[x]
DO
 AUDIO.ISDONE isdone
 PAUSE 1000
UNTIL isdone

AUDIO.RECORD.START <fn_svar>

マイクをオーディオソースとして使用してオーディオ録音を開始します。録音は指定されたファイルに保存されます。ファイルの拡張子は.3GPでなければなりません。AUDIO.RECORD.STOPコマンドが発行されるまで、録音は続行されます。

AUDIO.RECORD.STOP

以前にAUDIO.RECORD.STARTで開始したオーディオ録音を停止します。

SOUNDPOOL.OPEN <MaxStreams_nexp>

MaxStreams式は、一度に再生できるSoundpoolストリームの数を指定します。再生するストリームの数がこの値を超えると、最も低い優先順位のストリームが終了します。

注意:AUDIO.PLAYで再生されるストリームは、Soundpoolストリームとしてカウントされません。

SoundPoolは、プリロードされ、瞬間再生の準備ができている短いサウンドビットの集合です。SoundPoolのサウンドビットは、他のサウンドが再生されている間、または再生中のサウンドファイルがAUDIO.PLAYの手段で再生されている間に再生できます。ゲームでは、AUDIO.PLAYファイルはバックグラウンドミュージック、SoundPoolサウンドは効果音(Bang、Pow、Screechなど)になります。

SOUNDPOOL.LOAD <soundID_nvar>, <file_path_sexp>

<file_path_sexp>で指定されたファイルがロードされます。そのサウンドIDは<soundID_nvar>に返されます。サウンドIDは、サウンドを再生したり、サウンドをアンロードするために使用されます。何らかの理由でファイルがロードされなかった場合、サウンドIDはゼロとして返されます。

デフォルトのファイルパスは "sdcard/rfo-basic/data/"です。

注:サウンドをロードするのに数百ミリ秒かかります。ロードコマンドの直後にサウンドを再生する場合は、ロード後に"PAUSE 500"ステートメントを挿入します。

SOUNDPOOL.UNLOAD <soundID_nexp>

指定されたロードされたサウンドが破棄されます。

SOUNDPOOL.PLAY <streamID_nvar>, <soundID_nexp>, <rightVolume_nexp>, <leftVolume_nexp>, <priority_nexp>, <loop_nexp>, <rate_nexp>

指定したサウンドIDを再生します

ストリームIDは<streamID_nvar>に返されます。ストリームが開始されなかった場合、返される値は0になります。ストリームIDは、ストリームの一時停止、再開、および停止に使用されます。また、ストリームの変更コマンド(SOUNDPOOL.SETRATESOUNDPOOL.SETVOLUMESOUNDPOOL.SETPRIORITYSOUNDPOOL.SETLOOP)でも使用されます。

左右の音量値は、0~0.99の範囲内で、ゼロがサイレントでなければなりません。

優先順位<priority_nexp>は正の値またはゼロです。最低優先順位はゼロです。

ループ値<loop_nexp>に-1が設定された場合、再生ストリームを永遠にループします。 -1以外の値は、ストリームが再生される回数を指定します。値1はストリームを2回再生します。

レート値<rate_nexp>は、再生中のストリームの再生レートを変更します。通常のレートは1です。最小レート(遅い)は0.5です。最大レート(高速)は1.85です。

SOUNDPOOL.SETVOLUME <streamID_nexp>, <leftVolume_nexp>, <rightVolume_nexp>

再生中のストリームの音量を変更します。

左右の音量値は、0~0.99の範囲内で、ゼロがサイレントです。

SOUNDPOOL.SETRATE <streamID_nexp>, <rate_nexp>

再生中のストリームの再生レートを変更します。

通常のレートは1です。最小レート(遅い)は0.5です。最大レート(高速)は1.85です。

SOUNDPOOL.SETPRIORITY <streamID_nexp>, <priority_nexp>

再生中のストリームの優先度を変更します。

最低優先順位はゼロです。

SOUNDPOOL.PAUSE <streamID_nexp>

指定されたストリームの再生を一時停止します。ストリームIDがゼロの場合、すべてのストリームが一時停止されます。

SOUNDPOOL.RESUME <streamID_nexp>

指定されたストリームの再生を再開します。ストリームIDがゼロの場合、すべてのストリームが再開されます。

SOUNDPOOL.STOP <streamID_nexp>

指定されたストリームの再生を停止します。

SOUNDPOOL.RELEASE

SoundPoolを閉じ、すべてのリソースを解放します。SOUNDPOOL.OPENを呼び出して新しいSoundPoolを開くことができます。SOUNDPOOL.RELEASEは、プログラムの実行が終了すると自動的に呼び出されます。

GPS.OPEN {{<status_nvar>},{<time_nexp>},{<distance_nexp>}}

GPSハードウェアに接続し、位置情報の報告を開始します。このコマンドは、他のGPSコマンドを使用する前に発行する必要があります。

このコマンドを使用する前に、Android設定アプリケーションでGPSが有効になっていることを確認してください。

3つのパラメータはすべてオプションです。カンマを使用して不足しているパラメータを示します。このパラメータは、高度な使用に使用できます。このコマンドを使用する最も一般的な方法は、単にGPS.OPENです。

ステータス戻り変数<status_nvar>を指定すると、オープンが成功すると1.0(TRUE)に、オープンに失敗すると0.0(FALSE)に設定されます。オープンに失敗した場合は、GETERROR$()関数から失敗に関する情報を得ることができます。

時間間隔式<time_nexp>は、位置更新の間の最小時間を設定します。時間はミリ秒単位です。間隔を設定しないと、Androidデバイスで許可される最小値がデフォルト設定されます。これは通常1秒です。注:バッテリー使用量を減らすために、最低5分の間隔をお勧めします。

距離パラメータ<distance_nexp>を指定した場合は、位置更新間の最小距離をメートル単位で設定する数値式です。つまり、デバイスが少なくとも最小距離の設定まで移動するまで、プログラムは場所の変更を通知されません。距離を設定しないと、検出される可能性がある場所の変更がすべて報告されます。

このコマンドは、最初に「最後の既知の場所」を取得しようとします。GPSハードウェアが最後の既知の場所を報告しない場合、BASIC!はネットワークロケーションサービスから1つを取得しようとします。発信元がいずれも提供できない場合、位置情報は空のままになります。 GPSハードウェアが現在の位置情報の報告を開始する前にGPSコマンドを使用して位置情報を取得すると、この「最後の既知の位置」データが取得されます。最後に知られている場所は古く、何時間も何日も経っている可能性がありますので、役に立たないかもしれません。

GPS.CLOSE

GPSハードウェアから切断し、位置レポートを停止します。BASIC!プログラムを停止すると、GPSは自動的に閉じられます。GPSプログラムの実行中にHOMEキーをタップすると、GPSはオフになりません。

GPS.STATUS {{<status_var>}, {<infix_nvar>},{inview_nvar}, {<sat_list_nexp>}}

GPSステータスレポートからデータを返します。 パラメータはすべてオプションです。カンマを使用して省略されたパラメータを指定します。

この種類のレポートには、最後のGPSイベントのタイプと、そのイベントが発生したときにGPSハードウェアによって検出されたサテライトのリストが含まれています。便宜上、このコマンドはサテライトリストを解析して、検出されたサテライトの数("in view")と最後のロケーションフィックスで使用されたサテライトの数("in fix")を報告します。

GPSステータスレポートはタイムスタンプされておらず、プログラムに報告された最初のイベントは失効している可能性があります。 GPSハードウェアが現在のロケーションフィックスを取得する時期を判断するために、最初のステータスレポートからのデータだけに依存しないでください。

<status_var>:この変数は、指定された場合、最後に発生したGPSイベントのタイプを返します。 数値変数を指定すると、イベントタイプは数値として報告されます。文字列変数の場合、イベントタイプは英語のイベント名として報告されます。

イベント番号イベント名意味
1Started/td>PSシステムが起動しましたが、場所は固定されていません
2StoppedGPSシステムが停止しました
3First FixGPSシステムは始動以来最初の位置修正を受けています
4UpdatedGPSシステムがその位置データを更新しました
  • サテライトリストはバンドルポインタのリストです。GPSシステムがGPSステータスを報告するとき、それは検出できる衛星から収集されたデータを提供します。各衛星のデータはバンドルされています。サテライトリストには、すべてのサテライトデータバンドルへのポインタがあります。他のバンドルポインタと同様に、これらのポインタを任意のバンドルコマンドで使用することができます。

    既存のリストを提供する場合、リスト内に既に存在するバンドルは、識別擬似乱数(PRN)を除いてクリアされます。リスト内の他のものは破棄されます。その後、新しい衛星データが衛星バンドルに書き込まれます。これは、失われて取り戻された衛星が衛星バンドル内に記憶されるように行われますが、失効したデータは保持されません。

    完全なデータを持つサテライトバンドルの数は、<inview_var>の値と一致します。これらのバンドルが最初にリストされます。現在表示されていないサテライトのクリアバンドルはリストの最後にあります。

    各サテライトバンドルには5つのキーと値のペアがあります。すべての値は数値です。"infix"の値は論理(ブール)として解釈されます。

    キー
    prn識別のために衛星に割り当てられた擬似ランダム番号
    elevation高度(度)
    azimuth方位角
    snr信号対雑音比:信号強度の尺度
    infixサテライトのデータが最後のロケーション修正で使用された場合はTRUE(非ゼロ)、そうでない場合はFALSE(0.0)

    これは、両方の種類のGPSデータから情報を返す唯一のGPSコマンドです。<count_nvar>で返された衛星カウントは位置データレポートから得られ、衛星リストに返された衛星リストはGPSステータスレポートから取得されます。報告書間で何も変わらない場合、infixのTRUEを設定した衛星の数は衛星の計数値と同じですが、この条件は保証されません。

    衛星カウント値は、GPS.LOCATIONコマンドによっても返されます。 サテライトリストは、GPS.STATUSコマンドによっても返されたり更新されたりします。このコマンドであるGPS.SATELLITESは、下位互換性と利便性のために保持されています。

    たとえば、最新のGPSステータスレポートにPRN 4,7、および29の3つの衛星のデータがあるとします。

    
    GPS.OPEN sts 
    GPS.STATUS , , inView, sats 
    DEBUG.DUMP.LIST sats  % 7.0,29.0,4.0を表示することがあります
    

    GPS.OPENの後に適切な遅延があり、デバッグが有効になっていると仮定します。別のGPSステータスレポートは、衛星4,7、および8からのデータを報告することがあります。リストダンプは、7.0,4.0,8.0,29.0と表示されることがあります。 現在表示されていないため、29.0が最後になることを除いて、結果は予測できません。 いずれの場合も、inViewの値は3.0です。

    PRN 4の衛星バンドルのDEBUG.DUMP.BUNDLEは次のように表示されます。

    
    Dumping Bundle 11 
    prn: 4.0 
    snr: 17.0 
    infix: 0.0 
    elevation: 25.0 
    azimuth: 312.0 
    

    データレポートには、GPSステータスとロケーションデータの2種類があります。 彼らは同時に報告されないので、重複する情報が一致するという保証はありません。 例えば、ロケーションデータレポートは、最新のロケーションフィックスで使用された衛星のカウントを含む。 GPSステータスレポートから同じ情報を得ることができます。 レポート間で検出された衛星の数が変化する場合、2つの数値は一致しません。

    GPS.LOCATION {{<time_nvar>}, {<prov_svar>}, {<count_nvar}, {<acc_nvar>}, {<lat_nvar>}, {<long_nvar>}, {<alt_nvar>}, {<bear_nvar>}, {<speed_nvar>}}

    単一のGPS位置レポートからデータを返します。GPS.SATELLITESコマンドのサテライトリストを返さないことを除いて、以下のすべての個々のGPS位置コンポーネントコマンドによって提供されるすべてのデータを返します。

    パラメータはすべてオプションです。カンマを使用して欠落しているパラメータを示します。すべてのパラメータは変数名であるため、パラメータが指定されていない場合、対応するデータは返されません。

    パラメータは次のとおりです。

    データレポートには、GPSステータスとロケーションデータの2種類があります。 彼らは同時に報告されないので、重複する情報が一致するという保証はありません。 例えば、ロケーションデータレポートは、最新のロケーションフィックスで使用された衛星のカウントを含む。 GPSステータスレポートから同じ情報を得ることができます。 レポート間で検出された衛星の数が変化する場合、2つの数値は一致しません。

    ロケーションレポートの各要素を読み取るための個別のコマンドがあります。 別々のGPSコマンドを使用して位置データの異なるコンポーネントを読み取る場合、異なるコンポーネントが同じ位置レポートから来たものかどうかはわかりません。 一貫性のあるデータを確認するには、単一のGPS.LOCATIONコマンドからすべてのロケーションコンポーネントを取得します。

    GPS.TIME <nvar>

    "the epoch"(1970年1月1日、UTC)以降の最後のGPS修正時刻をミリ秒単位で返します。

    GPS.PROVIDER <svar>

    <svar>内のロケーションプロバイダの名前を返します。通常これは "gps"です。初めて位置情報を読み取るときには、GPSハードウェアまたはネットワーク位置情報サービスのいずれかに由来する可能性のある最後の既知の場所が表示されます。ネットワークから来た場合、このコマンドは"network"を返します。いずれのプロバイダも最後の既知の場所を報告しなかった場合、プロバイダ<svar>は空の文字列""です。

    GPS.SATELLITES {{<count_nvar>}, {<sat_list_nexp>}}

    最後のGPS修正に使用された衛星の数とGPSハードウェアに認識されている衛星のリストを返します。

    両方のパラメータはオプションです。<count_nvar>を省略して<sat_list_nexp>を使用する場合は、カンマを使用してください。

    数値変数<count_nvar>を指定すると、最新の位置データに使用されたサテライトの数に設定されます。ロケーションレポートが衛星カウントを提供しなかった場合、<count_nvar>は-1に設定されます。

    サテライト・リスト・ポインタ式<sat_list_nexp>の説明については、上記のGPS.STATUSコマンドの<sat_list_nexp>パラメータを参照してください。

    GPS.ACCURACY <nvar>

    <nvar>の精度レベルを返します。非ゼロの場合、これは報告された場所の不確かさの推定値で、メートル単位で測定されます。ゼロの値は、場所が不明であることを意味します。

    GPS.LATITUDE <nvar>

    <nvar>の緯度を小数値で返します。

    GPS.LONGITUDE <nvar>

    <nvar>の経度を10進数で返します。

    GPS.ALTITUDE <nvar>

    <nvar>で標高をメートルで返します。

    GPS.BEARING <nvar>

    <nvar>の方位角で方位を返します。

    GPS.SPEED <nvar>

    <nvar>の速度を毎秒メートルで返します。

    SENSORS.LIST <sensor_array$[]>

    Androidデバイスで利用可能なセンサーに関する情報を<sensor_array $ []>パラメーターに書き込みます。配列が存在する場合は上書きされます。それ以外の場合は、新しい配列が作成されます。結果は常に1次元配列です。

    配列要素には、使用可能なセンサーの名前とタイプが含まれています。例えば、1つの要素は"Gyroscope,Type=4"のようになります。次のプログラムは、センサーリストの要素を出力します。

    
    SENSORS.LIST sensorarray$[] 
    ARRAY.LENGTH size, sensorarray$[] 
    FOR index = 1 TO size 
    PRINT sensorarray$[ index ] 
    NEXT index 
    END 
    

    Androidデバイスには、いくつかのタイプのセンサーがあります。 現在、Androidの事前定義されたセンサーは次のとおりです。

    センサの名称タイプ ノート
    Accelerometer1API 3 (Cupcake)
    Magnetic Field2API 3
    Orientation3API 3, API 8で廃止予定
    Gyroscope4API 3
    Light5API 3
    Pressure6API 3
    Temperature7API 3, API 14で廃止予定
    Proximity8API 3
    Gravity9API 9 (Gingerbread)
    Linear Acceleration10API 9
    Rotation Vector11API 9
    Relative Humidity12API 14 (Ice Cream Sandwich)
    Ambient Temperature13API 14
    Uncalibrated Magnetic Field14API 18 (Jellybean MR2)
    Game Rotation Vector15As of API 18
    Uncalibrated Gyroscope16API 18
    Significant Motion17API 18
    Step Detector18API 19 (KitKat)
    Step Counter19API 19
    Geomagnetic Rotation Vector20API 19

    これらのセンサーの(ほとんどの)詳細については、Androidのセンサーイベント(http://developer.android.com/reference/android/hardware/SensorEvent.html)のWebページを参照してください。

    すべてのAndroidデバイスにこれらのセンサーがすべて搭載されているわけではありません。一部のAndroid搭載端末にはこれらのセンサーがない場合があります。 BASIC!コマンドのSENSORS.LISTは、特定のデバイスで使用可能なセンサーのインベントリを提供するために使用できます。

    新しいデバイスの中には、現在BASIC!でサポートされていないセンサーがあるものもあります。これらのセンサーは、"Unknown、Type = NN"("NN"がセンサータイプ番号)として報告されます。

    SENSORS.OPEN <type_nexp>{:<delay_nexp>}{, <type_nexp>{:<delay_nexp>}, ...}

    読み取り用センサーのリストを開きます。パラメータリストは、センサをサンプリングする際の遅延を指定するコロン(':')と数字(0,1,2,3)の後に、オープンするセンサのタイプ番号です。3がデフォルト(最も遅い)です。

    センサのタイプ番号についてはSENSORS.LISTの表を参照してください。

    下記の表は、レート値が意味するものの一般的な考え方を示しています。遅延値はセンサへの「示唆」のみであり、実際の遅延を変更する可能性があり、すべてのセンサには適用されません。 より速い設定では、より多くのバッテリーを使います。

    名前典型的な遅延典型的な使用法
    3>Normal200 msデフォルト:画面の向きの変更に適しています
    2/td> 60 msユーザーインターフェイスに適したレート
    1/td>Game 20 msゲームプレイに適したレート
    0/td>Fastest0 msできるだけ早くサンプリング

    例:

    
    SENSORS.OPEN 1:1, 3  % 加速度センサーをGameレートで、オリエンテーションセンサーを通常レートでモニターします。
    

    このコマンドは、SENSORS.READコマンドを発行する前に実行する必要があります。実際に読み取る必要のあるセンサーのみを開く必要があります。開いた各センサーは、バッテリの消費量とバックグラウンドCPUの使用量を増加させます。

    BASIC!では、コロン文字を使用して1行に複数のコマンドを区切ります。このコマンドでコロンを使用すると、その機能と競合するため、両方の機能を併用する場合は注意が必要です。

    このコマンドの後に行にコロンを置くと、プリプロセッサはコロンがコマンドの区切りではなくコマンドの一部であるとみなします。SENSORS.OPENコマンドは、1行に単独でなければなりません。または、複数コマンド行の最後に置く必要があります。

    SENSORS.READ sensor_type_nexp, p1_nvar, p2_nvar, p3_nvar

    このコマンドは、sensor_typeパラメータで指定されたセンサから最新の値を返します。戻された値は、p1、p2、およびp3パラメーターに入れられます。これらのパラメータの意味は、読み取られるセンサに依存します。すべてのセンサーが3つのパラメーター値すべてを返すわけではありません。そのような場合、未使用のパラメータ値はゼロに設定されます。これらのパラメータの意味については、AndroidのSensor Event Webページを参照してください。

    SENSORS.CLOSE

    以前に開いたセンサーを閉じます。センサーのハードウェアがオフになり、バッテリーの放電を防ぎます。センサーは、プログラムの実行がBACKキーまたはMenu-> Stopで停止すると自動的に閉じられます。

    SYSTEM.OPEN

    システムコマンドを実行するシェルを開きます。作業ディレクトリは"rfo-basic"に設定されています。作業ディレクトリが存在しない場合は作成されます。SU.OPENまたはSYSTEM.OPENのいずれかでコマンドシェルを開くと、開いているものを最初に閉じずにどちらのタイプのものも開くことができません。

    SYSTEM.WRITE <sexp>

    システムコマンドを実行します。

    SYSTEM.READ.READY <nvar>

    SYSTEM.WRITEコマンドの応答をテストします。結果がゼロでない場合は、SYSTEM.READ.LINEが使用可能です。

    すべてのシステムコマンドが応答を返すわけではありません。数秒後に応答が返ってこない場合は、応答がないとみなされます。

    SYSTEM.READ.LINE <svar>

    次の使用可能な応答行を文字列変数に配置します。

    SYSTEM.CLOSE

    システムシェルモードを終了します。

    SU.OPEN

    スーパーユーザーのアクセス権を要求します。付与されている場合は、シェルを開いてシステムコマンドを実行します。作業ディレクトリは"/"に設定されています。SU.OPENまたはSYSTEM.OPENのいずれかでコマンドシェルを開くと、開いているものを最初に閉じずにどちらのタイプのものも開くことができません。

    SU.WRITE <sexp>

    スーパーユーザーコマンドを実行します。

    SU.READ.READY <nvar>

    SU.WRITEコマンドからの応答をテストします。結果がゼロでない場合は、SU.READ.LINEが使用可能です。

    すべてのスーパーユーザーコマンドが応答を返すわけではありません。数秒後に応答が返ってこない場合は、応答がないとみなされます。

    SU.READ.LINE <svar>

    次の使用可能な応答行を文字列変数に配置します。

    SU.CLOSE

    スーパーユーザーモードを終了します。

    APP.BROADCAST <action_sexp>, <data_uri_sexp>, <package_sexp>, <component_sexp>, <mime_type_sexp>, <categories_sexp>, <extras_bptr_nexp>, <flags_nexp>

    システムメッセージを作成し、デバイス上の他のアプリケーションにブロードキャストします。メッセージはインテントと呼ばれます。インテントは、インテントフィルタにより正しいアプリケーションで受信されます。

    すべてのパラメータはオプションです。カンマを使用して省略されたパラメータを指定します。パラメータの定義については、下記のAPP.STARTを参照してください。

    ブロードキャストを受信できるアプリがない場合、ブロードキャストは無視されます。GETERROR$()関数を呼び出すだけで、この条件を検出できます。ブロードキャストを受信するアプリケーションが利用可能な場合、GETERROR$()は "No error"を返します。

    APP.START <action_sexp>, <data_uri_sexp>, <package_sexp>, <component_sexp>, <mime_type_sexp>, <categories_sexp>, <extras_bptr_nexp>, <flags_nexp>

    インテントと呼ばれるシステムにメッセージを送信し、特定のアプリケーションまたは開始するアプリケーションのタイプを要求します。複数のアプリがリクエストを処理できる場合、システムはあなたのためにチューザを設定します。

    要求を処理できるアプリがない場合、インテントは無視されます。GETERROR$()関数を呼び出すだけで、この条件を検出できます。アプリを起動できる場合、GETERROR$()は"No error"を返します。

    すべてのパラメータはオプションです。カンマを使用して、省略されたパラメータを指定します。1つのコマンドですべてのパラメータを使用する必要はほとんどありません。

    最初の6つのパラメータは、アクション、データURI、パッケージ名、コンポーネント名、MIMEタイプ、およびコンマで区切られたカテゴリのリスト(コンマは文字列式の一部です)の文字列式です。

    最後の2つのパラメータは数値式です。1つは、メッセージに添付されている "extras"を含むバンドルへのポインタです。もう1つは、1つ以上のフラグ値を表す単一の数値です。

    パラメータ値については、起動するAndroidシステムとアプリケーションのドキュメントを参照してください。

    パラメータ意味amコマンド相当
    actionAndroidまたはターゲットアプリケーションによって定義されたアクション-a
    dataURIデータへのデータまたはパス。 BASICはこの文字列をURIエンコードします-d
    package nameターゲットアプリケーションのパッケージ名(IDとも呼ばれる)-n [Note 2]
    component nameターゲットアプリケーション内のコンポーネントの名前-n [Note 2]
    MIME typeデータのMIMEタイプ、データURIなしで使用可能-t
    categoriesコンマ区切りのIntentカテゴリのリスト-c [Note 3]
    "extras" bundle ptr"extras"値を含む既存のバンドルへのポインタ-e [Note 4]
    flags1つまたは複数のフラグの数値の合計-f

    Notes:

    1. アクション、タイプ、カテゴリ、フラグには、Android定義の定数ではなく文字列または数値を使用する必要があります。たとえば、文字列 "android.intent.action.MAIN"を使用できますが、AndroidシンボルACTION_MAINは使用できません。
    2. コンポーネント名を指定する場合は、パッケージ名がコンポーネント名の一部である場合もありますが、パッケージ名も指定する必要があります。たとえば、これらは同等です。
    3. 
      SYSTEM.WRITE "am -n com.android.calculator2.Calculator" 
      APP.START , , "com.android.calculator2", "com.android.calculator2.Calculator" 
      

      通常、このパターンを使用することができます:

      
      pkg$ = "com.android.calculator2" : comp$ = pkg$ + ".Calculator" 
      APP.START , , pkg$, comp$ 
      
    4. categoriesパラメータには、コンマで区切られた複数のカテゴリを含めることができます。

      
      cats$ = "android.intent.category.BROWSABLE, android.intent.category.MONKEY" 
      cats$ = cat1$ + "," + cat2$ + "," + cat3$ 
      
    5. あなたはポインタをAPPコマンドに渡す前に、"extras"バンドルを作成して設定する必要があります。現時点では、ストリング・エクストラとフロート・エクストラだけがサポートされています(BASIC!データ・タイプ)。
    6. プログラムがインテントを使用して別のアプリを起動すると、2番目のアプリは別のインテントを使用して結果を返すことができます。BASIC!はこのリターンパスをまだサポートしていません。プログラムは、別のアプリがファイルまたはクリップボードに残すデータを取得できますが、まだインテントのインテントからデータを取得することはできません。