# 関数リファレンス

- HSP 基本命令
  - プリプロセッサ命令
  - 特殊代入命令
  - プログラム制御命令
  - プログラム制御マクロ
  - 基本入出力制御命令
  - オブジェクト制御命令
  - 画面制御命令
  - 文字列操作命令
  - メモリ管理命令
  - マルチメディア制御命令
  - ファイル操作命令
  - HSPシステム制御命令
  - 基本関数
  - 文字列関数
  - 数学関数
  - GUI関数
- hspsock
  - ソケット通信命令
- hspsockA
  - ソケット通信命令
- hspini
  - iniファイル操作命令
- winmm
  - マルチメディアタイマー
- user32
  - メニュー操作命令

## HSP 基本命令

HSP 本体だけで使用できる基本命令です。

### プリプロセッサ命令

##### #cfunc

外部DLL呼び出し関数登録

###### 構文

#cfunc name,funcName,types...

###### パラメータ

- name - HSP 内で使用するこの関数の名前
- funcName - 拡張ライブラリで定義されたこの関数の名前
- types... - 関数のタイプ

###### 解説

引数の型は無視され、実際の関数の引数が優先されます。

関数と同名のメソッドが呼ばれることになります。

呼び出されるメソッドの引数は int、double、String、ByteString(Shift_JIS文字列)、Operand(変数)、Context(実行コンテキスト)のいずれかでなければいけません。
Operand を引数にとったときは、必ずその次に int で配列インデックスを受け取らなければいけません。 （配列ではないときは 0 が渡されます。）
Context を引数にとったときは HSPLet によって自動的に現在実行されているコンテキストが渡されます。

メソッドの戻り値は void、int、double、String、ByteString、Operand のいずれかでなければいけません。

呼び出されるメソッドが非 static のときは、クラスはインスタンス化できなければいけません。 public で引数の無いコンストラクタか、Context をひとつだけ受け取るコンストラクタが必要です。

##### #defcfunc

新規関数を登録する

###### 構文

#defcfunc name,params...

###### パラメータ

- name - HSP 内で使用するこの関数の名前
- params... - 引数リスト

###### 解説

引数の型は str/int/double/var/array のみサポートされています。 local などは指定できません。

##### #deffunc

新規命令を登録する

###### 構文

#deffunc name,params...

###### パラメータ

- name - HSP 内で使用するこの関数の名前
- params... - 引数リスト

###### 解説

引数の型は str/int/double/var/array のみサポートされています。 local などは指定できません。

##### #func

外部DLL呼び出し命令登録

###### 構文

#func name,funcName,types...

###### パラメータ

- name - HSP 内で使用するこの関数の名前
- funcName - 拡張ライブラリで定義されたこの関数の名前
- types... - 関数のタイプ

###### 解説

#cfunc と同様です。

##### #uselib

外部DLLの指定

###### 構文

#uselib name

###### パラメータ

- name - 使用するライブラリの名前

###### 解説

指定された DLL と同名のクラスが読み込まれます。 読み込まれるクラス名は、末尾から .dll または .hpi を除いたものになります。 たとえば、winmm.dll を使用すると、 winmm クラスが読み込まれます。

独自の拡張ライブラリクラスを作成したときは、JAR ファイルを lib フォルダの中においてください、 コンパイラが自動的に認識してコンパイル時にチェックがつけられるようになります。

### 特殊代入命令

##### mref

特殊なメモリを変数に割り当てる

###### 構文

mref variable,memoryID

###### パラメータ

- variable - 割当先の変数
- memoryID - 割り当てるメモリのID （省略時 = 0）

###### 解説

stat/refstr のみ使用可能です。 関数の引数には使用できませんので、3.0 形式の受け取り方をしてください。

### プログラム制御命令

##### exec

Windowsのファイルを実行する

###### 構文

exec fileName,mode,target

###### パラメータ

- fileName - 表示するファイル名
- mode - 無視されます （省略時 = 0）
- target - 表示するフレーム名 （省略時 = _blank）

###### 解説

HTML ページを表示する目的で使用されます。 第3引数の意味がオリジナルの HSP とは違うため、この命令を直接使用することはお勧めしません。 代わりに letutil.hsp 内に定義されている showPage fileName, target 命令を使用することをお勧めします。

