2013年4月26日金曜日

位置情報サービスの設定にX-BASIC for iOSが出てくることがある件

一部の機体で、設定~プライバシー~位置情報サービスの中に、X-BASIC for iOSの設定が出てくることがあるようです。

全ての機体ではなく、またiOSのバージョンやX-BASIC for iOSのバージョンもまちまちで原因は特定できていません(同じバージョンでも出る機体とそうでない機体がある)。

プログラム上、位置情報サービスやGPSを必要としているという記述もしておらず、なぜ出てきているのか全く不明です。
V2.0でも解消できていません。

X-BASIC for iOSでは位置情報を使うことはありませんので、気になる方はオフに設定してください。

また、原因に心当たりのある方はご教授ください。

よろしくお願いします。

2013年4月23日火曜日

X-BASIC/68の全コマンド・ステートメント・関数表

X-BASIC/68の全コマンド・ステートメント・関数表です。
手持ちのファイルから探し出しましたが、どこから得たものか不明です。
もし、公開に問題があれば、お知らせください。

なお、X-BASIC for iOSで全てが再現されている、または同一であるわけではありません。
 
------------------------------------------------------------------------------
ステートメント
------------------------------------------------------------------------------

beep
    CONFIG.SYSのbeep.sysを再生する。

break
    現在実行している階層のループからぬける。

char 変数名[=初期値][ ,変数[=初期値],・・・・]
    変数をchar型で宣言する。
    0~255までの整数を使用できる。

cls
    テキスト画面のクリア

color 属性
    テキスト画面の文字の属性を設定する。
        0:標準文字  黒        8:反転文字  黒
        1:標準文字  シアン    9:反転文字  シアン
        2:標準文字  黄色     10:反転文字  黄色
        3:標準文字  白       11:反転文字  白
        4:強調文字  黒       12:反転強調  黒
        5:強調文字  シアン   13:反転強調  シアン
        6:強調文字  黄色     14:反転強調  黄色
        7:強調文字  白       15:反転強調  白

color [a,b,c,d]
    テキストのパレットの色を変更する。
        aは、color命令の 0, 4, 8,12の色
        bは、color命令の 1, 5, 9,13の色
        cは、color命令の 2, 6,10,14の色
        dは、color命令の 3, 7,11,15の色
    例.10 color [10,10,10,10]  /* 数値は適当です(^^;; */

console 開始行,範囲,ファンクションキーの表示(0 or 1)
    テキストのスクロールの範囲を決める。
   
dim 変数の型(char or int or str) 変数名 (要素数[,要素数・・・]) = {要素1の初期値,要素2の初期値,・・・}
    x次元の配列変数の宣言。

error on / error off
    error on で 関数エラーの許可
    errpr off で関数エラーの不許可
        注)runで実行すると自動的にerror onになります。

exit([戻り値])
    現在の状態を全て破棄できる状態(ファイルのクローズ等)に処理をして、
    親プロセスへ戻ります。
    一応、親プロセスへ引き渡す戻り値を設定できます。

float 変数名[=初期値][ ,変数[=初期値],・・・・]
    変数をfloat型で宣言する。
    約1.1*10^(-308)~3.6*10^308までの実数を使用できる。つまりほとんど制限無し。

for ~ next
    for 初期値 to 終了値
    処理
    next
        (終了値-初期値)の回数だけループします。

func ~ endfunc / return()
    func 関数の型 関数名([引数;引数の型,・・・])
    return([戻り値])
    endfunc
        関数の型とは戻り値の型である。(char or int or str)
        戻り値の必要無い関数の場合はreturnは省略できる。

gosub 行番号 / return
    なるべく使わないで。

goto 行番号
    なるべく使わないで。

if 条件式 then {処理1} else {処理2}
    条件式が正しければ(真ならば)処理1を、間違っていれば(偽ならば)処理2を実行します。

input ["メッセージ"<; or ,>]変数
    キーボードから入力されるデータを変数に代入します。

int 変数名[=初期値][ ,変数[=初期値],・・・・]
    変数をint型で宣言する。
    -2,147,483,648~2,147,483,648までの整数を使用できる。

key ファンクションキー番号,"割り当てるコマンド文字列"
    ファンクションキーの定義。

linput ["メッセージ";]変数(str型)
    inputと違い、キーボードから,(カンマ)や"(引用符)などの全ての文字を入力できる。
    但し変数は必ずstr型で、宣言時の文字数の制限もある。
    画面の一行分までしか入力できない。

locate カーソルx座標,カーソルy座標[,カーソルスイッチ]
    指定した位置へカーソルを移動します。

print
    テキスト画面に文字や数値を表示します。
    print 変数
        変数の内容が表示されます。出力後は改行されます。
    print "文字の並び"
        "(引用符)で囲まれた文字列を表示します。出力後に改行します。
    print 要素1;要素2;・・・;要素n[;]
        画面に複数の要素をならべて表示します。
        最後に;(セミコロン)で終わると改行しません。
    print 要素1,要素2,・・・,要素n[,]
        画面に複数の要素を8文字間隔でならべて表示します。
        最後に,(カンマ)で終わると改行しません。
    print using "書式";変数(数値型)または数字
        #(シャープ)    表示する数値の桁数を指定する。
        .(ピリオド)    小数点の位置を指定する。
        +/-        符号をつけて表示します。-の場合は#の後ろに設定する。
        **        空白を*で埋めます。
        \\        数字に\をつけます。
        **\        空白を*で埋め、先頭に\をつけます。
        ^^^^^        数値を指数を使った表現にします。
        ,(カンマ)        3桁毎に,をつけます。
    print using "書式";変数(文字型)または文字列
        !        文字列の先頭の一文字だけ表示します。
        &  &        文字列を&から&までの文字数に指定します。
        _(アンダーバー)    usingの書式の文字を_の後ろに書いた場合
                その一文字だけは普通の文字にします。

repeat ~ until
    repeat
    処理
    until 終了条件式
        終了条件式が満たされるまで処理を繰り返します。

str 変数名 [文字数(default32)][=初期値][ ,変数[文字数][=初期値],・・・・]
    変数をstr型で宣言する。文字数を省略すると32文字になる。
    例.10 str a$[4]="abcd",b[8]="",c$

stop
    プログラムの実行を停止します。再開するときはcontコマンドを使います。

switch ~ endswitch
    switch 条件式
    case 条件式の結果1 : 処理1[:break]
    case 条件式の結果2 : 処理2[:break]
        ・
        ・
    [default : 処理n]
    endswitch
        条件式の結果の値によって処理が実行される。
        処理の実行後breakを入れてループから抜けるというやりかたもある。
        条件式の結果がどのcaseにもあてはまらないときはdefaultの処理nが実行される。

while ~ endwhile
    while 条件式
    処理
    endwhile
        条件式が満たされているあいだ処理を繰り返します。

width x
    x=64 or 96
    表示画面モードの切換。
    注.この命令を使うとテキスト及びグラフィック画面は初期化されます。

------------------------------------------------------------------------------

関数
------------------------------------------------------------------------------
ファイル関係

fopen    書式    fp=fopen(fn,md)
    ファイルをオープンする。
    引数    str fn,md
        fnはファイルネーム。mdはopenするときのモード。
        mdが"r"のときは既にファイルがあってそのファイルを読み出し専用でopenする。
        mdが"w"のときは既にファイルがあってそのファイルを書き込み専用でopenする。
        mdが"rw"のときは既にファイルがあってそのファイルを読み書き両用でopenする。
        mdが"c"のときは新規ファイルとして読み書き両用でopenする。同名ファイルがあった場合上書される。
    戻り値    int fp
        fopenの戻り値は他のファイル関係関数で使用しますので壊さないように注意する事。

fclose    書式    fc=fclose(fp)
    指定のファイルをクローズする。
    引数    int fp
        fpはfopenの戻り値。
        fopenで複数のファイルが開かれているときに(MAX15まで)。閉じたいファイルをこの関数で指定する。
    戻り値    int fc
        正常に処理されると0。エラーだと-1が返されます。

fcloseall
    書式    fc=fcloseall()
    全てのファイルをクローズする。
    戻り値    int fc
        正常に処理されると0。エラーだと-1が返されます。
        openされているファイルをすべて閉じます。

fputc    書式    fc=fputc(ch,fp)
    ファイルに1バイト書き込む。
    引数    char ch:int fp
        chは書き込むデータです。char型なので1回で1バイトしか書き込めません。
        fpはfopenの戻り値です。
    戻り値    int fc
        正常に処理されると0。エラーだと-1が返されます。

fgetc    書式    fs=fgetc(fp)
    ファイルから1バイト読み込む。
    引数    int fp
        fpはfopenの戻り値です。
    戻り値    int fs
        ディスクから読み込んだ1バイトの文字コード。

fwrite    書式    fb=fwrite(na,n,fp)
    ファイルに任意の数値配列を書き込む。
    引数    数値型一次元配列 na
        int n,fp
        naはファイルへ書き込むデータを収納しておく。
        nはファイルへ書き込む配列naの要素数。
        fpはfopenの戻り値。
    戻り値    int fb
        書き込まれたバイト数。
        naの型により1要素当たりのバイト数が変わる。
        naがchar型だと1バイト/1要素。
        naがint型だと4バイト/1要素。
        naがfloat型だと8バイト/1要素。

