2008年3月 3日 (月)

HSPサンプルスクリプト - 標準入力をパイプにリダイレクトして起動したコンソールアプリケーションに直接データを流し込む時の注意

標準入力をパイプにリダイレクトして起動したコンソールアプリケーションに直接データを流し込む時は、最後にヌル文字を書き込む必要があるので注意。

つづきを読む

| | コメント (0) | トラックバック (0)

2006年10月30日 (月)

HSPプログラムコンテスト2006公式ページ更新

HSPプログラムコンテスト2006公式ページ更新。応募作品数は350を突破。

| | コメント (0) | トラックバック (0)

2006年8月30日 (水)

HSP3 サンプル スクリプト 「月間カレンダーコントロール関連定数」

 ウィンドウズのコモンコントロール「月間カレンダーコントロール」関連の定数リスト。

 ソースはサイドバーリンクの『プログラミング工房』 - 「HSPの部屋」にあります。

| | コメント (0) | トラックバック (0)

2006年8月10日 (木)

注目の新刊 『HSPファンブック』

 HSPファンブック

 おにたま (著) / 秀和システム / 2006-08 / 119 ページ / ¥ 1,155

 HSPのことだけでなくフリー言語開発者へのインタビューなども載っているそうです。

| | コメント (0) | トラックバック (0)

2006年7月23日 (日)

HSP Ver3.1β5

Hot Soup Processor オフィシャルホームページ

| | コメント (0) | トラックバック (0)

2006年7月17日 (月)

注目の新刊 『逆引きHSP3 プログラミング事典 基本編』

 逆引きHSP3 プログラミング事典 基本編

 さくら・悠黒 喧史・うすあじ・おにたま (著) / 工学社 / 2006-07-21 / 208 ページ / ¥ 2,415

 2.55版の逆引き本はかなり使いでがあったのでこちらも期待できそうです。

| | コメント (0) | トラックバック (0)

2006年7月15日 (土)

「HSPプログラムコンテスト2006」ホームページ仮公開

 「HSPプログラムコンテスト2006」のホームページが仮オープンしました。コンテストの作品応募受付期間は8月1日~10月31日となっています。今年はどんな作品で勝負しますか?

 HSPプログラムコンテスト2006

 過去のコンテスト結果のページでは、技術的に優れたものからユニークな発想のものまでさまざまな作品が楽しめます。

| | コメント (0) | トラックバック (0)

2006年7月 8日 (土)

HSP Ver3.1β4

Hot Soup Processor オフィシャルホームページ

| | コメント (0) | トラックバック (0)

2006年6月21日 (水)

HSP3 サンプル スクリプト 「名なしパイプと独自メッセージによるプロセス間通信(エディタと外部プログラムの連携)」

 このサンプルは、名なしパイプと独自のウィンドウメッセージを利用し、2つのアプリケーション間でテキストデータのやりとりを行う機能を記述したスクリプトです。動作確認はHSP3.1 beta3 / WinXP Pro SP2で行っています。

 サンプルの"editor.hsp"と"tool.hsp"は、それぞれランチャー機能付きのテキストエディタと、エディタから起動されてエディタとプロセス間通信をしながら小さな仕事を行うユーティリティを模して書かれています(サンプルなので構造はごくシンプルです)。ちょうどテキストエディタのTeraPadとTeraPadツールのような関係です。(このサンプルはTeraPadの仕組みを調べて書いたわけではありません)

 2つのソフトが行う処理の流れは以下のようになります。

 editor.exe起動(editor.hspを読み込みmesboxに表示。tool.exe起動用のbuttonを表示)(ユーザが操作)
  ↓
 mesbox内のテキストの一部または全体を選択(ユーザが操作)
  ↓
 editor.exeのウィンドウ上のボタンをクリックしてtool.exeを起動(ユーザが操作)
  ↓
 tool.exeがeditor.exeのウィンドウを検知したあと、editor.exeに対して
 mesbox内の選択テキストを送信するように要求する
  ↓
 editor.exeがtool.exeにデータを送る
  ↓
 tool.exeが受け取ったテキストを加工する
  ↓
 tool.exeがeditor.exeに対してデータを受け取る処理に入るように要求する
  ↓
 tool.exeが加工済みのテキストをeditor.exeに送り返す
  ↓
 editor.exeが受け取ったテキストをmesbox内の選択テキストと置き換える
  ↓
 終了

 "tool.exe"は"editor.exe"から起動され自分の仕事を完了すると自動的に終了します……


 続きはサイドバーリンクの「プログラミング工房」で。