### プログラム制御マクロ

### 基本入出力制御命令

### オブジェクト制御命令

### 画面制御命令

##### bgscr

ウィンドウIDを初期化

###### 構文

bgscr windowID,bufferWidth,bufferHeight,mode,left,top,visibleWidth,visibleHeight

###### パラメータ

- windowID - 初期化するウィンドウ ID
- bufferWidth - 初期化するバッファの横幅 （省略時 = 640）
- bufferHeight - 初期化するバッファの高さ （省略時 = 480）
- mode - ウィンドウ初期化モード （省略時 = 0）
- left - ウィンドウ左端
- top - ウィンドウ上端
- visibleWidth - 表示される横幅 （省略時 = bufferWidth）
- visibleHeight - 表示される高さ （省略時 = bufferHeight）

###### 解説

パレットモードは使用できません。

##### buffer

ウィンドウIDを初期化

###### 構文

buffer windowID,bufferWidth,bufferHeight,mode

###### パラメータ

- windowID - 初期化するウィンドウ ID
- bufferWidth - 初期化するバッファの横幅 （省略時 = 0）
- bufferHeight - 初期化するバッファの高さ （省略時 = 0）
- mode - ウィンドウ初期化モード （省略時 = 0）

###### 解説

パレットモードは使用できません。

##### font

フォント設定

###### 構文

font family,size,style

###### パラメータ

- family - フォントファミリ
- size - フォントサイズ
- style - フォントスタイル

###### 解説

アンチエリアス、下線、打ち消し線は mes 命令にのみ使用できます（オブジェクトのフォントには指定できません。）

環境依存を減らすために以下の特殊な定義済みフォント名が使用できます。

Serif
  ＭＳ Ｐ明朝のようなひげつき書体。
SansSerif
  ＭＳ Ｐゴシックのようなひげなし書体。
Monospaced
  ＭＳ ゴシックのような当幅フォント
Dialog
  メッセージボックスに使用されるフォント
DialogInput
  入力ボックスに使用されるフォント

しかしこれらのフォントはオリジナル HSP では使用できませんので、直接使用することはお勧めしません。 代わりに letutil.hsp 内に定義されている fontSerif 等の汎用的なフォント名を使用することをお勧めします。

##### gmode

画面コピーモード設定

###### 構文

gmode mode,width,height,alpha

###### パラメータ

- mode - コピーモード
- width - コピー幅
- height - コピー高さ
- alpha - アルファ値

###### 解説

モード7はサポートしていません。

##### gsel

描画先指定、ウィンドウ最前面、非表示設定

###### 構文

gsel windowID,mode

###### パラメータ

- windowID - 描画先ウィンドウID
- mode - アクティブ化モード

###### 解説

モード2はサポートされていません、またモード1で必ずアクティブになるとは限りません。

##### picload

画像ファイルをロード

###### 構文

picload fileName,mode

###### パラメータ

- fileName - 画像ファイル名
- mode - 読み込みモード

###### 解説

BMP、JPEG、GIF、PNGの読み込みをサポートしています。 ICOの読み込みはサポートしていません。

##### screen

ウィンドウIDを初期化

###### 構文

screen windowID,bufferWidth,bufferHeight,mode,left,top,visibleWidth,visibleHeight

###### パラメータ

- windowID - 初期化するウィンドウ ID
- bufferWidth - 初期化するバッファの横幅 （省略時 = 640）
- bufferHeight - 初期化するバッファの高さ （省略時 = 480）
- mode - ウィンドウ初期化モード （省略時 = 0）
- left - ウィンドウ左端
- top - ウィンドウ上端
- visibleWidth - 表示される横幅 （省略時 = bufferWidth）
- visibleHeight - 表示される高さ （省略時 = bufferHeight）

###### 解説

パレットモード・ツールウィンドウ・深い淵のあるウィンドウは使用できません。

##### sendmsg

ウィンドウメッセージの送信

###### 構文

sendmsg

###### 解説

以下のメッセージが実装済みです。

- 0x00B0:EM_GETSEL
- 0x00B1:EM_SETSEL
- 0x00C6:EM_CANUNDO
- 0x00C7:EM_UNDO
- 0x00CC:EM_SETPASSWORDCHAR
- 0x0300:WM_CUT
- 0x0301:WM_COPY
- 0x0302:WM_PASTE
- 0x0303:WM_CLEAR