fread    書式    fv=fread(na,n,fp)
    ファイルから任意の数値配列に読み込む。
    引数    数値型一次元配列 na
        int n,fp
        naはファイルから読み込まれたデータが格納される一次元の配列変数。
        nはファイルから読み込む配列naの要素数。
        fpはfopenの戻り値。
    戻り値    int fb
        実際に読み込まれたバイト数。
        naの型により1要素当たりのバイト数が変わる。
        naがchar型だと1バイト/1要素。
        naがint型だと4バイト/1要素。
        naがfloat型だと8バイト/1要素。

fwrites    書式    fb=fwrites(st,fp)
    ファイルに文字列を書き込む。
    引数    str st:int fp
        stはファイルへ書き込む文字列または文字列の変数。
        fpはfopenの戻り値。
    戻り値    int fb
        ファイルに書き込まれた文字数。(バイト)
    注意    読み出しにfreadsを使うときは、
        ファイルへ書き込む文字列の最後に改行コードを入れないといけない。
        改行コードはchr$(13)+chr$(10)です。

freads    書式    fb=freads(st,fp)
    ファイルから任意の文字型変数に読み込む。
    引数    str st:int fp
        stはファイルから読み込まれた文字列が格納される文字列の変数。
        改行コード(chr$(13)+chr$(10))までを一行として読み込む。
        fpはfopenの戻り値。
    戻り値    int fb
        ファイルから読み込まれた文字数。(バイト)

fseek    書式    dp=fseek(fp,os,md)
    ファイルへの読み書きをするデータポインタを移動する。
    引数    int fp,os,md
        fpはfopenの戻り値。
        osは基準位置からのオフセット値。
        mdは基準位置。
            md=0でファイルのはじめから。
            md=1で現在のデータポイントから。
            md=2でファイルの終りから。
    戻り値    int dp
        fseek関数後のデータポインタの位置が返ります。
        エラーの場合は-1が返ります。

feof    書式    fs=feof(fp)
    データポインタがファイルの最後に来たかどうかを調べます。
    引数    int fp
        fopenの戻り値
    戻り値    int fs
        終了位置なら-1。まだなら0が返ります。

dskf    書式    s=dskf(i)
    ディスクの空き容量を調べます。
    引数    int i
        i=0でカレントドライブ。
        i=1でAドライブ。
        i=2でBドライブ。
    戻り値    int s
        指定されたフロッピードライブの空き容量が返ります。


データ変換関係

bin$    書式    r=bin$(n)
    int型のデータを2進数に変換して文字列として返す。上位の0は除かれる。
    引数    int n
    戻り値    str r

oct$    書式    r=oct$(n)
    int型のデータを8進数の文字列として返す。
    引数    int n
    戻り値    str r

hex$    書式    r=hex$(n)
    int型のデータを16進数の文字列として返す。
    引数    int n
    戻り値    str r

chr$    書式    r=chr$(n)
    アスキーコードを文字に変換して返す。
    引数    char n
    戻り値    str r
    備考    逆の関数としてasc関数があります。

itoa    書式    r=itoa(n)
    int型のデータを文字列に変換する。
    引数    int n
    戻り値    str r
    備考    逆の関数としてatoi関数があります。

str$    書式    r=str$(n)
    float型のデータを文字列に変換する。
    引数    float n
    戻り値    str r
    備考    逆の関数としてatof,val関数があります。

gcvt    書式    r=gcvt(n1,n2)
    float型のデータを、指定された桁数の文字列に変換する。
    桁数は2番目の引数で指定する。
    引数    float n1
        int n2
    戻り値    str r
    小数点以上の数値が無い場合は小数点以下の桁数が優先される。
    備考    逆の関数としてatof,val関数があります。

ecvt    書式    r=ecvt(n1,n2,n3,n4)
    floatのデータを文字列に変換します。
    但し戻り値が特殊で、r,n2,n3,n4 がそれぞれ戻り値になります。
    引数    float n1
    戻り値    srt r
        int n2,n3,n4
        n2...文字列の小数点以下の桁数
        n3...小数点の位置
        n4...n1が正なら0を、負なら1を返す
    備考    逆の関数としてatof,val関数があります。

fcvt    書式    r=fcvt(n1,n2,n3,n4)
    floatのデータを文字列に変換します。
    但し戻り値が特殊で、r,n2,n3,n4 がそれぞれ戻り値になります。
    引数    float n1
    戻り値    srt r
        int n2,n3,n4
        n2...文字列の桁数
        n3...小数点の位置
        n4...n1が正なら0を、負なら1を返す
    備考    逆の関数としてatof,val関数があります。

asc    書式    r=asc(n)
    文字のキャラクターコードを返す。
    引数    str n
    戻り値    int r
    引数nが複数の文字列の場合、最初の一文字が変換の対象になる。
    備考    逆の関数としてchr$関数があります。

atoi    書式    r=atoi(n)
    文字列をint型に変換する。
    引数    str n
    戻り値    int r
    備考    逆の関数としてitoaがあります。

int    書式    r=int(n)
    float型のデータを小数点以下を切り捨ててint型のデータとして返す。
    引数    float n
    戻り値    int r

toascii    書式    r=toascii(n)
    引数をASCII文字コードに変換して返す。
    引数    char n
    戻り値    int r

tolower    書式    r=tolower(n)
    引数のASCII文字コードが英字大文字であれば英字小文字に変換する。
    引数    char n
    戻り値    int r
    備考    逆の関数としてtoupper関数があります。

toupper    書式    r=toupper(n)
    引数のASCII文字コードが英字小文字であれば英字大文字に変換する。
    引数    char n
    戻り値    int r
    備考    逆の関数としてtolower関数があります。

atof    書式    r=atof(n)
    文字列をfloat型に変換する。
    引数    str n
    戻り値    float r
    備考    逆の関数としてstr$,gcvt,ecvt,fcvt関数があります。

fix    書式    r=fix(n)
    float型のデータの小数点以下を切り捨ててfloat型のデータとして返す。
    引数    float n
    戻り値    float r
    備考    動作自体はint関数と一緒です。

val    書式    r=val(n)
    文字列をfloat型に変換する。atof関数と同じです。
    引数    str n
    戻り値    float r
    備考    逆の関数としてstr$,gcvt,ecvt,fcvt関数があります。


文字列処理関係

isalnum    書式    r=isalnum(n)
    引数が英数字であるかどうかを調べ、そうなら-1をそうでないなら0を返す。
    英数字とはA~Z,a~z,0~9のこと。
    引数    char n
    戻り値    int r

isalpha    書式    r=isalpha(n)
    引数が英字であるかどうかを調べ、そうなら-1をそうでないなら0を返す。
    英字とはA~Z,a~zのこと。
    引数    char n
    戻り値    int r

isascii    書式    r=isascii(n)
    引数がアスキー文字であるかどうかを調べ、そうなら-1をそうでないなら0を返す。
    アスキー文字とは文字コードが0~127(&H00~&h7f)の文字。
    引数    char n
    戻り値    int r

isdigit    書式    r=isdigit(n)
    引数が数字であるかどうかを調べ、そうなら-1をそうでないなら0を返す。
    数字とは0~9のこと。
    引数    char n
    戻り値    int r

isgraph    書式    r=isgraph(n)
    引数がスペース以外の表示可能な文字であるかどうかを調べ、
    そうなら-1をそうでないなら0を返す。
    文字コードが33~126(&H21~&h7e)の文字。
    引数    char n
    戻り値    int r

islower    書式    r=islower(n)
    引数が英小文字であるかどうかを調べ、そうなら-1をそうでないなら0を返す。
    英小文字とはa~zの文字。
    引数    char n
    戻り値    int r

isprint    書式    r=isprint(n)
    引数が表示可能な文字であるかどうかを調べ、そうなら-1をそうでないなら0を返す。
    表示可能な文字とは文字コードが33~126(&h21~&h7e)とスペースも含む文字。
    引数    char n
    戻り値    int r

ispunct    書式    r=ispunct(n)
    引数が表示可能な記号であるかどうかを調べ、そうなら-1をそうでないなら0を返す。
    表示可能な記号とは文字コードが32~47,58~64,91~96,112~126の文字。
    引数    char n
    戻り値    int r

isspace    書式    r=isspace(n)
    引数が空白文字であるかどうかを調べ、そうなら-1をそうでないなら0を返す。
    空白文字とは文字コードが9~13,32の文字。
    引数    char n
    戻り値    int r

isupper    書式    r=isupper(n)
    引数が英大文字であるかどうかを調べ、そうなら-1をそうでないなら0を返す。
    英大文字とはA~Zの文字。
    引数    char n
    戻り値    int r

isxdigit書式    r=isxdigit(n)
    引数が16進の文字であるかどうかを調べ、そうなら-1をそうでないなら0を返す。
    16進文字とは0~9,A~F,a~fの文字。
    引数    char n
    戻り値    int r

instr    書式    r=instr(n1,n2,n3)
    文字列の中から文字列を探して左から何文字目にあるかを返す。
    見つからないときや探し始める位置が0以下だと戻り値は0になる。
    引数    int n1:str n2,n3
        n1...何文字目から検索を始めるのかの指定
        n2...この文字列から探す
        n3...探したい目的の文字列
    戻り値    int r