| | コメント (0) | トラックバック (0)

2006年5月20日 (土)

HSP3 サンプル スクリプト 「標準出力をパイプにリダイレクトしてコンソール・アプリケーションを実行し、その出力を変数で受け取る」

 HSP3からコンソール・アプリケーションを起動し、そのアプリが出力したデータを直接変数で受け取るサンプル スクリプト。

 詳しくはサイドバーリンクの「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2006年4月29日 (土)

HSP Ver3.1β3

Hot Soup Processor オフィシャルホームページ

| | コメント (0) | トラックバック (0)

2006年3月19日 (日)

HSP Ver3.1β2

HSPTV!

| | コメント (0) | トラックバック (0)

2006年2月13日 (月)

HSP Ver3.1β1

HSPTV!

| | コメント (0) | トラックバック (0)

2006年1月18日 (水)

HSP3 サンプル アプリケーション 「エディタで開いているスクリプト言語のソースを引数付きで実行」

 このソフトはランチャー機能付きのエディタと共に使うことで、Ruby、Perl、Python、Tcl/Tkなどのスクリプト言語でのプログラミング時に引数付きのデバッグ実行が簡単に行えます。

 詳しくはサイドバーリンクの「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル スクリプト 「Amazon E-Commerce Service(ECS)から取得したデータをXMLパーサー(MSXML)で解析する」

 リンク先のスクリプトは、HSP3のhspinet.dllの命令を使ってAmazon E-Commerce Service(以下ECS)にアクセスし、そこから取得したXML形式の商品データをCOMコンポーネントのMSXMLで解析するプログラムです。

 ECSとはオンラインショップのAmazonが提供しているAmazon Web Service(AWS)というサービスの一つで、登録ユーザはAmazonの商品データベースに自由にアクセスしたり、ショッピングカート機能を自分のウェブサイトに組み込んだりといった機能を無料で利用することができます。ユーザの多くはアマゾン・アソシエイト・プログラムと組み合わせる形で利用していると思われます。Amazon Web Service(AWS)のページはこちら

 リンク先のスクリプトでは、RESTと呼ばれるHTTP経由のアクセス方法でECSのデータベースから商品データをダウンロードし、一度ファイルに保存してからMSXMLによってXML形式のデータを解析、切り出した商品情報を使ってシンプルな内容のウェブページ(HTMLファイル)を生成しています。生成されるHTMLファイルの例はこちら

 詳しくはサイドバーリンクの「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年12月17日 (土)

HSP3 サンプル アプリケーション 「PC内のCOMコンポーネント情報ブラウザ」

 実行しているPC上で利用できる可能性のあるCOM(Win32OLE、ActiveX)コンポーネントのProgIDリスト、メソッド/プロパティリスト、メソッド/プロパティ仕様をブラウズするためのソフト。

 詳しくはサイドバーリンクの「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル アプリケーション 「指定された文字列を、標準入力から取得したテキストの各行末に追加、または各行末から削除」

 このソフトは標準入力がリダイレクトされていればそこからデータを取得して、指定された文字列を各行末に追加または各行末から削除し標準出力に出力します。

 詳しくはサイドバーリンクの「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年12月 4日 (日)

