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)