strchr    書式    r=strchr(n1,n2)
    文字列の中から1文字を探し、最初に見つけた位置を返す。
    先頭(左端)を0としたint値を返すが、見つからないときは-1を返す。
    引数    str n1:char n2
        n1...この文字列から探す
        n2...char型で探したい文字を与える
    戻り値    int r

strcspn    書式    r=strcspn(n1,n2)
    文字列n1から文字列n2のどれか1文字を最初に見つけた位置を返します。
    戻り値は先頭(左端)を0としたint値を返します。
    見つからないときは文字列の長さを返します。
    引数    str n1,n2
        n1...この文字列から探す
        n2...探したい文字をならべる
    戻り値    int r

strspn    書式    r=strspn(n1,n2)
    文字列n1の中から指定した別の文字列n2に無い文字を最初に見つけた位置を返す。
    見つからなかったときはn1の文字列の長さを返す。
    どちらかの文字列がnull文字なら0を返す。
    引数    str n1,n2
        n1...この文字列から探す
        n2...この文字列の中の文字を比較する
    戻り値    int r

strtok    書式    r=strtok(n1,n2)
    文字列n1の中から別に指定する文字列n2のうち、
    どれかひとつを見つけた位置までの文字列に返す。
    引数    str n1,n2
        n1...この文字列から探す
        n2...探したい文字をならべる
    戻り値    str r

left$    書式    r=left$(n1,n2)
    文字列n1の左からn2文字目までを返す。
    引数    str n1:int n2
    戻り値    str r

right$    書式    r=right$(n1,n2)
    文字列n1の右からn2文字目までを返す。
    引数    str n1:int n2
    戻り値    str r

mid$    書式    r=mid$(n1,n2,n3)
    文字列n1の左からn2文字目からn3個の文字列を返す。
    引数    str n1:int n2,n3
    戻り値    str r

mirror$    書式    r=mirror$(n)
    文字列nの並びを左右反転して返す。
    引数    str n
    戻り値    str r

string$    書式    r=string$(n1,n2)
    ある1文字n2を指定した数n1だけ並べて返す。
    n1の有効範囲は0<=n2<=255。0以下を指定するとnull文字を返す。
    引数    int n1:str n2
    戻り値    str r

strlen    書式    r=strlen(n),またはr=len(n)
(len)    文字列nの長さを返す。nullのときは0を返す。
    引数    str n
    戻り値    int r   

strlwr    書式    r=strlwr(n)
    文字列nの中の英大文字を英小文字に変換する。
    引数    str n
    戻り値    str r

strnset    書式    r=strnset(n1,n2,n3)
    文字列n1の先頭から指定した文字数n3を指定した文字n2に変換する。
    引数    str n1:char n2:int n3
    戻り値    str r

strrev    書式    r=strrev(n)
    文字列nの並びを左右反転させる。
    引数    str n
        mirror$とは違い、引数のnも左右反転されるので注意。
    戻り値    str r

strset    書式    r=strset(n1,n2)
    文字列n1の中をすべて指定した文字n2にする。
    引数    str n1:char n2
    戻り値    str r

strupr    書式    r=strupr(n)
    文字列nの中の英小文字を英大文字に変換する。
    引数    str n
    戻り値    str r


数値演算関数

atan    書式    r=atan(n)
    nの逆正接(アークタンジェント)を計算する。
    戻り値は-π/2からπ/2までの値を返す。
    引数    float n
    戻り値    float r

sin    書式    r=sin(n)
    n(ラジアン)の正弦(サイン)を計算する。
    引数    float n
        nはラジアン。
    戻り値    float r

cos    書式    r=cos(n)
    n(ラジアン)の余弦(コサイン)を計算する。
    引数    float n
        nはラジアン。
    戻り値    float r

tan    書式    r=tan(n)
    n(ラジアン)の正接(タンジェント)を計算する。
    引数    float n
        nはラジアン。
    戻り値    float r

exp    書式    r=exp(n)
    自然対数の底”e”のn乗を計算する。
    引数    float n
    戻り値    float r

log    書式    r=log(n)
    nの自然対数を返す。n>0でなければならない。
    引数    float n
        n>0。
    戻り値    float r

srand    書式    srand(i)
    rand()の系列を初期化する。iは0~65535。
    引数    int i
        0<=i<=65535
    戻り値    void

rand    書式    r=rand()
    0以上32767以内の整数型乱数を返す。
    引数    なし
    戻り値    int r
        0<=r<=32767

randomize
    書式    randomize(i)
    rnd()の乱数系列を初期化する。
    引数    int i
        -32768<=i<=32767
    戻り値    void

rnd    書式    r=rnd()
    0以上1未満の乱数を返す。
    引数    なし
    戻り値    float r
        0<=r<1

pi    書式    r=pi(n)
    円周率を返す。πがn倍になって返る。
    引数    float n
        n...倍数
    戻り値    float r

abs    書式    r=abs(n)
    nの絶対値を返す。
    引数    float n
    戻り値    int n

pow    書式    r=pow(x,y)
    xのy乗を計算する。
    x=0かつy<0の場合とx<0かつyが整数でない場合はエラーが出る。
    引数    float x,y
        ただしx<0でyは整数
    戻り値    float r

sgn    書式    r=sgn(n)
    nの符号を調べ、nが正の数なら1を、負の数なら-1を、1なら0を返す。
    引数    float n
    戻り値    float r

sqr    書式    r=sqr(n)
    nの平方根(ルート)を返す。
    引数    float n
        0<=n
    戻り値    float r


システム変数

free    書式    r=free または free
    basic.cnfで設定したプログラムメモリの残容量を返す。
    この変数は読込専用。
    引数    なし
    戻り値    float r

date$    書式    st=date$ または date$
    日付を返す。または日付を設定する。
    引数    なし
    戻り値    str st
        stの書式は年/月/日
    date$="yy/mm/dd"で日付を設定することができる。

day$    書式    st=day$ または day$
    曜日を返す。
    引数    なし
    戻り値    str st

time$    書式    st=time$ または time$
    時間を返す。または時間を設定する。
    引数    なし
    戻り値    str st
        stの書式は時:分:秒
    time$="hh:mm:ss"で時間を設定できる。

inkey$    書式    st=inkey$
    キーボードから入力を待ち、入力された1文字を返す。
    引数    なし
    戻り値    str st
    備考    input文と似ています。

inkey$(0)
    書式    st=inkey$(0)
    キーボードから入力された1文字を返す。
    何も押されないとnullを返します。
    引数    なし
    戻り値    str st

keysns    書式    r=keysns()
    キーバッファの中身を調べ、キーバッファが空かどうかを返す。
    戻り値はキーバッファが空なら0、そうでないなら-1を返す。
    引数    Void
    戻り値    int r

csrlin    書式    y=csrlin または csrlin
    現在のカーソルのy座標を返す。
    引数    なし
    戻り値    int y

pos    書式    x=pos または pos
    現在のカーソルのx座標を返す。
    引数    なし
    戻り値    int x


グラフィック関数

screen    書式    screen a,b,c,d
    画面モードを変更する。
        a...表示画面サイズ
            0:256x256
            1:512x512
            2:768x512
        b...実画面、色モード、使用可能なグラフィックページ
            0:1024x1024    16色/65536色    ページ0
            1:512x512    16色/65536色    ページ0~3
            2:512x512    256色/65536色    ページ0~1
            3:512x512    65536色/65536色    ページ0
        c...ディスプレイの解像度
            0:15kHz    スーパーインポーズ可能(このモードは専用ディスプレイのみ)
            1:31kHz    スーパーインポーズ不可
        d...グラフィック画面の表示のON/OFF
            0:off
            1:on(このときグラフィックRAMは初期化される)
    備考    screenは関数ではなくステートメントです。
        screenを実行して画面モードを設定しないと他のグラフィック関数が使用できません。

vpage    書式    vpage(i)
    グラフィックページの表示のON/OFF
    引数    int i
        iの値    ページ    0    1    2    3
        0        ×    ×    ×    ×
        1        ○    ×    ×    ×
        2        ×    ○    ×    ×
        3        ○    ○    ×    ×
        4        ×    ×    ○    ×
        5        ○    ×    ○    ×
        6        ×    ○    ○    ×
        7        ○    ○    ○    ×
        8        ×    ×    ×    ○
        9        ○    ×    ×    ○
        10        ×    ○    ×    ○
        11        ○    ○    ×    ○
        12        ×    ×    ○    ○
        13        ○    ×    ○    ○
        14        ×    ○    ○    ○
        15        ○    ○    ○    ○
    戻り値    void
    備考    iの値はscreenステートメントで設定したモードによって制限がある。

apage    書式    apage(pag)
    アクティブページ(実際に読み書きするグラフィックページ)を指定する。
    引数    int pag
        pagはscreenによって制限がある。
    戻り値    void

window    書式    window(x1,y1,x2,y2)
    表示範囲を指定する。screen実行後はscreenの表示画面サイズになる。
    引数    int x1,y1,x2,y2
    戻り値    void

home    書式    home(pag,x,y)
    指定したページの実画面の中から表示位置を指定する。screen実行後のデフォルト座標は0,0。
    引数    int pag,x,y
        pag...グラフィックページ
        x.....表示したい実画面上のx座標
        y.....表示したい実画面上のy座標
    戻り値    void
    備考    背景スクロールなどで使用できる。
        球面スクロールなので上下左右がつながっている。
        はじめにwindow関数で表示範囲を広げていないと、
        実画面上のグラフィックはクリッピングされてしまう。

