1.アプリケーション説明
(実行例とダウンロードは ↓ 下の方 ↓ にあります)
1.1.概要
SPALMは、携帯上でプログラムを入力して動作確認ができる プログラミング言語です。
本アプリは、そのSPALMのインタープリターを Web上で実現したものです。
(スマホ等は未対応で PCのみ対応です)
オリジナルの情報は、以下にあります。SPALM作者の方々に感謝いたします。
http://www.wikihouse.com/spalm/index.php?FrontPage
本インタープリターでは、HTML5とJavaScriptを使用して各機能を実現しています。
現状では、ブラウザは Google Chrome でないと動作しないと思われます。
また、特有の制限事項があります。
1.2.使い方
ファイル
sp_interpreter.html
sp_interpreter.js
sp_plugin0001.js
を同一フォルダに置いて、
sp_interpreter.html
をブラウザで開くと起動します。
(1)プログラムの実行
テキストボックスにプログラムを入力して 実行ボタンを押すと実行します。
停止ボタンを押すか、プログラムの最後まで実行すると停止します。
(例えば、text("Hello",10,10,0) と入力して実行ボタンを押すと、
画面に Hello と表示して停止します)
(2)デバッグ用機能
詳細表示のチェックボックスにチェックを入れてから実行すると、
画面下部に各種情報を表示します。
(3)ロード機能
ロードボタンを押すと、リストの番号に対応した prog0001.txt 等のファイルを、
テキストボックスに読み込みます。
(※)現状、ブラウザのセキュリティの関係で、
ローカル環境では、ファイルの読み込みに失敗します。
(Google Chrome を --allow-file-access-from-files オプションを付けて
起動すると読み込めるようですが、セキュリティ上 好ましくないようです)
読み込むファイル名は、progXXXX.txt (XXXXはリストの番号) に固定です。
リストの番号は list0001.txt に記述したものが表示されます。
ファイルの文字コードは、UTF-8N のみ対応です。
各ファイルは、本体と同一フォルダに配置する必要があります。
(4)セーブ機能(なし)
セーブ機能は存在しないため、変更したプログラムは各自でテキストエディタ等に
コピーして保存する必要があります。
(5)キーの割り付け(固定)
プログラム上で携帯の各ボタンは、以下のように割り付けています。
上下左右 → 矢印キー
決定キー → スペース/Enter/Ctrlキー
0~9 → [0]~[9]キー
* → [z]キー
# → [x]キー
soft1 → [c]キー
soft2 → [v]キー
1.3.制限事項
以下の制限事項が存在します。
(1)ループのプログラムで固まる
ブラウザのJavaScriptがシングルスレッドであるため、
ループのプログラムを実行すると、ブラウザごと固まってしまいます。
このとき、画面の描画等も更新されません。
(3秒以上経過した場合には、インタープリターがプログラムを強制的に終了します)
今のところ、この問題に対処するにはプログラムの修正が必要です。
具体的には、以下のようにループの内側にsleep()を挿入してください。
while(!keydowncode){ } // キー入力待ち(固まる)
↓
while(!keydowncode){ sleep(100) } // キー入力待ち(固まらない)
sleep()によって、ブラウザに制御を返し、固まる現象を防ぐことができます。
(v3.00からユーザ定義の関数内でもsleep()命令が有効になりました)
(2)非互換の命令
(a)save(),load()は、内部変数に保存するのみです。
プログラムが終了するとセーブデータは消えます。
(b)gc(),lock(),unlock()は、実行しても何もしません(エラーにもなりません)。
(c)goto,gosubのジャンプ先に計算式を指定する機能には非対応です(v6.00から)。
(3)未対応の命令
(a)try ~ catch には未対応です(エラーになります)。
(b)分割ロード(#ソース#) には未対応です(エラーになります)。
1.4.追加機能
以下の追加機能が存在します。
(1)1行コメント
// で1行コメントになります。
(2)名前(変数名等)に使える文字
アンダースコア(_)が名前に使用できます。
(3)小数対応
数値、変数は基本的に小数対応になります。
(v8.03から、数値の指数表記も読み込みが可能になりました(1e-1 等))
(4)ローカル変数対応
ユーザ定義の関数内でローカル変数を使用できます。
(v6.00から、ローカル変数はloc(またはlocal)による宣言が必要になりました)
(5)ポインタとアドレス的なもの
*と&を変数の前につけると、ポインタとアドレス的な使い方ができます。
また、似た記述で、関数ポインタ的な使い方ができます。
また、配列変数の[ ]内に文字列が指定できることを利用して、
構造体的なものを記述できます。
(詳細は「2.1.文法」の(12)-(14)を参照ください)
(6)簡易モジュール機能
module命令により、簡易モジュール機能を使用できます。
モジュールを使用すると、グローバル変数名等がバッティングするリスクを
減らすことができます。
(詳細は「2.1.文法」の(15)を参照ください)
(現状、モジュールを別のファイルに分離することはできません)
(本命令は、v14.00で追加され、v18.00で制御命令になりました。
記述方法が module(MZ) から module MZ { } に変わったため、
v18.00より前のバージョンとは互換性がなくなっています)
(7)互換モード
spmode(1) をプログラムの先頭に書くと、互換モードで動作します。
このとき、以下の項目が適用されます。
(a)フォントサイズが "T" にセットされます(最小サイズ)
(b)ローカル変数未使用になります
(c)割り算 / の結果が整数化されます
(d)sin,cos,tan が 100倍した整数値を返すようになります
(e)3項演算子(?:)の末尾にセミコロン(;)が必要になります
互換モードでは、「オリジナルのSPALM用のプログラム」がそのまま動作する可能性が高くなります。
(しかし現状では、1.3.の制限事項のため、結局プログラムの書き換えが必要になる場合があります)
(8)追加命令
以下の追加命令が使用可能です。
環境判定用 sptype
互換モード spmode()
ローカル変数使用/未使用 onlocal(),offlocal()
変数宣言 loc,local,glb,global
moreグラフィックス関係 cls(),drawarea(),drawscaledimg(),
setpixel(),getpixel(),point()
(その他、drawimg()の引数にscreenを指定可)
more数学関係 acos(),asin(),atan(),dcos(),dsin(),dtan(),
dpow(),sqrt(),exp(),log(),PI,
int(),ceil(),floor(),setscl()
more日時関係 year,month,day,dayofweek,hour,minute,second,millisecond
moreキー定数 key0~key9,keystar,keysharp,keyup,keyleft,keyright,keydown,
keyselect,keysoft1,keysoft2
more色定数 red,green,blue,aqua,yellow,gray,white,black,navy,teal,
maroon,purple,olive,silver,lime,fuchsia
演算子 \ >>> += -= *= /= %= \= .= &= |= ^= <<= >>>= >>=
制御命令 continue, module
関数呼び出し funccall(),funcgoto()
定数定義 defconst(),disconst()
デバッグ用 dbgprint(),dbgstop(),dbgloopset(),dbgdrawfix(),dbgpointer(),dbgtest()
数学関係 atan2(y,x),sign(),sign2(),random
日時関係 week
時間関係 sleepsync()
文字列操作 split(),trim(),replace(),join()
変数関係 chkvar()
配列変数関係 copyall(),makearray(),disarray(),arraylen()
フォント設定 setfontsize()
キー入力 keydowncode,keyscan(),keypresscode,keyinput()
マウス操作 mousex,mousey,mousebtn
ダイアログ msgdlg(),yndlg(),inputdlg()
画面設定 setscsize(),scale(),rotate()
グラフィックス関係 linewidth(),loadimgdata(),loadimgstat(),
imgwidth(),imgheight(),drawimgex(),devpixratio
データダウンロード download(),downloadimg()
外部データ取得/設定 getoutdata(),setoutdata()
また、上記以外にも「2.5.組み込み関数2」~「2.8.組み込み関数5」の命令が追加されており、
それらも使用可能です。
1.5.不具合
(1)音楽演奏の問題
audspeedrate() により再生速度レートを1より小さく設定すると、
演奏が途中で途切れて、状態は再生中のままになる。(2015-5-15 確認)
→ Chrome v42 の問題らしい。
https://bugs.chromium.org/p/chromium/issues/detail?id=484935
→ Chrome v44 で修正された。(2015-8-8 確認)
(2)グラフィックス表示の問題
Chrome v57 で GPU使用あり設定 (accelerated-2d-canvas : ON) のとき、
getpixel(), fillarea() 等の内部で画面データを取得する命令を実行した後、
256x256 より大きい画像を drawimg() すると、画面が更新されない状態になる。
(2017-3-16 確認)
→ 以下の Chrome の問題による。
https://bugs.chromium.org/p/chromium/issues/detail?id=702492
(Chrome で GPU使用あり設定 (accelerated-2d-canvas : ON) のとき、
256x256 より大きい Canvas を生成して、getImageData → drawImage
の順に実行すると、Canvas の表示が更新されない状態になる。
このとき、HTML上で何か表示を変更すると、復旧する。
(Intel HD Graphics 5500 で確認))
→ 暫定対策として、dbgdrawfix() という命令を追加し、HTML上の表示を変更可能とした。
drawimg() 後に dbgdrawfix() を実行することで、表示を復旧できる。
→ Chrome v57 のマイナーバージョンアップ(v57.0.2987.133)で修正された。
(2017-3-30 確認)
1.6.環境等
OS : Windows 10 (version 21H2) (64bit)
ブラウザ : Chrome v104
でのみ動作確認。
流用ベース : SPALM more v1.41
ライセンス : オリジナルと同様とします(GPL v2)
1.7.履歴
2012-12-28 v1.00 (初版)
2012-12-29 v1.01 キー定数と色定数を追加
キー入力機能のkeydownをkeydowncodeに変更
(名前がキー定数とかぶったため変更。サンプルも修正)
2012-12-29 v1.02 定数の展開ミス修正
2012-12-29 v1.03 ファイル読み込み処理一部変更
2012-12-29 v1.04 メッセージ変更等
2012-12-30 v1.05 内部命令(ifgoto,ifnotgoto)をユーザから使用不可にした
2012-12-31 v1.06 命令追加(split(),trim(),tobinstr(),tohexstr())
2013-1-1 v1.07 エラーメッセージ一部修正等
2013-1-8 v1.08 エラーメッセージ一部追加等
2013-1-8 v1.09 命令追加(setscsize(),replace(),frombinstr(),fromhexstr())
2013-1-9 v1.10 命令追加(tolower(),toupper())
2013-1-10 v1.11 一部修正(charfrom(),charcode()等)
2013-1-12 v1.12 一部追加命令の処理を分離(addfunc(0)で無効化可能)
ポインタとアドレス的なもの(*と&)を追加
2013-1-13 v1.13 ポインタ処理修正
2013-1-16 v1.14 命令追加(MML音楽演奏)
2013-1-17 v1.15 命令追加(マウス操作対応)
2013-1-18 v1.16 一部修正(MML音楽演奏等)
2013-1-22 v1.17 命令追加(randint(),colalpha(),coloralpha())
2013-1-24 v1.18 一部修正(canvas処理、MML音楽演奏等)
2013-1-26 v1.19 命令追加(audstat())
2013-1-28 v1.20 命令追加(文字列一括操作、ミサイルオブジェクト等)
一部修正(hasOwnPropertyの使用、NaN対策等)
2013-1-29 v1.21 一部修正(txtdrawimg())
2013-1-29 v1.22 一部修正(mistext())
2013-2-1 v1.23 命令追加(fboxchk())
2013-2-1 v1.24 一部修正(全角スペースが半角のサイズで表示される件の対策)
2013-2-1 v1.25 一部修正(txtline())
2013-2-2 v1.26 一部修正(save(),load())
2013-2-3 v1.27 一部修正(audplay()の連続実行対応)
2013-2-12 v1.28 プログラムリスト対応
一部修正(ミサイルオブジェクト、コメント処理)
2013-2-12 v1.29 一部修正(エラーメッセージ)
2013-2-14 v1.30 命令追加(fillarea(),audmode())
一部修正(getpixel(),audstat())
2013-2-16 v1.31 一部修正(コメント追加等)
2013-3-9 v1.32 一部修正(switchの展開ミス修正、ソフトキー表示のキー非表示対応、マウス処理一部変更)
2013-3-17 v1.33 命令追加(tohankaku(),tozenkaku())
2013-3-19 v1.34 一部修正(ポインタ処理変更)
2013-3-19 v1.35 命令追加(tofloat(),toint(),tostr())
2013-4-18 v1.36 一部修正(コメント追加等)
2013-4-18 v1.37 命令追加(scale())
一部修正(setscsize())
2013-4-21 v1.38 命令追加(関数ポインタ的なもの、copyall())
2013-4-21 v1.39 命令追加(spweb)
2013-4-23 v1.40 命令追加(rotate(),linewidth())
2013-4-27 v1.41 命令追加(data URI schemeでの画像/音楽データの埋め込みに対応
loadimgdata(),loadimgstat(),
audmakedata(),audmakestat(),audspeedrate(),audvolume())
一部修正(transimg())
2013-5-9 v1.42 一部修正(MML音楽演奏のテンポ計算見直し)
2013-5-10 v1.43 一部修正(delete前のチェック追加)
2013-5-12 v1.44 一部修正(エラーメッセージ)
2013-5-16 v1.45 一部修正(変数名取得処理、エラー処理等)
2013-5-16 v1.46 一部修正(MML音楽演奏)
2013-5-20 v1.47 HTMLファイルとJSファイルに分離
2013-5-27 v1.48 一部修正(マウス処理修正)
2013-5-28 v1.49 一部修正(コメント修正)
2013-6-5 v1.50 一部修正(背景色と文字色を変更)
2013-6-5 v1.51 一部修正(エラーチェック追加)
2013-6-7 v1.52 一部修正(プログラムを整理)
2013-6-15 v1.53 命令追加(poly(),fpoly())
2013-6-15 v1.54 一部修正(poly()の省略可能引数追加)
2013-7-5 v1.55 命令追加(join(),calcfrac())
一部修正(配列等エラー処理追加、一部クラス外部化)
2013-7-8 v1.56 一部修正(ローカル変数とポインタ処理変更)
命令変更(calcfrac()→calcfractal())
2013-7-12 v1.57 命令追加(makearray(),disarray())
2013-7-13 v1.58 命令追加(arraylen())
一部修正(makearray()とdisarray()の引数意味変更、長期sleep()中の停止ボタン有効化)
2013-7-13 v1.59 一部修正(ローカル変数とポインタ処理変更)
2013-7-13 v1.60 一部修正(disstrimg()とsetstrimg()のエラーチェック追加)
2013-7-13 v1.61 一部修正(ローカル変数とポインタ処理変更)
2013-7-15 v1.62 一部修正(キーボード処理変更、時間測定高速化、プロファイラ用クラス追加等)
2013-7-16 v1.63 一部修正(関数ポインタを関数の引数に渡せるように修正)
2013-7-16 v1.64 一部修正(変数名にhasOwnPropertyを使うとエラーになる件を対策)
2013-7-19 v1.65 一部修正(Image変数のポインタを関数の引数に渡せるように修正)
2013-7-20 v1.66 一部修正(関数の引数のポインタ処理修正)
2013-7-25 v1.67 命令追加(imgwidth(),imgheight())
2013-7-26 v1.68 命令追加(sandmake(),sandmove(),sanddraw())
2013-7-27 v1.69 一部修正(sandmake()の省略可能引数追加)
2013-7-28 v1.70 一部修正(エラーメッセージ)
2013-8-24 v1.71 命令追加(downloadimg(),getoutdata(),setoutdata())
2013-8-26 v1.72 一部修正(download()の戻り値修正)
2013-8-27 v1.73 一部修正(download(),downloadimg()の省略可能引数変更)
2013-8-31 v1.74 一部修正(download())
2013-9-13 v1.75 一部修正(copyall()のエラーチェック追加)
2013-9-18 v1.76 一部修正(配列変数処理一部変更等)
2013-9-20 v1.77 一部修正(内部処理の関数名一部変更)
2013-9-22 v1.78 一部修正(命令検索に連想配列を使うように変更)
2013-9-24 v1.79 一部修正(演算子検索に連想配列を使うように変更)
2013-9-24 v1.80 一部修正(3項演算子)
2013-9-25 v1.81 一部修正(エラー処理等)
2013-9-28 v1.82 一部修正(関数の引数のポインタ処理変更)
2013-10-8 v1.83 命令追加(devprint())
一部修正(mismake(),mistext()で複数行のミサイル描画を可能にした)
2013-10-9 v1.84 一部修正(ミサイルオブジェクトの斜め移動処理変更)
2013-11-25 v1.85 一部修正(Ctrlキーを携帯の決定キーに割付追加)
2014-1-21 v1.86 一部修正(プログラム一部見直し)
2014-2-1 v1.87 一部修正(Web Audio APIの命令変更に対応)
2014-2-1 v1.88 一部修正(HTMLにダミーボタン追加)
2014-2-4 v1.89 一部修正(初期化処理見直し)
2014-2-18 v1.90 プラグイン対応(実験中)
命令追加(txtreplace(),drawpyramid(),intstradd())
2014-2-20 v1.91 一部修正(txtreplace())
命令追加(txtreplace2())
2014-2-22 v1.92 一部修正(変数処理見直し)
2014-2-26 v1.93 一部修正(プラグイン処理見直し)
2014-2-26 v1.94 一部修正(初期化処理見直し)
2014-2-27 v1.95 一部修正(変数処理見直し)
2014-3-16 v2.00 命令追加(dbgstop(),>>>演算子(符号なしの右シフト))
命令変更(devprint()→dbgprint())
2014-3-16 v3.00 簡易VM対応(スタックマシンのコードに変換してから実行するようにした)
2014-3-20 v3.01 一部修正(スタックマシンのコードを数値化)
一部修正(input(),keyinput()でキー入力を待てるようにした)
一部修正(エラー処理見直し)
2014-3-24 v3.02 一部修正(funccall(),misfreeno())
一部修正(エラー処理見直し)
2014-3-25 v3.03 一部修正(コメント修正等)
2014-3-26 v3.04 一部修正(エラーチェック追加、命令定義処理見直し)
2014-3-26 v3.05 追加命令の多くをプラグインに移動
2014-3-27 v3.06 一部修正(コメント追加等)
2014-3-28 v3.07 一部修正(キー入力待ち処理見直し、エラー処理見直し)
2014-3-28 v3.08 一部修正(プレインクリメント処理見直し)
2014-3-29 v3.09 一部修正(エラー処理見直し)
2014-3-30 v3.10 一部修正(ファイル読み込み処理見直し、エラー処理見直し)
2014-3-30 v3.11 一部修正(プログラム一部整理、エラー処理追加)
2014-3-31 v3.12 一部修正(エラーチェック追加)
2014-3-31 v3.13 一部修正(エラーチェック追加)
2014-4-1 v3.14 一部修正(プログラムを整理)
2014-4-5 v3.15 一部修正(コード実行処理見直し)
命令追加(chkvar())
2014-4-7 v3.16 命令追加(funcgoto(),intstrmul(),intstrdiv())
2014-4-8 v3.17 一部修正(エラー処理見直し)
2014-4-9 v3.18 一部修正(エラー処理見直し)
2014-4-10 v3.19 一部修正(dbgprint(),poly(),fpoly()等)
2014-4-12 v3.20 命令追加(drawshape())
命令削除(drawpyramid())
2014-4-15 v3.21 一部修正(エラー処理見直し)
2014-4-18 v3.22 命令追加(drawimgex())
一部修正(scale(),txtreplace(),txtreplace2())
2014-4-19 v3.23 一部修正(drawimgex())
2014-4-20 v3.24 一部修正(dayofweek)
命令追加(week)
2014-4-27 v3.25 一部修正(txtdrawimg())
2014-5-5 v3.26 一部修正(キー入力待ちのときに停止できない件を修正)
2014-5-7 v3.27 一部修正(プログラム一部見直し)
2014-5-24 v3.28 一部修正(変数処理見直し等)
2014-5-25 v3.29 一部修正(プログラム一部見直し)
2014-6-1 v3.30 一部修正(命令の定義処理見直し(プラグインも))
2014-6-18 v3.31 一部修正(コメント修正のみ)
2014-7-7 v3.32 一部修正(intstradd(),intstrmul(),intstrdiv())
2014-7-10 v3.33 一部修正(コメント修正のみ)
2014-7-29 v3.34 一部修正(ラベル名の処理変更)
命令追加(defconst(),defconst2(),disconst())
2014-8-6 v3.35 一部修正(dbgprint(),dbgstop()をプラグインから本体に移動)
命令追加(dbgloopset())
2014-8-6 v3.36 一部修正(関数の引数のポインタ処理修正(v3.28でエンバグ))
2014-8-22 v3.37 一部修正(配列変数の検索処理を一部変更)
2014-8-23 v3.38 一部修正(関数の仮引数はデフォルトでローカル変数とする)
2014-8-24 v3.39 命令追加(audcheck())
2014-10-28 v3.40 一部修正(MML音楽演奏処理見直し)
2014-11-1 v3.41 一部修正(MML音楽演奏処理修正)
2014-11-3 v3.42 一部修正(MML音楽演奏処理見直し)
2014-11-6 v3.43 一部修正(MML音楽演奏処理見直し)
2014-11-8 v3.44 一部修正(コメント修正のみ)
2015-1-18 v3.45 一部修正(エラーチェック追加等)
2015-1-19 v3.46 一部修正(エラーチェック追加等)
2015-5-15 v3.47 一部修正(変数処理見直し等)
2015-5-16 v3.48 一部修正(ファイル読み込みのIE11対策)
命令追加(devpixratio(組み込み変数))
2015-5-17 v3.49 一部修正(変数処理見直し)
2015-5-17 v3.50 一部修正(変数処理見直し)
2015-6-6 v3.51 一部修正(文字列一括操作の処理見直し)
命令追加(txtpoly(),txtfpoly())
2015-6-6 v3.52 一部修正(コメント修正のみ)
2015-6-6 v3.53 一部修正(txtfpoly()の塗りつぶしもれ修正)
2015-6-7 v3.54 一部修正(txtfpoly()の処理ミス等)
2015-6-7 v3.55 一部修正(txtfpoly()の処理見直し等)
2015-6-8 v3.56 一部修正(parseInt(x,10)が指数をうまく変換できないため、
Math.trunc(+x)に変更。またparseFloat(x)も(+x)に変更。
その他、DigitCalcクラス見直し等)
2015-6-9 v3.57 一部修正(DigitCalc,MMLPlayer,SandSimクラス一部見直し)
2015-6-10 v3.58 一部修正(Math.trunc(+x) → Math.trunc(x) 他)
2015-6-10 v3.59 一部修正(コメント修正のみ)
2015-6-12 v3.60 一部修正(スタックマシンの関数呼出方法を一部見直し
funcgoto()の処理見直し)
2015-6-15 v3.61 一部修正(フォントサイズ設定処理見直し等)
2015-6-16 v3.62 一部修正(txtcircle(),txtfcircle()の処理見直し
DigitCalc,ConvZenHan,FloodFillクラス見直し
命令変更(sandmake(),sandmove(),sanddraw()に引数追加(過去との互換性なし)
命令追加(dissand())
2015-6-17 v3.63 一部修正(clearvar()でsand_objのクリア追加。DigitCalcクラス一部見直し)
2015-6-17 v3.64 一部修正(スタックマシンの命令コードに正符号と論理否定のコードを追加)
2015-6-18 v3.65 一部修正(DigitCalc,ConvZenHan,SandSimクラス見直し。その他、書式修正等)
命令追加(intstrsub())
2015-6-21 v3.66 一部修正(misfreeno(),txtbchk()の処理見直し)
2015-7-12 v3.67 命令追加(sleepsync())
2015-7-21 v3.68 一部修正(sleepsync()の動作条件追加)
2015-8-8 v3.69 一部修正(プログラム終了時に音楽を中断して、CPU負荷を軽減するようにした)
2015-10-6 v3.70 命令削除(defconst2())
一部修正(loc a,b,c のように、複数の変数をカンマ区切りで一括宣言可能とした)
2016-6-19 v3.71 命令追加(txtbchk2())
一部修正(txtdraw(),txtdrawimg()にアンカー引数追加)
一部修正(その他、一部処理見直し等)
2016-6-21 v3.72 命令追加(clamp())
一部修正(その他、一部処理見直し等)
2016-6-22 v3.73 一部修正(dbgloopset()の処理見直し)
2016-7-8 v3.74 命令追加(sign(),setfontsize())
2016-7-9 v4.00 設計見直し(組み込み関数の定義処理見直し(戻り値有無による区別をやめた)、
プラグインI/F変更(過去との互換性なし)、
内部処理の変数名のsymbolをtokenに変更等)
命令変更(addfunc()削除,keypress→keypresscode,fboxchk()→recthit()、
3項演算子の末尾のセミコロンは互換モード時のみとする
(過去との互換性なし))
命令追加(/* */コメント追加)
2016-7-9 v4.01 一部修正(互換モードの判定処理一部修正)
2016-7-10 v4.02 一部修正(spmode()のエラーチェック追加等)
2016-7-11 v4.03 一部修正(spmode()の処理一部修正)
2016-7-11 v4.04 一部修正(ロード中処理見直し、コード実行処理見直し、真偽値判定処理見直し等)
2016-8-19 v4.05 一部修正(命令の定義順の見直し等)
2016-8-21 v4.06 一部修正(プログラムリストの読み込みをスキップ可能とした)
2016-11-16 v4.07 命令追加(txtbchk2pt())
2016-11-21 v4.08 一部修正(txtbchk2pt()の処理見直し)
2017-3-1 v4.09 命令削除(/* */コメント削除(過去との互換性なし))
命令変更(spweb→sptype(過去との互換性なし))
2017-3-1 v4.10 一部修正(dbgloopset()の処理見直し等)
2017-3-2 v4.11 一部修正(dbgloopset()の処理見直し等)
2017-3-4 v4.12 一部修正(switch文の中からgotoで抜けると、スタックに値が残る件を修正)
2017-3-5 v4.13 一部修正(switch文のコード見直し)
2017-3-8 v4.14 一部修正(コード実行処理見直し)
2017-3-8 v4.15 一部修正(コード実行処理見直し)
2017-3-11 v4.16 命令追加(&=,|=,^=,<<=,>>>=,>>=)
2017-3-13 v4.17 命令追加(remap(),wrap())
2017-3-15 v5.00 設計見直し(変数処理見直し、プラグインI/F変更(過去との互換性なし))
2017-3-15 v5.01 一部修正(変数処理見直し等)
2017-3-17 v5.02 命令追加(dbgdrawfix())
一部修正(wrap())
2017-3-27 v5.03 一部修正(wrap())
2017-3-30 v6.00 仕様見直し(ローカル変数はloc(またはlocal)による宣言が必要、
goto,gosubのジャンプ先に計算式を指定する機能を削除、
名前の途中には「::」を挿入可能
(過去との互換性なし))
設計見直し(関数解析、変数処理、命令コードの変更等)
2017-3-31 v6.01 一部修正(変数処理見直し、ラベル名チェック処理追加)
2017-3-31 v6.02 一部修正(変数処理見直し、ラベル名チェック処理変更)
2017-4-2 v6.03 一部修正(変数処理見直し等)
2017-4-2 v6.04 一部修正(spmode()の処理見直し)
2017-4-2 v6.05 一部修正(switch文のcaseとfor文のコンパイル処理修正)
2017-4-4 v7.00 仕様見直し(spmode(),onlocal(),offlocal()の実行はプリプロセスに移動
(過去との互換性なし))
設計見直し(変数処理見直し等)
2017-4-5 v7.01 一部修正(コード実行処理見直し等)
2017-4-6 v7.02 一部修正(コード実行、アドレス解決、コンパイル、変数処理見直し等)
2017-4-7 v7.03 一部修正(アドレス解決、コンパイル、トークン分割処理見直し等)
2017-4-8 v7.04 一部修正(コンパイル、プリプロセス処理見直し等)
2017-4-9 v7.05 命令追加(vec3set(),vec3copy(),vec3add(),vec3sub(),vec3scale(),
vec3dot(),vec3cross(),vec3normalize())
2017-4-11 v7.06 一部修正(連想配列オブジェクトの処理見直し等)
2017-4-11 v7.07 一部修正(変数処理見直し)
2017-4-12 v7.08 一部修正(ブラウザ関連処理見直し、複合代入演算子の使用等)
2017-4-14 v8.00 設計見直し(スタックマシンのジャンプ処理見直し等)
一部修正(vec3set(),vec3copy(),vec3add(),vec3sub(),vec3scale(),vec3dot())
2017-4-14 v8.01 一部修正(スタックマシンのコード見直し(storenum,storestr→push等))
2017-4-14 v8.02 一部修正(funcgoto()の処理修正、予約名の追加等)
2017-4-17 v8.03 命令追加(数値の指数表記対応(1e-1等))
一部修正(数値の解析処理見直し/修正等)
2017-4-17 v8.04 一部修正(数値の解析処理見直し/修正等)
2017-4-17 v8.05 一部修正(文字列の解析処理見直し等)
2017-4-18 v8.06 一部修正(内部処理の関数名変更等)
2017-4-18 v8.07 一部修正(コメント修正のみ)
2017-4-18 v8.08 一部修正(トークン分割処理修正)
2017-4-18 v8.09 一部修正(ソフトキー表示処理修正等)
2017-4-18 v8.10 一部修正(トークン分割処理修正等)
2017-4-20 v8.11 一部修正(トークン解析の条件判定を一部見直し)
2017-4-23 v9.00 設計見直し(変数処理見直し(実行時に変数オブジェクトを使用)、
プラグインI/F変更(過去との互換性なし))
2017-4-23 v9.01 命令追加(dbgpointer())
2017-4-23 v9.02 一部修正(関数の引数のポインタ処理修正)
2017-4-23 v9.03 一部修正(組み込み関数の呼び出し処理見直し等)
2017-4-24 v9.04 一部修正(コード実行、変数オブジェクト、トークン分割処理見直し等)
2017-4-25 v10.00 設計見直し(変数オブジェクト(var_obj)を変数情報(var_info)に名前変更、
プラグインI/F変更(過去との互換性なし))
2017-4-25 v10.01 一部修正(変数処理見直し、コメント修正等)
命令追加(vec3mag())
2017-4-26 v10.02 一部修正(文字列の解析処理見直し等)
2017-4-27 v11.00 仕様見直し(行頭のポインタ「*」の前にセミコロン「;」を自動挿入する
(過去との互換性なし))
2017-4-28 v11.01 一部修正(v11.00の変更ミス修正等)
2017-4-29 v11.02 一部修正(文字列の解析処理見直し等)
2017-4-29 v11.03 一部修正(コンパイル処理見直し等)
2017-4-29 v11.04 一部修正(コンパイル処理見直し等)
2017-4-30 v11.05 一部修正(コンパイル処理見直し等)
2017-5-1 v12.00 設計見直し(プラグインI/F変更(過去との互換性なし))
一部修正(コンパイル処理見直し等、txtpget()の処理修正(v9.00でエンバグ))
2017-5-1 v12.01 一部修正(コンパイル処理見直し等)
命令追加(dbgtest())
2017-5-2 v12.02 一部修正(コード実行とコンパイル処理見直し等、
save()の処理修正(v3.00でエンバグ)、dbgpointer()の仕様見直し)
2017-5-3 v12.03 一部修正(エラーメッセージ見直し等)
2017-5-3 v12.04 一部修正(プロファイラ用クラス削除、コンパイル処理見直し等)
2017-5-3 v12.05 一部修正(コンパイル処理見直し等)
2017-7-16 v13.00 設計見直し(プラグインI/F変更(過去との互換性なし)、addfunc_tbl削除等)
2017-7-17 v13.01 一部修正(書式修正等)
2017-7-20 v13.02 一部修正(書式修正等)
2017-7-20 v13.03 一部修正(dbgpointer(),dbgprint(),dbgstop(),dbgtest()の仕様と処理見直し
(過去との互換性なし))
2017-7-26 v13.04 一部修正(モバイル仮対応等)
2017-7-26 v13.05 一部修正(モバイル仮対応等)
2017-7-27 v13.06 一部修正(モバイル仮対応等)
2017-7-28 v13.07 一部修正(マウスボタン処理見直し等)
2017-8-4 v13.08 一部修正(loadimg(),loadimgdata(),makeimg()の実行では、
描画設定をリセットしないように修正)
2017-8-18 v13.09 命令追加(sign2())
2018-2-8 v14.00 簡易モジュール機能追加(module())
仕様見直し(名前の途中に「::」の挿入不可とした(過去との互換性なし))
設計見直し(内部名称変更Interpreter→SP_Interpreter等(過去との互換性なし))
2018-2-8 v14.01 一部修正(内部変数名変更)
2018-2-9 v14.02 一部修正(ポインタ処理変更等)
2018-2-10 v14.03 一部修正(予約名にmoduleを追加)
2018-2-12 v14.04 一部修正(setstrimg())
一部修正(Image変数のoffとscreenはモジュール対象外とする)
一部修正(変数処理見直し等)
2018-2-12 v14.05 命令変更(setstrimg(),txtdrawimg()にno引数追加、
disstrimg()もno引数を取るように変更(過去との互換性なし))
2018-2-13 v14.06 一部修正(ダウンロード処理見直し等)
2018-2-14 v14.07 命令変更(sandmake()の移動確率を配列変数で指定するように変更
(過去との互換性なし))
2018-2-15 v14.08 一部修正(不要な処理を削除)
2018-2-16 v14.09 一部修正(内部変数名変更等)
2018-2-17 v14.10 一部修正(アドレス解決処理見直し等)
2018-2-22 v14.11 一部修正(コードの表示でローカル変数に目印を付ける等)
2018-2-22 v14.12 一部修正(不要な処理を削除)
2018-3-12 v15.00 設計見直し(変数情報見直し、プラグインI/F変更(過去との互換性なし))
2018-3-12 v15.01 一部修正(コード実行処理見直し等)
2018-3-14 v15.02 一部修正(dbgtest()で比較時の許容誤差を指定可能にした(過去との互換性なし)、
transimg()にしきい値の引数追加、fillarea()の同一色判定条件変更等)
2018-3-17 v15.03 一部修正(Canvasの座標系の設定処理見直し、プラグインI/F変更(過去との互換性なし))
2018-3-20 v15.04 一部修正(コメント修正のみ)
2018-3-24 v15.05 一部修正(変数名のコンパイル処理見直し等)
2018-3-25 v15.06 一部修正(コメント修正のみ)
2018-3-26 v15.07 一部修正(コード実行処理見直し等)
2018-4-6 v15.08 一部修正(変数名のコンパイル処理見直し等)
2018-4-11 v15.09 一部修正(コード実行処理見直し等)
2018-4-12 v15.10 一部修正(コード実行処理見直し等)
2018-4-15 v16.00 設計見直し(プラグインI/F変更(過去との互換性なし))
2018-4-15 v16.01 一部修正(エラーチェック追加等)
2018-4-15 v16.02 一部修正(エラー表示ミス修正(v15.10でエンバグ))
2018-4-20 v16.03 一部修正(コンパイル処理見直し等)
2018-4-20 v17.00 命令変更(mismake(),mismove(),mistext(),misfreeno()にgno引数追加、
dismis()もgno引数を取るように変更(過去との互換性なし))
一部修正(MML音楽演奏処理見直し)
2018-4-21 v17.01 一部修正(コメント修正のみ)
2018-4-21 v17.02 一部修正(グローバル変数の宣言処理修正等)
2018-4-29 v17.03 一部修正(キーボード処理見直し)
2018-5-10 v17.04 命令追加(キューデータ関連)
2018-5-14 v17.05 一部修正(モバイル仮対応変更)
2018-5-15 v17.06 一部修正(モバイル仮対応変更)
2018-5-18 v17.07 一部修正(モバイル仮対応変更)
2018-6-23 v17.08 一部修正(変数情報見直し等)
2018-6-27 v17.09 一部修正(HTML見直し、命令コード見直し等)
2018-6-30 v17.10 一部修正(HTML見直し)
2018-7-11 v18.00 仕様見直し(モジュールの仕様変更(過去との互換性なし))
2018-7-17 v18.01 一部修正(変数用クラスの処理見直し等)
2018-7-21 v18.02 一部修正(画像表示処理見直し等)
2018-7-27 v18.03 一部修正(画像表示処理見直し等)
2018-7-28 v18.04 一部修正(setscl()処理見直し)
2018-7-31 v18.05 一部修正(charfrom()処理見直し等)
2018-8-5 v18.06 一部修正(行頭の「*」の前に「;」を挿入する条件を修正
(直前が演算子のときは挿入しない))
2018-8-6 v18.07 一部修正(変数用クラスの処理見直し等)
2018-8-7 v18.08 一部修正(配列変数の一括コピーの処理を修正)
2018-8-8 v18.09 命令追加(三角関数のラジアン版を追加
radacos(),radasin(),radatan(),radatan2(),radcos(),radsin(),radtan())
2019-4-15 v18.10 一部修正(グローバル/ローカル文のときはポインタを処理しない)
2019-4-15 v18.11 一部修正(v18.10の変更を元に戻した)
2019-6-25 v18.12 一部修正(スコープIDを追加して、ローカル変数のスコープのチェックを強化)
2019-6-26 v18.13 一部修正(コメント修正のみ)
2019-6-26 v18.14 一部修正(変数取得処理のエラーチェック追加)
2019-6-29 v18.15 一部修正(モバイルの Firefox v67 で画面固定ボタンが効かない件を修正)
2020-7-24 v18.16 一部修正(text()で、全角スペースを半角スペース2個に変換する処理をコメントアウト
(最近のブラウザでは不要になったため))
2022-8-13 v18.17 一部修正(名前のチェック処理を変更)
2024-5-26 v18.18 一部修正(HTML修正)
<実行例>
https://hamayapp.appspot.com/static/sp_interpreter.html
<応用例>
<ダウンロード>
sp_interpreter.zip (2024-5-26)