##### title

タイトルバー設定

###### 構文

title text

###### パラメータ

- text - タイトルに設定するテキスト

###### 解説

アプレットの場合はステータスバーのテキストが変化します。

### 文字列操作命令

### メモリ管理命令

### マルチメディア制御命令

##### mci

MCIにコマンドを送る

###### 構文

mci command

###### パラメータ

- command - MCIコマンド文字列

###### 解説

以下の命令のみサポートされています。

- open file alias name
- play name
- seek name to position
- status name position
- stop name
- close name

WAV/AIFF/AU/MIDI/MP3 をサポートしています。 MP3 の再生には付属の jl1.0.jar が必要です。

##### mmload

サウンドファイル読み込み

###### 構文

mmload fileName,id,mode

###### パラメータ

- fileName - 読み込むファイル名
- id - 読み込んだサウンドにつけるID
- mode - 再生モード

###### 解説

WAV/AIFF/AU/MIDI/MP3 をサポートしています。 MP3 の再生には付属の jl1.0.jar が必要です。

### ファイル操作命令

##### chdir

ディレクトリ移動

###### 構文

chdir dir

###### パラメータ

- dir - 移動先ディレクトリ

###### 解説

移動先のディレクトリが存在しなくてもエラーになりません。

### HSPシステム制御命令

##### logmes

デバッグメッセージ送信

###### 構文

logmes text

###### パラメータ

- text - 出力テキスト

###### 解説

メッセージは Java コンソールに出力されます。

### 基本関数

### 文字列関数

### 数学関数

### GUI関数

##### ginfo

###### 構文

ginfo type

###### パラメータ

- type - 情報タイプ

###### 解説

タイプ 19、画面のカラーモードは常に 0 を返します。

タイプ 24、oncmd の割り込みウィンドウ ID はサポートされていません。

##### objinfo

###### 構文

objinfo

###### 解説

ウィンドウハンドル（type==2）のみが利用可能です。

##### sysinfo

システム情報の取得

###### 構文

sysinfo type

###### パラメータ

- type - 情報タイプ

###### 解説

CPUコードは文字列で返ります。

物理メモリサイズは Java ランタイムが使用できるメモリ量を返します。 この値は実行中にも変動する可能性があります。

スワップファイルサイズは 0 とします。

## hspsock

hspsock プラグインで使用できる拡張命令です。 hspsockA を実装した後に手を加えて hspsock 互換に修正したので、hspsockA の方が信頼性は高いです。

### ソケット通信命令

## hspsockA

hspsockA プラグインで使用できる拡張命令です。
DLL 版の hspsockA は PCB さんによって開発されました。 http://www.pcbsoft.net/ より入手可能です。

### ソケット通信命令

## hspini

hspini プラグインで使用できる拡張命令です。
DLL 版の hspini は K-K さんによって開発されました。 http://www.chichibu.ne.jp/~kawahira/ より入手可能です。

### iniファイル操作命令

##### iniset

使うiniファイルを設定します

###### 構文

iniset file,section

###### パラメータ

- file - 設定を保存するファイル名
- section - セクション名

###### 解説

設定情報はクッキーに保存されます。 ファイル名・セクション名は、クッキー名の頭にプレフィックスとして挿入することで一意性を実現します。

クッキーが利用できないときは stat に 1 が返ります。

## winmm

winmm.dll を使用した Windows API です。

### マルチメディアタイマー

##### timeGetTime

ミリ秒単位の時間を取得

###### 構文

timeGetTime

###### 解説

HSPLet 起動時からのミリ秒単位の時刻を取得します。

## user32

user32.dll を使用した Windows API です。

### メニュー操作命令

##### AppendMenuA

メニュー項目登録

###### 構文

AppendMenuA

###### 解説

グレイ表示しない無効項目は作成できません。
オーナードロー・ビットマップは使用できません。

##### DrawMenuBar

メニューバー再描画

###### 構文

DrawMenuBar

###### 解説

何も行いません。

##### DestroyMenu

メニュー削除

###### 構文

DestroyMenu

###### 解説

現在のバージョンでは対象のメニューだけが削除されます、サブメニューは削除されないので注意してください。