rgb    書式    cl=rgb(r,g,b)
    光の3原色を使ってカラーパレットを計算します。
    引数    int r,g,b
        r...赤要素(0<=r<=32)
        g...緑要素(0<=g<=32)
        b...青要素(0<=b<=32)
            r+g=黄
            g+b=シアン
            b+r=マゼンダ
            r+g+b=白
    戻り値    int cl
        clはカラーコード。0~65534の偶数値。
    備考    輝度ビットを有効にしたいのならclに+1すればよい。

hsv    書式    cl=hsv(hu,sa,va)
    「色相」「飽和度」「明るさ」からカラーパレットを計算する。
    引数    int hu,sa,va
        hu...色相    (0~191)
        sa...飽和度    (0~31)
        va...明るさ    (0~31)
    戻り値    int cl
        clはカラーコード。0~65535の偶数値。
    備考    輝度ビットを有効にしたいのならclに+1すればよい。

palet    書式    palet(p,c)
    パレットコードpにカラーコードcを割り当てる。
    引数    int p,c
        p...パレットコード
        c...カラーコード
    戻り値    void
    備考    パレットコードはscreenのモードにより0~15か0~255かに変わります。

point    書式    pa=point(x,y)
    アクティブページのグラフィック画面の指定の座標のパレットコードを求める。
    引数    int x,y
        x...x座標
        y...y座標
            それぞれwindow関数で指定した範囲内。
    戻り値    int pa

pset    書式    pset(x,y,pa)
    指定の座標にパレットコードpaのドットを表示する。
    引数    int x,y,pa
        x...x座標
        y...y座標
            それぞれwindow関数で指定した範囲内。
        pa...パレットコード
    戻り値    void

line    書式    line(x1,y1,x2,y2,pa,ls)
    始点(x1,y1)から終点(x2,y2)まで指定のパレットコードpaで指定のラインスタイルlsで直線を描く。
    引数    int x1,y1,x2,y2,pa,ls
        x1,y1...始点の座標
        x2,y2...終点の座標
            それぞれwindow関数で指定した範囲内。
        pa...パレットコード
        ls...ラインスタイル(省略時は&hffff)
            &h0000~&hffff
    戻り値    void

box    書式    box(x1,y1,x2,y2,pa,ls)
    始点(x1,y1)から終点(x2,y2)まで指定のパレットコードpaで指定のラインスタイルlsで四角形を描く。
    引数    int x1,y1,x2,y2,pa,ls
        x1,y1...始点の座標
        x2,y2...終点の座標
            それぞれwindow関数で指定した範囲内。
        pa...パレットコード
        ls...ラインスタイル(省略時は&hffff)
            &h0000~&hffff
    戻り値    void

fill    書式    fill(x1,y1,x2,y2,pa)
    始点(x1,y1)から終点(x2,y2)まで指定のパレットコードpaで四角形を描き、中をpaで塗りつぶす。
    引数    int x1,y1,x2,y2,pa
        x1,y1...始点の座標
        x2,y2...終点の座標
            それぞれwindow関数で指定した範囲内。
        pa...パレットコード
    戻り値    void

circle    書式    circle(x,y,r,pa,s,e,hv)
    x,yを中心とした円を描く。
    引数    int x,y,r,pa,s,e,hv
        x,y...円の中心座標(-32768~32767)
        r.....円の半径(0~32767)
        pa....パレットコード
        s.....開始角度(-360°~360°)
        e.....終了角度(-360°~360°)
        hv....偏平率(0~32767)
            hv=256で正円になりますがディスプレイの関係上、真円にはならない。
    戻り値    void

paint    書式    paint(x,y,pa)
    ある領域内の任意の場所(x,y)からパレットコードpaで領域内を塗りつぶします。
    引数    int x,y,pa
        x,y...塗りつぶしたい領域の任意の座標
        pa....パレットコード
    戻り値    void
    備考    領域とは、ある色で囲まれた場所。

symbol    書式    symbol(x,y,st,h,v,mo,pa,an)
    グラフィック画面に文字を描く。
    引数    int x,y,pa:str st:char h,v,mo,an
        x,y...描写開始始点座標(-32768~32767)
        pa....パレットコード
        st....表示する文字列(文字式でも可)
        h.....横方向の倍率
        v.....縦方向の倍率
        mo....文字フォントの種類(0~2)
            0:6x12
            1:8x16
            2:12x24
        an....表示文字列の回転角度(0~3)
            0:0°
            1:90°
            2:180°
            3:270°
    戻り値    void

wipe    書式    wipe()
    アクティブページを消去する。
    引数    なし
    戻り値    void

get    書式    get(x1,y1,x2,y2,na)
    アクティブページのwindow内の指定の範囲(x1,y1)-(x2,y2)の
    グラフィックのドットパターンを配列naに取り込む。
    引数    int x1,y1,x2,y2:naは任意の数値データ型配列
        x1,y1...取り込む範囲の始点
        x2,y2...取り込む範囲の終点
        na......取り込まれる配列
            16色モードのとき
            char型...1つの配列に2ドット
            int型....1つの配列に8ドット
            float型..1つの配列に16ドット
            256色モードのとき
            char型...1つの配列に1ドット
            int型....1つの配列に4ドット
            float型..1つの配列に8ドット
            65536色モードのとき
            char型...2つの配列に1ドット
            int型....1つの配列に2ドット
            float型..1つの配列に4ドット
    戻り値    void

put    書式    put(x1,y1,x2,y2,na)
    get関数で取り込んだドットパターンを画面に配置する。
    引数    int x1,y1,x2,y2:naは任意の数値データ型配列
        x1,y1...始点の座標
        x2,y2...終点の座標
        na......ドットパターンの格納されている配列
    戻り値    void

contrast
    書式    contrast(i)
    画面の明るさをコントロールする。
    引数    int i
        i=0(暗い)~15(明るい)
    戻り値    void


マウス関数

mouse    書式    m=mouse(i)
    マウスの初期設定を行う。
    引数    int i(0~4)
            0:マウスの初期化
            1:マウスカーソル表示
            2:マウスカーソル消去
            3:マウスの状態を返す
            4:ソフトキーボードを無効にし、右クリックを開放する
    戻り値    int m
        iが3以外のときは0が返り、エラーなら-1が返る。
        iが3のときはマウスカーソルが表示されていれば-1されていなければ0が返る。

msarea    書式    msarea(x1,y1,x2,y2)
    マウスの移動範囲を制限する。
    引数    int x1,y1,x2,y2
        x1,y1...範囲の左上頂点
        x2,y2...範囲の右下頂点
    戻り値    void

setmspos
    書式    setmspos(x,y)
    指定の座標(x,y)にマウスカーソルを表示する。
    引数    int x,y
    戻り値    void

mspos    書式    mspos(x,y)
    マウスの現在の座標が戻る。
    引数に指定している変数に戻る特殊なタイプの関数。
    引数    int x,y
        必ず変数。定数はしていできない。
    戻り値    マウスカーソルの示す座標がx,yに入る。

msstat    書式    msstat(x,y,bl,br)
    マウスのボタンの状態を返す。
    引数に指定している変数に戻る特殊なタイプの関数。
    引数    int x,y,bl,br
        必ず変数。定数はしていできない。
    戻り値    x...x方向の相対移動量(-128~127)
        y...y方向の相対移動量(-128~127)
        bl..左ボタンが押されていれば-1,押されてなければ0
        br..右ボタンが押されていれば-1,押されてなければ0

msbtn    書式    bs=msbtn(n,b,t)
    マウスのボタンが指定の状態nになるまでの時間を返す。
    引数    int n,b,t
        n...ボタンの状態
            0:ボタンが放されるまで
            1:ボタンが押されるまで
        b...ボタンの左右
            0:左ボタン
            1:右ボタン
        t...待ち時間の最大値(0~65535)
            0、1、65535の場合は、ずっと待つ
    戻り値    int bs
        マウスがそれぞれの状態になるまでの時間を返す。
        待ち時間の最大値tを超えた場合は-1を返す。
        ドラッグされた場合は0を返す。


ジョイスティック関数

stick    書式    sti=stick(i)
    ジョイスティックiのスティックの状態を返します。
    引数    int i
        1:ジョイスティック1のスティックの状態を返す
        2:ジョイスティック2のスティックの状態を返す
    戻り値    int sti
        スティックの向きによって0~9までの値が入る
        値と向きの関係は、テンキーを参照

strig    書式    trg=strig(i)
    ジョイスティックのトリガーの状態を返す。
    引数    int i
        1:ジョイスティック1のトリガーの状態を返す
        2:ジョイスティック2のトリガーの状態を返す
    戻り値    int sti
        0:トリガーは押されていない
        1:トリガー1のみ押されている
        2:トリガー2のみ押されている
        3:トリガー1、2両方とも押されている


オーディオ関数

a_rec    書式    a_rec(na,frq,le)
    ADPCMデータをメモリ(配列na)に格納する。(録音)
    引数    na...PCMデータを格納する数値型一次配列
        int frq,le
        frq..サンプリング周波数
            0:3.9KHz    1950byte/1sec
            1:5.2KHz    2600byte/1sec
            2:7.8KHz    3900byte/1sec
            3:10.4KHz    5200byte/1sec
            4:15.6KHz    7800byte/1sec
        le...配列naの添え字0からの長さ(バイト数)
            char型    :    MAXは、宣言した配列の値+1
            int型    :    MAXは、(宣言した配列の値+1)*4
            float型    :    MAXは、(宣言した配列の値+1)*8
    戻り値    void

