SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

HSP入門

開発者のためのHSP言語スピード入門

HSP言語を利用した代表的なプログラムの実例


  • X ポスト
  • このエントリーをはてなブックマークに追加

インターフェイスと条件判断

 条件判断や分岐などのプログラム制御構造は、HSPでも多くの方法が提供されています。

 スクリプト「button.hsp」は、入力枠に指定した回数だけ数字をカウントアップするというプログラムです。

button.hsp
    input a
    button gosub "GO!",*go
    stop
*go
    if a>0 {
        repeat a
        mes (cnt+1)
        loop
    }
    return

 inputbuttonといった命令は、画面上にユーザーインターフェイスのための部品を配置するもので、スクリプト上で基本的なレイアウトを作成することになります。

 button命令は、いくつかの特徴的な機能を持っています。2行目の「button gosub "GO!",*go」は、「GO!」と書かれたボタンを画面上に配置し、ボタンが押された場合には、「*go」というラベルのサブルーチンを呼び出す指定をしています。

 ラベルとは、アスタリスク記号(*)に続けて、好きな名前(HSPの予約キーワードを除く)を付けスクリプト上の場所を示したもので、ここでは4行目に書かれた「*go」を指します。つまり、[GO!]ボタンを押すと、4行目からサブルーチンの終わりを示すreturn命令までが実行されることになります。button命令には、サブルーチンだけでなく絶対分岐を行う「button goto~」という書式もありますが、構造を把握するためにサブルーチンを呼び出すことを推奨しています。

 3行目にあるstop命令は、その場でスクリプトの実行を中断するというもので、これを書いておかないと、そのまま「*go」以降が続けて実行されてしまいます。

 5行目は、条件判断を行っています。変数aの値が、0より大きければ中カッコ内を実行するという仕組みになっています。if命令は、それに続く条件式が正しいかどうかを判断し、正しければ、それ以降を実行します。実行ブロックが複数行に渡る場合には、このサンプルのように中カッコで囲むことができます。実行ブロックがその行だけで済む場合には、「if a>0 : mes a」のように記述します。

 6~8行目では、繰り返し処理を行っています。HSPでは、基本的にここで使用しているrepeat~loopという命令で繰り返しを記述します。repeat命令に回数を指定することで、loop命令までの間を繰り返します。repeat命令で指定する回数が、0の場合は処理を行わず、マイナス値ならば無限ループとなります。また、繰り返しの内部では、システムが用意しているcntという名前の変数をカウンタとして使用することができます。変数cntは、0から始まり繰り返すごとに、加算されていきます。

 その他、繰り返しから脱出するbreak命令や、やり直しを行うcontinue命令なども存在します。他の言語で慣れている人のために、whileuntilfornextなどの繰り返し記述も用意されていますが、HSPではrepeatloopを使うことが推奨されています。

実行結果
実行結果

 HSPでは、プログラムの構造化を行うためのモジュール化や、関数定義などの機能を提供していますが、スクリプトを作成する上でそれらは必須となっていません。上級者が規模の大きいプログラムを作成したり、モジュールを公開するような場合には欠かせないものですが、小規模なプログラムの作成や初心者の学習においては、シンプルな仕様を優先するという考えに立っています。

画像の表示と保存

 HSPが、もともと得意としている画像を扱ったサンプルを作成してみます。

 スクリプト「picload.hsp」は、指定した画像ファイルに「@」の記号を付加した後、違うファイル名でbmp形式により画像を保存します。

picload.hsp
    ; 画像加工プログラム
    dialog "bmp;*.jpg;*.gif",16
    if stat = 0 : end
    fname=refstr
    picload fname
    font msgothic,160
    color 0,0,255:mes "@"
    sname=getpath(fname,1)
    bmpsave sname+"_mod.bmp"
    end

 実行すると、ファイル選択のダイアログが表示されるので、適当な画像ファイルを1つだけ選んでください。その後、選択したファイルに「_mod」を付加した名称で、同じフォルダに加工された画像ファイルを作成します。