HSP3 サンプル スクリプト 「実行ファイルがGUIアプリかコンソール・アプリか調べる」

 Windowsで特定のパスにある実行ファイルがGUIアプリかコンソール・アプリかを見分けるには、実行ファイル自体に埋めこまれたサブシステムを表す値を参照する必要があります。

 通常のWindowsアプリの実行ファイルは、MS-DOS上で実行するためのプログラムとWindows上で実行するためのプログラムが合体した形式になっていて、サブシステムを表す値はWindows用プログラムのエリアに埋めこまれています。(最近のアプリではMS-DOS用のプログラムは中身のないダミーであることが多い)

 サブシステムの値の位置を特定するには、まずMS-DOS用のプログラムエリアに埋めこまれているWindows用プログラムエリアの開始位置(=PEシグネチャへのオフセット)を参照し、その開始位置にサブシステムを表すデータへのオフセット(固定値)を加えます。この位置にある2バイトのデータが目的の情報です。

 値が表す意味はリンク先のスクリプトのマクロにある通りです。例えばHSPで作成した実行ファイルをリンク先のスクリプトでチェックすると2か3になります。

 ちなみにWin32APIの"GetBinaryType"という関数はWin32/Win16/DOSの種別を判定できるだけで、HSPで作成した実行ファイルをチェックすると、"hsp3cl.hrt"を使うか否かに関わらず「Win32」と判定されます。

 詳しくはサイドバーリンクの「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年11月29日 (火)

HSP3 サンプル アプリケーション 「指定された文字列を、標準入力から取得したテキストの各行頭に追加、または各行頭から削除」

 このソフトは標準入力がリダイレクトされていればそこからデータを取得して、指定された文字列を各行頭に追加または各行頭から削除し標準出力に出力します。

 詳しくはサイドバーリンクの「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル アプリケーション 「標準入出力とクリップボードの間でテキストをコピー」

 このソフトは標準入力がリダイレクトされていれば、そこからデータを取得してクリップボードに出力し、リダイレクトされていなければ、クリップボードのテキストを取得して標準出力に出力します。

 詳しくはサイドバーリンクの「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル アプリケーション 「タスクトレイ アイコンとして表示されるデジタル時計」

 nakkaさんという方がアナログ版を公開されていますが、自分的にはデジタルの方が見やすいと思ったので作ってみました。

 詳しくはサイドバーリンクの「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル モジュール 「HSPのウィンドウを確実にアクティブにする」

 HSPのウィンドウをアクティブにするための標準命令としてはgselがありますが、ウィンドウを前面に移動することはできてもアクティブ化に失敗することがあります。

 このモジュールをインクルードしてactivate_mywin命令を使用することで確実にHSPのウィンドウをアクティブにすることができます。もしうまく行かない場合にはactivate_mywin命令を実行する直前か直後に"gsel ?,1"や"gsel ?,2"を実行するようにして下さい。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル モジュール 「ごみ箱を空にする」

 Windowsのごみ箱は、ファイル・フォルダ操作時のセーフティネットとして便利ではあるのですが、時々空にする操作が面倒です。設定で容量を小さくすることはできますが、それでもいっぱいになるまで放っておくとかなりの数になって、なんとなくハードディスクを無駄使いしているような気になってしまいます。かといって、ごみ箱を無効にしてしまうといざという時に後悔することになるのも確かです。

 このスクリプトはHSP3で簡単にごみ箱を空にする処理を行うためのモジュールです。メインのスクリプトの冒頭でモジュールをインクルードし、emptyrbin命令を引数なしで呼び出すだけで使えます。このモジュールを使って作った実行ファイルをWindowsの「スタートアップ」フォルダに入れておけば、パソコンを起動する度に自動でごみ箱を空にすることができ、パソコンの使い勝手がちょこっと良くなります。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル モジュール 「標準の警告音を鳴らす」

 モジュールファイルを#includeして、それより後ろの位置でbeep命令を呼び出すだけで使えます。毎回APIを登録しなおすよりは楽だと思います。(^^;)

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル モジュール 「タスクトレイ アイコン操作」

 任意のウィンドウに描画した16*16ピクセルの画像をタスクトレイアイコンとして登録することができます。同時に登録できるアイコンの数は1つです。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル モジュール 「クリップボード操作(テキスト専用)」

 拡張プラグインhspext.dllを使わずにクリップボードを操作できます。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年11月26日 (土)

HSP3 サンプル モジュール 「プロセスの実行優先度を設定する」

 Windowsでは同時に複数のプログラムを使うことができますが、これは実際にはWindowsの管理の下、非常に短いサイクルで、個々のプログラムにかわりばんこにCPUを使わせるようにすることで実現されています。

 そしてHSPで作れるような一般のプログラムは、普通はみな同じ時間だけCPUを使う許可を与えられますが、プログラムの種類によっては、必要な処理を行うのに他のプログラムより少ない時間しか必要ない場合もあります。

 そういう時に「自分がCPUを使う時間は他のプログラムよりも短くていいですよ」とWindowsに知らせることで、他のたくさんの仕事を行うプログラムにCPUを使う時間を譲ってあげることができます。これをHSPで実行するには下のリンク先のようなモジュールを使って自分の実行優先度を低くすればOKです。

 使い方は、モジュールをインクルードして"set_priority"命令を実行するだけです。このモジュールは主にプロセスの実行優先度を低くするためのものとして作っています。

 例えば、時計ソフトを作る場合、1秒に1回または1分に1回時間のチェックと表示の更新ができれば目的が達せられるので、スクリプトの最初の方で"set_priority IDLE_PRIORITY_CLASS,THREAD_PRIORITY_IDLE"などと実行して優先度を最低に設定することでCPUに極力負担をかけないソフトにすることができます。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル スクリプト 「ウィンドウ メッセージ定義マクロ」

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル スクリプト 「クリップボード内のテキストに行番号を付加する」

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年11月17日 (木)

HSP3 サンプル スクリプト 「mesboxを警告音(Beep)が出ないinputとして使う」

 HSP 2.61のinputオブジェクトはフォーカスがある時にEnterキーやTabキーを押しても警告音が鳴らないように作られていましたが、HSP 3.0(a)ではまだ警告音が鳴ってしまう現象は修正されていません。

 リンク先のソースははmesboxを使って警告音が鳴らないinputもどきを作るスクリプトです。ポイントはonkey命令を使ってEnterキーの押し下げを検知して、mesboxに改行が追加される前に一度中身のテキストをコピーしておき、await命令の所で改行が追加されたあとでそのテキストをmesboxに戻すことです。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル スクリプト 「仮想キーコード定義マクロ」

 Windows用キーボードのほぼすべてのキーコードをHSP3用のマクロにしたものです。Tatsuo Sugiharaさんの仮想キーコード表のページを元に作成しました。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル スクリプト 「標準出力をファイルにリダイレクトしてコンソール・アプリケーションを実行」

 スクリプト上で出力用ファイルとデータ受け渡し用のパイプを作成してコンソール・アプリを起動する処理のサンプルです。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年11月14日 (月)

HSP3 サンプル モジュール 「テキストの先頭または末尾から指定された文字列を削除」

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル モジュール 「文字列中の改行コードを判別、変換、削除」

 とりあえずCRLF/CR/LFの3種類とも対応してますが、含まれる改行コードの形式が1種類に統一されているShift-JIS文字列でのみ動作確認済みです。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル モジュール 「RGB値をCOLORREF値に変換」

 RGB形式の色情報をWin32APIなどで使われる型の値に変換します。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年10月11日 (火)

HSP3 サンプル アプリケーション 「Win32 API Browser」

 このソフトはHSP3付属のWin32 API定義ファイルから簡単に目的の定義を見つけてクリップボードにコピーするためのソフトです。HSP3付属のAPI定義ファイルをそのままインクルードするとオブジェクトファイルのサイズが無駄に膨らんでしまうため、必要な定義だけを簡単にコピペしたいと思い作りました。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年10月 6日 (木)

HSP3 サンプル アプリケーション 「HSP3用簡易コマンドライン コンパイラ」

 コマンドラインランチャーやコマンドラインランチャー機能付きのエディタなどからHSPスクリプトを実行/コンパイルしたり、スクリプトからの実行ファイル作成を行うためのソフトです。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年10月 5日 (水)

HSP3 サンプル スクリプト 「2つのコンソール・アプリをパイプでつないで実行」

リンク先はコマンドプロンプト(cmd.exe)で2つのコンソール・アプリをパイプ記号("|")でつないだコマンドラインを実行したときの動作を再現するスクリプトです。名無しパイプを利用しています。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年10月 4日 (火)

HSP3 サンプル アプリケーション 「標準入力から来たテキストデータ、またはコマンドライン引数に指定されたパスのテキストファイルの内容をそのまま標準出力に出力する」

 標準入力から来たテキストデータ、またはコマンドライン引数に指定されたパスのテキストファイルの内容をそのまま標準出力に出力するコンソール・アプリケーションです。シンプルなコンソール・アプリのサンプルになっています。

 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

HSP3 サンプル モジュール 「標準入出力関連」

このモジュールは、コンソール・プログラムでは必須の機能であるがHSP3CLの標準機能ではカバーできない作業を引き受けます。主な命令・関数は以下の通りです。

●is_stdin_redirected 関数

 標準入力がキーボード以外にリダイレクトされているかをチェックできます。

●input2 命令

 私の環境ではHSP3CLでinput命令を実行した時に受け取るデータのサイズが大きいとシステムエラーが発生してスクリプトが強制終了してしまうことがあります。input ?,?,0 の代わりにinput2命令を使うことでデータのサイズを気にせずにすみます。

●mes2 命令

 出力データの末尾に改行コードが付加されてしまうmes命令では不都合な場合に使います。


 詳しくは「プログラミング工房」へ

| | コメント (0) | トラックバック (0)

2005年9月21日 (水)

HSP 3.0aテスト版更新

HSP 3.0のマイナーアップデートバージョンHSP 3.0aのテスト版が更新されました。

Hot Soup Processor オフィシャルホームページ

とりあえず、inputにフォーカスがあるときにEnterキーやTabキーを押すと警告音が鳴ってしまう現象が修正されているのは確認しました。 ← 2005/10/7訂正。左記の内容は誤りでした。すみません。

| | コメント (0) | トラックバック (0)

2005年9月11日 (日)

HSP 3.0a先行公開中

HSP 3.0のマイナーアップデートバージョンのHSP 3.0aのテスト版が公式サイトで公開されています。

Hot Soup Processor オフィシャルホームページ

| | コメント (0) | トラックバック (0)

2005年9月 5日 (月)

HSPでFindTextできず

chspedit_cap_1

HSP3で作成中のスクリプトエディタで[検索]コモンダイアログボックスを使おうとするも、FINDREPLACE構造体のサイズとメンバのアラインメントの情報が見つけられず挫折orz。しょうがないのでHSPのウィンドウで同じものを作る。

俺仕様エディタは、標準エディタでも使われているFootyとHSP3の組み合わせで作ってるんですが、案外楽に作れるなーという印象。HSP3はDLLとの連携やメッセージの取り扱いの部分でパワーアップしているので、FootyのようなDLLとのコンビネーションは結構強力な気がする。簡単に作れるということも含めて。

| | コメント (0) | トラックバック (0)

2005年8月20日 (土)

Let's HSPUPX! Ver. 1.7

Kpanさん作のHSP製実行ファイル圧縮ソフト「Let's HSPUPX!」のHSP 3.0対応版が公開されています。

Let's Emu! : 自作ソフト

| | コメント (0) | トラックバック (0)

2005年8月17日 (水)

cHspComp 0.3.1公開しました

HSP3のサンプルアプリケーションとしてHSP3用コンパイラcHspComp ver.0.3.1(ソースのみ)を公開しました。

| | コメント (0) | トラックバック (0)

2005年8月 1日 (月)

HSP ver3.0公開中

新しくオープンした、HSPに関する情報を集めたポータルサイトHSPTV!にて公開されました。

| | コメント (0) | トラックバック (0)

2005年7月28日 (木)

HSP ver3.0RC2公開中

Hot Soup Processor オフィシャルホームページ

| | コメント (0) | トラックバック (0)

2005年7月18日 (月)

HSP ver3.0RC1公開中

Hot Soup Processor オフィシャルホームページ

| | コメント (0) | トラックバック (0)

2005年6月28日 (火)

HSP ver3.0β11公開中

Hot Soup Processor オフィシャルホームページ

| | コメント (0) | トラックバック (0)

2005年6月18日 (土)

HSP ver3.0β10公開中

Hot Soup Processor オフィシャルホームページ

| | コメント (0) | トラックバック (0)

2005年6月15日 (水)

HSP ver3.0β9公開中

Hot Soup Processor オフィシャルホームページ

| | コメント (0) | トラックバック (0)

2005年5月 5日 (木)

HSP ver3.0β8公開中

http://www.onionsoft.net/hsp/

| | コメント (0) | トラックバック (0)

2005年4月16日 (土)

HSP ver3.0β7公開中

http://www.onionsoft.net/hsp/

| | コメント (0) | トラックバック (0)

2005年4月 1日 (金)

HSP ver3.0β6公開中

http://www.onionsoft.net/hsp/

| | コメント (0) | トラックバック (0)

2005年3月 8日 (火)

HSP3 お勉強メモ 一覧

この記事へのトラックバック一覧は「HSP3 お勉強メモ」のテーマごとの先頭記事一覧になってます。
(外部からのトラックバックが混ざってしまう可能性はあります)

| | コメント (0) | トラックバック (1)

2005年3月 7日 (月)

HSP3 お勉強メモ 「モジュール」 (2)

#modinit#modfunc命令を利用して作ったモジュールの使い方。

HSP3 お勉強メモ 「モジュール」」で書いたオブジェクト指向で言う「インスタンス」の作成にはnewmod命令を使う。第1引数に「インスタンス」(=#module命令で指定した変数)を格納する変数(モジュール変数と呼ぶ)を指定し、第2引数には利用するモジュール名を指定する。

/* newmod命令記述例 */
newmod modvar,modname

もともとnewmod命令の実行時にはモジュール変数に含まれる変数(=#module命令で指定した変数)はすべて整数の0で初期化されるが、モジュールに#modinit命令で定義された命令がある場合それも自動的に実行されるので、モジュールごとに自由に初期化を定義できる。この初期化命令に引数を渡したいときは、newmod命令の第3引数以降にそのまま指定することができる。

/* 初期化命令の引数も指定したnewmod命令記述例 */
newmod modvar,modname,p1,p2

複数の「インスタンス」を作成する場合は、別のモジュール変数を用意してもいいし、すでに使われているモジュール変数を指定してもいい。すでに使われているモジュール変数を指定するとそのモジュール変数は自動的に配列になる。

「インスタンス」を破棄するにはdelmod命令を使う。第1引数にモジュール変数を指定する。

/* delmod命令記述例 */
delmod modvar
/* 複数の「インスタンス」を格納している場合は要素のインデックスも指定する(0の場合は省略可) */
delmod modvar(1)

ただしdelmodしてもモジュール変数(の要素)自体が消滅するわけではなく、再度同じ変数に対してnewmodした時に使いまわされる。(配列の場合、要素は指定できない)

「インスタンス」作成時にモジュール変数を上書きしたい時や配列の要素を指定したい時には、newmod命令の代わりにsetmod命令を使う。初期化もnewmodの時と同様に行われる。

/* setmod命令記述例 */
setmod modvar(1),modname

モジュール変数(配列)の特定の要素が使用中かどうかを調べるにはmoduse関数を使う。

/* moduse関数使用例 */
if moduse(modvar(0))=0 : mes "modvar(0)は使用されていない"

moduseは関数なので式に含めることができる。

モジュール変数の使用中のすべての要素に対して処理を行うためのforeachというループ命令も追加されている。第1引数にモジュール変数を指定する。

/* foreach命令使用例(getxは#modfunc命令で定義された関数という前提) */
foreach modvar
    getx modvar(cnt)
    mes refstr
loop

ちなみに配列の現在の要素数はlength関数で調べることができる。

/* length関数使用例 */
mes "配列要素の最大="+length(modvar)

lengthも関数なので式に含めることができる。

| | コメント (0) | トラックバック (0)

HSP3 お勉強メモ 「モジュール」

HSP3になってモジュールは大幅に機能追加されたが、これはHSPでオブジェクト指向っぽいプログラミングをするための改良と言っていいと思う。実際作者のおにたまさんはマニュアルの中で「コンストラクタ」という単語も使っている。この改良によってモジュールをクラス的な物としても使えるようになった。(継承やらなんやらできないこともありますが)

具体的な機能変更・追加点としては、まず#module命令の引数にモジュール名に加え任意の数の変数を指定できるようになった。

/* #module命令記述例 */
#module modname x,y,z

ここにはオブジェクト指向で言うところの「インスタンス」ごとに個別の物として扱いたいデータ名を指定する。モジュール内ではこの名前で扱う。さらにこの変数は通常のモジュール内の変数とは異なり、HSP3で新しく追加された#modinit命令または#modfunc命令で定義したユーザ定義命令を経由してしかアクセスできない。

モジュール外のスクリプトで「インスタンス」を作成する際、同時にその「インスタンス」を初期化することもでき、モジュール内にそれ専用の命令を記述するための命令が#modinit#modinitで定義された命令は「インスタンス」作成時に自動的に一度だけ呼び出される。スクリプトから明示的に呼びだすことはできない。

あとモジュールの使用にからむ変更点として、ユーザ定義命令#deffunc#modfunc#modinit命令で定義される命令)の引数の指定方法とreturn命令の仕様、そしてローカル変数の追加がある。

ユーザ定義命令の引数は以下のようにデータタイプだけでなくユーザ定義命令内での名前も同時に指定するようになった。HSP2.xでのmref命令を使ってユーザ定義命令内で指定する方法はHSP3では非推奨となった。引数に指定できるデータタイプの数も増えている。

/* ユーザ定義命令の引数指定例 */
#deffunc afunc int p1,val p2

この方がスクリプトもすっきりしていいと思う。

return命令は、引数に変数を一つ指定するとその内容がシステム変数statあるいはrefstrに自動で代入されるようになった。どちらのシステム変数に代入されるかは引数に指定した変数のタイプによって決められる。これもスクリプトの簡略化に役立つ。

/* return命令の引数指定例 */
return x

ローカル変数は、ユーザ定義命令の定義で引数と併記する形で指定した変数について、ユーザ定義命令を実行するごとに生成・初期化・破棄が行われる機能。引数では通常データタイプを指定するところに"local"と記述するとローカル変数として扱われる。

/* ローカル変数の指定例 */
#deffunc afunc int p1,val p2,local tmp

| | コメント (0) | トラックバック (1)

2005年3月 6日 (日)

HSP ver3.0β5公開

http://www.onionsoft.net/hsp/

| | コメント (0) | トラックバック (0)

2005年2月23日 (水)

HSP ver3.0β4公開

http://www.onionsoft.net/hsp/

| | コメント (0) | トラックバック (0)

2004年12月11日 (土)

HSP 3.0β3公開中

http://www.onionsoft.net/hsp/

| | コメント (0) | トラックバック (0)

2004年11月24日 (水)

HSP 3.0β2公開中

http://www.onionsoft.net/hsp/

| | コメント (0) | トラックバック (0)