a_play    書式    a_play(na,frq,md,le)
    メモリ(配列na)にあるADPCMデータを再生します。
    引数    na...再生するadpcmデータが格納された配列
        int frq,md,le
        frq..サンプリング再生周波数
        md...出力モード
            0:出力しない
            1:左チャンネルのみ出力
            2:右チャンネルのみ出力
            3:両チャンネル出力
        le...ADPCMデータのバイト数
    戻り値    void

a_cont    書式    a_cont()
    a_stopで中断したADPCMの音声を、中断したところから再生する。
    引数    Void
    戻り値    Void

a_end    書式    a_end()
    再生中のADPCMの音声を途中で中断する。
    なお、a_endで中断した場合、a_contによる音声の再開は出来ない。再開したい場合、中断はa_stopで行うこと。
    引数    Void
    戻り値    Void

a_stat    書式    r=a_stat()
    ADPCMを再生中かどうか調べ、再生中なら2、そうでなければ0を返す。
    引数    Void
    戻り値    int r

a_stop    書式    a_stop()
    現在再生中のADPCMデータを中断する。中断したデータは、a_cont命令で再生することができる。
    引数    Void
    戻り値    Void


FM音源の制御

m_alloc    書式    mf=m_alloc(t,s)
    トラックバッファの確保。トラック内のデータはクリアされる。
    引数    char t:int,s
        t...トラック番号(1~80)
        s...トラックサイズ(1~65536バイト)
    戻り値    int mf
        0:正常    -1:エラー

m_assign
    書式    mf=m_assign(c,t)
    各チャンネルにトラックの割り付けをする。
    引数    char c,t
        c...チャンネル番号(1~8)
        t...トラック番号(1~80)
    戻り値    mf
        0:正常    -1:エラー

m_cont    書式    mf=m_cont(c1,c2,c3,c4,c5,c6,c7,c8)
    c1~c8で指定されたチャンネルにおいて、一時停止した演奏を再開する。
    チャンネルをすべて省略すると現在停止しているすべてのチャンネルの演奏を再開する。
    引数    char c1,c2,c3,c4,c5,c6,c7,c8
    戻り値    int mf
        0:正常    -1:エラー

m_free    書式    n=m_free(t)
    指定したトラックtの残りバイト数を返す。
    引数    char t
        t...トラック番号(1~80)
    戻り値    int n

m_init    書式    m_init()
    FM音源を初期化する。
    引数    なし
    戻り値    void

m_play    書式    mf=m_play(c1,c2,c3,c4,c5,c6,c7,c8)
    c1~c8で指定されたチャンネルに割り当てたトラックデータを演奏する。
    チャンネルをすべて省略するとすべてのチャンネルを演奏する。
    引数    char c1,c2,c3,c4,c5,c6,c7,c8
    戻り値    int mf
        0:正常    -1:エラー

m_stat    書式    mf=m_stat(c)
    指定したチャンネルcが演奏中か調べる。
    引数を指定しなかった場合はバイト値が返され、
    そのバイト値の0~7ビットがチャンネル1~8に対応している。
    引数    char c
        c...チャンネル番号(1~8)
    戻り値    int mf
        0:停止中    1:演奏中    -1:エラー

m_stop    書式    mf=m_stop(c1,c2,c3,c4,c5,c6,c7,c8)
    c1~c8で指定されたチャンネルの演奏を一時停止する。
    チャンネルをすべて省略するとすべてのチャンネルの演奏を一時停止する。
    引数    char c1,c2,c3,c4,c5,c6,c7,c8
    戻り値    int mf
        0:正常    -1:エラー

m_tempo    書式    mf=m_tempo(te)
    テンポを設定する。
    引数    char te(32~200)
    戻り値    int mf
        0:正常    -1:エラー

m_trk    書式    mf=m_trk(t,st)
    MMLをトラックに書き込む。
    引数    char t:str st
        t...トラック番号(1~80)
        st..MMLデータ
    戻り値    int mf
        0:正常    -1:エラー
    備考    MMLの書式の説明は省略します。

m_vget    書式    m_vget(vo,ca)
    音色データを配列に取り込む。
    引数    char vo,ca
        配列は(4,10)
    戻り値    int
        0:正常    -1:エラー

m_vset    書式    m_vset(vo,ca)
    配列にある音色データを指定の音色番号のメモリバッファに登録する。
    引数    char vo,ca
        配列は(4,10)
    戻り値    int
        0:正常    -1:エラー

m_atoi    書式    r=m_atoi(t)
    指定したトラックバッファの先頭アドレスを返す。
    引数    char t
    戻り値    int r
   

スプライト関数

sp_init    書式    sp_init()
    スプライト画面の初期化
    引数    なし
    戻り値    void

sp_disp    書式    sp_disp(ch)
    スプライト画面の表示のON/OFF
    引数    char ch
        0:off
        1:on
    戻り値    void

sp_def    書式    sp_def(pc,na,ps)
    パターンデータの格納されている配列naを指定のパターンコードpcに登録する。
    引数    char pc,ps
        pc...パターンコード(0~255)
        ps...パターンサイズ
            0:8*8    1:16*16
        na...パターンデータが格納されている配列
    戻り値    void

sp_clr    書式    sp_clr(psc,pce)
    指定した範囲のパターンコードに登録されているパターンデータをクリアする。
    引数が1つだけだと、そのパターンコードだけがクリアされ、
    引数が省略されていると全てのパターンコードがクリアされる。
    引数    pcs,pce
        pcs...先頭パターンコード(0~255)
        pce...最終パターンコード(0~255)
    戻り値    void

sp_pat    書式    sp_pat(pc,na,ps)
    パターンコードpcに登録されているパターンデータを指定の配列naに取り込む。
    引数    char pc,ps
        pc...パターンコード(0~255)
        ps...パターンサイズ
            0:8*8    1:16*16
        na...パターンデータを格納する配列
    戻り値    void

sp_color
    書式    ocl=sp_color(pa,cl,pb)
    指定のパレットブロックpbの中の指定のパレットコードpaに色clを設定する。
    引数    char pa,pb:int cl
        pa...パレットコード(0~15)
        pb...パレットブロック(1~15)
        cl...カラーコード(0~65535)
    戻り値    int ocl
        ocl...変更前のカラーコード

sp_on    書式    sp_on(pls,ple)
    指定範囲のプレーンの表示をONにする。
    引数    char pls,ple
        pls...先頭プレーン番号(0~127)
        ple...最終プレーン番号(0~127)
    戻り値    void

sp_off    書式    sp_off(pls,ple)
    指定範囲のプレーンの表示をOFFにする。
    引数    char pls,ple
        pls...先頭プレーン番号(0~127)
        ple...最終プレーン番号(0~127)
    戻り値    void

sp_move    書式    sp_move(pl,x,y,pc)
    指定の座標(x,y)にスプライトパターン(pc)を配置します。
    引数    int x,y:char pl,pc
        x,y...スプライトパターンの左上のドットの座標(-16~1007)
        pl....スプライトパターンを登録するプレーン番号(0~127)
        pc....パターンコード(0~255)
    戻り値    void

sp_set    引数    sp_set(pl,x,y,cd,pr)
    スプライトパターンを表示する。sp_move関数よりも複雑な機能を使える。
    引数    char pl,pr:int x,y,cd
        pl...プレーン番号(0~127)
        x,y..表示位置の座標(0~1023)(sp_moveとの違いに注意)
        cd...スプライト設定コード
            bit15    0:通常表示    1:上下反転
            bit14    0:通常表示    1:左右反転
            bit13~bit12    使用しない(常に0)
            bit11~bit8    パレットブロック
            bit7~bit0    パターンコード
        pr...スプライト画面とBG画面との表示優先順位(プライオリティ)
            0:スプライトは表示しない
            1:手前から    BG0,BG1,SP
            2:手前から    BG0,SP,BG1
            3:手前から    SP,BG0,BG1
    戻り値    void
    備考    cdを求める関数例
            func sp_bit(v,h,pb,pc)
                int bit
                v=v*32768:h=h*16384:pb=pb*256:bit=v+h+pb+pc
                return(bit)
            endfunc

sp_stat    書式    stat=sp_stat(pl,md)
    スプライトの設定状態を返す。
    引数    char pl,md
        pl...プレーン番号(0~127)
        md...読み出しデータの選択
            0:xポジション
            1:yポジション
            2:設定コード
            3:画面優先順位(プライオリティ)
    戻り値    int stat
        stat...スプライトの状態を返す

bg_set( b [,pg] [,md])
    機能    バックグラウンドbへのテキストページpgの割り当てと表示の設定を行います
        (表示画面が 512x512の時は、バックグラウンド1は表示されません)
    引数    char b    バックグラウンド (0, 1)
        char bg    テキストページ (0, 1)
        char md バックグラウンドの表示 (0=表示しない、1=表示する)
    戻り値    int

bg_get(pg ,x ,y)
    機能    指定されたテキストページpgの指定された座標からパターンデータを読み出します。
    引数    char pg    テキストページ(0 ,1)
        char x    X座標(0~63)
        char y    Y座標(0~63)
    戻り値    int    読み出されたパターンデータは次のようなビット構成になっています。
            (ビット12,13は通常0になります)
            ビット15    垂直反転(0:通常、1:反転)
            ビット14    水平反転(0;通常、1:反転)
            ビット8~11    パレットプロック pb (1~15)
            ビット0~7    パターンコード cd (0~255)