加工された画像の例
加工された画像の例

 HSPやシステム側の機能を呼び出すことで、非常に短いスクリプトになっています。

 1行目の「;」はコメントを示してします。行の中で「;」記号以降はコメントとして扱われ、実行時には意味を持ちません(コメントには、他にもC言語形式の「/*」~「*/」や、C++やJava形式の「//」を使用することが可能です)。

 次のdialog命令は、システムが持つコモンダイアログを呼び出す機能を持っています。ここでは、ファイル選択ダイアログを表示していますが、それ以外にもいろいろなダイアログ表示を行うことができます。機能の詳細は、dialog命令のキーワードにカーソルを合わせて[F1]キーを押すと調べることができますので、確認してみてください。

 実際に画像の加工を行っているのは、5~7行目にあたります。picload命令は、指定された画像ファイルを読み込むための命令で、これにより初期化された画面上に、mes命令で「@」の記号を描画しています。

 HSPでは、描画のフォントを設定するためのfont命令や、色を設定するcolor命令などの画像操作の機能が用意されています。リアルタイムのアニメーションや透過コピー、半透明合成などは、よりリッチな画面を作成したいという場合に役立ちますし、DirectXによる3D描画など、見栄えのある映像を作成するための機能をフルにサポートしています。

外部アプリケーション連携

 ここからは、HSPを別な側面から利用する方法について触れてみたいと思います。

 HSPと、外部モジュールやアプリケーションなどを連携させることで、インターフェイスや見た目を補助するような用途に使用することができます。例えば、コマンドプロンプトで動作するコンソールアプリケーションにグラフィカルなユーザーインターフェイスを用意することで、誰にでも使えるような操作性を提供することも可能です。

 スクリプト「pipe.hsp」は、コンソールアプリケーションである「ipconfig」を実行して、標準出力の内容を表示します。「ipconfig」は、システムが用意しているツールで、TCP/IPネットワークに関する情報を表示するためのものです。

 スクリプトから各種コマンドをコントロールすることで、外部ツールのデータを解析したり、連続した処理(バッチジョブ)に対応させることが可能になります。

pipe.hsp
#include "hspext.as"

    cmd="ipconfig /all"
    sdim ln,4096
    sdim buf,32000
    mesbox buf,640,200,1:obj_edit=stat
    pipeexec buf,cmd,1
    if stat : dialog "実行できませんでした" : end
    mes cmd+" を実行中..."
    repeat
    pipeget ln
    if stat=0 : break
    await 10
    loop
    objprm obj_edit,buf
    mes "実行を終了しました"
    stop

 最初の行にある、「#include "hspext.as"」は拡張プラグイン機能を使用するための宣言です。

 HSPでは、拡張プラグインという形で機能を追加していくことが可能です。これにより、HSP本体に内蔵された機能だけでは実現できない処理が可能になります。また、ユーザーが独自に作成したプラグインも多数公開されており、HSPを使いこなす上で欠かすことのできない要素となっています。

実行結果
実行結果

 このようにHSPは、外部アプリケーションと連携して動作を行う糊付け(グルー)言語としての側面を持っています。通常の実行(exe)ファイルを始めとして、DLLによる外部API、COMオブジェクト、そしてウィンドウメッセージや、キーバッファを利用したアプリケーションの自動制御に関する機能をサポートしています。

 また、外部との通信という意味では、TCP/IP通信の各種プロトコルやシリアルポート通信、ODBCを経由した各種データベースとの接続などの機能を備えているほか、HSP自身がCGIとして動作するコンソールモードなども用意されています。

次のページ
COMコンポーネント連携

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
HSP入門連載記事一覧
この記事の著者

おにたま(オニタマ)

オニオンソフトウェア代表。http://www.onionsoft.net/http://hsp.tv/ゲーム系のソフト開発会社に勤めるかたわら、Hot Soup Processor (HSP)を始めとするフリーウェア...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/441 2008/08/22 19:11

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング