macOS版HSP

macOS版HSPはmacOSで動作するHSPを作るプロジェクトです。それにはHSPエンジンだけでなくスクリプトエディタの制作も含まれています。

このプロジェクトはdolphiliaが2016年1月に始めました。Githubに残っている一番古いコミットを見ると、その日付は2016年1月6日です。そして一番新しいコミットはは2016年12月25日です。(README.mdの更新を除く)こうして開発期間を概観すると、ほぼ1年かけてじっくり進めたプロジェクトだったと言えます。

macOS版HSPのGithubリポジトリ

macOS版HSPの開発は2017年5月9日現在、休止しています。その理由は主にdolphiliaのメインのコンピュータがWindowsになったことにあります。2017年に入ってからは、軽量なHSPを作るプロジェクトTinyHSPの制作に移行しました。

TinyHSPのGithubリポジトリ

macOS版HSPを開発した当時のMacはOSXという名称でしたので、当時はMacOSX版HSPと読んでいました。またその名残でGithubのリポジトリ名もhsp-macosxとなっています。Macの名称がmacOSとなったのに合わせてこのプロジェクトで作るHSPもmacOS版HSPと呼ぶことにしました。

macOS版HSPの開発では、制作を少しでも進めるたびに短いメモを残すようにしていました。それらを書いた正確な日付はわかりませんが、すべて2016年中に書いたものです。そうして残したメモが180個あります。それらを記録として以下に記したいと思います。

  1. ウィンドウを表示するところから始めた。Macの開発環境でプロジェクトを作成する。実行すると、まっさらなウィンドウが表示された。これが最初の一歩である。
  2. HSPはピクセル単位で描画できる。Macでどうやって実現しようか。最初に試したのはNSImageView。動的に画像を生成してみる。残念ながら実用的な速度ではなかった。
  3. 1ピクセルの小さな矩形、それを繰り返し描画してウィンドウを塗りつぶすも、いまいち速度が足りない。そこで、矩形リストを一気に処理できるメソッドを試してみた。しかし、それでもまだ遅い。
  4. GLUTを使えばOpenGLを簡単に使える。でもGLUTは開発環境と相性が良くない。どうしたものか。いろいろと試しているうちに、ふと気づく。開発環境にOpenGLViewというものが用意されている。
  5. OpenGLViewはピクセルの描画も速い。ようやく速度の問題が解決した。ところが、ここで別の問題が浮上する。OpenGLViewは、その上にボタンなどのインターフェースを置けないのだ。
  6. 標準のHSPではウィンドウ内にボタンなどを気軽に置ける。その特徴を引き継ぎつつ、十分な速度を得ることはできるだろうか。解決策となったのはCALayerである。
  7. CALayerの速度は十分なのだが、描画が少しぼやっとしているような気がする。どうやらアニメーションしているのが原因のようだ。暗黙的なアニメーションを切ることで、その現象はなくなった。
  8. 各ピクセルを表すのに、配列を操作して画面に反映する。これをできるだけ早くしたい。Swiftを最適化したりRangeを使ったり試すが、ほとんど改善が見られなかった。今のところは、Objective-Cを使うことにする。
  9. CALayerはピクセルに透明情報をもたせた方が都合がいい。そこで標準でRGBAカラーを使うことにした。これはHSP本来の仕様とは異なるものである。どちらかというとhsp3dishに近い。
  10. 1ピクセルを描画するメソッドと、直線を描画するメソッドを実装する。直線描画にはブレゼンハムのアルゴリズムを使う。ついでにXorshiftの乱数生成メソッドも追加しておく。
  11. 矩形を塗りつぶすboxfを実装した。すべてのピクセルを1つずつ描画していたのでは遅いので、横一列に描画したバイト列を高さ回数コピーする。
  12. 記載漏れのため順不同。cls・color・redrawに相当する機能を実装した。ピクセルを操作する時点では画面に反映せず、redrawが呼ばれた時にのみ再描画する。
  13. 文字列はピクセルデータに直接描画できない。そこでデータをNSBitmapImageRepに変換して、生成したNSImageにそれと文字列を描画する。描画した範囲をピクセルデータに適用して反映するようにした。
  14. 透明色ありのデータから不透明な画像に変換する際に、色味が若干変わる。原因はわからない。暫定的な措置だが、変化する比率を測定して修正する処理を追加した。
  15. 画像の表示は、文字列の描画と似たような手順で行った。画像を読み込んだのち、元のピクセルデータをNSImageに変換する。そこに読み込んだ画像を描画する。その結果をピクセルデータに適用するようにした。
  16. vImageを使えば高速な画像処理が行える。それを使って、ぼかしフィルタと上下左右の反転を行えるようにした。vImageと素のピクセルデータは相性が良い。
  17. vImageによるフィルターのバリエーションを増やした。回転やエッジ検出やシャープネスなどである。変換の理論的な部分はよく分からないが、とりあえず動作するようだ。
  18. CIFilterを取り入れた。CIFilterには多くのフィルターが用意されているため、網羅はできていない。色の調節や写真効果などのフィルターを使用できるようにした。
  19. 記載漏れのため順不同。posに相当するメソッドを追加した。文字列と画像の表示位置を調整することができる。座標は本家のHSPに合わせて左上を基点とした。
  20. d3moduleの一部を組み込んだ。3D座標を用いて直線を描画することができる。移植の際、HSPの変数がC言語と親和性が高かったので、スムーズにObjective-Cに書き換えることができた。
  21. メニューバーとウィンドウの初期化をコードから行うようにした。NSApplicationやNSAppを用いる。メニューバーは最小限の項目だけを表示するようにした。
  22. OpenHSPのhspcmpをmakeする。MacOSX10.11ではエラーが出たので、コンパイルが通るようにmakefileなどを多少変更した。ファイルの文字コードはUTF-8に変更している。
  23. コンパイルを簡略化するツールを作成した。コマンドライン版専用である。hspcmpを外部から起動させて、リソース内のmain.hspをコンパイルするようにした。
  24. hsp3clをXcodeでコンパイルできるようにした。ファイルの文字コードはUTF-8に変更、コードはC++のままにする。OpenHSPから必要最低限のファイルをプロジェクトに取り込んだ。
  25. strnote.cppと依存するコードをObjective-C++に変更した。クラス構文をC++のものからObjective-Cのものに変更する。Xcodeのビルドが通る状態にした。
  26. 前回のプロジェクトをベースに、他の必要なソースを取り込んだ。それらをObjective-C++に変更する。hsp3.mmのクラスはObjective-Cの構文に書き換えた。実行のための処理はまだない。
  27. 一旦ビルドの通る状態にするのと、コードの一部をObjective-Cにする作業を段階的に行った。hspcl.mmのクラスをObjective-Cスタイルに変更する。
  28. start.axを読み込んでコマンドライン上で実行できるようになった。
  29. No.22で作成したhspcmpをプロジェクトに同封して、HSPコードのコンパイルと実行を同時に行えるようにした。
  30. 命令を追加するテストを行った。hsp3gr_linux.mmにあるcmdfunc_extcmd関数を改変する。switchで命令ごとに処理が振り分けられているので、その幾つかを変更してみた。
  31. hsp3.mmはhsp3cl.mmと、hsp3code.mmはhsp.mmと統合した。またstrnote_hsp3.mmはhsp3int.mm内に移動する。クラスを一体化することで、変数やメソッドを共有できるようにした。
  32. プロジェクトをコマンドラインツールからCocoaアプリケーションに移行した。内部エンジンはNo.31からのものである。ViewController.mからエンジンを呼び出すようにした。
  33. No.20までの成果とNo.31を統合した。まだHSP側から画面を操作する命令は実装していない。
  34. 幾つかの描画命令をHSP側から呼び出せるようにした。pos,color,pset,line,boxfなどである。hsp3gr_linux.mmからView側に実装した描画命令を呼び出すようにした。
  35. 複数のディレクトリからstart.axを探すようにした。アプリ内のリソース、書類内のhsptmpディレクトリ、ホームディレクトリ、デスクトップの順番で探す。最初に見つかったものを実行するようにした。
  36. エディターのプロトタイプをSwiftで作成する。行番号はオープンソースのものを使用し、色分けは自前で実装することにした。正規表現で色分けするようにしてみたが、行数が多いと処理がとても重い。
  37. 速度の向上を図るため、エディターのソースのみObjective-Cのコードに置き換えた。背景色とフォントカラーを指定している以外は、他の処理は実装していない。
  38. 命令の色分けを実装した。表示範囲を取得して、画面に表示されているコードだけを色分けできるようにしている。色分けの判定は単純な文字列検索と比較を用いることにした。
  39. 複数行コメントと複数行文字列の色分けに対応した。互いが入れ子になっている場合は、先に出てくるものを優先する。
  40. 複数行コメントと複数行文字列を、画面の表示範囲内にある場合にのみ色分け処理するようにした。コメントや文字列の終わりが上端より上にあったり、始まりが下端より下にあったりする場合には色分け処理をしない。
  41. ラベル行を改行するときに自動的に次の行にタブを挿入するようにした。なお{記号で終わる行を改行するときも自動でタブを挿入するようにしている。
  42. プリプロセッサと標準マクロを色分けするようにした。命令と同じような方法で色分け処理を行っている。
  43. 命令と関数の色分けの内部処理を別にして、関数の色分けをできるようにした。関数は関数名の後に(記号が付くが、これがあっても色分けする。
  44. 行番号を表示するようにした。No.36で使用していたコードをObjective-Cに置き換えて実装する。
  45. エディターをDocument-Basedアプリケーションに変更した。これにより複数のウィンドウを持つことができる。
  46. ファイルを開く処理の実装を進めた。基本動作はDocument-Basedアプリケーションの初期状態から実装されているが、実際の読み込み処理はNSDocumentを継承したクラス内で行う。
  47. ファイルを保存する処理の実装を進める。No.46と同じくNSDocumentを継承したクラスで実装を行った。読み込みはreadFromDataメソッド、保存はdataOfTypeメソッド内に処理を記述する。
  48. エディターの画面を分割できるようにした。ツールバーも実装して、その上にトグルボタンを配置する。画面の分割をON/OFFできるようにした。
  49. 通常の文字列とコメントの色分けを実装した。コメントは\;と\/\/の両方を使用できる。
  50. ステータスバーに相当するものを実装した。行数と文字数と位置、また選択している文字数を表示する。表示する内容についてはCotEditorを参考にした。
  51. 画面の分割を垂直から水平のサイドバーに変更した。サイドバーにはエディターのリソース内にあるHTMLファイルを読み込ませている。またツールバーのトグルボタンを更新した。
  52. ツールバーに実行ボタンと停止ボタンを配置した。実行ボタンを押した時はhsp.appを起動し、停止ボタンを押した時はhsp.appを終了する。
  53. エディターにHSPコンパイラを内蔵した。実行ボタンを押すとコードをコンパイルされ、書類/hsptmpディレクトリにstart.axが生成される。hsp.appを複数のディレクトリから探す処理も追加した。
  54. 里程標:No.35までの実行エンジンとNo.53までのエディターの実装により、start.axを介して動作を連携させることが可能になった。
  55. setcam命令を追加した。posやlineからd3moduleの機能の一部を利用する際に、視点を設定することができる。エンジンとエディタ両方を更新した。
  56. smooth命令を追加した。パラメータを省略するか1を指定することで、lineの描画にアンチエリアシングを付加できる。エディタとエンジン両方を更新した。
  57. qAudioの実装を始めた。変数に格納された配列などをもとにサウンドを出力する。エディターにqpushやqplayなど使用しそうな命令名を登録した。
  58. qplayとqstopを簡易的に実装した。qplay命令を実行するとサイン波を再生し、qplay命令を実行すると停止する。
  59. qstart、qend、qpush命令およびqframe、qcount関数を実装した。qstart/qendでqAudioを開始/停止する。またqpushを使用することで信号を格納した配列をオーディオバッファに書き込むようにした。
  60. No.59の続き。qAudioを開始したときからサウンドの再生は始まっているが、オーディオバッファが空のときは無音を挿入するようにしている。またqplayが未使用の状態か、qstopが呼ばれた状態でも無音を挿入する。
  61. No.60の続き。qAudioのオーディオバッファはフレーム単位で使用するので、そのフレーム数を取得するためにqframe関数を実装した。qframeで取得したサイズをもとに、qpushで配列変数をバッファに書き込む。
  62. No.61の続き。qAudioは一度使ったバッファは削除される。古いものから順に使用され、ストックがなくなるまで続ける。ストックがなくなった場合は無音が挿入される。現在のバッファ数をqcount関数で取得できるようにした。
  63. qAudioの更新。qpushの実行箇所を簡素にしたほか、qAudio本体にサンプリングレートを取得するコードを記述した。またボリュームを設定するためのqvol命令を追加した。
  64. antialiasing命令を追加した。機能はNo.56のsmoothと同じものだが、smoothは初期値が1なのに対してantialiasingは初期値が0である。エディタとエンジン両方を更新した。
  65. pset命令を修正した。パラメーターに画面範囲外の値が設定された場合は何も処理しない。エンジンのみを更新した。
  66. エディターにログメッセージを表示する領域を追加した。内容はまだ何も出力しない。画面上にSplitViewを一つ追加して実装した。
  67. getmousex関数とgetmousey関数を追加した。それぞれ現在のマウス座標を取得する関数である。画面の描画領域の左上を起点として取得するようにした。エディターとエンジン両方の更新。
  68. エディターのアクセス番号に関係する処理をした。エディターは複数ウィンドウを開くことができるが、それぞれのウィンドウで違う内容を保持しているので、処理を振り分けるためにアクセス番号を使用している。
  69. エディターのステータスバーの修正。文字数などをチェックするためにステータスバーからテキストビューを読み込んでいるが、正常に読み込めるようになるまではチェックしないように変更した。
  70. コンパイル時のログメッセージをエディターに表示するようにした。多くのメッセージの出力はまだ実装していない。
  71. getmousedown関数を実装した。マウスが押されている状態なら1を返し、そうでないなら0を返す。エディターとエンジン両方の更新。
  72. エンジンとエディターのXcodeプロジェクトを新しくした。プロジェクトファイルはそれぞれ、エンジンがhsp.xcodeproj、エディターがhsed.xcodeprojとなる。
  73. 里程標:里程標はNo.54以来。エディターからエンジンを起動するパスに、同一ディレクトリを含めた。これにより2つのアプリケーションを1つのZIPで配布できるようになった。
  74. エディターの更新。ラベルの色分けを実装した。また実行・停止ボタンを画像化した。ログメッセージの表示を改善した。
  75. 将来的に複数ウィンドウの表示に対応させられるように、エンジンを Document-based Application に変更した。メニューバーには最低限のものだけを表示する。
  76. qAudioの更新。qins命令を追加した。qinsは引数としてdouble値を取る。1回で1サンプリングぶんの情報を書き込め、一定量以上を書き込むとqplayで再生できる。値は-1.0から1.0までを指定する。
  77. NO.75での変更により、ピクセル表示に不具合が生じていたため、エンジンのCALayerの保持するプレーンデータをRGBAからRGBカラーに変更することで不具合を修正した。
  78. NO.75での変更により、画面がアニメーションしながら表示されるようになっていたが、そのアニメーションを無効にした。
  79. エンジンの更新。qinsとqpush命令の値を-1.0から1.0の間に限定するようにした。またtitle命令の不具合を修正した。
  80. エンジンの更新。拡張システム変数である mousex,mousey を使用できるようにした。またstick命令を簡易的に実装した。マウスの左クリックと右クリックのみ検出できる。
  81. エンジンとエディター両方の更新。qrate関数を追加した。qrateはサンプリングレートを取得する。NO.63での処理をもとにしている。
  82. エンジンとエディターの更新。qrate関数の戻り値をdouble型に変更した。サウンドプログラミングは実数で計算することが多いため。
  83. 円周率を返すためのqpi関数を実装した。エンジンとエディター両方の更新。
  84. dcnt内臓変数を追加した。使い方はcntと同じで、cntの値を実数に変換したものを取得できる。実数の計算などに用いることができる。
  85. rndf関数とrandf関数を追加した。rndfは0.0〜任意の値を、randfは任意〜任意の値を実数で返す。エンジンとエディター両方の更新。
  86. ツールバーに構文のポップアップボタンを追加した。HSP3かAltHSPのどちらかを選べる。エディターの見た目のみ更新。
  87. エディターにAltHSPを試験的に導入した。
  88. AltHSPを補強した。JS版からの移植を進めた。
  89. AltHSPを更新した。グローバル変数の宣言と代入を同時に行う構文を導入した。
  90. qpush命令を更新して仕様を新しくした。以前は第二引数にフレーム数を指定していたが、今回の変更で、第二引数には配列の要素数を指定するようになった。
  91. picloadを簡易的に実装した。そのためにエディタはソースコードのパスをファイルに出力するようにし、エンジンはそれを読み込んでソースコードのパスを取得できるようにした。
  92. AltHSPを更新した。class内の関数/命令内から同じclassの関数/命令内にアクセスするためにself.命令名/self.関数名()でアクセスするようにした。
  93. 関数の色分けを更新した。(xxx())のように括弧内の隣接する場合に対応する。エディターのみの更新。
  94. 動作がもたつくことがあったため、エディターのスクロール時には色を更新しないように変更した。またツールバーにカラーテーマを選択するポップアップボタンを設置した。
  95. スクロールの位置が一瞬変わってしまう不具合があったため、エディターで空白を挿入したときには色分けしないように変更した。
  96. エディターのアイコンを変更した。
  97. mes命令で描画した文字列が右端を超えたときに生じる不具合を修正した。
  98. mmload、mmplay、mmstopを簡易的に実装した。mmloadはファイル名のみ指定できる。mmplay、mmstopはパラメーターを指定できない。
  99. button命令を簡易的に実装した。設置できるボタンは一つだけで、第一パラメータのみ指定できる。イベント処理は実装していない。
  100. buttonの第二パラメータを実装した。ボタンを押したときに飛ぶラベルを指定できる。システム変数statに値が代入されるようにした。
  101. buttonを64個まで配置できるようにした。あらかじめ画面外に生成して、命令が呼び出されたら画面内に配置するようにしている。またcls命令、objclr命令にも簡易的に対応した。
  102. 複数buttonにそれぞれ別のラベルを設定した際、指定したラベルにジャンプするように修正した。
  103. slider命令を追加した。パラメータ1〜3は実数で指定し、それぞれ初期値・最小値・最大値。4つ目はラベル。スライダーを動かすと、システム変数iparam・refdvalにそれぞれにslider番号と現在値を代入し、指定のラベルに飛ぶ。
  104. 縦方向のsliderに対応した。4番目のパラメータに1を設定すると縦方向になる。パラメータはp1 = 初期値、p2 = 最小値、p3 = 最大値、p4 = 方向(0 or 1)、p5 = ラベルに変更した。
  105. chkbox命令に対応した。パラメータは2つで、1つ目にチェックボックスのタイトルを、2つ目にチェックボックスの状態を代入する変数を指定する。その変数には、チェックボックスをONにすると1が、OFFにすると0が代入される
  106. 主な初期化処理をViewController.mからDocument.mに移した。動作上の変化はほとんどない。また、ピクセルデータを格納する配列を一次元から二次元に変更した。
  107. buffer命令とgsel、gcopy命令を簡易的に実装した。ピクセルデータを格納する変数をグローバル変数に変更している。またバッファのサイズの変数もグローバル変数にした。
  108. screen命令でウィンドウサイズを変更したとき、ピクセルの表示も調整するようにした。
  109. gcopy命令を実装した。ピクセルバッファ間のデータをコピーする。バッファやサイズを指定できるようにした。
  110. gmode命令を実装した。パラメーターp1〜p4のうち、p2とp3のみ動作する。指定したコピーのデフォルト値をgcopyに反映するようにした。
  111. picloadの第二パラメータである画像ロードモードに対応した。モードが0の場合は画像サイズに合わせて現在のバッファを初期化する。
  112. AltHSPを修正した。インスタンスから命令を使用する際、不要な’記号が挿入される不具合を修正した。
  113. gcopy命令でパラメーターp2,p3を指定した時に、内部のmemcpyのサイズがマイナスになる可能性がある箇所を修正した。
  114. プレーンデータをRGBカラーからRGBAカラーに変更した。これはNO.9、NO.77に続く変更である。内部変数でRGBとRGBAを切り替えられるようにした。
  115. bgscr命令に簡易的に対応した。パラメータp1〜p3のみ指定でき、またp1は0のみ指定できる。この更新により、colorやboxfなどと組み合わせて、枠のない透過ウィンドウを作成できるようになった。
  116. noteload命令に簡易的に対応した。
  117. box命令に対応した。四角形の直線を描画する。line,box命令の2D及び3D描画をアンチエリアシングに対応した。また初期状態でsetcamのデフォルト値を500,500,500,0,0,0に設定するようにした。
  118. noteadd命令に対応した。NSString命令を用いて実装している。charをNSStringに変換してから文字列の追加を行い、そのあとcharに再変換している。
  119. notedelとnotesave命令に対応した。notesaveは、ソースコードを開いているある場合はソースがあるディレクトリが、そうでなければホームディレクトリが対象のディレクトリとなる。
  120. includeで参照するパスを変更した。hsed.app内のリソース・ソースコードのあるディレクトリ・書類/hsptmp。hspdef.asを同封した。
  121. dirinfo関数に対応した。パラメーターp1=0:カレントディレクトリ、1:.appのあるディレクトリ、2:Home、3:Desktop、4:Documents。またhspdef.asのdir系マクロを変更した。dir_xxx(cur,exe,home,desktop,documents)。
  122. chdir,mkdir,delete,exist命令に対応した。chdir:カレントディレクトリを移動する。文字列の頭に/がある場合はフルパスとみなす。../で階層を一つ戻る。末尾の/は無視する。mkdir:カレントディレクトリに指定したディレクトリを作成する。中間階層も作成する。delete:カレントディレクトリにある指定したファイル・ディレクトリを削除する。exist:ファイルの有無を確認する。ない場合は-1、ディレクトリがあった場合は-2、それ以外はファイルサイズがstrsizeに代入される。
  123. 起動時とchdir命令使用時にC言語のchdirを使用してカレントディレクトリを変更するようにした。dirlist命令に反映される。
  124. バッファの上限数を3から24に変更した。またウィンドウやビューをNSMutableArrayで管理するようにした。
  125. inputを実装した。第一パラメータで指定する変数は文字列変数に限定される。第四パラメータは無視される。
  126. stick命令を更新した。Left,Up,Right,Down,Space,Enter,Escape,Tabキーを検知する。Controlキーは未対応。また未実装の命令を実行したときにエラーダイアログを表示するようにした。
  127. getkey命令を実装した。取得できるキーコードは次のとおり。1:左クリック,2:右クリック,8:BackSpace,9:Tab,13:Enter,27:Esc,32:Space,37:Left(カーソルキー),38:Up(カーソルキー),39:Right(カーソルキー),40:Down(カーソルキー),48-57:0-9,65-90:a-z,96-105:0-9(テンキー),112-121:F1-F10(ファンクションキー)。
  128. ソースコードのパスに非ASCII文字が含まれている場合は、アラートを表示して処理を中断するようにした。エディターの強制終了を回避する。
  129. circle命令を実装した。アンチエイリアシングには未対応。gcopy命令を使用するとき、gmode命令の第一パラメータ値が7に設定されていた場合、コピー先のアルファ値を保護してコピーするようにした。cls命令での初期化はピクセルデータを0に(透過)するように変更した。
  130. gmodeのコピーモード0〜8を実装した。0〜2はコピー元の透明度をそのままコピーする。3〜7はコピー先の透明度を255とみなしてコピーする。8はコピー先の透明色を保護してコピーする。
  131. ドキュメントライブラリの検索機能を実装した。標準命令・関数・マクロ・定数・システム変数とhsp3util,hspdef,hspmathに対応している。
  132. F1キーによるクイックヘルプ機能を実装した。
  133. mes,button,chkbox,input,slider使用時に、カレントポジションをそのサイズ分ずらす処理を加えた。clsの処理対象にchkbox,inputを加えた。inputが入力不可になっている不具合を修正した。
  134. ショートカットキーを追加した。F5あるいはコマンドキー+Rで実行、コマンドキー+.で停止する。
  135. syscolor命令を暫定的に実装した。Win版HSPとの互換性はない。
  136. hsp.appと同じディレクトリにあるstart.axを優先的に読み込むようにした。
  137. clock関数を実装した。C言語のclock()の戻り値をint型で返す。
  138. サウンドプログラミングのサンプルを追加した。
  139. qins/qpush命令を修正した。qAudioがスタートしていない場合にはスタートさせる。またinNumberFramesが初期化されていない場合は初期化するまで待つようにした。
  140. マニュアルを追加した。「AltHSPの使い方」「Win版HSPとの違い」「命令や関数などの対応状況」の3つ。
  141. 実行時のエラーメッセージをアラートダイアログに表示するようにした。
  142. mmloadやmmplayで複数のバッファを使用できるようにした。0〜15まで、最大で16のバッファを使用できる。またmmstopは第一パラメータが未設定時はすべてのバッファを停止し、指定されたときは指定のバッファを停止する。
  143. 内蔵ヘルプで、mmstop等パラメーターのない命令の表示に不具合があったのを修正した。またcelload命令を使用した場合に、代わりにpicload命令が実行されるよう暫定的に対応した。
  144. font命令を実装した。第3パラメーターは無視される。またgetfontfamilies関数を実装した。使用できるフォント名の一覧を文字列で取得できる。他に「使用できるフォント名の一覧.pdf」を同封した。
  145. ツールバーに文字サイズのポップアップボタンを追加した。エディターの文字サイズを設定できる。
  146. font命令の第3パラメーターを設定できるようにした。下線と打ち消し線のみ指定できる。4が下線で、8が打ち消し線。また数値を合計して複数のスタイルを設定できる。
  147. onmidi命令を実装した。パラメーターは次の通り:onmidi var1,var2,var3,var4,label。var1はMIDIメッセージの種類を受け取る変数、var2はナンバーを受け取る変数、var3はベロシティを受け取る変数、var4はチャンネルを受け取る変数、labelはMIDIイベントを受信したときに飛ぶラベル。
  148. isretina()関数を実装した。非retinaの場合は0を返す。またgetretina()関数を実装した。backingScaleFactor値を取得する。
  149. 折原みゆず(みゅーたん)のウェブサイトをオープンしました。みゅーたんはMac版HSPのマスコットキャラクターでもあります。ウェブサイトでは、みゅーたんの衣装やイラストを閲覧できます。
  150. mes命令のRetina時のコードを変更した。動作は未確認。
  151. Retina時にmes命令の文字サイズを調整するようにコードを変更した。動作は未確認。
  152. OpenHSPのチェンジセット 805を適用した。UTF-8のソーススクリプト入力に対応する。コード中にUTF-8文字を使えるほか、文字列の末尾にダブルクオーテーションが入る不具合も解消される。
  153. Retina時のmes命令の微調整した。文字の見切れ、サイズの不具合を改善する。
  154. cls命令の不具合の修正した。また第一パラメーターで指定した色を反映するように変更した。
  155. コンパイルエラーが生じた場合にエラーダイアログを表示するようにした。またコンパイルエラーがあったときはhsp.appを実行しないように変更した。
  156. boxfの第3・4パラメーターを省略した時に、画面の右下が設定されるように変更した。
  157. windowDidChangeBackingPropertiesを検知した場合にアラートを表示するように変更した。
  158. Retina(backingScaleFactorが2.0)の時には縦横2倍にズームしてから描画するように変更した。
  159. 標準でフォントのアンチエリアシングを行なわないようにした。なおfont命令の第3パラメータに16を指定することでアンチエリアシングを行なうよう指定できる。また、なにもコードを入力していない状態でコンパイルが通らない不具合を修正した。
  160. アプリケーションを多重起動できるようにした。それに伴いツールバーの停止ボタンをなくした。また、ウィンドウを閉じたときにアプリケーションを終了するようにした。
  161. アンチエイリアシングなしのmes命令の動作を調整した。
  162. アンチエイリアシングなしのmes命令の描画時の挙動を調整した。またメモリ解放の処理も追加した。
  163. picload命令の画像読み込みをstb-imageで動作させるように変更した。
  164. 画像の描画の際に乱れる不具合の調整をした。
  165. エディターに小さな通知スペースを設置した。
  166. エディターのカラーテーマがhsp3leのときの処理を軽量化した。
  167. hsvcolor命令を実装した。またgradf命令を暫定的に実装した。パラメーターp1〜p4は無視され、p5〜p7のみ指定できる。現状では描画先のバッファ全体をグラデーションで塗りつぶす。ほかにエディターの入力時の動作を調整した。
  168. pset・line命令の内部コードをObjective-CからC言語に書き換えた。また描画系の内部コードを整理した。これらの変更による動作の違いはほとんどない。
  169. cls・boxf・circle・hsvcolor命令の内部コードをObjective-CからC言語に書き換えた。
  170. gcopyのブレンドモードが2以上の場合に画像が乱れる不具合を修正した。またpicload命令の内部コード一部およびgcopy命令の内部コードをObjective-CからC言語に書き換えた。
  171. pget命令を実装した。また、それに合わせてginfo関数の取得タイプ16,17,18のみを実装した。なお他の取得タイプは未実装。
  172. ginfo関数の取得タイプ0,1,3,4,5,6,7,20,21,22,23を実装した。
  173. 軽量版スクリプトエディター「hsedle.app」を同封した。
  174. デフォルトの実行エンジンをDocument-Basedでないアプリケーションに変更した。Document-Basedアプリケーションの実行エンジンはbetaディレクトリに移動した。
  175. dialog命令に暫定的に対応した。ダイアログのタイプ設定は0〜3のみ指定できる。
  176. macOS Sierra以降で起動した場合、エラーダイアログを表示するように変更した。また、macOS Sierraをお使いの皆さまへ.pdf を同封した。内容は『macOS Sierraには対応していない。macOSのセキュリティ機能であるGatekeeperにより、外部アプリケーションの呼び出しが制限されているため。Gatekeeperをオフすることで使用可能になるが、使用は自己責任』。
  177. macOS Sierraでの動作に対応した。実行エンジンであるhsp.appをリソース内に格納した。
  178. screen命令で画面サイズが変更されない不具合を改善した。また実行エンジンの内部コードを大幅に変更した。関数ポインタを可能な限り排除し、一部のファイルをViewControllerのクラス拡張に変更した。それらのファイルのC関数をObjective-Cメソッドに変更し、static変数をインスタンス変数に変更した。
  179. macOS Sierraで初期起動時にダイアログを表示しないように変更した。
  180. マニュアルを更新した。命令や関数などの対応状況.pdfとWin版HSPとの違い.pdfの内容を最新のものにした。
記事のタイトル「macOS版HSP」| 公開した日付()| 更新した日付(2018年9月19日)| 更新した回数(16回)