bg_put(pg ,x ,y ,pd)
    機能    指定されたテキストページpgの指定された座標にパターンデータpdを設定します。
    引数    char pg    テキストページ(0 ,1)
        char x    X座標(0~63)
        char y    Y座標(0~63)
        int pd    パターンデータ(0~&HCFFF)
            パターンデータpdは次のようなビット構成になっています。
            (ビット12,13は通常0になります)
            ビット15    垂直反転(0:通常、1:反転)
            ビット14    水平反転(0;通常、1:反転)
            ビット8~11    パレットプロック pb (1~15)
            ビット0~7    パターンコード cd (0~255)
    戻り値    int

bg_fill(pg ,pd)
    機能    指定されたテキストページpdを指定されたパターンデータpdで埋めつくします。
    引数    char pg    テキストページ(0 ,1)
        int pd    パターンデータ(0~&HCFFF)
            パターンデータpdは次のようなビット構成になっています。
            (ビット12,13は通常0になります)
            ビット15    垂直反転(0:通常、1:反転)
            ビット14    水平反転(0;通常、1:反転)
            ビット8~11    パレットプロック pb (1~15)
            ビット0~7    パターンコード cd (0~255)
    戻り値    int

bg_scroll(b [,x] [,y])
    機能    バックグラウンドbのスクロール座標を設定します。
    引数    char b    バックグラウンド(0 ,1)
        int x    スクロールX座標(0~ 511または1023)
        int y    スクロールY座標(0~ 511または1023)
    戻り値    int

bg_stat(b ,md)
    機能    指定されたバックグラウンドbの状態を読み出します。
    引数    char b    バックグラウンド(0 ,1)
        char md    モード(0~3)
        モードmdには読み出す内容を指定します。
        0=X座標(0~511または1023)
        1=Y座標(0~511または1023)
        2=テキストページ(0 ,1)
        3=バックグラウンドの表示(0=表示されていない、1=表示されている)

------------------------------------------------------------------------------
以下のサイトにもX-BASICの関数の説明があります。
アルファベット順にまとめられているので探しやすいかも知れません。
内容は確認してないので、掲載されている関数やコマンドがどの外部関数までなのかは解りません。
http://ww3.enjoy.ne.jp/~zoomark/ip/xb/xb_frm.html

X-BASIC for iOSに存在しない関数・ステートメント・システム変数

以下のX-BASIC/68の関数・ステートメント・システム変数はX-BASIC for iOSには存在しません。
  • a_rec()
  • chdrv "d:"
    iOSにはドライブという概念がありません。
  • chdir "direc"
    X-BASIC for iOSにはカレントディレクトリという概念がありません。
  • color[c0;int,c1;int,c2;int,c3;int]
  • console
  • dskf(drv;char)
  • exit(n;int)
  • spc()
    space$()で代用
  • free
    X-BASIC for iOSはほとんどワークが可変サイズなので、無意味です。
  • gosub~return
    あえて利用禁止にしています。全てfunc~endfuncで記述し直してください。
  • window(sx;int,sy;int,ex;int,ey;int)
  • palet(pal;int,col;int)
  • screen 表示画面サイズ,実画面,解像度,表示
  • inkey$
    キー入力はinkey()で置き換えます
  • FM音源関係
  • lprint

同名関数があるが機能が全く異なるもの と 基本的に同じだが、注意が必要な関数

X-BASIC/68と同名関数があるが機能が全く異なるものか以下の通りです。
関数名 home
X68版 グラフィック画面の実画面における表示画面の左上座標を指定する(スクロール)
iOS版 テキスト画面のカーソル位置をホームに移動する
補足 処理によっては、gTransform()で代用が可能です。


また、基本的に同じだが、注意が必要な関数は以下の通りです。
関数 rand(),randomize(seed;int),rnd(),srand(seed;int)
相違点 整数系乱数と実数系乱数は内部では同じ乱数関数から発生させています。
randomize()とsrand()は内部では同じ関数なので、片方で初期化すると他方も初期化されます。
X-BASIC/68ではどうかは未検証です。

関数 rand()
相違点 乱数の発生範囲が、iOS版では0~2147483647なのに対し、X-BASIC/X68では0~32767です。
このため、iOS版で各数値の発生確率をX68と同じにするには、(rand() mod 32728)と記述する必要があります。

X-BASIC/68とほぼ同機能となる関数

ここでは、X-BASIC/68とX-BASIC for iOSでほぼ同機能となる関数またはステートメントについて記述します。

機能 画像読み込み
X68版書式 int img_load(st;str[,x;int][,y;int][,b;int])
iOS版書式 int imgLoad(sx;float,sy;float,wx;float,wy;float,fname;str)
int picLoader(sx;float,sy;float,fname;str)
int pic_load(sx;float,sy;float,fname;str)
int cutLoader(sx;float,sy;float,fname;str)
int cut_load(sx;float,sy;float,fname;str)
相違点 imgLoad()はX68のべた画像フォーマット(GM?/GL?/GS?)をサポートしません。
技術的には可能なのですが、無用でしょうから。

機能 画像書き出し
X68版書式 int img_save(st;str[,x;int][,y;int])
iOS版書式 int jpegSave(fname;str,quality;int)
int pngSave(fname;str)
相違点 iOS版はX68のべた画像フォーマットでの書き出し(GM?/GL?/GS?)をサポートしません。
技術的には可能なのですが、無用でしょうから。

機能 テキスト画面色設定
X68版書式 color 属性
iOS版書式 tcolor(r;int[,g;int,b;int[,alpha;int]])
tatrb(atrb;int)
font(fontName;str[,pointSize;float])
相違点 iOS版では関数になり、 色指定はtcolor()、リバースはtatrb()、強調(ボールド)はfont()でフォントそのものの違いとして指定し分けます。

機能 画面全体のコントラストを指定する
X68版書式 contrast(ch;char)
iOS版書式 tBackgroundAlpha(alpha;float)
gBackgroundAlpha(alpha;float)が近い
相違点 厳密に言えば両者は異なりますが、実質的に同じ働きをします。
ただし、テキスト画面及びグラフィック画面はページ毎に独立制御になります。

機能 ファンクションキーの設定
X68版書式 key ファンクションキー番号,"文字列"
iOS版書式 setFunctionKey(no;int,title;str,keyCode;int)が近い
相違点 ファンクションキー番号の範囲が異なります。
また、 keyステートメントは設定した文字列がそのままinput等で入力されるのに対し、 setFunctionKey()は設定したキーコードを返します。
(iOSには基本的にキーコードという概念がないから。)

機能 マウスカーソル座標を得る
X68版書式 mspos(x;int,y;int)およびmsstat(x;int,y;int,bl;int,br;int)
iOS版書式 int getTouchPoint(xys;float1次元配列)が近い
相違点 iOSではマルチタッチが可能なため、座標は配列で返されます。

機能 ドット色を得る
X68版書式 int point(x;int,y;int)
iOS版書式 int bitmapPoint(x;int,y;int[,r;int,g;int,b;int,alpha;int])が近い
相違点 iOSではグラフィック画面のドット色を直接得る関数はありません。
ただし、bitmapOpen(fdirect=YES)時にはbitmapPoint()が同等の機能を果たします。

機能 単色領域内を塗りつぶす
X68版書式 int paint(x;int,y;int,col;int)
iOS版書式 int bitmapPaint(x;int,y;int[,r;int,g;int,b;int,alpha;int])が近い
相違点 iOSではグラフィック画面で単色領域を直接塗りつぶす関数はありません。
ただし、bitmapOpen(fdirect=YES)時にはbitmapPaint()が同等の機能を果たします。

機能 ドットデータを配列に読み込む
X68版書式 get(sx;int,sy;int,ex;int,ey;int,na;数値型一次元配列)
iOS版書式 bitmapGet(sx;int,sy;int,ex;int,ey;int,buff;int型一次元配列)が近い
相違点 iOSではグラフィック画面からドットデータを直接取得する関数はありません。
ただし、bitmapOpen(fdirect=YES)時にはbitmapGet()が同等の機能を果たします。
格納データには互換性はありません。。

機能 配列内のドットデータをグラフィック画面に描画する
X68版書式 put(sx;int,sy;int,ex;int,ey;int,na;数値型一次元配列)
iOS版書式 bitmapPut(sx;int,sy;int,ex;int,ey;int,buff;int型一次元配列)が近い
相違点 iOSでは配列内のドットデータを直接グラフィック画面に直接描画する関数はありません。
ただし、bitmapOpen(fdirect=YES)時にはbitmapPut()が同等の機能を果たします。

機能 ファイル名一覧を得る
X68版 files "パス名"
iOS版 int files(pathes;1次元文字列配列[,basedir;str][,ext;str][,fhave;int][,mode;int][,freg;int])
相違点 X68では指定パス内のファイルの一覧を表示する「コマンド」でしたが、iOS版ではファイル一覧を配列に格納する「関数」になっています。
iOS版はサブディレクトリ内まで取得するのも異なる所です。

機能 スプライトの状態を得る
X68版 int sp_set(pl;int,[x;int][,y;int][cd;int][,prw;int])
iOS版 int sp_setting(pl;int[,x;int][,y;int][,sp;int][,pb:int][,flip;int][,prw;int])
相違点 機能的には同じですが、引数の範囲と与え方に違いがあります。

X-BASIC/68の同名関数またはステートメントとの違い

ここでは、X-BASIC/68とX-BASIC for iOSで同名の関数またはステートメントにおける違いを記述します。
数値引数の型およびリターン値のみ異なる関数もありますが、それについては記述していません(数値引数の型は自動変換されます)。
ここでは、引数の詳細についての説明は省略します。

関数名 apage
X68版書式 int apage(page;char)
iOS版書式 int apage(page;int)
相違点 page番号の設定値
pageの値が全く異なります。必ず定数を使って設定してください。

関数名 a_play
X68版書式 void a_play(na;数値型一次元配列,sf;char,md;char[,lng;char])
iOS版書式 int a_setPlayData(fname;str[,rateNo;int])
int a_play(no;int)
相違点 X68版ではバッファへのデータ登録やサンプリングレートの設定も行いますが、iOS版ではデータ登録はa_setPlayData()で行い、a_play()は再生のみを制御します。

関数名 box
X68版書式 box(sx;int ,sy;int ,ex;int ,ey;int,col;int[,style;int])
iOS版書式 box(sx;float,sy;float,ex;float,ey;float [,style;int])
相違点 座標の他、色コードの指定方法が違います(iOS版ではgcolor()で別途設定します)。
ビットマップにもbitmapBox()があります。

関数名 circle
X68版書式 circle(cx;int ,cy;int ,r;int ,col;int[,startAngle;int] [,endAngle;int] [,hv;int])
iOS版書式 circle(cx;float,cy;float,r;float [,startAngle;float][,endAngle;float][,clockwise;int][,ffill;int][,style;int])
相違点 座標の他、色コードの指定方法が違います(iOS版ではgcolor()で別途設定します)。
startAngle/endAngleの単位が異なります。X68は度、iOSはラジアンです。
角度単位を変換してstartAngle/endAngleを同様に設定しても、描画結果は異なります。X68での描画結果は以下の通りです。








iOSではclockwise,ffill指定が追加されています。
X68の扁平率指定hvがiOSにはありません。
ビットマップにもbitmapCircle()および扁平率を指定できるbitmapEllipse()/bitmapEllipse2()があります。

関数名 fill
X68版書式 fill(sx;int ,sy;int ,ex;int ,ey;int ,col;int)
iOS版書式 fill(sx;float,sy;float,ex;float,ey;float)
相違点 座標の他、色コードの指定方法が違います(iOS版ではgcolor()で別途設定します)。
ビットマップにもbitmapFill()があります。

関数名 line
X68版書式 line(sx;int ,sy;int ,col;int ,style;int)
iOS版書式 line(sx;float,sy;float,ex;float,ey;float[,ffill;int][,style;int])
相違点 座標の他、色コードの指定方法が違います(iOS版ではgcolor()で別途設定します)。
styleの設定に制約があります。
ビットマップにもbitmapLine()があります。

関数名 hsv
X68版書式 int hsv(h;char,s;char,v;char)
iOS版書式 int hsv(h;int,s;int,v;int[,alpha;int])
相違点 h/s/vの値範囲が異なります。 おおよそ次の式で変換出来ます。
h=h68*(360/192)
s=s68*(256/32)
v=v68*(256/32)

関数名 rgb
X68版書式 int rgb(r;char,g;char,b;char)
iOS版書式 int rgb(r;int,g;int,b;int[,alpha;int])
相違点 r/g/bの値範囲が異なります。
X68000の色コードをiOSの色コードに変換するにはx68Color2iOSColor()を使います。

関数名 symbol
X68版書式 symbol(sx;int ,sy;int ,string;str,h;char,mo;char,col;int,an;char)
iOS版書式 symbol(sx;float,sy;float,string;str,fontName;str,pointSize;float)
相違点 座標の他、色コードの指定方法が違います(iOS版ではgcolor()で別途設定します)。
X68版の以下の設定がiOS版にはありません。
h横方向の倍率
V縦方向の倍率
mo文字フォントの種類
an回転角度0~3(90度単位)
moはfontNameとpointSizeで相当します。

関数名 pset
X68版書式 pset(x;int ,y;int ,col;int)
iOS版書式 pset(x;float,y;float)
相違点 座標の他、色コードの指定方法が違います(iOS版ではgcolor()で別途設定します)。
ビットマップにもbitmapPset()があります。

関数名 vpage
X68版書式 vpage(page;char)
iOS版書式 int vpage(page;int,onoff;int)
相違点 pageの値が異なります。また、onoffが追加されています。

ステートメント名 width
X68版書式 width wx
iOS版書式 int width(wx;int[,wy;int][,fzenhan;int])
相違点 iOSでは関数になっています。また、wx=文字数は自由です。

ステートメント名 locate
X68版書式 locate x,y,カーソルスイッチ
iOS版書式 locate(x,y)
相違点 iOSでは関数になっています。また、カーソルスイッチの設定はありません。

関数名 inkey$()
X68版書式 inkey$(0)
iOS版書式 inkey$()
相違点 リアルタイムキー入力
iOSでは引数なし関数になっています。

関数名 pos
X68版書式 pos
iOS版書式 pos()
相違点 iOSでは関数になっています。

関数名 csrlin
X68版書式 csrlin
iOS版書式 csrlin()
相違点 iOSでは関数になっています。

関数名 beep
X68版書式 beep
iOS版書式 beep()
相違点 iOSでは関数になっています。

システム変数名 date$
相違点 iOSでは代入出来ません。

システム変数名 day$
相違点 iOSでは代入出来ません。

システム変数名 time$
相違点 iOSでは代入出来ません。

ステートメント名 goto
相違点 iOSでは行番号は使えません。

関数名 sp_stat(pl;int,md;int)
相違点 引数md=2に対するリターン値が異なります。またこれに伴い、md=3/4/5が追加されています。

関数名 sp_on
X68版 int sp_on([pl1;int][,pl2;int])
iOS版 int sp_on([pl1;int][,pl2;int][prw;int])
相違点 iOS版はprwの指定が出来ます。

関数名 sp_def
X68版 int sp_def(sp;int,na;char1次元配列[,sz;int])
iOS版 int sp_def(sp;int,ptn;intまたはchar1次元配列)
相違点 動作は同じですが、iOS版はパレットを使わない実色指定が可能のため、引数に相違があります。

関数名 sp_pat
X68版 int sp_pat(sp;int,na;char1次元配列[,sz;int])
iOS版 int sp_pat(sp;int,ptn;intまたはchar1次元配列)
相違点 動作は同じですが、sp_def()で与えるパターンの要素内容の違いから、パターンを入れる配列の型が異なります。またリターン値が異なります。

関数名 sp_color
X68版 int sp_color(p;int,col;int[,pb;int])
iOS版 int sp_color(p;int,col;int[,pb;int])
相違点 機能的には同じですが、色の指定方法が異なります。

関数名 bg_fill
X68版書式 int bg_fill(pg;int,sp;int)
iOS版書式 int bg_fill(pg;int,sp;int[,pb;int][,flip;int])
相違点 X68ではspにpbとflipの情報もORで入れ込む必要がありますが、iOS版は分離して与える必要があります。

関数名 bg_put
X68版書式 int bg_put(pg;int,x;int,y;int,sp;int)
iOS版書式 int bg_put(pg;int,x;int,y;int,sp;int[,pb;int][,flip;int])
相違点 X68ではspにpbとflipの情報もORで入れ込む必要がありますが、iOS版は分離して与える必要があります。

関数名 bg_get
X68版書式 int bg_get(pg;int,x;int,y;int)
iOS版書式 int bg_get(pg;int,x;int,y;int[,pb;int][,flip;int])
相違点 X68ではリターン値にpbとflipの情報もORで入っていますが、iOS版は独立して返します。

X-BASIC for iOSのX-BASIC/68との互換性について

X-BASIC for iOSは基本的に「SHARP X68000のX-BASIC v2.0」(以下X-BASIC/68) および「ぺけ-BASIC v0.2」と互換性を持っています。
プログラムもSHIFT-JISのまま読み込むことが出来ます。

主な違いは以下の通りです。
for iOS X-BASIC/68 ぺけ-BASIC
行番号 ×(自動削除)
gosub × ×
goto行番号 ×
goto "ラベル" 常時○ × 設定で○
goto *ラベル × × 設定で○
戻り値のないreturnで()の省略 ×
エディタ 内蔵 内蔵 なし(呼び出し可)
コマンド なし(一部関数化)あり なし
ダイレクト実行 不可 不可
?(print省略形) ×
その他省略形 × ×
文字列長 設定で変更可 任意に設定可 255バイト固定
配列次元 10次元 255次元 10次元
配列要素上限 OS状態による FREE設定まで OS上限まで
宣言なしint変数標準ではエラー 警告
dimなし配列 標準ではエラー 警告
表示コントロールコードCTRL-G/CTRL-J以外ありあり 一部あり
多バイト文字の
バイト単位出力による表示
×
chars2Sjis()/chars2UTF8()で処理可能
可変長配列 常時○ なし 設定で○
配列引数 常時○ なし 設定で○
using指定 文字列定数のみ 変数も可文字列定数のみ
using ! 1文字 1バイト 1バイト
using "%" 不足桁を0で埋める%が表示される %が表示される
e表現float
(>3e10,4E-10など)
×(バグ)
単項演算子の連続
(-notなど)
×(バグ)
起動時引数 なし なし 設定で○
startup.bas
(自動実行ファイル)
あり なし なし
変数の初期化 常時 常時 設定でなし
エラー停止 コンパイル時は全体
実行時発生行
実行時発生行 コンパイル時発生行
実行時発生行
date$/time$ 代入不可 代入可 代入可
inkey$ あり
ただしタッチまたはファンクションキー設定が必須
あり あり
外部関数互換性 機種依存分以外 あり あり
マルチステートメント 可(省略不可)
//コメント × ×
空行 ×
ファイルエンド サイズ/&h1a &h1a必須 サイズ/&h1a
文字コード UTF-8/SHIFT-JISSHIFT-JIS SHIFT-JIS
変数宣言時代入 制約なし 定数式のみ 制約なし
.cnf設定 一部SETUP あり 拡張あり
マルチステートメントについてはわかりにくいので補足しておきます。
X-BASICでは ':' で区切ることでマルチステートメントを書けますが、X-BASIC/68ではその後の文を省略できません(存在しないとエラーになる)。iOS版及びぺけ-BASICでは省略できます。
この差は特にcase文で顕著になります。
case 1:    X-BASIC/68ではエラーになるのでcase 1と記述しなければならない


オーバーフローチェック
for iOSX-BASIC/68 ぺけ-BASIC補足
charで255+1 0 エラー 0 8ビットオーバーフロー
0-1 255 エラー 255 8ビットアンダーフロー
dim a(65536) dim a(0)相当 エラー dim a(0)相当配列要素数は16ビットで管理されているから

また、ハードやOSの違い等により、以下の項目の取り得る値や規則が異なります。
  • テキスト座標
  • グラフィック座標(float)
  • スプライト枚数(定義/表示)、座標
  • 色コード
  • ファイル名規則
  • メモリの格納順はL→H(リトルエンディアン)
一部はX-BASIC/68→X-BASIC for iOS変換関数が存在します。

さらに、ほぼ同じ動きを目指した関数でも、iOSとX68実機の動作の違いにより、結果が微妙に異なる場合があります。特にグラフィック系は、iOSは基本的にアンチエイリアスと合成描画を基本としているため、描画結果がX68と異なる場合が多々あります。さらに、テキスト画面の座標とグラフィック画面の位置関係がX68とは異なります。

ぺけ-BASICのバグについて(見つけ次第更新)

X-BASIC for iOSの開発に際しては、「ぺけ-BASIC」を大いに参考にさせていただきました。

中間コードにコンパイルしてから実行するという構造もそこからいただきました。

「ぺけ-BASIC」は物理的に速くないX68000上で、出来るだけ速くX-BASICを動かそうとする優秀なプログラムですが、いかんせんオールアセンブラな上にメンテナンス性が考慮されてない記述だったため、解析はきわめて難しいものでした。
(68000というMPUやアセンブラHASに強く依存する記述や、定数化してない即値記述が非常に多いなど。)

原作者の方が「バグ取り以外はしない」とおっしゃられていましたが、実際のところ「それ以外出来ない」状況にあったというのが真実でしょう。
少しでもいじろうもんなら他の部分に影響を与える、そんな、ある意味「絶妙なバランス」でした。

今回の開発ではX-BASIC/68だけでなくぺけ-BASIC上でも動作確認をしましたが、
いろいろとバグを発見しました。今更ではありますが、ここに公開しておきます。
もちろん、iOS版ではすべて解消しています。
  • floatの変数初期化サイズが足りていない
    要するに宣言しただけでは0.0にならないと言うことです。
    float変数を使う場合、明示的に初期化しないと正しくない結果をもたらします。

  • float定数のみ f1 * -f2で「無効な命令が発生する」
    「例」4.321*-5.01
    X-BASIC/68はOK
    int/charはOK

  • 単項演算子が連続すると式エラーが出る
    not -/-notなど
    float/int/charすべて
    X-BASIC/68はOK
    ()を付ければ回避できる

  • usingの結果および書式指定の方法がX-BASIC/68と異なる
    "+##"の結果
    "\.#"の結果(整数部なしで\をつける)
    ^^^^^指定時に,を付けたらエラーになる
    X-BASIC/68ぺけ
    -^^^^^^^^^^-
    +****+

  • printの数値表示時の桁位置が違う
    X-BASIC/68符号(+の時は空白)+数値+空白1文字
    ぺけ空白+符号付き数値+空白

  • e表現floatが使えない
    3.14e10など

  • then {またはelse {の後に:/*と書くとエラーになる
    コメントを書く場合、:なしで/*と書かなければならない
    内部的にはマルチステートメントの処理に問題がある
    X-BASIC/68でもelse {で発生する。

  • tan(pi(1.0/2.0))の計算結果がおかしい
    6.2184311638237E+015となってしまう。
    正解は1.6331239353195E+016
    X-BASIC/68も同じなので、XM6 typeG/xm6i、もしくはfloat2.xのバグかもしれない。ちなみに、sin()/cos()で計算すると正しい。
    sin(pi/2)/cos(pi/2)=1.6331239353195E+016
    以下も正しい。
    tan(pi/4)=1
    tan(pi/8)=0.4142...
  • 配列を引数に持つ関数の中で、子関数にその配列を渡すときエラーが発生する
    func testFunc(n;int,s(4,1);str)

    subFunc(s) :// ここでエラーが発生する
    endfunc
    func subFunc(s(4,1);str)

    endfunc
    引数配列の要素数は省略が可能=呼び出し時に確定されるため、コンパイル時には未定のままになっています。 ところが、その確定処理が抜けているためエラーが発生しています。
    なお、要素数を省略してない場合もエラーになります。

  • 関数の引数名が関数名と同じだったとき、func文で変数二重宣言エラーが発生する
    関数の引数名は関数名と同じにしないでください。
    なおこれはX-BASIC/68では発生しませんが、ぺけ-BASICで発生します。
    バグというより仕様です。両者の数少ない非互換部分の1つです。

  • func message(n;  int , rt;  int)のように、引数型を示す;の後にスペースを入れると内部エラーが発生する。
    スペースを取るとOK。X-BASIC/68では発生しない。

  • using "~"の後ろにスペースを置くとエラーが発生する
    using "###";a /* OK
    using "###" ;a /* エラー
    X-BASIC/68では発生しない。

  • 0除算をしてもエラーが発生しないことがある
    例えば、以下の時にそうなります。
    print "1/0=";1/0 /* エラーが発生するはずなのに1と表示される
    /*
    int a=0
    int b=0*(1-1#/(a*a))
    print "b=";b  /* 2147483647と表示される
    /* ちなみに
    print 0*(1-1#/(a*a)) /* #NANと表示される
    int b=0*(1-1/(a*a))  /* とするとエラーが発生する
    どういう条件ではエラーが発生しないのかまでは突き止めてませんが、どうも整数はエラーになっても実数演算で0になるときはエラーにならないような感じです。
    なお、X-BASIC/68ではすべてエラーになります。

以下は、ソース内に見つけた不具合らしき部分です。実動作では確認してません。
  • 以下の物が32767個を超えると異常動作を起こす
    変数の個数(グローバル/ローカル別)
    ラベル最大数
    行番号の実利用数
  • 行番号に65535を使うと異常動作する
  • func で配列引数を取った時、dim(n,m の後に)以外の文字があると其の分ワークが無駄に消費される
    たぶん暴走はしないけど、おかしい
  • 配列の初期化
    {}の個数が宣言した要素数より多い時、中間コードエリアを破壊する
    一応後でエラーを出す処理は入っているが、そこまで行くまでに(メモリ内容を破壊して)異常動作を起こす可能性がある
  • 関数で配列引数のとき3次元以上の配列を与えてもエラーが発生しない
    次元判定に使うレジスタを間違っている
  • 配列への代入がおかしい
    レジスタの参照を間違っているので。
    たぶん ぺけ-BASIC はたまたま動いてるだけ。
  • 文字列定数加算をしたとき
    その合計サイズが256バイトを超えるとワークを破壊する
    その領域を別の文字列変数がすでに使っている場合、その内容が化ける
    加算を繰り返すと其の都度新しいワークを割り付けるため、メモリ不足に陥りやすい
  • 拡張配列を関数の引数にしたとき、要素数テーブルを過剰にクリアしてしまう
  • 配列宣言で、閉じ括弧がなくソースが終わったときにハングアップする。
    多次元配列で,の後がなくソースが終わったときも同様。
なんにしても、動作を考える上でぺけ-BASICが参考になったのは紛れもない事実です。
この場で感謝いたします。

ーーーーーーーーーーーーーーーーーーーーーーーー
おまけ
X-BASIC/68のバグ。

・引数なし関数の定義をするとき、func f( ) とカッコ内にスペースが有るとき、呼び出し側で「式の記述が間違っています」エラーが発生する

f() :/* ここで発生

引数なしの時は ()としなければならない。
 ぺけーBASICでは発生しない。

・プログラムファイルの終端を&h1aだけで判断しているため、それがないファイルを読み込ませた時、プログラムにゴミが入ることがある。
変な行が途中に入ってエラーが発生する事が多い。
これはバグというより「仕様」。