HSP-NEXT   
    HSPサンプル蔵  (プラグイン編)


〜 HSP拡張プラグイン以外の汎用プラグインを利用する 〜

■HSPから外部dllをコールしよう

 HSPが提供している開発環境のひとつとして、ユーザーがHSP用のプラグインという専用 のdllを作成して利用できるうに開発手順やライブラリが提供されています。また、HSPの ダウンロードアーカイブには、 HSPでプログラム開発の手助けとなるように便利なプラグ インやベクター等のダウンロードサイトでも、 ユーザーが作成したHSP用のプラグインも 多数公開されています。プラグイン編では、それらのプラグインの他に、HSP3になってか ら、標準で利用可能となったHSPのAPI呼び出し機能を利用して、フリーで著名な各種言語 で利用されているライブラリを、 HSPから簡単に利用できるようにモジュール化したもの を紹介します。

■外部dllの利用方法と注意事項

 外部dll呼び出し操作において必要となるdllは個別にダウンロードサイトや提供元の作 者のサイトより入手して下さい。 入手したらサンプルを実行する前に利用する(*1)各dll をHSPのフォルダ(hsp3.exeのある場所)にコピーして下さい。exeを作成した場合は、 exe と同じ場所に置いて利用して下さい。 各dllは一応フリーウェアとreadme.txtには記載さ れていますが、 著作権は各dll作者が留保していますので、取扱いには注意して下さい。
尚、プラグイン編で紹介しているモジュールは、 HSPから利用できるようにしたもので、 dllの作者(開発元)宛てにHSPについての質問等は、しないようお願いします。 いずれのdllも機能が非常に豊富であり、 それらの機能の一部しか使いこなしておりませ んが、 dllが提供している関数は直接呼び出せるように定義してありますので、各自で研 究して、モジュールを拡張して見ると良いでしょう。

各プラグインの機能や内容は、筆者が独自に解釈してモジュール化したものであるため、 解釈違い等による間違いがあると思われます。その場合は、ご報告して頂けると有り難いです。 いずれにしても、機能が豊富なプラグインなので、全てをHSPから簡単に利用できるように している訳ではありませんので、ご容赦願います。

ここで利用している 汎用のプラグイン ( dll ) の入手方法 やモジュールの リファレンス に ついては、末尾に記載してありますので参照願います。

■ プラグイン編掲載サンプル一覧

No. 内         容
1  Susie 32bit Plug-inをSusie以外のソフトウェアで使う
2  Unlha32.dllで解凍を行なう
3  Unzip32.dllで解凍を行なう
4  線や円弧、四角形にグラデーション効果を出す
5  背景を透過したデスクトップマスコットのような画像ファイルを作成する
6  mp3ファイルを操作する
7  各種漢字コードの変換を行なう
8  音楽ファイルを高速に変換する
9  正規表現を利用する
10  PDFファイルの作成・編集・情報取得を行なう


      Susie 32bit Plug-inをSusie以外のソフトウェアで使う     

竹村嘉人 (たけちん)氏の Susieは、windowsの多くの画像フォーマットに対応したものが 公開されていて、画像ビューワーであるSusie本体がなくても、Susie 32bit Plug-in仕様 で作成されたものであれば、 実装されているAPI関数を利用して、いろんな言語から利用 できるようになっています。 Susie対応のプラグイン(dll)をHSPから簡単に利用できるよ うにモジュール化したものを紹介します。このモジュールでは、利用するプラグインを固 定せずに、LoadLibrary API関数で、任意に指定したプラグイン名(spiの拡張子)を動的ロ ードして、実装されている関数のアドレスをGetProcAddress API関数で取得する方法をと っています。 関数のアドレスがうまく取得できれば、後は必要に応じて、HSPのcallfunc 関数を使って呼び出します。実際は、モジュール命令としていますので、簡単なパラメー タを指定するだけで利用できます。
	;***** Susie 32bitプラグイン呼び出しモジュール (exspidll.as) *****

	#ifdef __hsp30__
	#ifndef __EXSPIDLL__
	#define __EXSPIDLL__
	#module

	;▼▼▼▼▼▼▼ 関数の定義  ▼▼▼▼▼▼▼
	#uselib "kernel32.dll"
	#cfunc LoadLibrary "LoadLibraryA" sptr
	#cfunc GetProcAddress "GetProcAddress" int,sptr
	#func  FreeLibrary "FreeLibrary" int
	#func  MoveMemory "RtlMoveMemory" int,int,int
	#cfunc LocalLock "LocalLock" int
	#func  LocalUnlock "LocalUnlock" int
	#func  LocalFree "LocalFree" int
	#uselib "gdi32.dll"
	#func  SetDIBitsToDevice "SetDIBitsToDevice" int,int,int,int,int,int,int,int,int,int,int,int

	#define global MAX_PATH    256
	#define global HEAD_SIZE    40

	;***** Susie 32bit Plug-in dllのロード (spidllload) *****
	#deffunc spidllload str prm1
	dll = prm1 : if strlen(dll)==0 : return -1
	pdll=LoadLibrary(dll)
	if pdll==0 : return -1
	;▼GetPluginInfo関数のアドレス取得
	funcname="GetPluginInfo" : _GetPluginInfo=GetProcAddress(pdll,funcname)
	if _GetPluginInfo==0 : return -1
	;▼IsSupported関数のアドレス取得
	funcname="IsSupported"   : _IsSupported=GetProcAddress(pdll,funcname)
	if _IsSupported==0   : return -1
	;▼GetPicture関数のアドレス取得
	funcname="GetPicture"    : _GetPicture=GetProcAddress(pdll,funcname)
	if _GetPicture==0    : return -1
	;▼GetPictureInfo関数のアドレス取得
	funcname="GetPictureInfo": _GetPictureInfo=GetProcAddress(pdll,funcname)
	if _GetPictureInfo==0: return -1
	return 0

	;***** 画像ファイルの読み込み描画 (spipicload) *****
	#deffunc spipicload str prm1,int prm2,int prm3,int prm4
	sdim ImgFname,260 : dim  BITMAPINFOHEADER,HEAD_SIZE
	ImgFname = prm1 : if strlen(ImgFname)==0 : return -1
	ImgMode=prm2 : if (ImgMode<0)|(ImgMode>1) : ImgMode=0
	nPosx=prm3 : nPosy=prm4

	;▼形式チェック
	exist ImgFname : if strsize=-1 : return -1
	imgsize=strsize : sdim buf,imgsize
	bload ImgFname,buf,MAX_PATH*8

	;▼展開可能な(対応している)ファイル形式か調べる
	prm=varptr(ImgFname), varptr(buf)
	ret=callfunc(prm,_IsSupported,2)
	if stat = 0 {
		dialog "未対応形式の画像ファイルです"
		FreeLibrary pdll : return -1
	}
	;▼画像を展開
	; ImgMode=0 : 入力がファイルで展開
	if ImgMode==0 {
		prm=varptr(ImgFname),0,0,varptr(hBmpInfo),varptr(hBmp),0,0
	}else{
		; ImgMode=1 : メモリイメージで展開
		bload ImgFname,buf,imgsize
		prm=varptr(buf),imgsize,1,varptr(hBmpInfo),varptr(hBmp),0,0
	}
	ret=callfunc(prm,_GetPicture,7)
	if ret != 0 {
		dialog "読み込みエラー\nエラーコード : " + ret
		FreeLibrary pdll : return -1
	}
	;▼メモリハンドルからポインタ取得
	pBITMAP = LocalLock(hBmp)
	pBITMAPINFO = LocalLock(hBmpInfo)

	;▼BITMAPINFOHEADER取得
	MoveMemory varptr(BITMAPINFOHEADER),pBITMAPINFO,HEAD_SIZE

	;▼画像の幅、高さを取得
	nWidth  = BITMAPINFOHEADER(1)
	nHeight = BITMAPINFOHEADER(2)

	;▼描画
	SetDIBitsToDevice hdc,nPosx,nPosy,nWidth,nHeight,0,0,0,nHeight,pBITMAP,pBITMAPINFO,0
	redraw 1
	;▼解放
	LocalUnlock hBmp
	LocalUnlock hBmpInfo
	LocalFree hBmp
	LocalFree hBmpInfo
	return 0

	;***** Plug-inに関する情報を取得 (getdllinfo) *****
	#deffunc getdllinfo var prm1,int prm2
	sdim buf,MAX_PATH*8
	nMode=prm2 : if (nMode<=0)|(nMode>1) : nMode=0

	;GetPluginInfo関数呼び出し
	prm=nMode,varptr(buf),MAX_PATH
	ret=callfunc(prm,_GetPluginInfo,3)
	prm1=buf
	return ret

	;***** 画像ファイルに関する情報を取得 (getpictinfo) *****
	#deffunc getpictinfo array prm1,str prm2 
	sdim ImgFname,260 : dim  PICTUREINFO,HEAD_SIZE
	ImgFname = prm2 : if strlen(ImgFname)==0 : return -1

	;▼GetPictureInfo関数呼び出し
	prm=varptr(ImgFname),0,000,varptr(PICTUREINFO)
	ret=callfunc(prm,_GetPictureInfo,4)
	;▼PICTUREINFO構造体からの取得情報
	prm1(0) = PICTUREINFO(0)               ;画像を展開する位置 (left)
	prm1(1) = PICTUREINFO(1)               ;画像を展開する位置 (top)
	prm1(2) = PICTUREINFO(2)               ;画像の幅(pixel)
	prm1(3) = PICTUREINFO(3)               ;画像の高さ(pixel)
	prm1(4) = PICTUREINFO(4)&$ffff         ;画素の水平方向密度
	prm1(5) = PICTUREINFO(4)>>16&$ffff     ;画素の垂直方向密度
	prm1(6) = PICTUREINFO(5)               ;1画素当たりのbit数
	prm1(7) = PICTUREINFO(6)               ;画像内のテキスト情報
	return 0

	;***** プラグインの解放 (spidllfree) *****
	#deffunc spidllfree 
	FreeLibrary pdll
	return
	#global
	#endif
	#endif

	;***** Susie 32bitプラグインサンプル(1) (dllsamp10.hsp) *****

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#include "exspidll.as"

	onexit *owari

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir

	;▼Screen ID=0 の初期化
	screen 0,640,480,0,ginfo(20)-640>>1,ginfo(21)-480>>1
	gsel 0,1

	title "Susie 32bitプラグインサンプル(1)"

	;▼Susie対応のdllを指定する。 (例として、ifjpeg.spiを使って見る。)
	;http://www.digitalpad.co.jp/~takechin/
	spidllload "ifjpeg.spi"
	if stat==0 { dialog "jpg", 16, "画像ファイル"
		if stat==0 : stop
		spipicload refstr,0
	}
	spidllfree
	stop

;▼終了処理
*owari
	end

	;***** Susie 32bitプラグインサンプル(2) (dllsamp11.hsp) *****

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#include "exspidll.as"

	onexit *owari

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir

	;▼Screen ID=0 の初期化
	screen 0,640,480,0,ginfo(20)-640>>1,ginfo(21)-480>>1
	gsel 0,1

	title "Susie 32bitプラグインサンプル(2)"

	;▼Susie対応のdllを指定する。 (例として、ifjpeg.spiを使って見る。)
	;http://www.digitalpad.co.jp/~takechin/
	dim info,8
	spidllload "ifjpeg.spi"
	if stat==0 { dialog "jpg", 16, "画像ファイル"
		if stat==0 : stop
		string="" : getdllinfo string,1
		pos 10,20 : mes "プラグイン情報 : "+string
		;▼PICTUREINFO構造体からの取得情報
		getpictinfo info,refstr
		pos 10,40
		mes "画像を展開する位置 (left) : "+info(0)
		mes "画像を展開する位置 (top)  : "+info(1)
		mes "画像の幅(pixel)           : "+info(2)
		mes "画像の高さ(pixel)         : "+info(3)
		mes "画素の水平方向密度        : "+info(4)
		mes "画素の垂直方向密度        : "+info(5)
		mes "1画素当たりのbit数       : "+info(6)
		mes "画像内のテキスト情報      : "+info(7)
	}
	spidllfree
	stop

;▼終了処理
*owari
	end
      Unlha32.dllで解凍を行なう     

かなり昔から定番である Unlha32.dllを利用した解凍処理を行なうモジュールサンプルを 紹介します。 Unlha32.dllが提供する関数の仕様等は、付属のドキュメントに詳細に解説 されており、それらの仕様に基づいてAPI定義しています。各種書庫の操作(Unlha関数)で コマンドパラメータを設定することによって、圧縮や展開(解凍)等の処理が行なわれま す。
	;***** Unlha32.dll呼び出しモジュール (exunlha.as) *****

	#ifdef __hsp30__
	#ifndef __EXUNLHADLL__
	#define __EXUNLHADLL__
	#module

	;▼▼▼▼▼▼▼ 関数の定義  ▼▼▼▼▼▼▼
	#uselib "unlha32.dll"
	#cfunc global UnlhaGetVersion "UnlhaGetVersion"
	#cfunc global UnlhaGetRunning "UnlhaGetRunning"
	#cfunc global UnlhaGetBackGroundMode "UnlhaGetBackGroundMode"
	#cfunc global UnlhaSetBackGroundMode "UnlhaSetBackGroundMode" int
	#cfunc global UnlhaGetCursorMode "UnlhaGetCursorMode"
	#cfunc global UnlhaSetCursorMode "UnlhaSetCursorMode" int
	#cfunc global UnlhaGetCursorInterval "UnlhaGetCursorInterval"
	#cfunc global UnlhaSetCursorInterval "UnlhaSetCursorInterval" int
	#cfunc global Unlha "Unlha" int,int,int,int
	#cfunc global UnlhaCheckArchive "UnlhaCheckArchive" int,int
	#cfunc global UnlhaGetFileCount "UnlhaGetFileCount" int
	#cfunc global UnlhaQueryFunctionList "UnlhaQueryFunctionList" int
	#cfunc global UnlhaConfigDialog "UnlhaConfigDialog" int,int,int
	#cfunc global UnlhaExtractMem "UnlhaExtractMem" int,int,int,int,int,int,int
	#cfunc global UnlhaCompressMem "UnlhaCompressMem" int,int,int,int,int,int,int

	;▼環境設定ダイアログを表示
	#deffunc lhacfgdlg
		buf=""
	return UnlhaConfigDialog(hwnd,varptr(buf),0)

	;▼書庫ファイルのチエック
	#deffunc acheckarc str prm1
		sfile=prm1 : if strlen(sfile)==0 : return -1
	
		#define CHECKARCHIVE_RAPID      0
		#define CHECKARCHIVE_BASIC      1
		#define CHECKARCHIVE_FULLCRC    2
		#define CHECKARCHIVE_RECOVERY   4
		#define CHECKARCHIVE_SF         8
		#define CHECKARCHIVE_ALL       16

		ret=UnlhaCheckArchive(varptr(sfile),CHECKARCHIVE_ALL|CHECKARCHIVE_BASIC)
		if ret!1 {
			dialog "書庫ファイルが不正です!",0,"unlha32.dllエラー"
			return ret
		}
	return ret

	;▼書庫内の格納ファイル数取得
	#deffunc lhagetfcount str prm1
		sfile=prm1 : if strlen(sfile)==0 : return -1
	return UnlhaGetFileCount(varptr(sfile))

	;▼各種書庫の操作
	#deffunc unlhaset str prm1,var prm2
		cmd=prm1 : if strlen(cmd)==0 : return -1
		ret=Unlha(hwnd,varptr(cmd),varptr(prm2),$2710)
		if ret!0 {
			dialog "書庫操作が失敗です!",0,"unlha32.dllエラー"
			return ret
		}
	return ret

	;▼Unlha32.dllのバージョンを取得
	#deffunc unlhagetver
	return UnlhaGetVersion()
	#global
	#endif
	#endif

	;***** Unlha32.dllのサンプル (dllsamp12.hsp) *****

	#include "exunlha.as"
	onexit *owari
	sdim buf,32000
	sdim path,260
	sdim arccmd,2048
	
	;lhacfgdlg                ;▼環境設定ダイアログ
	;▼バージョン情報
	version=unlhagetver()
	version=wpeek (version, 0)
	majorversion = version / 100
	minorversion = version \ 100
	mes ""+version+" -> "+majorversion+"."+minorversion

	dialog "lzh",16:if stat=0 :stop
	acheckarc refstr          ;▼書庫のチエック
	lhagetfcount refstr       ;▼格納ファイル数取得
	num=stat

	path=dirinfo(0)+"\\"
	arccmd  = "e \""+refstr+"\" \""+path+"\""

	;▼展開処理
	dialog "選択ファイル名="+refstr+"を\n\n展開して良いですか?",2,"確認"
	if stat=7:stop  
	unlhaset arccmd,buf       ;▼書庫操作(解凍)
	dialog buf+"\n\nファイル格納数 = "+num+"  "+stat,0,"展開結果"
	stop

*owari
	end
      Unzip32.dllで解凍を行なう     

Unlha32.dllと同様定番である Unzip32.dllを利用した解凍処理を行なうモジュールサンプルを 紹介します。 Unzip32.dllが提供する関数の仕様等は、付属のドキュメントに詳細に解説 されており、それらの仕様に基づいてAPI定義しています。各種書庫の操作(UnZip関数)で コマンドパラメータを設定することによって、圧縮や展開(解凍)等の処理が行なわれま す。(関数名は違いますが、統合アーカイバ仕様なので、Unlhaと内容は全く同じです。)
	;***** Unzip32.dll呼び出しモジュール (exunzip.as) *****

	#ifdef __hsp30__
	#ifndef __EXUNZIPDLL__
	#define __EXUNZIPDLL__
	#module

	;▼▼▼▼▼▼▼ 関数の定義  ▼▼▼▼▼▼▼
	#uselib "unzip32.dll"
	#cfunc global UnZip "UnZip" int,int,int,int
	#cfunc global UnZipCheckArchive "UnZipCheckArchive" int,int
	#cfunc global UnZipConfigDialog "UnZipConfigDialog" int,int,int
	#cfunc global UnZipGetVersion "UnZipGetVersion"
	#cfunc global UnZipGetRunning "UnZipGetRunning"
	#cfunc global UnZipGetBackGroundMode "UnZipGetBackGroundMode"
	#cfunc global UnZipSetBackGroundMode "UnZipSetBackGroundMode" int
	#cfunc global UnZipGetCursorMode "UnZipGetCursorMode"
	#cfunc global UnZipSetCursorMode "UnZipSetCursorMode" int
	#cfunc global UnZipGetCursorInterval "UnZipGetCursorInterval"
	#cfunc global UnZipSetCursorInterval "UnZipSetCursorInterval" int
	#cfunc global UnZipGetArcFileInfo "UnZipGetArcFileInfo" int,int
	#cfunc global UnZipGetFileCount "UnZipGetFileCount" int

	;▼環境設定ダイアログを表示
	#deffunc zipcfgdlg
		buf=""
	return UnZipConfigDialog(hwnd,varptr(buf),0)

	;▼書庫ファイルのチエック
	#deffunc zipckarc str prm1
		sfile=prm1 : if strlen(sfile)==0 : return -1

		#define CHECKARCHIVE_RAPID      0
		#define CHECKARCHIVE_BASIC      1
		#define CHECKARCHIVE_FULLCRC    2

		ret=UnZipCheckArchive(varptr(sfile),CHECKARCHIVE_FULLCRC|CHECKARCHIVE_BASIC)
		if ret!1 {
			dialog "書庫ファイルが不正です!",0,"unzip32.dllエラー"
			return ret
		}
	return ret

	;▼書庫内の格納ファイル数取得
	#deffunc zipgetfcount str prm1
		sfile=prm1 : if strlen(sfile)==0 : return -1
	return UnZipGetFileCount(varptr(sfile))

	;▼各種書庫の操作
	#deffunc zipset str prm1,var prm2
		cmd=prm1 : if strlen(cmd)==0 : return -1
		ret=UnZip(hwnd,varptr(cmd),varptr(prm2),$2710)
		if ret!0 {
			dialog "書庫操作が失敗です!",0,"unzip32.dllエラー"
			return ret
		}
	return ret

	;▼Unzip32.dllのバージョンを取得
	#defcfunc unzipgetver
	return UnZipGetVersion()
	#global
	#endif
	#endif

	;***** Unzip32.dllのサンプル (dllsamp13.hsp) *****

	#include "exunzip.as"
	onexit *owari
	sdim buf,32000
	sdim path,260
	sdim arccmd,2048
	
	;zipcfgdlg                ;▼環境設定ダイアログ
	;▼バージョン情報
	version=unzipgetver()
	version=wpeek (version, 0)
	majorversion = version / 100
	minorversion = version \ 100
	mes ""+version+" -> "+majorversion+"."+minorversion

	dialog "zip",16:if stat=0 :stop
	zipckarc refstr           ;▼書庫のチエック
	zipgetfcount refstr       ;▼格納ファイル数取得
	num=stat

	path=dirinfo(0)+"\\"
	arccmd  = "-x \""+refstr+"\" \""+path+"\""

	;展開処理
	dialog "選択ファイル名="+refstr+"を\n\n展開して良いですか?",2,"確認"
	if stat=7:stop  
	zipset arccmd,buf         ;▼書庫操作(解凍)
	dialog buf+"\n\nファイル格納数 = "+num+"  "+stat,0,"展開結果"
	stop

*owari
	end
      線や円弧、四角形にグラデーション効果を出す     

線や円弧、四角形等の図形や背景にグラデーション効果を出すのは、なかなか難しいもの です。それを簡単に実現してくれるのが、グラデーションDLL(Grade32.dll) です。 このdllをHSPから簡単に利用できるようにモジュール化したものを紹介します。 このdllは、円弧、Box、Line、三角形、扇型の図形を開始・中間・終了位置にユーザーが 任意に指定した割合でグラデーションを描画してくれます。 尚、モジュールのリファレンスは、付録としてまとめてありますので、参照して下さい。 モジュール命令として、ラップしたものは全部で、13本あります。作成するスクリプトの 先頭に、#include "exgradedll.as" として、モジュールをインクルードして下さい。
	;***** Grade32.dll呼び出しモジュール (exgradedll.as) *****

	#ifdef __hsp30__
	#ifndef __EXGRADE32__
	#define __EXGRADE32__
	#uselib  "user32.dll"
	#cfunc global GetDC "GetDC" int
	#func  global ReleaseDC "ReleaseDC" int,int
	#uselib "gdi32.dll"
	#func  global BitBlt "BitBlt" int,int,int,int,int,int,int,int,int

	#define global ctype RGB(%1,%2,%3) (%1|(%2<<8)|(%3<<16))

	;▼▼▼▼▼▼▼  Grade32.dll 関数の定義  ▼▼▼▼▼▼▼
	#uselib "Grade32.dll"
	#func global GD_Arc "GD_Arc" int,int,int,int,int,int,int,int,int,int,int
	#func global GD_BmpPatternPie "GD_BmpPatternPie" int,int,int,int,int,int,int,int,int
	#func global GD_BmpPatternRect "GD_BmpPatternRect" int,int,int,int,int,int,int,int
	#func global GD_Box "GD_Box" int,int,int,int,int,int,int,int,int,int
	#func global GD_FillRectDL "GD_FillRectDL" int,int,int,int,int,int,int,int,int
	#func global GD_FillRectDR "GD_FillRectDR" int,int,int,int,int,int,int,int,int
	#func global GD_FillRectH "GD_FillRectH" int,int,int,int,int,int,int,int,int
	#func global GD_FillRectV "GD_FillRectV" int,int,int,int,int,int,int,int,int
	#func global GD_FillTriangle "GD_FillTriangle" int,int,int,int,int
	#func global GD_GetColor "GD_GetColor" int
	#func global GD_Line "GD_Line" int,int,int,int,int,int,int,int
	#func global GD_Pie "GD_Pie" int,int,int,int,int,int,int,int,int,int,int
	#func global GD_SetColor "GD_SetColor" int,int,int

	#module
	;***** 円弧の描画 (grarc) *****
	#deffunc grarc array p1,int p2
	mref bmscr,67
	ArcMode=p2
	hspDC=GetDC(hwnd)
	GD_Arc hdc,p1(0),p1(1),p1(2),p1(3),p1(4),p1(5),p1(6),p1(7),p1(8),ArcMode
	BitBlt hspDC,0,0,p1(2),p1(3),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** BmpFileをLoadしてパターンとして扇型を埋め尽くす (grbmppie) *****
	#deffunc grbmppie array p1,str p2
	mref bmscr,67
	sFile=p2 : if strlen(sFile)==0 : return -1
	hspDC=GetDC(hwnd)
	GD_BmpPatternPie hwnd,hdc,p1(0),p1(1),p1(2),p1(3),p1(4),p1(5),varptr(sFile)
	BitBlt hspDC,0,0,p1(2),p1(3),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** BmpFileをLoadして枠を埋め尽くす。枠の大きさに拡大縮小 (grbmprect) *****
	#deffunc grbmprect array p1,str p2,int p3
	mref bmscr,67
	sFile=p2 : if strlen(sFile)==0 : return -1
	nMode=p3 : if (nMode<=2)|(nMode>4) : nMode=2
	hspDC=GetDC(hwnd)
	GD_BmpPatternRect hwnd,hdc,p1(0),p1(1),p1(2),p1(3),varptr(sFile),nMode
	BitBlt hspDC,0,0,p1(2),p1(3),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** Boxの描画 (grbox) *****
	#deffunc grbox array p1,int p2
	mref bmscr,67
	BoxMode=p2 : if (BoxMode<=0)|(BoxMode>1) : BoxMode=0
	hspDC=GetDC(hwnd)
	GD_Box hdc,p1(0),p1(1),p1(2),p1(3),p1(4),p1(5),p1(6),p1(7),BoxMode
	BitBlt hspDC,0,0,p1(2),p1(3),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** BoxのDiagonalグラデーション (左上 -> 右下) (grfillrectdl) *****
	#deffunc grfillrectdl array p1,int p2
	mref bmscr,67
	MidPosition=p2 : if MidPosition<=0 : MidPosition=0
	hspDC=GetDC(hwnd)
	GD_FillRectDL hdc,p1(0),p1(1),p1(2),p1(3),p1(4),p1(5),p1(6),MidPosition
	BitBlt hspDC,0,0,p1(2),p1(3),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** BoxのDiagonalグラデーション (右上 -> 左下) (grfillrectdr) *****
	#deffunc grfillrectdr array p1,int p2
	mref bmscr,67
	MidPosition=p2 : if MidPosition<=0 : MidPosition=0
	hspDC=GetDC(hwnd)
	GD_FillRectDR hdc,p1(0),p1(1),p1(2),p1(3),p1(4),p1(5),p1(6),MidPosition
	BitBlt hspDC,0,0,p1(2),p1(3),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** BoxのHorizontalグラデーションを作成 (grfillrecth) *****
	#deffunc grfillrecth array p1,int p2
	mref bmscr,67
	MidPosition=p2 : if MidPosition<=0 : MidPosition=0
	hspDC=GetDC(hwnd)
	GD_FillRectH hdc,p1(0),p1(1),p1(2),p1(3),p1(4),p1(5),p1(6),MidPosition
	BitBlt hspDC,0,0,p1(2),p1(3),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** BoxのVerticalグラデーションを作成 (grfillrectv) *****
	#deffunc grfillrectv array p1,int p2
	mref bmscr,67
	MidPosition=p2 : if MidPosition<=0 : MidPosition=0
	hspDC=GetDC(hwnd)
	GD_FillRectV hdc,p1(0),p1(1),p1(2),p1(3),p1(4),p1(5),p1(6),MidPosition
	BitBlt hspDC,0,0,p1(2),p1(3),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** 三角形内部の塗り潰し (grfilltri) *****
	#deffunc grfilltri array p1,int p2
	mref bmscr,67
	col=p2
	dim pt1,2 : dim pt2,2 : dim pt3,2
	pt1(0)=p1(0) : pt1(1)=p1(1)
	pt2(0)=p1(2) : pt2(1)=p1(3)
	pt3(0)=p1(4) : pt3(1)=p1(5)

	hspDC=GetDC(hwnd)
	GD_FillTriangle hdc,varptr(pt1),varptr(pt2),varptr(pt3),col
	BitBlt hspDC,0,0,bmscr(20),bmscr(21),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** グラデーションカラーの取得 (grgetcolor) *****
	#deffunc grgetcolor int p1
	mref bmscr,67
	count=p1     ;StartColor からの距離(width 内)
	GD_GetColor count : col=stat
	bmscr(40)=col
	return 0

	;***** Lineの描画 (grline) *****
	#deffunc grline array p1
	mref bmscr,67
	hspDC=GetDC(hwnd)
	GD_Line hdc,p1(0),p1(1),p1(2),p1(3),p1(4),p1(5),p1(6)
	BitBlt hspDC,0,0,p1(2),p1(3),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** 扇型のグラデーション (grpie) *****
	#deffunc grpie array p1,int p2
	mref bmscr,67
	MidPosition=p2 : if MidPosition<=0 : MidPosition=0
	hspDC=GetDC(hwnd)
	GD_Pie hdc,p1(0),p1(1),p1(2),p1(3),p1(4),p1(5),p1(6),p1(7),p1(8),MidPosition
	BitBlt hspDC,0,0,p1(2),p1(3),hdc,bmscr(23),bmscr(24),$00CC0020
	ReleaseDC hwnd,hspDC
	return 0

	;***** グラデーションするStartColorとEndColorを設定 (grsetcolor) *****
	#deffunc grsetcolor int p1,int p2,int p3
	GD_SetColor p1,p2,p3
	return 0
	#global
	#endif
	#endif

	;***** グラデーション(Grade32.dll)サンプル(1) (dllsamp01.hsp) *****

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#include "exgradedll.as"

	;▼デフォルトウィンドウサイズ設定
	#const nBaseWidex  640    ;Windows Frame default size x
	#const nBaseWidey  480    ;Windows Frame default size y

	onexit *owari

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir

	;▼Screen ID=0 の初期化
	screen 0,640,480,0,ginfo(20)-nBaseWidex>>1,ginfo(21)-nBaseWidey>>1
	color 0,0,255 : boxf
	gsel 0,1

	title "グラデーション(Grade32.dll)サンプル(1)"

	;bmpパターン(ファイル名)設定
	sdim bmfile,24,6
	bmfile.0 ="back01.bmp"
	bmfile.1 ="back02.bmp"
	bmfile.2 ="back03.bmp"
	bmfile.3 ="back04.bmp"
	bmfile.4 ="back05.bmp"
	bmfile.5 ="back06.bmp"

	;Start角度,角度幅を設定 (grbmppie)
	dim sa,6 : sa=0,90,120,165,255,290
	dim wa,6 : wa=90,30,45,90,35,70

	;Box用共通パラメータ設定
	prm=0,0,ginfo(10),ginfo(11),RGB(0,0,180),RGB(0,255,255),RGB(0,0,255)
	;▼BoxのDiagonal グラデーション (左上 -> 右下)
	grfillrectdl prm,50
	wait 100
	;▼BoxのDiagonal グラデーション (右上 -> 左下)
	grfillrectdr prm,50
	wait 100
	;▼BoxのHorizontal グラデーション
	grfillrecth prm,50
	wait 100
	;▼BoxのVertical グラデーション
	grfillrectv prm,60
	wait 100

	;▼円弧の描画
	StartAngle = 0
	WidthAngle = 360
	PenStyle   = 0
	PenWidth   = 0
	PenColor   = RGB(0,200,200)
	prm=50,50,300,300,StartAngle,WidthAngle,PenStyle,PenWidth,PenColor
	grarc prm,1

	;▼Bmp FileをLoadしてパターンとして扇型を埋め尽くす
	repeat 6
		prm=50,50,300,300,sa(cnt),wa(cnt)
		grbmppie prm,Startdir+bmfile(cnt)
	loop

	;▼boxの描画
	PenStyle = 0
	PenWidth = 2
	PenColor = RGB(255,255,255)
	prm=390,40,610,300,PenStyle,PenWidth,PenColor,BrushColor
	grbox prm,1

	;▼Bmp FileをLoadして枠を埋め尽くす
	mx=0 : my=0
	repeat 6
		prm=403,53+mx,597,82+my,PenStyle,PenWidth,PenColor,BrushColor
		grbox prm,1
		prm=405,55+mx,595,80+my
		grbmprect prm,Startdir+bmfile(cnt),3
		mx+=40 : my+=40
	loop

	;▼扇型のグラデーションの描画
	StartAngle = 0
	WidthAngle = 360
	StartColor = RGB(255,130,0)
	MidColor   = RGB(0,255,64)
	EndColor   = RGB(0,60,255)
	prm=50,350,150,450,StartAngle,WidthAngle,StartColor,MidColor,EndColor
	grpie prm,50
	StartAngle = 0
	WidthAngle = 60
	prm=160,350,260,450,StartAngle,WidthAngle,StartColor,MidColor,EndColor
	grpie prm,50
	StartAngle = 90
	WidthAngle = 60
	prm=160,350,260,450,StartAngle,WidthAngle,StartColor,MidColor,EndColor
	grpie prm,50

	font "Times New Roman",26,18
	color 255,255,0 : pos 320,380 : mes "Grade32.dll Sample Script"
	stop

;▼終了処理
*owari
	end

	;***** グラデーション(Grade32.dll)サンプル(2) (dllsamp02.hsp) *****

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#include "exgradedll.as"

	;▼デフォルトウィンドウサイズ設定
	#const nBaseWidex  640    ;Windows Frame default size x
	#const nBaseWidey  480    ;Windows Frame default size y

	onexit *owari

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir

	;▼Screen ID=0 の初期化
	screen 0,640,480,0,ginfo(20)-nBaseWidex>>1,ginfo(21)-nBaseWidey>>1
	color 0,0,255 : boxf
	gsel 0,1

	title "グラデーション(Grade32.dll)サンプル(2)"

	;▼初期設定
	;grsetcolorのグラデーション幅      (mwidth)
	;grgetcolorのstartcolor からの距離 (count)
	dim mwidth,4 : mwidth=50,40,70,90
	dim count,4  : count =20,30,60,50

	StartColor= RGB(0,0,255)
	MidColor  = RGB(255,128,0)
	EndColor  = RGB(0,128,0)
	prm=0,0,ginfo(10),ginfo(11),StartColor,MidColor,EndColor
	grfillrectv prm,50

	;▼Bmp FileをLoadして枠を埋め尽くす。または枠の大きさに拡大縮小
	bmpfile =Startdir+"gazo2.bmp"
	prm=40,40,300,380
	grbmprect prm,bmpfile,3

	;▼Boxの描画
	PenStyle = 0
	PenWidth = 2
	PenColor = RGB(255,255,255)
	dim BrushColor,4
		BrushColor(0) = RGB(255,0,0)
		BrushColor(1) = RGB(0,255,0)
		BrushColor(2) = RGB(255,0,255)
		BrushColor(3) = RGB(255,255,255)
	prm=390,40,600,300,PenStyle,PenWidth,PenColor,BrushColor
	grbox prm,1
	mx=0
	repeat 4
		prm=400+mx,50,440+mx,90,PenStyle,PenWidth,PenColor,BrushColor(cnt)
		mx+=50
		grbox prm,0
	loop

	;▼グラデーションカラーの設定と取得
	StartColor = RGB(255,255,0)
	EndColor   = RGB(0,255,255)
	repeat 4
		grsetcolor StartColor,EndColor,mwidth(cnt)
		grgetcolor count(cnt)
		BrushColor(cnt)=RGB(rval,gval,bval)
	loop
	PenColor = RGB(255,255,255)
	mx=0
	repeat 4
		prm=400+mx,100,440+mx,140,PenStyle,PenWidth,PenColor,BrushColor(cnt)
		mx+=50
		grbox prm,0
	loop

	;▼三角形の塗りつぶし描画
	col = RGB(0,128,255)
	prm=495,150,400,200,590,200
	grfilltri prm,col

	;▼Lineの描画
	PenWidth = 1
	PenColor = RGB(0,0,0)
	my=0
	repeat 5
		PenStyle=cnt
		prm=403,240+my,590,240+my,PenStyle,PenWidth,PenColor
		grline prm
		my+=10
	loop

	font "Times New Roman",26,18
	color 255,255,0 : pos 320,400 : mes "Grade32.dll Sample Script"
	stop

;▼終了処理
*owari
	end
      背景を透過したデスクトップマスコットのような画像ファイルを作成する     

ビットマップ画像から、背景を透過した不定形の領域の画像ファイルを作成します。 領域とは、 リージョンと言い、円や多角形に変形した画像ファイルも専用のAPIがあり、 簡単に作成できますが、ここでは、形が不定形である画像ファイルを対象としています。 透過するアルゴリズムを工夫すれば、超高速な不定形リージョンモジュールを作成するこ とも可能ですが、dllを使って簡単に実現します。bmp2rgn.dllは、不定形リージョンを作 成する専用のもので、ベクターから入手できます。 作成するスクリプトの先頭に、 #include "exbmp2rgn.as" として、モジュールをインク ルードして下さい。
	;***** bmp2rgn.dll呼び出しモジュール (exbmp2rgn.as) *****

	#ifdef __hsp30__
	#ifndef __EXBM2RGN__
	#define __EXBM2RGN__
	#uselib  "user32.dll"
	#func global SetWindowRgn "SetWindowRgn" int,int,int

	#module "exbmp2rgn"
	;▼▼▼▼▼▼▼  bmp2rgn.dll 関数の定義  ▼▼▼▼▼▼▼
	#uselib "bmp2rgn.dll"
	#func global dc2rgn@exbmp2rgn "dc2rgn" int

	;***** bmp2rgn.dllによる不定形リージョンの作成  (setrgnwin) *****
	#deffunc setrgnwin str p1
	mref bmscr,67
	if bmscr.17!3 : return -1
	sFile = p1
	exist sFile   : if strsize=-1 : return -1
	picload sFile,0
	dc2rgn@exbmp2rgn hdc : hrgnForm=stat
	SetWindowRgn hwnd,hrgnForm,1
	return bmscr(18)
	#global
	#endif
	#endif

	;***** 不定形リージョン(bmp2rgn.dll)サンプル (dllsamp03.hsp) *****

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#include "exbmp2rgn.as"

	#define global WM_NCLBUTTONDOWN     $000000A1
	#define global HTCAPTION            2
	#define global SM_CXSCREEN          $00000000
	#define global SM_CYSCREEN          $00000001

	#uselib  "user32.dll"
	#func DefWindowProc "DefWindowProcA" int,int,int,int
	#func GetWindowRect "GetWindowRect" int,int
	#func GetSystemMetrics "GetSystemMetrics" int
	#func MoveWindow "MoveWindow" int,int,int,int,int,int

	#module
	#deffunc _ginfo int prm1
		prmx@=ginfo(prm1*2)
		prmy@=ginfo(prm1*2+1)
	return
	#global

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir
	gsel 0,-1

	bgscr 2,1,1,2,ginfo(20)+100,ginfo(21)-1

	;▼不定形リージョン作成
	exist Startdir+"gazo2.bmp"
	if strsize=-1 : dialog "画像ファイルがありません。",0,"エラー" : end
	setrgnwin Startdir+"gazo2.bmp" : nWID=stat
	width ,,0,0
	gsel nWID,2

	;▼移動処理用割り込み
	onclick *move
	stop

;▼マウスドラッグによるウィンドウ移動処理
*move
	if iparam=3 : cls : end  ;右クリックで終了
	if iparam : stop
	_ginfo 1  : if prmx!nWID : stop
	DefWindowProc hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0
	dim rc,4
	GetWindowRect hwnd,varptr(rc)
	w = rc(2)-rc(0)
	h = rc(3)-rc(1)
	GetSystemMetrics SM_CXSCREEN : CSX=stat
	GetSystemMetrics SM_CYSCREEN : CSY=stat
	if rc(0)<0 : rc(0)=0
	if rc(1)<0 : rc(1)=0
	if rc(2)>CSX : rc(0)=CSX-w
	if rc(3)>CSY : rc(1)=CSY-h
	MoveWindow hwnd,rc(0),rc(1),w,h,1
	stop
      mp3ファイルを操作する     

単純にmp3ファイルを使って、演奏するだけなら、mci命令で行なえますが、MPEGオーディ オの持つ内容の各種取得や設定等、きめ細かな操作を必要とする場合は、専用のプラグイ ンを利用することで、プログラミングを簡単にしてくれます。 mp3のファイル操作を行な うdllとしては、各種言語から利用可能なVBMP3.dllというのが、非常に有名です。 このdllをHSPのAPI呼び出し機能を使って、モジュール化したものを紹介します。 モジュ ール命令は、全部で33本有りますが、 VBMP3.dllの豊富な機能の一部しか実現できていま せん。作成するスクリプトの先頭に、#include "exbmp2rgn.as" として、モジュールをイ ンクルードして下さい。
	;***** VBMP3.dll呼び出しモジュール (exmp3dll.as) *****

	#ifdef __hsp30__
	#ifndef __EXVBMP3__
	#define __EXVBMP3__

	#uselib "kernel32.dll"
	#func global lstrcpy "lstrcpy" int,int

	;▼▼▼▼▼▼▼  VBMP3.DLL 関数の定義  ▼▼▼▼▼▼▼
	#uselib "VBMP3.DLL"
	#func global vbmp3_init "vbmp3_init"
	#func global vbmp3_free "vbmp3_free"
	#func global vbmp3_open "vbmp3_open" int,int
	#func global vbmp3_close "vbmp3_close"
	#func global vbmp3_getState "vbmp3_getState" int
	#func global vbmp3_play "vbmp3_play"
	#func global vbmp3_stop "vbmp3_stop"
	#func global vbmp3_pause "vbmp3_pause"
	#func global vbmp3_restart "vbmp3_restart"
	#func global vbmp3_seek "vbmp3_seek" int
	#func global vbmp3_setVolume "vbmp3_setVolume" int,int
	#func global vbmp3_getVersion "vbmp3_getVersion"
	#func global vbmp3_getTagInfo "vbmp3_getTagInfo" int,int
	#func global vbmp3_getMpegInfo "vbmp3_getMpegInfo" int,int
	#func global vbmp3_setVbmp3Option "vbmp3_setVbmp3Option" int
	#func global vbmp3_getVbmp3Option "vbmp3_getVbmp3Option" int
	#func global vbmp3_setDecodeOption "vbmp3_setDecodeOption" int
	#func global vbmp3_getDecodeOption "vbmp3_getDecodeOption" int
	#func global vbmp3_getGenre "vbmp3_getGenre" int
	#func global vbmp3_setTagInfo "vbmp3_setTagInfo" int,int,int,int
	#func global vbmp3_getFileInfo "vbmp3_getFileInfo" int,int,int
	#func global vbmp3_getFileTagInfo "vbmp3_getFileTagInfo" int,int
	#func global vbmp3_getListInfo "vbmp3_getListInfo" int
	#func global vbmp3_getFileInfo2 "vbmp3_getFileInfo2" int,int,int,int
	#func global vbmp3_changeRmp "vbmp3_changeRmp" int
	#func global vbmp3_changeWav "vbmp3_changeWav" int
	#func global vbmp3_changeMp3 "vbmp3_changeMp3" int
	#func global vbmp3_cutMacBinary "vbmp3_cutMacBinary" int
	#func global vbmp3_setListInfo "vbmp3_setListInfo" int
	#func global vbmp3_getFileType "vbmp3_getFileType" int
	#func global vbmp3_decodeWave "vbmp3_decodeWave" int
	#func global vbmp3_setLyricsFile "vbmp3_setLyricsFile" int
	#func global vbmp3_getLyrics "vbmp3_getLyrics" int
	#func global vbmp3_getVolume "vbmp3_getVolume" int,int
	#func global vbmp3_getSpectrum "vbmp3_getSpectrum" int,int
	#func global vbmp3_getPlayFrames "vbmp3_getPlayFrames"
	#func global vbmp3_setPlayFrames "vbmp3_setPlayFrames" int
	#func global vbmp3_getPlaySamples "vbmp3_getPlaySamples" 
	#func global vbmp3_getTotalSamples "vbmp3_getTotalSamples"
	#func global vbmp3_setPlaySamples "vbmp3_setPlaySamples" int
	#func global vbmp3_getWave "vbmp3_getWave" int,int
	#func global vbmp3_setEqualizer "vbmp3_setEqualizer" int
	#func global vbmp3_getWinampPlayMs "vbmp3_getWinampPlayMs"
	#func global vbmp3_getWinampTotalSec "vbmp3_getWinampTotalSec"
	#func global vbmp3_getPlayBitRate "vbmp3_getPlayBitRate"
	#func global vbmp3_encodeOpen "vbmp3_encodeOpen" int,int
	#func global vbmp3_encodeStart "vbmp3_encodeStart" int
	#func global vbmp3_encodeStop "vbmp3_encodeStop"
	#func global vbmp3_getEncodeState "vbmp3_getEncodeState" int,int
	#func global vbmp3_setPitch "vbmp3_setPitch" int
	#func global vbmp3_getPitch "vbmp3_getPitch"
	#func global vbmp3_reload "vbmp3_reload"
	#func global vbmp3_fadeOut "vbmp3_fadeOut"
	#func global vbmp3_setFadeIn "vbmp3_setFadeIn" int
	#func global vbmp3_setFadeOut "vbmp3_setFadeOut" int
	#func global vbmp3_getLastErrorNo "vbmp3_getLastErrorNo"
	#func global vbmp3_setStepPitch "vbmp3_setStepPitch" int,int
	#func global vbmp3_getStepPitch "vbmp3_getStepPitch"
	#func global vbmp3_setOverTime "vbmp3_setOverTime" int
	#func global vbmp3_setSoftVolume "vbmp3_setSoftVolume" int,int
	#func global vbmp3_getSoftVolume "vbmp3_getSoftVolume" int,int
	#func global vbmp3_getWaveOutSupport "vbmp3_getWaveOutSupport"
	#func global vbmp3_getSilentFrames "vbmp3_getSilentFrames" int
	#func global vbmp3_playDecodeWave "vbmp3_playDecodeWave" int
	#func global vbmp3_setLyrics3InsField "vbmp3_setLyrics3InsField" int
	#func global vbmp3_getFileLyrics3Info "vbmp3_getFileLyrics3Info" int,int
	#func global vbmp3_getFileLyrics3InfoVB "vbmp3_getFileLyrics3InfoVB" int,int,int,int,int
	#func global vbmp3_setLyrics3Use "vbmp3_setLyrics3Use" int
	#func global vbmp3_readLyrics3Data "vbmp3_readLyrics3Data"
	#func global vbmp3_clearLyrics "vbmp3_clearLyrics"
	#func global vbmp3_setFftWindow "vbmp3_setFftWindow" int
	#func global vbmp3_setFileLyrics3Info "vbmp3_setFileLyrics3Info" int,int
	#func global vbmp3_setFileLyrics3InfoVB "vbmp3_setFileLyrics3InfoVB" int,int,int,int,int
	#func global vbmp3_getListInfoEX "vbmp3_getListInfoEX" int,int
	#func global vbmp3_getListInfoExVB "vbmp3_getListInfoExVB" int,int
	#func global vbmp3_setListInfoEX "vbmp3_setListInfoEX" int,int
	#func global vbmp3_setListInfoExVB "vbmp3_setListInfoExVB" int,int
	#func global vbmp3_getFileTagInfoEX "vbmp3_getFileTagInfoEX" int,int
	#func global vbmp3_setTagInfoEX "vbmp3_setTagInfoEX" int,int,int,int
	#func global vbmp3_setKaraokeUse "vbmp3_setKaraokeUse" int
	#func global vbmp3_getLyrics2 "vbmp3_getLyrics2" int
	#func global vbmp3_setLyricsTime "vbmp3_setLyricsTime" int
	#func global vbmp3_setWaveOutDeviceId "vbmp3_setWaveOutDeviceId" int
	#func global vbmp3_delFileLyrics3Info "vbmp3_delFileLyrics3Info" int
	#func global vbmp3_setListInfoEX2 "vbmp3_setListInfoEX2" int,int
	#func global vbmp3_setNotTagLyricsLine "vbmp3_setNotTagLyricsLine" int
	#func global vbmp3_setNotDataSiWrite "vbmp3_setNotDataSiWrite" int
	#func global vbmp3_setReadLyrics3Info "vbmp3_setReadLyrics3Info" int
	#func global vbmp3_checkKaraokeTag "vbmp3_checkKaraokeTag"
	#func global vbmp3_setFrameReadFlag "vbmp3_setFrameReadFlag" int
	#func global vbmp3_setLyricsAdjustTime "vbmp3_setLyricsAdjustTime" int
	#func global vbmp3_setSeekPlay "vbmp3_setSeekPlay" int
	#func global vbmp3_setLyricsNextAdjustTime "vbmp3_setLyricsNextAdjustTime" int
	#func global vbmp3_quickSeek "vbmp3_quickSeek" int
	#func global vbmp3_cutID3v2 "vbmp3_cutID3v2" int
	#func global vbmp3_convTimeW2N "vbmp3_convTimeW2N"
	#func global vbmp3_convTimeN2W "vbmp3_convTimeN2W"
	#func global vbmp3_outLyricsFile "vbmp3_outLyricsFile" int
	#func global vbmp3_useAtMarkTag "vbmp3_useAtMarkTag" int
	#func global vbmp3_setTimeRatio "vbmp3_setTimeRatio" int
	#func global vbmp3_checkTimeTag "vbmp3_checkTimeTag"
	#func global vbmp3_getAtTagData "vbmp3_getAtTagData" int
	#func global vbmp3_getLyricsPoint "vbmp3_getLyricsPoint"

	#module
	;***** 左右音量バランスの配分設定  (SetVolume) *****
	#deffunc SetVolume
	L = Volume_Inf(1)*Volume_Inf(0)/100
	R = Volume_Inf(2)*Volume_Inf(0)/100
	vbmp3_setVolume L,R : ret=stat
	if ret==1 : ret=0 : else : ret=-1
	return ret

	;***** totalSecをmm:ssの形式に変換  (MakeMSTime) *****
	#deffunc MakeMSTime var p1,int p2
	min="" : sec=""
	m = p2/60 : min = strf("%02d",m)
	s = p2\60 : sec = strf("%02d",s)
	p1=min+":"+sec+" "
	return 0

	;***** VBMP3.dllイニシャライズ  (initmp3) *****
	#deffunc initmp3 int p1,int p2,int p3
	;VBMP3構造体用の配列確保 (モジュール内グローバル変数)
	sdim InputInfo,272
	sdim TAG_INFO,652
	sdim TAG_INFO_11,656
	dim  MPEG_INFO,14
	dim  DEC_OPTION,3
	dim  VBMP3_OPTION,5
	dim  WAVE_FORM,4
	sdim LIST_INFO,1792
	sdim LIST_INFO_EX2,2176
	sdim LYRICS_INFO,644
	sdim LYRICS_INFO2,1040

	;音量ボリューム (Mainvol,Leftvol,Rightvol)値を格納する配列
	dim   Volume_Inf,3

	;VBMP3.dll初期化
	vbmp3_init : ret=stat
	if ret==0 {
		dialog "初期化処理に失敗しました。",0,"エラー"
		return -1
	}
	;音量ボリュームの初期値を設定
	Mainvol  = p1 : if (Mainvol<0)|(Mainvol=0) : Mainvol=50
	Leftvol  = p2 : if Leftvol<0  : Leftvol =100
	Rightvol = p3 : if Rightvol<0 : Rightvol=100

	;Volume_Inf構造体(配列)に音量ボリュームを設定
	Volume_Inf(0) = Mainvol
	Volume_Inf(1) = Leftvol
	Volume_Inf(2) = Rightvol
	SetVolume
	Pause_Flag      = 0
	Before_Position = 0
	return 0

	;***** 演奏開始  (playmp3) *****
	#deffunc playmp3 array p1,str p2
	mref ref,65
	vbmp3_close
	sFile=p2 : if strlen(sFile)==0 : return -1
	null="" : lstrcpy varptr(ref),varptr(null)
	vbmp3_open varptr(sFile),varptr(InputInfo) : ret=stat
	if ret==1 {
		p1(0)=wpeek(InputInfo,256)   ;channel
		p1(1)=wpeek(InputInfo,260)   ;bitrate
		p1(2)=wpeek(InputInfo,264)   ;samplingRate
		p1(3)=wpeek(InputInfo,268)   ;totalSec
		Before_Position = 0
		;totalSec(秒) → mm:ss形式に変換
		sdim s,260 : ms=wpeek(InputInfo,268)
		MakeMSTime s,ms : ref=s
		vbmp3_play
	}else{
		dialog "読み込みに失敗しました。",0,"確認"
		return -1
	}
	return 0

	;***** 演奏終了  (closemp3) *****
	#deffunc closemp3
	vbmp3_close
	vbmp3_free : ret=stat
	if ret==0 {
    	dialog "開放に失敗しました。",0,"確認"
		return -1
	}
	;各構造体用に確保したメモリを開放
	sdim InputInfo,0
	sdim TAG_INFO,0
	sdim TAG_INFO_11,0
	dim  MPEG_INFO,0
	dim  DEC_OPTION,0
	dim  VBMP3_OPTION,0
	dim  WAVE_FORM,0
	sdim LIST_INFO,0
	sdim LIST_INFO_EX2,0
	sdim LYRICS_INFO,0
	sdim LYRICS_INFO2,0
	return 0

	;***** 音量ボリュームの設定  (setvolmp3) *****
	#deffunc setvolmp3 int p1
	Mainvol  = p1 : if (Mainvol<0)|(Mainvol=0) : Mainvol=0
	Volume_Inf(0)=Mainvol
	SetVolume
	return 0

	;***** 音量ボリュームの取得  (getvolmp3) *****
	#deffunc getvolmp3 var p1
	p1=Volume_Inf(0)
	return 0

	;***** 演奏の停止  (stopmp3) *****
	#deffunc stopmp3
	vbmp3_stop
	return 0

	;***** 演奏の一時停止  (pausemp3) *****
	#deffunc pausemp3
	;PAUSEとRESTARTのトグル動作
	if Pause_Flag==0 {
		vbmp3_pause : Pause_Flag=1
		return 1
	}
	if Pause_Flag==1 {
		vbmp3_restart : Pause_Flag=0
	}
	return 0

	;***** 左右バランスの設定  (setbalmp3) *****
	#deffunc setbalmp3 int p1
	blance=p1
		if blance==100 {
			Volume_Inf(1)=100   ;Leftvol
			Volume_Inf(2)=100   ;Rightvol
		}
		if (blance>=0)|(blance<=99) {
			Volume_Inf(1)=100 : Volume_Inf(2)=blance
		}
		if (blance>=101)|(blance<=200) {
			Volume_Inf(1)=200-blance : Volume_Inf(2)=100
		}
	return 0

	;***** 左右バランスの取得  (getbalmp3) *****
	#deffunc getbalmp3 var p1
	p1=Volume_Inf(1)
	return 0

	;***** MPEG Audioファイルのタグ情報を設定  (settagmp3) *****
	#deffunc settagmp3 var p1,int p2,str p3,int p4,int p5
	nMode=p2    : if (nMode<=0)|(nMode>6) : nMode=0
	sFile = p3  : if strlen(sFile)==0 : return -1
	tagSet = p4 : if (tagSet<=0)|(tagSet>1) : tagSet=0
	tagAdd = p5 : if (tagAdd<=0)|(tagAdd>1) : tagAdd=0

	; tagSet   = 1 : DLL 内部の TAG 情報書き換え(再生中ファイル時指定)
	;            0 :     〃             変更無し
	; tagAdd   = 1 : ID3Tag v1 が存在しないとき追加する
	;            0 :              〃           追加しない

	vbmp3_setTagInfo varptr(sFile),varptr(TAG_INFO),tagSet,tagAdd
	ret=stat
	if ret==1 {
		if nMode=0 : memcpy TAG_INFO,p1,128,  0,0       ;曲名
		if nMode=1 : memcpy TAG_INFO,p1,128,128,0       ;アーティスト名
		if nMode=2 : memcpy TAG_INFO,p1,128,256,0       ;アルバム名
		if nMode=3 : memcpy TAG_INFO,p1,  8,384,0       ;リリース年号
		if nMode=4 : memcpy TAG_INFO,p1,128,392,0       ;コメント文字列
		if nMode=5 : memcpy TAG_INFO,p1,  4,520,0       ;ジャンル
		if nMode=6 : memcpy TAG_INFO,p1,128,524,0       ;ジャンル名称
	}
	return 0

	;***** MPEG Audioファイルのタグ情報を取得  (gettagmp3) *****
	#deffunc gettagmp3 int p1
	mref ref,65
	nMode=p1 : if (nMode<=0)|(nMode>6) : nMode=0
	null="" : lstrcpy varptr(ref),varptr(null)
	vbmp3_getTagInfo varptr(TAG_INFO) : ret=stat
	if ret==0 : return -1
	if ret==1 {
		sdim s,260
		if nMode=0 : memcpy s,TAG_INFO,128,0,  0 : ref=s  ;曲名
		if nMode=1 : memcpy s,TAG_INFO,128,0,128 : ref=s  ;アーティスト名
		if nMode=2 : memcpy s,TAG_INFO,128,0,256 : ref=s  ;アルバム名
		if nMode=3 : memcpy s,TAG_INFO,  8,0,384 : ref=s  ;リリース年号
		if nMode=4 : memcpy s,TAG_INFO,128,0,392 : ref=s  ;コメント文字列
		if nMode=5 : memcpy s,TAG_INFO,  4,0,520 : ref=s  ;ジャンル
		if nMode=6 : memcpy s,TAG_INFO,128,0,524 : ref=s  ;ジャンル名称
	}
	return 0

	;***** MPEG Audioファイルのヘッダ情報を取得  (getmpegheadmp3) *****
	#deffunc getmpegheadmp3 int p1
	mref ref,65
	nMode=p1 : if (nMode<=0)|(nMode>13) : nMode=0
	null="" : lstrcpy varptr(ref),varptr(null)
	vbmp3_getMpegInfo varptr(MPEG_INFO) : ret=stat
	if ret==0 : return -1
	if ret==1 {
		if nMode=0 : ref=str(MPEG_INFO(0))+" "  ;MPEGのバージョン
		if nMode=1 : ref=str(MPEG_INFO(1))+" "  ;MPEGのレイヤ
		if nMode=2 : ref=str(MPEG_INFO(2))+" "  ;エラー保護
		if nMode=3 : ref=str(MPEG_INFO(3))+" "  ;個人情報
		if nMode=4 : ref=str(MPEG_INFO(4))+" "  ;チャンネルモード
		if nMode=5 : ref=str(MPEG_INFO(5))+" "  ;著作権
		if nMode=6 : ref=str(MPEG_INFO(6))+" "  ;オリジナル
		if nMode=7 : ref=str(MPEG_INFO(7))+" "  ;エンフォシス
		if nMode=8 : ref=str(MPEG_INFO(8))+" "  ;出力チャンネル数
		if nMode=9 : ref=str(MPEG_INFO(9))+" "  ;ビットレート
		if nMode=10: ref=str(MPEG_INFO(10))+" " ;サンプリングレート
		if nMode=11: ref=str(MPEG_INFO(11))+" " ;ファイルサイズ
		if nMode=12: ref=str(MPEG_INFO(12))+" " ;フレーム数
		if nMode=13: ref=str(MPEG_INFO(13))+" " ;総合演奏時間
	}
	return 0

	;***** 歌詞ファイルから歌詞を取得  (getlyricsmp3) *****
	#deffunc getlyricsmp3 int p1
	mref ref,65
	nMode=p1 : if (nMode<=0)|(nMode>6) : nMode=0
	null="" : lstrcpy varptr(ref),varptr(null)
	vbmp3_getLyrics varptr(LYRICS_INFO) : ret=stat
	if ret==0 : return -1
	if ret==1 {
		sdim s,260
		if nMode=0 : memcpy s,LYRICS_INFO,  4,0,  0 : ref=s  ;ミリ秒
		if nMode=1 : memcpy s,LYRICS_INFO,128,0,  4 : ref=s  ;次々行の歌詞
		if nMode=2 : memcpy s,LYRICS_INFO,128,0,132 : ref=s  ;次行の歌詞
		if nMode=3 : memcpy s,LYRICS_INFO,128,0,260 : ref=s  ;カレント行の歌詞
		if nMode=4 : memcpy s,LYRICS_INFO,128,0,368 : ref=s  ;前行の歌詞
		if nMode=5 : memcpy s,LYRICS_INFO,128,0,516 : ref=s  ;前々行の歌詞
	}
	return 0

	;***** VBMP3の各設定値取得  (getvbmp3opt) *****
	#deffunc getvbmp3opt array p1
	vbmp3_getVbmp3Option varptr(VBMP3_OPTION)
	p1(0)=VBMP3_OPTION(0)  ;inputSize
	p1(1)=VBMP3_OPTION(1)  ;inputTrigger
	p1(2)=VBMP3_OPTION(2)  ;outputSize
	p1(3)=VBMP3_OPTION(3)  ;outputTrigger
	p1(4)=VBMP3_OPTION(4)  ;sleepTime
	return 0

	;***** デコードエンジンの各設定値設定 (setDecodeOption) *****
	#deffunc setDecodeOption array p1
	DEC_OPTION=p1(0),p1(1),p1(2)

	; reduction - p1(0) : ダウンサンプリング (0:1/1 1:1/2 2:1/4 [Default = 0])
	;                       データのサンプリングレートを下げて読み込み
	; convert   - p1(1) : 出力チャンネル (0:ステレオ 1:モノラル[Default = 0])
	;                       読み込むチャンネル数を設定
	;                       モノラルの場合読み込むデータ量が1/2となる。
	; freqLimit - p1(2) : 出力サンプリングレート[Default = 24000]
	;                       出力時のサンプリングレートを設定

	vbmp3_setDecodeOption varptr(DEC_OPTION)
	return 0

	;***** デコードエンジンの各設定値取得 (getDecodeOption) *****
	#deffunc getDecodeOption array p1
	vbmp3_setDecodeOption varptr(DEC_OPTION)
	p1(0)=DEC_OPTION(0)    ;reduction
	p1(1)=DEC_OPTION(1)    ;convert
	p1(2)=DEC_OPTION(2)    ;freqLimit
	return 0

	;***** 再生状態と再生時間の取得 (getstamp3) *****
	#deffunc getstamp3 var p1
	mref ref,65
	null="" : lstrcpy varptr(ref),varptr(null)
	;totalSec(秒) → mm:ss形式に変換
	sdim s,260 : ms=wpeek(InputInfo,268)
	MakeMSTime s,ms : ref=s

	; status(ret)
	; stat=0  :  停止中 (STOP)
	; stat=1  :  再生中 (PLAY)
	; stat=2  :  一時停止中 (PAUSE)

	vbmp3_getState varptr(p1) : ret=stat
	return ret

	;***** エンコード対象ファイルのオープン (encodeOpen) *****
	#deffunc encodeOpen array p1,str p2
	sFile = p2 : if strlen(sFile)==0 : return -1
	vbmp3_encodeOpen varptr(sFile),varptr(WAVE_FORM) : ret=stat
	if ret==1 {
		p1(0)=WAVE_FORM(0)   ;チャンネル数
		p1(1)=WAVE_FORM(1)   ;1サンプルあたりのビット数 (8 or 16)
		p1(2)=WAVE_FORM(2)   ;サンプリングレート(44100 等)
		p1(3)=WAVE_FORM(3)   ;データサイズ
	}
	if ret!1 {
		dialog "エンコード対象ファイルのオープンに失敗しました。",0,"確認"
		return -1
	}
	return 0

	;***** エンコード開始 (encodeStart) *****
	#deffunc encodeStart str p1
	;※エンコードには次の CODEC が必要です。
	;「Fraunhofer IIS MPEG Layer-3 Codec (professional)」
	sFile = p1 : if strlen(sFile)==0 : return -1
	vbmp3_encodeStart varptr(sFile) : ret=stat
	if ret==0 : return -1
	return 0

	;***** エンコード中止 (encodeStop) *****
	#deffunc encodeStop
	vbmp3_encodeStop : ret=stat
	if ret==0 : return -1
	return 0

	;***** 再生しながらWAVEファイルデコード (playdecwave) *****
	#deffunc playdecwave array p1,str p2,str p3
	mref ref,65
	;※この命令は停止状態の時のみ実行できます。
	;■変換が成功すると再生が開始されます。
	oFile = p2 : if strlen(oFile)==0 : return -1
	sFile = p3 : if strlen(sFile)==0 : return -1
	null="" : lstrcpy varptr(ref),varptr(null)
	vbmp3_close
	vbmp3_open varptr(sFile),varptr(InputInfo) : ret=stat
	if ret==0 : ref="失敗" : return -1
	if ret==1 {	
		p1(0)=wpeek(InputInfo,256)   ;channel
		p1(1)=wpeek(InputInfo,260)   ;bitrate
		p1(2)=wpeek(InputInfo,264)   ;samplingRate
		p1(3)=wpeek(InputInfo,268)   ;totalSec
		Before_Position = 0
	}
	vbmp3_playDecodeWave varptr(oFile) : ret=stat
	if ret==0 : return -1
	ref="成功"
	return 0

	;***** WAVEファイルデコード (decodewave) *****
	#deffunc decodewave array p1,str p2,str p3
	mref ref,65
	;※この命令は停止状態の時のみ実行できます。
	oFile = p2 : if strlen(oFile)==0 : return -1
	sFile = p3 : if strlen(sFile)==0 : return -1
	null="" : lstrcpy varptr(ref),varptr(null)
	vbmp3_close
	vbmp3_open varptr(sFile),varptr(InputInfo) : ret=stat
	if ret==0 : return -1
	if ret==0 : ref="失敗" : return -1
	if ret==1 {	
		p1(0)=wpeek(InputInfo,256)   ;channel
		p1(1)=wpeek(InputInfo,260)   ;bitrate
		p1(2)=wpeek(InputInfo,264)   ;samplingRate
		p1(3)=wpeek(InputInfo,268)   ;totalSec
		Before_Position = 0
	}
	vbmp3_decodeWave varptr(oFile) : ret=stat
	if ret==0 : return -1
	ref="成功"
	return 0

	;***** 標準MP3ファイルを RIFF WAVE形式ファイルに変換 (changewave) *****
	#deffunc changewave str p1
	sFile = p1 : if strlen(sFile)==0 : return -1
	vbmp3_changeWav varptr(sFile) : ret=stat
	if ret==0 : return -1
	return 0

	;***** 標準MP3ファイルを RIFF MP3形式ファイルに変換 (changermp) *****
	#deffunc changermp str p1
	sFile = p1 : if strlen(sFile)==0 : return -1
	vbmp3_changermp varptr(sFile) : ret=stat
	if ret==0 : return -1
	return 0

	;***** RIFF形式ファイルを標準MP3ファイルに変換 (changemp3) *****
	#deffunc changemp3 str p1
	sFile = p1 : if strlen(sFile)==0 : return -1
	vbmp3_changeMp3 varptr(sFile) : ret=stat
	if ret==0 : return -1
	return 0

	;***** ファイル内のマックヘッダ除去 (cutmacbin) *****
	#deffunc cutmacbin str p1
	sFile = p1 : if strlen(sFile)==0 : return -1
	vbmp3_cutMacBinary varptr(sFile) : ret=stat
	if ret==0 : return -1
	return 0

	;***** 演奏位置の移動 (seekmp3) *****
	#deffunc seekmp3 int p1
	seektime = p1  ;秒
	vbmp3_seek seektime : ret=stat
	if ret==0 : return -1
	return 0

	;***** ファイルの種類取得 (getmpFileType) *****
	#deffunc getmpFileType str p1
	sFile = p1 : if strlen(sFile)==0 : return -1
	vbmp3_getFileType varptr(sFile) : ret=stat

	; 以下の内容の合計値 (stat)
	;    0  :  標準MP3ファイル
	;    1  :  Riff WAVE形式
	;    2  :  Riff MP3形式
	;    4  :  ID3 v2 Tag 有り
	;    8  :  Macヘッダ有り
	;   16  :  ID3 v1 Tag 有り
	;   32  :  LYRICS3 v2.00 有り
	;   64  :  標準WAVEファイル(リアルPCM)
	return ret

	;***** VBMP3.dllのバージョン取得 (getmp3dllver) *****
	#deffunc getmp3dllver
	vbmp3_getVersion : ret=stat
	return ret

	;***** グラフィックイコライザの設定 (setEqualizer) *****
	#deffunc setEqualizer array p1
	vbmp3_setEqualizer varptr(p1)
	vbmp3_reload
	return 0

	;***** オシロスコープ(WAVE成分)の取得 (getWavemp3) *****
	#deffunc getWavemp3 var p1,var p2
	vbmp3_getWave varptr(p1),varptr(p2)
	return 0
	#global
	#endif
	#endif

	;***** MPEG Audio操作による(VBMP3.dll)サンプル(1) (dllsamp04.hsp) *****

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#define MAX_PATH     260
	#uselib  "user32.dll"
	#func GetSysColor "GetSysColor" int
	#uselib "kernel32.dll"
	#func GetVersionEx "GetVersionExA" var
	#include "exmp3dll.as"

	onexit *owari

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir

	;▼Screen ID=0 の初期化
	screen 0,640,480,0,ginfo(20)-640>>1,ginfo(21)-480>>1
	gosub *backcolor : boxf
	gsel 0,1

	title "MPEG Audio操作による(VBMP3.dll)サンプル(1)"

	dim sFile,MAX_PATH+2  ;入力ファイル名

	;▼フォント、文字色の初期値
	font "MS ゴシック",12,0 : color 0,0,0

	pos 50,30 : mes "オシロスコープ付きのプレーヤーサンプル"

	;▼各種情報表示エリア
	;pos 460,130 : mes "Information"
	TSec="" : Lptime="" : state=""
	pos 460,52 : mes "総演奏時間" : pos 530,50 : input TSec,40,16
	pos 460,72 : mes "経過時間"   : pos 530,70 : input Lptime,40,16
	pos 460,92 : mes "状態"       : pos 530,90 : input state,40,16
	pos 580,72 : mes "Sec"

	;▼オシロスコープ目盛
	pos  12,150 : mes "100"
	pos  12,245 : mes "  0"
	pos   7,340 : mes "-100"

	;▼左右WAVE成分配列設定(初期化) ※必ず256要素分確保のこと
	dim lchWav,256 : dim rchWav,256
	gosub *scorpdraw

	;▼操作ボタン
	objsize 70,22 : pos 563,150
	button "Open",*fileopen
	button "Play",*splay
	button "Stop",*sstop
	button "Pause",*spause
	objsel 3

	;▼初期化 (VBMP3.dllイニシャライズ:必須)
	initmp3 30,100,100

	;******************************************************************
	; ●メインループ  ↓
	;------------------------------------------------------------------
	; 1) ..... 状態チエック
	; 2) ..... 経過時間の取得
	; 3) ..... オシロスコープ処理
	;
	;******************************************************************

*main
	wait 5
	;***** 状態のチエック *****
	gosub *stcheck
	if st==0 : goto *main
		;***** 経過時間表示 *****
		gosub *laptime
		;***** オシロスコープ描画 *****
		getWavemp3 lchWav,rchWav
		repeat 256
			;***** 左側成分 *****
			color 255,255,0
			line cnt+40,250,cnt+40,-lchWav.cnt+250
			;***** 右側成分 *****
			color 0,255,0
			line cnt+300,250,cnt+300,-rchWav.cnt+250
		loop
		redraw 1,40,150,556,350 : await 10 : redraw 0
		gosub *scorpdraw
goto *main

;▼状態チエック
*stcheck
	getstamp3 Lsec : st=stat
	if st==0 : state="Stop"
	if st==1 : state="Play"
	if st==2 : state="Pause"
	objprm 2,state
	return

;▼経過時間取得設定(表示)
*laptime
	getstamp3 Lsec : st=stat : Lptime=str(Lsec)
	objprm 1,Lptime
	return

;▼ファイルを選択
*fileopen
	dialog "mp3",16 : if stat=0:stop
	sFile=refstr
	objprm 6,"Pause"
	stop

;▼演奏開始
*splay
	playmp3 nInfo,sFile : TSec=refstr
	objprm 0,TSec
	dim lchWav,256 : dim rchWav,256
	objprm 6,"Pause"
	goto *main

;▼停止
*sstop
	stopmp3
	gosub *scorpdraw
	objprm 6,"Pause"
	stop

;▼一時停止・再開 (ボタンをクリックで交互に切替)
*spause
	pausemp3
	if stat {
		objprm 6,"Restart"
		}else{
			objprm 6,"Pause"
	}
	goto *main

;▼オシロスコープ画面作成
*scorpdraw
	color 0,0,0
	boxf 40,150,296,350 : boxf 300,150,556,350
	color 255,255,0 : line  40,250,296,250
	color 0,255,0   : line 300,250,556,250
	return

;▼ウィンドウ背景色の取得
*backcolor
	dim osverinfo,148 : osverinfo(0)=148
	GetVersionEx osverinfo
	if osverinfo(4)==2 : ret=1 : else : ret=0
	dim osverinfo,0
	if ret==0 {
	mref bmscr,67
	GetSysColor 15 : bmscr(40)=stat
	color ginfo(16),ginfo(17),ginfo(18)
	}else{
		SysColor 15
	}
	return

;▼終了処理
*owari
	closemp3
	end

	;***** MPEG Audio操作による(VBMP3.dll)サンプル(2) (dllsamp05.hsp) *****
	;
	;    ▼エンコードには次の CODEC が必要です。
	;     「Fraunhofer IIS MPEG Layer-3 Codec (Advanced)」
	;      (professionalは有料版)
	;
	;   ぁゃιぃCodec 配布所
	;   http://wa.strangeworld.jp/kuzukago3/fhg_mp3.html

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#define MAX_PATH     260
	#uselib  "user32.dll"
	#func GetSysColor "GetSysColor" int
	#uselib "kernel32.dll"
	#func GetVersionEx "GetVersionExA" var
	#include "exmp3dll.as"

	onexit *owari

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir

	;▼Screen ID=0 の初期化
	screen 0,640,480,0,ginfo(20)-640>>1,ginfo(21)-480>>1
	gosub *backcolor : boxf
	gsel 0,1

	title "MPEG Audio操作による(VBMP3.dll)サンプル(2)"

	sdim wavfile,MAX_PATH+2  ;入力ファイル名
	sdim mp3file,MAX_PATH+2  ;出力ファイル名

	;▼初期化 (VBMP3.dllイニシャライズ)
	initmp3 30,100,100

	font "ゴシック",12,0 : objmode 2
	color 0,0,0
	pos 10,20 : mes "入力ファイル"
	pos 90,14 : input wavfile,ginfo(10)-160,22
	objsize 42,21
	pos 582,14 : button "参照",*folsel1

	pos 10,40 : mes "出力ファイル"
	pos 90,36 : input mp3file,ginfo(10)-160,22
	objsize 42,21
	pos 582,36 : button "参照",*folsel2

	objsize 200,21
	pos  10,80 : button "エンコード(wav→mp3)開始",*EncStart
	objsize 50,21
	pos 240,80 : button "中止"  ,*EncStop
	pos 290,80 : button "閉じる",*owari

	;▼エンコード情報表示エリア作成
	wstatus="" : dim winfo,4
	pos 30,150 : mes "チャンネル数"
	pos 30,174 : mes "ビット数"
	pos 30,198 : mes "サンプリングレート"
	pos 30,222 : mes "データサイズ"
	pos 30,246 : mes "変換状態"

	pos 160,144 : input winfo(0),60,22
	pos 160,168 : input winfo(1),60,22
	pos 160,192 : input winfo(2),60,22
	pos 160,216 : input winfo(3),60,22
	pos 160,240 : input wstatus,60,22
	stop

;▼対象ファイルを選択
*folsel1
	dialog "wav",16 : if stat=0 : stop
	wavfile=refstr  : objprm 0,wavfile
	ls=strlen(wavfile)
	repeat : wait 1 : if ls!0 : break : loop
	objsel 2
	stop

;▼出力フォルダを選択 (ファイル名は、拡張子' .mp3 'を補完して作成)
*folsel2
	ls=strlen(wavfile)
	if ls<5 { dialog "入力ファイルを先に選択して下さい",0,"エラー" : stop }
	gosub *foldlg

	;▼格納先ディレクトリから.mp3の拡張子付きファイル名を作成する
	mp3file=Folder : tmp="" : tmp=getpath(wavfile,9)
	mp3file+="\\"+tmp+".mp3"
	objprm 2,mp3file
	stop

;▼エンコードファイルオープンと開始
*EncStart
	wstatus="" : objprm 11,wstatus
	encodeOpen winfo,wavfile
	repeat 4,7 : objprm cnt,winfo(cnt-7) : loop
	encodeStart mp3file
	if stat==-1 : wstatus="失敗" : else : wstatus="成功"
	objprm 11,wstatus
	stop

;▼エンコード中止
*EncStop
	encodeStop
	stop

;▼フォルダの選択ダイアログ
*foldlg
	newcom ShellApp, "Shell.Application"
	sdim Folder,260

	objFolder=ShellApp("BrowseForFolder",hwnd,"フォルダの選択",0,dirinfo(1))
	;▼キャンセルの場合
	if varuse(objFolder)==0 {
		dialog "キャンセルされました。",0,"フォルダの選択"
		ShellApp  = 0
		objFolder = 0
		stop
	}
	;▼OKの場合は、選択されたパス名を取得する
	objItems=objFolder("Items") : objItem=objItems("Item")
	Folder=objItem("Path")
	;▼オブジェクト変数の解放
	objFolder=0
	objItems =0
	objItem  =0
	ShellApp =0
	return

;▼ウィンドウ背景色の取得
*backcolor
	dim osverinfo,148 : osverinfo(0)=148
	GetVersionEx osverinfo
	if osverinfo(4)==2 : ret=1 : else : ret=0
	dim osverinfo,0
	if ret==0 {
	mref bmscr,67
	GetSysColor 15 : bmscr(40)=stat
	color ginfo(16),ginfo(17),ginfo(18)
	}else{
		SysColor 15
	}
	return

;▼終了処理
*owari
	closemp3
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか判定
	if vartype(objFolder)==6 {
		if varuse(objFolder)==1 : objFolder = 0
	}
	if vartype(objItems)==6 {
		if varuse(objItems)==1  : objItems = 0
	}
	if vartype(objItem)==6 {
		if varuse(objItem)==1   : objItem = 0
	}
	if vartype(ShellApp)==6 {
		if varuse(ShellApp)==1  : ShellApp = 0
	}
	end

	;***** MPEG Audio操作による(VBMP3.dll)サンプル(3) (dllsamp06.hsp) *****

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#define MAX_PATH     260
	#uselib  "user32.dll"
	#func GetSysColor "GetSysColor" int
	#uselib "kernel32.dll"
	#func GetVersionEx "GetVersionExA" var
	#include "exmp3dll.as"

	onexit *owari

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir

	;▼Screen ID=0 の初期化
	screen 0,640,480,0,ginfo(20)-640>>1,ginfo(21)-480>>1
	gosub *backcolor : boxf
	gsel 0,1

	title "MPEG Audio操作による(VBMP3.dll)サンプル(3)"

	sdim mp3file,MAX_PATH+1  ;入力ファイル名
	sdim wavfile,MAX_PATH+1  ;出力ファイル名

	;▼初期化 (VBMP3.dllイニシャライズ)
	initmp3 30,100,100

	font "ゴシック",12,0 : objmode 2
	color 0,0,0
	pos 10,20 : mes "入力ファイル"
	pos 90,14 : input mp3file,ginfo(10)-160,22
	objsize 42,21
	pos 582,14 : button "参照",*folsel1

	pos 10,40 : mes "出力ファイル"
	pos 90,36 : input wavfile,ginfo(10)-160,22
	objsize 42,21
	pos 582,36 : button "参照",*folsel2
	objsize 280,21
	pos  20,80 : button "再生しながらデコード(mp3→wav)開始",*mode01
	pos 20,102 : button "再生しないでデコード(mp3→wav)開始",*mode02
	objsize 50,21
	pos 340,80 : button "閉じる",*owari

	;▼デコード情報表示エリア作成
	status="" : dim dstatus,4
	pos 30,170 : mes "チャンネル数"
	pos 30,194 : mes "ビットレート"
	pos 30,218 : mes "サンプリングレート"
	pos 30,242 : mes "演奏時間"
	pos 30,266 : mes "変換状態"

	pos 160,164 : input dstatus(0),60,22
	pos 160,188 : input dstatus(1),60,22
	pos 160,212 : input dstatus(2),60,22
	pos 160,236 : input dstatus(3),60,22
	pos 160,260 : input status,60,22
	stop

;再生しながらWAVEファイルデコード開始
*mode01
	playdecwave dstatus,wavfile,mp3file
	repeat 4,7 : objprm cnt,dstatus(cnt-7) : loop
	status=refstr : objprm 11,status
	stop

;再生しないでWAVEファイルデコード開始
*mode02
 	decodewave dstatus,wavfile,mp3file
	repeat 4,7 : objprm cnt,dstatus(cnt-7) : loop
	status=refstr : objprm 11,status
	stop

;▼対象ファイルを選択
*folsel1
	dialog "mp3",16 : if stat=0 : stop
	mp3file=refstr  : objprm 0,mp3file
	ls=strlen(mp3file)
	repeat
		wait 1
		if ls!0 : break
	loop
	objsel 2
	stop

;▼出力フォルダを選択 (ファイル名は、拡張子' .wav 'を補完して作成)
*folsel2
	ls=strlen(mp3file)
	if ls<5 { dialog "入力ファイルを先に選択して下さい",0,"エラー" : stop }
	gosub *foldlg

	;▼格納先ディレクトリから.wavの拡張子付きファイル名を作成する
	wavfile=Folder : tmp=""
	tmp=getpath(mp3file,9)
	wavfile+="\\"+tmp+".wav"
	objprm 2,wavfile
	stop

;▼フォルダの選択ダイアログ
*foldlg
	newcom ShellApp, "Shell.Application"
	sdim Folder,260

	objFolder=ShellApp("BrowseForFolder",hwnd,"フォルダの選択",0,dirinfo(1))
	;▼キャンセルの場合
	if varuse(objFolder)==0 {
		dialog "キャンセルされました。",0,"フォルダの選択"
		ShellApp  = 0
		objFolder = 0
		stop
	}
	;▼OKの場合は、選択されたパス名を取得する
	objItems=objFolder("Items") : objItem=objItems("Item")
	Folder=objItem("Path")
	;▼オブジェクト変数の解放
	objFolder=0
	objItems =0
	objItem  =0
	ShellApp =0
	return

;▼ウィンドウ背景色の取得
*backcolor
	dim osverinfo,148 : osverinfo(0)=148
	GetVersionEx osverinfo
	if osverinfo(4)==2 : ret=1 : else : ret=0
	dim osverinfo,0
	if ret==0 {
	mref bmscr,67
	GetSysColor 15 : bmscr(40)=stat
	color ginfo(16),ginfo(17),ginfo(18)
	}else{
		SysColor 15
	}
	return

;▼終了処理
*owari
	closemp3
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか判定
	if vartype(objFolder)==6 {
		if varuse(objFolder)==1 : objFolder = 0
	}
	if vartype(objItems)==6 {
		if varuse(objItems)==1  : objItems = 0
	}
	if vartype(objItem)==6 {
		if varuse(objItem)==1   : objItem = 0
	}
	if vartype(ShellApp)==6 {
		if varuse(ShellApp)==1  : ShellApp = 0
	}
	end
      各種漢字コードの変換を行なう     

JISやEUCと言った漢字コードを相互に変換したい場合があります。コード変換には、いく つかの方法が公開されており、 HSPのスクリプトベースでも作成することが可能ですが、 他の言語でも広く利用されているnkf32.dllを利用すると便利です。このdllをHSPのAPI呼 び出し機能を利用して、簡単に利用できるようにモジュール化したものを紹介します。
	;***** nkf32.dll呼び出しモジュール (exnkf32dll.as) *****

	#ifdef __hsp30__
	#ifndef __EXNKF32__
	#define __EXNKF32__

	;▼▼▼▼▼▼▼  nkf32.dll 関数の定義  ▼▼▼▼▼▼▼
	#uselib "nkf32.dll"
	#func global GetNkfVersion "GetNkfVersion" int
	#func global SetNkfOption "SetNkfOption" int
	#func global NkfConvert "NkfConvert" int,int
	#func global ToHankaku "ToHankaku" int
	#func global ToZenkakuKana "ToZenkakuKana" int,int
	#func global EncodeSubject "EncodeSubject" int,int

	#module
	;***** nkf32.dllバージョン(1.5k 1.03.32)を取得  (getnkfver) *****
	#deffunc getnkfver var p1
	GetNkfVersion varptr(p1)
	return 0

	;***** 漢字変換オプションの指定  (setnkfopt) *****
	#deffunc setnkfopt str p1
	sdim optstr,24 : optstr=p1
	if optstr="" : sdim optstr,0 : return -1
	SetNkfOption varptr(optstr) : ret=stat
	sdim optstr,0
	return ret

	;***** 漢字コード変換  (nkfconv) *****
	#deffunc nkfconv var p1,str p2
	ls=strlen(p2) : if ls==0 : return -1
	sdim basestr,ls+4 : basestr=p2
	NkfConvert varptr(p1),varptr(basestr)
	sdim basestr,0
	return 0

	;***** 全角英数字・記号文字列を半角文字列に変換  (ToHankakucnv) *****
	#deffunc ToHankakucnv var p1
	ToHankaku varptr(p1)
	return 0

	;***** 半角カタカナと一部の記号(「」ー等)を全角カタカナに変換  (ToZenkakuKanacnv) *****
	#deffunc ToZenkakuKanacnv var p1,str p2
	ls=strlen(p2) : if ls==0 : return -1
	sdim basestr,ls+4 : basestr=p2
	ToZenkakuKana varptr(p1),varptr(basestr)
	sdim basestr,0
	return 0

	;***** メールのサブジェクト(タイトル)をMIME(Base64)に変換  (Encsubject) *****
	#deffunc Encsubject var p1,str p2
	ls=strlen(p2) : if ls==0 : return -1
	sdim basestr,ls+4 : basestr=p2
	EncodeSubject varptr(p1),varptr(basestr)
	sdim basestr,0
	return 0
	#global
	#endif
	#endif

	;***** ネットワーク漢字フィルタ(nkf32.dll)サンプル (dllsamp07.hsp) *****

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#include "exnkf32dll.as"

	onexit *owari

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir
	gsel 0,1

	title "ネットワーク漢字フィルタ(nkf32.dll)サンプル"

	sdim s,1024 : pos 10,10

	;▼nkf移植元バージョン情報
	getnkfver s : mes s

	;▼漢字コード変換 (SHIFT-JIS → JISに変換)
	inputstr="日本全国HSPABCDEFGHIJKLMN0123456789"
	setnkfopt "j"
	nkfconv s,inputstr : mes s

	;▼全角英数字・記号文字列を半角文字列に変換
	s="ABCDEFGHIJKLMN0123456789$#%&!¥"
	ToHankakucnv s : mes s

	;▼半角カタカナと一部の記号(「」ー等)を全角カタカナに変換
	inputstr="アイウエオカキクケコ0123456789"
	ToZenkakuKanacnv s,inputstr : mes s

	;▼メールのサブジェクト(タイトル)をMIME(Base64)に変換
	basestr="メールサブジェクトのテスト"
	setnkfopt "j"  ;SHIFT-JIS → JISに変換
	Encsubject s,basestr : mes s

	;▼各種変換のテスト
	sdim buf,32000 : sdim outbuf,32000
	font "MS ゴシック",14 : objmode 2
	pos 0,174 : mesbox buf,ginfo(10)-7,ginfo(11)-200,1
	buf="\nここに変換元の文字列を入力して、漢字変換オプションを指定して変換して下さい。"
	objprm 0,buf
	pos 10,150 : mes "漢字変換オプション"
	kconvopt="" : pos 150,147 : input kconvopt,100,22
	objsize 60,22 : pos 260,147
	button "変換",*kconv
	stop

;▼変換実行
*kconv
	setnkfopt kconvopt
	nkfconv outbuf,buf
	objprm 0,outbuf
	stop

*owari
	end
      音楽ファイルを高速に変換する     

wavからmp3ファイルに高速変換するには、専用のdllを利用します。 他の言語でも利用さ れていて、定番となっている午後のこ〜だ.DLL (gogo.dll)をHSPから簡単に利用できるよ うにHSPのマクロ機能を利用して作成した命令を紹介します。
	;***** gogo.dll呼び出しマクロ (exgogoenc.as) *****

	#ifdef __hsp30__
	#ifndef __EXGOGOENC__
	#define __EXGOGOENC__

	;▼▼▼▼▼▼▼  gogo.dll 関数の定義  ▼▼▼▼▼▼▼
	#uselib "gogo.dll"
	#func global MPGE_initializeWork "MPGE_initializeWork"
	#func global MPGE_setConfigure "MPGE_setConfigure" int,int,int
	#func global MPGE_getConfigure "MPGE_getConfigure" int,int
	#func global MPGE_detectConfigure "MPGE_detectConfigure"
	#func global MPGE_getUnitStates "MPGE_getUnitStates" int
	#func global MPGE_getVersion "MPGE_getVersion" int,int
	#func global MPGE_processFrame "MPGE_processFrame"
	#func global MPGE_closeCoder "MPGE_closeCoder"
	#func global MPGE_endCoder "MPGE_endCoder"

	;■musenc.hより抜粋 (Constance Define)
	;**********************************************
	;* for new GOGO-no-coda ( 2000/1/15 )
	;* Copyright (C)1999,2000 PEN@MarineCat
	;**********************************************

	#define global ME_NOERR                       0  ; 正常終了
	#define global ME_EMPTYSTREAM                 1  ; ストリームが最後に達した
	#define global ME_HALTED                      2  ; (ユーザーの手により)中断された
	#define global ME_INTERNALERROR              10  ; 内部エラー
	#define global ME_PARAMERROR                 11  ; 設定でパラメーターエラー
	#define global ME_NOFPU                      12  ; FPUを装着していない!!
	#define global ME_INFILE_NOFOUND             13  ; 入力ファイルを正しく開けない
	#define global ME_OUTFILE_NOFOUND            14  ; 出力ファイルを正しく開けない
	#define global ME_FREQERROR                  15  ; 入出力周波数が正しくない
	#define global ME_BITRATEERROR               16  ; 出力ビットレートが正しくない
	#define global ME_WAVETYPE_ERR               17  ; ウェーブタイプが正しくない
	#define global ME_CANNOT_SEEK                18  ; 正しくシーク出来ない
	#define global ME_BITRATE_ERR                19  ; ビットレート設定が正しくない
	#define global ME_BADMODEORLAYER             20  ; モード・レイヤの設定異常
	#define global ME_NOMEMORY                   21  ; メモリアローケーション失敗
	#define global ME_CANNOT_SET_SCOPE           22  ; スレッド属性エラー(pthread only)
	#define global ME_CANNOT_CREATE_THREAD       23  ; スレッド生成エラー
	#define global ME_WRITEERROR                 24  ; 記憶媒体の容量不足

	;***** for INPUT *****
	#define global MC_INPUTFILE                   1
	;***** para1 choice of input device *****
	#define global MC_INPDEV_FILE                 0  ; 入力デバイスはファイル
	#define global MC_INPDEV_STDIO                1  ; 入力デバイスは標準入力
	#define global MC_INPDEV_USERFUNC             2  ; 入力デバイスはユーザー定義
	#define global MC_INPDEV_MEMORY_NOSIZE        0xffffffff

	;***** for OUTPUT ( now stdout is not support ) *****
	#define global MC_OUTPUTFILE                  2
	;***** para1 choice of output device *****
	#define global MC_OUTDEV_FILE                 0  ; 出力デバイスはファイル
	#define global MC_OUTDEV_STDOUT               1  ; 出力デバイスは標準出力
	#define global MC_OUTDEV_USERFUNC             2  ; 出力デバイスはユーザー定義
	#define global MC_OUTDEV_USERFUNC_WITHVBRTAG  3  ; 入力デバイスはユーザー定義/VBRタグ書き出し

	;***** mode of encoding : エンコードタイプ *****
	#define global MC_ENCODEMODE                  3
	;***** para1 mode;モード設定 *****
	#define global MC_MODE_MONO                   0  ; モノラル
	#define global MC_MODE_STEREO                 1  ; ステレオ
	#define global MC_MODE_JOINT                  2  ; ジョイント
	#define global MC_MODE_MSSTEREO               3  ; ミッドサイド
	#define global MC_MODE_DUALCHANNEL            4  ; デュアルチャネル

	#define global MC_BITRATE                     4
	#define global MC_INPFREQ                     5
	#define global MC_OUTFREQ                     6
	#define global MC_STARTOFFSET                 7
	#define global MC_USEPSY                      8
	#define global MC_USELPF16                    9
	#define global MC_USEMMX                     10  ; MMX
	#define global MC_USE3DNOW                   11  ; 3DNow!
	#define global MC_USEKNI                     12  ; SSE(KNI)
	#define global MC_USEE3DNOW                  13  ; Enhanced 3D Now!
	#define global MC_USESPC1                    14  ; special switch for debug
	#define global MC_USESPC2                    15  ; special switch for debug
	#define global MC_ADDTAG                     16

	;***** emphasis : エンファシスタイプの設定 *****
	#define global MC_EMPHASIS                   17
	#define global MC_EMP_NONE                    0  ; エンファシスなし(dflt)
	#define global MC_EMP_5015MS                  1  ; エンファシス50/15ms
	#define global MC_EMP_CCITT                   3  ; エンファシスCCITT

	#define global MC_VBR                        18
	#define global MC_CPU                        19
	#define global MC_BYTE_SWAP                  20
	#define global MC_8BIT_PCM                   21
	#define global MC_MONO_PCM                   22
	#define global MC_TOWNS_SND                  23
	#define global MC_THREAD_PRIORITY            24
	#define global MC_READTHREAD_PRIORITY        25

	;***** output format *****
	#define global MC_OUTPUT_FORMAT              26
	#define global MC_OUTPUT_NORMAL               0  ; mp3+TAG (see MC_ADDTAG)
	#define global MC_OUTPUT_RIFF_WAVE            1  ; RIFF/WAVE
	#define global MC_OUTPUT_RIFF_RMP             2  ; RIFF/RMP

	#define global MC_RIFF_INFO                  27
	#define global MC_VERIFY                     28
	#define global MC_OUTPUTDIR                  29
	#define global MC_VBRBITRATE                 30
	#define global MC_ENHANCEDFILTER             31
	#define global MC_MSTHRESHOLD                32

	;***** Language *****
	#define global MC_LANG                       33

	;***** for getting configuration *****
	#define global MG_INPUTFILE                   1  ; 入力ファイル名取得
	#define global MG_OUTPUTFILE                  2  ; 出力ファイル名取得
	#define global MG_ENCODEMODE                  3  ; エンコードモード
	#define global MG_BITRATE                     4  ; ビットレート
	#define global MG_INPFREQ                     5  ; 入力周波数
	#define global MG_OUTFREQ                     6  ; 出力周波数
	#define global MG_STARTOFFSET                 7  ; スタートオフセット
	#define global MG_USEPSY                      8  ; 心理解析を使用する/しない
	#define global MG_USEMMX                      9  ; MMX
	#define global MG_USE3DNOW                   10  ; 3DNow!
	#define global MG_USEKNI                     11  ; SSE(KNI)
	#define global MG_USEE3DNOW                  12  ; Enhanced 3DNow!

	#define global MG_USESPC1                    13  ; special switch for debug
	#define global MG_USESPC2                    14  ; special switch for debug
	#define global MG_COUNT_FRAME                15  ; amount of frame
	#define global MG_NUM_OF_SAMPLES             16  ; 1フレームあたりのサンプル数
	#define global MG_MPEG_VERSION               17  ; MPEG VERSION
	#define global MG_READTHREAD_PRIORITY        18  ; thread priority to read for BeOS

	;▼macro define
	#define global gogoinitwork MPGE_initializeWork
	#define global ctype gogosetInpfile(%1) MPGE_setConfigure MC_INPUTFILE,MC_INPDEV_FILE,varptr(%1)
	#define global ctype gogosetOutfile(%1) MPGE_setConfigure MC_OUTPUTFILE,MC_OUTDEV_FILE,varptr(%1)
	#define global ctype gogosetConfig(%1,%2,%3) MPGE_setConfigure %1,%2,%3
	#define global ctype gogogetConfig(%1,%2) MPGE_getConfigure %1,varptr(%2)
	#define global gogodetConfug MPGE_detectConfigure
	#define global ctype gogogetUnistate(%1) MPGE_getUnitStates varptr(%1)
	#define global ctype gogogetVersion(%1,%2) MPGE_getVersion varptr(%1),varptr(%2)
	#define global gogoprocFrame MPGE_processFrame
	#define global gogocloseCoder MPGE_closeCoder
	#define global gogoendCoder MPGE_endCoder
	#endif
	#endif

	;***** 午後のこ〜だ.DLL (gogo.dll) のサンプル (dllsamp08.hsp) *****

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#define MAX_PATH     260
	#uselib  "user32.dll"
	#func GetSysColor "GetSysColor" int
	#uselib "kernel32.dll"
	#func GetVersionEx "GetVersionExA" var
	#include "exgogoenc.as"

	onexit *owari

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir
	;▼Screen ID=0 の初期化
	screen 0,640,480,0,ginfo(20)-640>>1,ginfo(21)-480>>1
	gosub *backcolor : boxf
	gsel 0,1

	title "午後のこ〜だ.DLL (gogo.dll) のサンプル"

	sdim wavfile,MAX_PATH+1  ;入力ファイル名
	sdim mp3file,MAX_PATH+1  ;出力ファイル名

	;▼初期化 (gogo.dllイニシャライズ)
	gogoinitwork : ret=stat
	if ret!= ME_NOERR : dialog "gogo.dllの初期化に失敗しました。",0,"エラー" : stop

	;▼バージョンコードを取得
	sdim strbuf,260
	gogogetVersion(vercode,strbuf) : ret=stat
	if ret!=ME_NOERR : dialog "取得に失敗しました。",0,"確認" : stop
	;mes "gogo.dll Version : "+strbuf+"     "+strf("%04x",vercode),1

	font "ゴシック",12,0 : objmode 2
	color 0,0,0
	pos 10,20 : mes "入力ファイル"
	pos 90,14 : input wavfile,ginfo(10)-160,22
	objsize 42,21
	pos 582,14 : button "参照",*folsel1
	pos 10,40 : mes "出力ファイル"
	pos 90,36 : input mp3file,ginfo(10)-160,22
	objsize 42,21
	pos 582,36 : button "参照",*folsel2
	objsize 120,21
	pos 10,80 : button "エンコード開始",*Encode
	objsize 50,21
	pos 150,80 : button "閉じる",*owari
	pos 220,85 : mes "変換状況 (フレーム数)"
	objsize 70,21 : num=""
	pos 350,80 : input num,100,22
	stop

;▼エンコード開始 (平均ビットレートエンコード)
*Encode
	;▼入力ファイル設定
	gogosetInpfile(wavfile)
	;▼出力ファイル設定
	gogosetOutfile(mp3file)
	;▼ビットレートを 128 kbps に設定
	gogosetConfig(MC_BITRATE,128,0)
	;▼ABR(平均ビットレート)エンコードに設定
	gogosetConfig(MC_ABR,0,0)
	;▼エンコードモードをジョイントステレオに設定
	gogosetConfig(MC_ENCODEMODE,MC_MODE_JOINT,0)
	;▼設定状態の確認 (確定)
	gogodetConfug : ret=stat
	if ret==ME_NOERR {
		;▼総フレーム数の取得
		gogogetConfig(MG_COUNT_FRAME,numFrame)
		repeat
			await
			gogoprocFrame : ret=stat
			num=""+cnt+"/"+numFrame
			objprm 6,num
			if ret==ME_EMPTYSTREAM : break
		loop
	}
	dialog "変換が終了しました。",0,"確認"
	;▼後処理
	gogocloseCoder
	gogoendCoder
	stop

;▼対象ファイルを選択
*folsel1
	dialog "wav",16 : if stat=0 : stop
	wavfile=refstr  : objprm 0,wavfile
	ls=strlen(wavfile)
	repeat
		wait 1
		if ls!0 : break
	loop
	objsel 2
	stop

;▼出力フォルダを選択 (ファイル名は、拡張子' .mp3 'を補完して作成)
*folsel2
	ls=strlen(wavfile)
	if ls<5 { dialog "入力ファイルを先に選択して下さい",0,"エラー" : stop }
	gosub *foldlg

	;格納先ディレクトリから.mp3の拡張子付きファイル名を作成する
	mp3file=Folder : tmp=""
	tmp=getpath(wavfile,9)
	mp3file+="\\"+tmp+".mp3"
	objprm 2,mp3file
	stop

;▼フォルダの選択ダイアログ
*foldlg
	newcom ShellApp, "Shell.Application"
	sdim Folder,260

	objFolder=ShellApp("BrowseForFolder",hwnd,"フォルダの選択",0,dirinfo(1))
	;▼キャンセルの場合
	if varuse(objFolder)==0 {
		dialog "キャンセルされました。",0,"フォルダの選択"
		ShellApp  = 0
		objFolder = 0
		stop
	}
	;▼OKの場合は、選択されたパス名を取得する
	objItems=objFolder("Items") : objItem=objItems("Item")
	Folder=objItem("Path")
	;▼オブジェクト変数の解放
	objFolder=0
	objItems =0
	objItem  =0
	ShellApp =0
	return

;▼ウィンドウ背景色の取得
*backcolor
	dim osverinfo,148 : osverinfo(0)=148
	GetVersionEx osverinfo
	if osverinfo(4)==2 : ret=1 : else : ret=0
	dim osverinfo,0
	if ret==0 {
	mref bmscr,67
	GetSysColor 15 : bmscr(40)=stat
	color ginfo(16),ginfo(17),ginfo(18)
	}else{
		SysColor 15
	}
	return

*owari
	gogoendCoder
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか判定
	if vartype(objFolder)==6 {
		if varuse(objFolder)==1 : objFolder = 0
	}
	if vartype(objItems)==6 {
		if varuse(objItems)==1  : objItems = 0
	}
	if vartype(objItem)==6 {
		if varuse(objItem)==1   : objItem = 0
	}
	if vartype(ShellApp)==6 {
		if varuse(ShellApp)==1  : ShellApp = 0
	}
	end
      正規表現を利用する     

正規表現とは、指定した文字列そのものを検索するのではなく、ある種の記号を組み合わ せて、目的のキーワードをパターンとして表現する手段のことです。perlやVBScript等各 種言語に組み込まれていて、非常に多く利用されています。HSPから利用する場合は、HSP のCOM操作関連命令を利用して、検索や置換を行なうこともできます。 ここでは、 正規表現を行なうための専用jre32.dllをHSPのAPI呼び出し機能を利用して作 成したモジュールを紹介します。 このjre32.dllは、以前は秀丸エディタ等でも利用され ていました。
	;***** jre32.dll呼び出しモジュール (exjre32dll.as) *****

	#ifdef __hsp30__
	#ifndef __EXJRE32DLL__
	#define __EXJRE32DLL__

	;▼▼▼▼▼▼▼  jre32.dll 関数の定義  ▼▼▼▼▼▼▼
	#uselib "jre32.dll"
	#func global JreGetVersion "JreGetVersion"
	#func global Jre2Open "Jre2Open" int
	#func global Jre2Compile "Jre2Compile" int,int
	#func global Jre2GetMatchInfo "Jre2GetMatchInfo" int,int
	#func global Jre2Close "Jre2Close" int
	#func global GetJreMessage "GetJreMessage" int,int,int,int

	;▼エラーコード
	#define global CantAllocate      1 ;メモリの確保ができない。
	                                   ;絶対的なメモリ不足。
	#define global MemoryTooFew1     2 ;メモリが足りない1。 
	                                   ;(実行時に決まるもの。メモリサイズの予測に失敗した)
	#define global MemoryTooFew2     3 ;メモリが足りない2。 (DLL作成時に決まるもの)
	#define global ReTooLong        10 ;正規表現が長すぎる。
	#define global TooComplex       13 ;もっと簡単な表現にして下さい。
	                                   ;このDLLの弱いパターンで見つけられない。
	#define global MismatchBracket  20 ;括弧の対応が正しくない。
	#define global InvalidChClass   21 ;キャラクタクラスの内容が解釈できない。
	                                   ;殆どの場合範囲指定が正しくない。
	#define global EscErr           24 ;エスケープシーケンスが解釈できない。
	#define global Unknown          31 ;何だか良くわからないエラー。
	                                   ;複合的な要因で発生するエラー。
	#define global NoReString       32 ;検索パターンを指定して下さい。正規表現長が0バイト。
	#define global IncorrectUsing   33 ;パラメータがおかしい。DLLの不正な使用法。
	#define global ReNotExist       34 ;検索する前にコンパイルして下さい。
	#define global InternalErr      35 ;DLLのバグを検出した。
	                                   ;これが発生したら作者に連絡して欲しい。
	#define global UsrAbort         36 ;ユーザー(アプリケーション)による中断。
	#define global OldVersion       37 ;古い(解釈できない)バージョンの呼び出し手順を使用した。

	;▼jre32.dllで使用するメッセージの最大長(保証)
	;  このサイズのバッファに収まらない文字列は渡しません (nullまで含めてこのサイズ)
	#define  global JRE_MAXLEN     128

	;▼GetJreMessageの言語番号
	#define  global GJM_JPN    0
	#define  global GJM_ENG    1

	#module
	;***** JRE2構造体の初期化  (initjre) *****
	#deffunc initjre
	;▼JRE2構造体
	sdim jre2,54
	wpoke jre2,0,54  ;dwSizeをセット
	pStruct=varptr(jre2)
	return 0

	;***** jre32.dllのバージョンを取得 (ファイルバージョン)  (getjrever) *****
	#deffunc getjrever
	JreGetVersion : ret=stat
	return ret

	;***** コンパイル作業領域を初期化  (jreopen) *****
	#deffunc jreopen
	initjre
	Jre2Open pStruct : ret=stat
	if ret==1 : ret=0 : else : ret=-1
	return ret

	;***** JRE2構造体の使用終了宣言  (jreclose) *****
	#deffunc jreclose
	Jre2Close pStruct : ret=stat
	if ret==1 : ret=0 : else : ret=-1
	return ret

	;***** エラー番号からエラーメッセージの文字列を取得  (getjreerrstr) *****
	#deffunc getjreerrstr int p1
	mref ref,65
	Errnum=p1
	sdim ErrmesBuf,JRE_MAXLEN
	GetJreMessage Errnum,GJM_JPN,varptr(ErrmesBuf),JRE_MAXLEN
	ret=stat : ref=ErrmesBuf
	if ret==1 : ret=0 : else : ret=-1
	return ret

	;***** 検索パターンをコンパイルしJRE2構造体へデータを格納  (jrecomp) *****
	#deffunc jrecomp str p1
	Patstr=p1 : if strlen(Patstr)==0 : return -1
	Jre2Compile pStruct,varptr(Patstr)
	ret=stat
	if ret==1 : ret=0 : else : ret=-1
	return ret

	;***** JRE2構造体をもとに一行検索を行い、結果をJRE2構造体へ格納  (getmatchinfo) *****
	#deffunc getmatchinfo str p1,int p2
	Targetstr=p1 : if strlen(Targetstr)==0 : return -1
	nStart=p2 : if nStart<=0 : nStart=0
	memcpy jre2,nStart,4,8,0
	Jre2GetMatchInfo pStruct,varptr(Targetstr)
	ret=stat
	if ret==1 : ret=0 : else : ret=-1
	return ret

	;***** JRE2構造体から情報を取得  (getstrucinfo) *****
	#deffunc getstrucinfo var p1,int p2
	nMode=p2 : if (nMode<=0)|(nMode>4) : nMode=0

	; nMode
	; 0   : nStart     :検索開始位置
	; 1   : nWarning   :ウォーニングコード
	; 2   : nError     :エラー番号
	; 3   : nLength    :マッチ長 (バイト数)
	; 4   : nPosition  :マッチ位置 (先頭は0)

	nState=0
	if nMode==0 : memcpy nState,jre2,4,0,8     ;nStart
	if nMode==1 : memcpy nState,jre2,4,0,12    ;nWarning
	if nMode==2 : memcpy nState,jre2,4,0,16    ;nError
	if nMode==3 : memcpy nState,jre2,4,0,20    ;nLength
	if nMode==4 : memcpy nState,jre2,4,0,24    ;nPosition
	p1=nState
	return 0
	#global
	#endif
	#endif

	;***** 正規表現による検索(jre32.dll)サンプル (dllsamp09.hsp) *****

	;▼初期設定 (必要となる APIモジュール・マクロを定義)
	#include "exjre32dll.as"

	onexit *owari

	;▼起動ディレクトリ取得
	sdim Startdir,260
	if hspstat&1=0 { Startdir=dirinfo(1)+"\\" : chdir exedir
	} else {
		Startdir=dirinfo(0)+"\\"
	}
	chdir Startdir

	;▼Screen ID=0 の初期化
	screen 0,640,480,0,ginfo(20)-640>>1,ginfo(21)-480>>1
	gsel 0,1

	title "正規表現による検索(jre32.dll)サンプル"

	sdim buf,1024
	;▼ターゲット文字列を設定
	buf="  045-222-1111   06-5555-6666   03-1111-9999\n"
	buf+="  097-555-9988   048-999-1234"
	;▼検索パターンを設定
	pattern = "<[^>]*>"

	;▼jre32.dllのバージョンを取得
	getjrever : mes "jre32.dll Version = "+stat
	mes ""

	;▼jre32.dll初期化
	jreopen
	;//初期化失敗の場合
	if stat!0 {
		getstrucinfo n,2
		getjreerrstr n : mes refstr
		jreclose
		stop
	}
	;//検索パターンと検索対象文字列表示
	mes "pattern="+pattern
	mes "buf="+buf
	mes ""
	;//検索パターンのコンパイル
	jrecomp pattern
	;//コンパイルが成功したならば
	if stat==0 {
		n(0)=0 : n(1)=0 : count=0
		repeat
			await 2
			;//検索パターンによる検索 (開始位置を移動)
			getmatchinfo buf,n(0)+n(1) : match=stat
			;//マッチしなければ検索終了
			if match!0 : break
			;//構造体よりマッチ位置、マッチ長を取得
			getstrucinfo n(0),4   ;マッチ位置 (先頭は0)
			getstrucinfo n(1),3   ;マッチ長 (バイト数)
			mes "位置 = "+n(0)+"   マッチ長 = "+n(1)
			mes "マッチした文字列 : "+strmid(buf,n(0),n(1))
			count++
		loop
		mes ""
		if count>0 {
			mes ""+count+"個マッチしました。"
			}else{
				mes "マッチしませんでした。"
		}
	}
	;▼JRE2構造体の使用終了 (必須)
	jreclose
	stop

;▼終了処理
*owari
	end
      PDFファイルの作成・編集・情報取得を行なう     

HSPからPDFファイルに関する各種操作を行ないます。PDFを作成するには、通常はAcrobat Reader/Writerが必要となりますが、フリーでプラグイン (dll) が提供されていました。 このプラグインは、PAPY氏が開発された独自エンジンによるもので、開発者ライブラリ として提供されています。PDFDesigner Tools と言われるものです。

PDFDesigner Toolsとは、Windows環境でPDFの作成・テキスト変換・加工・編集するDLLです。 C++、Visual Basic、Delphiの言語で利用可能で独自PDFエンジンを使用しているので Acrobat がなくてもPDFを作成・加工・編集できるようになっています。これをHSPから簡単に利用できる ようにモジュールを作成しました。
尚、サンプルでの各指定ファイル名は、実際のお手持ちのPDFファイル名等に変更して利用願います。
	;***** PDFDesigner Tools プラグイン呼び出しモジュール  (pdfmod.as) *****
	; ( http://homepage3.nifty.com/e-papy/pdftool/index.html )

	#ifdef __hsp30__
	#ifndef __EXPDFDLL__
	#define __EXPDFDLL__
	#module

	;▼▼▼▼▼▼▼ 関数の定義  ▼▼▼▼▼▼▼
	#uselib "kernel32.dll"
	#cfunc  LoadLibrary "LoadLibraryA" sptr
	#cfunc  GetProcAddress "GetProcAddress" int,sptr
	#func   FreeLibrary "FreeLibrary" int
	#cfunc  GetCurrentThreadId "GetCurrentThreadId"
	#func   lstrcpy "lstrcpy" int,int

	#uselib "user32.dll"
	#cfunc  GetForegroundWindow "GetForegroundWindow"
	#cfunc  GetWindowThreadProcessId "GetWindowThreadProcessId" int,var
	#func   AttachThreadInput "AttachThreadInput" int,int,int
	#func   SetForegroundWindow "SetForegroundWindow" int

	;***** pdftool.dllのロード (pdftoolini) *****
	; ***** (自動実行) *****
	#deffunc pdftoolini
	pdll=LoadLibrary("pdftool.dll") : if pdll==0 : return -1

	;▼LoadPDF関数のアドレス取得
	funcname="LoadPDF" : _LoadPDF=GetProcAddress(pdll,funcname)
	if _LoadPDF==0 : return -1
	;▼FreePDF関数のアドレス取得
	funcname="FreePDF" : _FreePDF=GetProcAddress(pdll,funcname)
	if _FreePDF==0 : return -1
	;▼GetPDFPageCount関数のアドレス取得
	funcname="GetPDFPageCount" : _GetPDFPageCount=GetProcAddress(pdll,funcname)
	if _GetPDFPageCount==0 : return -1
	;▼GetPDFVersion関数のアドレス取得
	funcname="GetPDFVersion" : _GetPDFVersion=GetProcAddress(pdll,funcname)
	if _GetPDFVersion==0 : return -1
	;▼GetPDFText関数のアドレス取得
	funcname="GetPDFText" : _GetPDFText=GetProcAddress(pdll,funcname)
	if _GetPDFText==0 : return -1
	;▼GetPDFTextEx関数のアドレス取得
	funcname="GetPDFTextEx" : _GetPDFTextEx=GetProcAddress(pdll,funcname)
	if _GetPDFTextEx==0 : return -1
	;▼GetPDFBookMark関数のアドレス取得
	funcname="GetPDFBookMark" : _GetPDFBookMark=GetProcAddress(pdll,funcname)
	if _GetPDFBookMark==0 : return -1
	;▼WritePDFText関数のアドレス取得
	funcname="WritePDFText" : _WritePDFText=GetProcAddress(pdll,funcname)
	if _WritePDFText==0 : return -1
	;▼WritePDFImage関数のアドレス取得
	funcname="WritePDFImage" : _WritePDFImage=GetProcAddress(pdll,funcname)
	if _WritePDFImage==0 : return -1
	;▼CombinePDF関数のアドレス取得
	funcname="CombinePDF" : _CombinePDF=GetProcAddress(pdll,funcname)
	if _CombinePDF==0 : return -1
	;▼CombinePDFEx関数のアドレス取得
	funcname="CombinePDFEx" : _CombinePDFEx=GetProcAddress(pdll,funcname)
	if _CombinePDFEx==0 : return -1
	;▼CutPDF関数のアドレス取得
	funcname="CutPDF" : _CutPDF=GetProcAddress(pdll,funcname)
	if _CutPDF==0 : return -1
	;▼RotatePDF関数のアドレス取得
	funcname="RotatePDF" : _RotatePDF=GetProcAddress(pdll,funcname)
	if _RotatePDF==0 : return -1
	;▼DeletePDF関数のアドレス取得
	funcname="DeletePDF" : _DeletePDF=GetProcAddress(pdll,funcname)
	if _DeletePDF==0 : return -1
	;▼GetPDFInfo関数のアドレス取得
	funcname="GetPDFInfo" : _GetPDFInfo=GetProcAddress(pdll,funcname)
	if _GetPDFInfo==0 : return -1
	;▼WritePDFInfo関数のアドレス取得
	funcname="WritePDFInfo" : _WritePDFInfo=GetProcAddress(pdll,funcname)
	if _WritePDFInfo==0 : return -1
	;▼PDFファイルの情報構造体 取得用 (合計 : 3120byte)
	sdim GETPDFINFOHEADER,3120
	return 0

	;***** PDFファイルのローディング *****
	#defcfunc pdfload str prm1
	sdim sFile,260 : sFile=prm1 : if strlen(sFile)==0 : return -1
	prm=varptr(sFile) : hpdf=callfunc(prm,_LoadPDF,1)
	return hpdf

	;***** PDFファイルハンドルの解放 *****
	#deffunc freepdf
	return callfunc(hpdf,_FreePDF,1)

	;***** PDFファイルハンドルの解放 (ハンドル指定) *****
	#deffunc freepdf2 int prm1
	prm=prm1
	return callfunc(prm,_FreePDF,1)

	;***** PDFページ数の取得 *****
	#defcfunc getpdfpagecount
	return callfunc(hpdf,_GetPDFPageCount,1)

	;***** PDF Versionの取得 (整数値) *****
	#defcfunc grtpdfversion str prm1
	sdim sFile,260 : sFile=prm1 : if strlen(sFile)==0 : return -1
	prm=varptr(sFile)
	return callfunc(prm,_GetPDFVersion,1)

	;***** PDFファイルのしおり情報を取得 *****
	#defcfunc getpdfbookmark str prm1,int prm2
	sdim sFile,260 : sFile=prm1 : if strlen(sFile)==0 : return -1
	flag=prm2 : if (flag<0)|(flag>1) : flag=0
	prm=hpdf,varptr(sFile),flag
	return callfunc(prm,_GetPDFBookMark,3)

	;***** PDFファイルをテキストファイルに変換 *****
	#defcfunc getpdftext str prm1,str prm2
	sdim sFile1,260 : sFile1=prm1 : if strlen(sFile1)==0 : return -1
	sdim sFile2,260 : sFile2=prm2 : if strlen(sFile2)==0 : return -1
	prm=varptr(sFile1),varptr(sFile2)
	return callfunc(prm,_GetPDFText,2)

	;***** PDFファイルをテキストファイルに変換 (拡張版) *****
	#defcfunc getpdftextex int prm1,int prm2,str prm3,int prm4
	StartPos=prm1 : if StartPos<1 : StartPos=1
	EndPos  =prm2 : pg=getpdfpagecount()
	if EndPos<1   : EndPos=1
	if EndPos>pg  : EndPos=pg
	sdim sFile,260: sFile=prm3 : if strlen(sFile)==0 : return -1
	flag=prm4 : if (flag<0)|(flag>1) : flag=0
	prm=hpdf,StartPos,EndPos,varptr(sFile),hwnd,flag
	ret=callfunc(prm,_GetPDFTextEx,6)
	;***** HSP Window Active化 *****
	ThreadId1=GetWindowThreadProcessId(GetForegroundWindow(),PID)
	ThreadId2=GetCurrentThreadId()
	AttachThreadInput ThreadId2,ThreadId1,1
	SetForegroundWindow hwnd
	AttachThreadInput ThreadId2,ThreadId1,0
	return ret

	;***** PDFファイルの文章情報(構造体にセット)を取得 *****
	#defcfunc getpdfstrinfo
	prm=hpdf,varptr(GETPDFINFOHEADER)
	return callfunc(prm,_GetPDFInfo,2)

	;***** PDFファイルの文章情報を取得 *****
	#deffunc getpdfinfo int nMode
	mref ref,65
	null="" : lstrcpy varptr(ref),varptr(null) : sdim s,512
	if nMode=0 : memcpy s,GETPDFINFOHEADER,512,0,   0  : ref=s  ;タイトル (PDFTitle)
	if nMode=1 : memcpy s,GETPDFINFOHEADER,512,0, 513  : ref=s  ;サブタイトル(PDFSubject)
	if nMode=2 : memcpy s,GETPDFINFOHEADER,512,0,1026  : ref=s  ;作成者(PDFAuthor)
	if nMode=3 : memcpy s,GETPDFINFOHEADER,512,0,1539  : ref=s  ;キーワード(PDFKeywords)
	if nMode=4 : memcpy s,GETPDFINFOHEADER,512,0,2052  : ref=s  ;作成(PDFCreator)
	if nMode=5 : memcpy s,GETPDFINFOHEADER,512,0,2565  : ref=s  ;PDF変換(PDFProducer)
	if nMode=6 : memcpy s,GETPDFINFOHEADER, 20,0,3078  : ref=s  ;作成日時(PDFCreationDate)
	if nMode=7 : memcpy s,GETPDFINFOHEADER, 20,0,3099  : ref=s  ;更新日時(PDFModDate)
	return 0

	;***** PDFファイルの文章情報を設定 ( 未作成 : 利用不可 ) *****
	#deffunc putpdfinfo str prm1,int nMode,str prm3
	;PDFファイルの文章情報構造体 (設定用)
	dim SETPDFINFOHEADER,8
	;pStruct=varptr(SETPDFINFOHEADER)
	sdim sInfo,512 : sInfo=prm1 : if strlen(sInfo)==0 : return -1
	sdim sFile,260 : sFile=prm3 : if strlen(sFile)==0 : return -1

	;※色々、試したけど意図した通りに設定できない

	SETPDFINFOHEADER(nMode)=varptr(sInfo)

	prm=hpdf,varptr(SETPDFINFOHEADER),varptr(sFile)
	return callfunc(prm,_WritePDFInfo,3)

	;***** テキストファイルをPDFに変換 *****
	#defcfunc writepdftext str prm1,str prm2
	sdim sInp,260 : sInp=prm1 : if strlen(sInp)==0 : return -1
	sdim sOut,260 : sOut=prm2 : if strlen(sOut)==0 : return -1
	prm=varptr(sInp),varptr(sOut)
	return callfunc(prm,_WritePDFText,2)

	;***** ビットマップファイルをPDFに変換 ( 利用不可 ) *****
	#defcfunc writepdfimage str prm1,str prm2
	sdim sInp,260 : sInp=prm1 : if strlen(sInp)==0 : return -1
	sdim sOut,260 : sOut=prm2 : if strlen(sOut)==0 : return -1

	;※関数ポインタの取得は成功しているのに何故か変換に失敗する?

	prm=varptr(sInp),varptr(sOut)
	return callfunc(prm,_WritePDFImage,2)

	;***** PDFファイルを結合 *****
	#defcfunc combinepdf int prm1,int prm2,str prm3
	if prm1==0 : return -1  ;pdfloadで取得したハンドル-(元ファイル)
	if prm2==0 : return -1  ;pdfloadで取得したハンドル-(結合ファイル)
	sdim sOut,260 : sOut=prm3 : if strlen(sOut)==0 : return -1
	prm=prm1,prm2,varptr(sOut): ret=callfunc(prm,_CombinePDF,3)
	freepdf2@ prm1 : freepdf2@ prm2
	return ret

	;***** PDFファイルを結合 (拡張版) *****
	#defcfunc combinepdfex str prm1,str prm2,int prm3
	sdim sInp,260 : sInp=prm1 : if strlen(sInp)==0 : return -1
	sdim sOut,260 : sOut=prm2 : if strlen(sOut)==0 : return -1
	flag=prm3 : if (flag<0)|(flag>1) : flag=0
	prm=varptr(sInp),varptr(sOut),hwnd,flag
	return callfunc(prm,_CombinePDFEx,4)

	;***** PDFファイルから指定されたページを抽出 *****
	#defcfunc cutpdf int prm1,int prm2,str prm3
	sdim sOut,260 : sOut=prm3 : if strlen(sOut)==0 : return -1
	if prm1<1 : return -1
	if prm2<1 : return -1
	prm=hpdf,prm1,prm2,varptr(sOut)
	return callfunc(prm,_CutPDF,4)

	;***** PDFファイルの指定されたページを回転 *****
	#defcfunc rotatepdf int prm1,int prm2,str prm3,int prm4
	sdim sOut,260 : sOut=prm3 : if strlen(sOut)==0 : return -1
	if prm1<1 : return -1
	if prm2<1 : return -1
	Rotate=prm4 : if (Rotate<1)|(Rotate>3) : Rotate=1
	prm=hpdf,prm1,prm2,varptr(sOut),Rotate
	return callfunc(prm,_RotatePDF,5)

	;***** PDFファイルから指定されたページを削除 *****
	#defcfunc deletepdf int prm1,int prm2,str prm3
	sdim sOut,260 : sOut=prm3 : if strlen(sOut)==0 : return -1
	if prm1<1 : return -1
	if prm2<1 : return -1
	prm=hpdf,prm1,prm2,varptr(sOut)
	return callfunc(prm,_DeletePDF,4)

	;***** ライブラリの開放 *****
	#deffunc freelib
	if hpdf!0 { freepdf : FreeLibrary pdll : return }
	FreeLibrary pdll
	return
	#global
	;▼pdftool.dll ローディング (pdftool.dllのハンドルおよび関数取得)
	pdftoolini : if stat==-1 { dialog "関数ポインタの取得に失敗しました。",0 : stop }
	#endif
	#endif


	;***** PDFページ数の取得 (sample01.hsp) *****
	#include "pdfmod.as"

	;▼pdfload() 関数の p1に調査するPDFファイル名を指定する
	if pdfload("test.pdf")==0 { dialog "ハンドルの取得に失敗しました。" : stop }

	;▼PDFのページ数を調べる
	mes "ページ数 : "+getpdfpagecount()

	;▼PDFファイルのハンドルを解放
	freepdf

	;▼ライブラリの解放
	freelib
	stop

	;***** PDFファイルのバージョンを取得 (sample02.hsp) *****
	#include "pdfmod.as"

	;▼PDF1.0〜PDF1.6のバージョンを調べる
	version=grtpdfversion("test.pdf")
	version=wpeek(version,0)
	majorversion = version / 10
	minorversion = version \ 10
	mes "version = "+majorversion+"."+minorversion

	;▼ライブラリの解放
	freelib
	stop

	;***** PDFファイルの文章情報を取得 (sample03.hsp) *****
	#include "pdfmod.as"

	if pdfload("tutorial.pdf")==0 { dialog "ハンドルの取得に失敗しました。" : stop }
	;▼GETPDFINFOHEADER構造体に文章情報を取得
	if getpdfstrinfo()==0 { dialog "文章情報の取得に失敗しました。",0 : stop }

	;▼GETPDFINFOHEADER構造体から文章情報を読み出す(取得)

	sdim midash,12,8
	midash    = "タイトル","サブタイトル","作成者","キーワード"
	midash(4) = "作成","PDF変換","作成日時","更新日時"
	pos 10,20 : count=0
	repeat 8
		getpdfinfo(cnt) 
		space="" : ls=strlen(midash(count)) : gosub *adjspc
		mes midash(cnt)+space+" : "+refstr
		count++
	loop

	;▼PDFファイルのハンドルを解放
	freepdf

	;▼ライブラリの解放
	freelib
	stop

;▼スペース調整
*adjspc
	sp=12-ls : repeat sp : space+=" " : loop
return

	;***** PDFファイルからしおり情報を取得 (sample04.hsp) *****
	#include "pdfmod.as"

	if pdfload("test.pdf")==0 { dialog "ハンドルの取得に失敗しました。" : stop }

	;▼getpdfbookmark() 関数の p1にしおり情報を保存する保存先のファイル名を指定する
	;▼getpdfbookmark() 関数の p2にCSV形式で保存するかどうかのフラグを指定する (1:する)(0 : しない)

	if getpdfbookmark("しおり.txt",0)==-2 { dialog "しおり情報がありません。",0 }

	;▼PDFファイルのハンドルを解放
	freepdf

	;▼ライブラリの解放
	freelib
	stop

	;***** PDFファイルをテキストファイルに変換 (sample05.hsp) *****
	#include "pdfmod.as"

	;▼getpdftext() 関数の p1に変換元PDFファイル、p2に変換後のテキストファイル名を指定する

	if getpdftext("test.pdf","test.txt")==1 {
		mes "ファイルの変換に成功しました。"
	} else { mes "ファイルの変換に失敗しました。" }

	;▼ライブラリの解放
	freelib
	stop

	;***** PDFファイルをテキストファイルに変換 [ 拡張版 ] (sample06.hsp) *****
	#include "pdfmod.as"

	if pdfload("test.pdf")==0 { dialog "ハンドルの取得に失敗しました。" : stop }

	;▼getpdftextex() 関数の p1に読み込みを開始するページ番号
	;▼getpdftextex() 関数の p2に読み込みを終了するページ番号 (サンプルでは最終ページ番号)
	;▼getpdftextex() 関数の p3にページごとに区切り線をいれるかどうかのフラグを指定する (1:入れる)(0 : 入れない)

	if getpdftextex(1,getpdfpagecount(),"test.txt",0)==1 {
		mes "ファイルの変換に成功しました。"
	} else { mes "ファイルの変換に失敗しました。" }

	;▼PDFファイルのハンドルを解放
	freepdf

	;▼ライブラリの解放
	freelib
	stop

	;***** テキストファイルをPDFに変換 (sample07.hsp) *****
	#include "pdfmod.as"

	;▼writepdftext() 関数の p1に変換元テキストファイル名を指定する
	;▼writepdftext() 関数の p2に変換後PDFファイル名を指定する

	if writepdftext("test.txt","test.pdf")==1 {
		mes "ファイルの変換に成功しました。"
	} else { mes "ファイルの変換に失敗しました。" }

	;▼ライブラリの解放
	freelib
	stop

	;***** PDFファイルを結合 (sample08.hsp) *****
	#include "pdfmod.as"

	;▼pdfload() 関数の p1に結合対象ファイル名1を指定する
	pdfhwnd1=pdfload("test1.pdf")
	if stat==-1 : dialog "入力ファイル1がありません。",0 : stop
	;▼pdfload() 関数の p1に結合対象ファイル名2を指定する
	pdfhwnd2=pdfload("test2.pdf")
	if stat==-1 : dialog "入力ファイル2がありません。",0 : stop

	;▼combinepdf() 関数の p1,p2 に結合ファイルハンドルを指定する
	;▼combinepdf() 関数の p3 に結合後の出力ファイル名を指定する

	if combinepdf(pdfhwnd1,pdfhwnd2,"test3.pdf") == 1 {
		mes "ファイルの結合に成功しました。"
	} else { mes "ファイルの結合に失敗しました。" }

	;▼ライブラリの解放
	freelib
	stop

	;***** PDFファイルを結合 [ 拡張版 ] (sample09.hsp) *****
	#include "pdfmod.as"

	;**********************************************************
	; 複数のPDFファイルを結合する。結合対象ファイル名を
	; テキストファイルでリストを作成しておく。
	; 例 : (pdflist.txt) - 必ずフルパスで指定しておくこと。
	; C:\test1.pdf
	; C:\test2.pdf
	; C:\pdf\test3.pdf
	;**********************************************************

	;▼combinepdfex() 関数の p1に結合ファイルリストテキストファイル名を指定する
	;▼combinepdfex() 関数の p2に結合後の出力ファイル名を指定する
	;▼combinepdfex() 関数の p3にしおりを作成するかどうかのフラグを指定する (1:作成)(0 : しない)

	if combinepdfex("pdflist.txt","test.pdf",0)==1 {
		mes "ファイルの結合に成功しました。"
	} else { mes "ファイルの結合に失敗しました。" }

	;▼ライブラリの解放
	freelib
	stop

	;***** PDFファイルから指定されたページを抽出 (sample10.hsp) *****
	#include "pdfmod.as"

	if pdfload("test.pdf")==0 { dialog "ハンドルの取得に失敗しました。" : stop }

	;▼cutpdf() 関数の p1に抽出開始ページ番号を指定する
	;▼cutpdf() 関数の p2に抽出終了ページ番号を指定する
	;▼cutpdf() 関数の p3に抽出対象PDFファイル名を指定する

	if cutpdf(1,2,"test1.pdf")==1 {
		mes "ページの抽出に成功しました。"
	} else { mes "ページの抽出に失敗しました。" }

	;▼PDFファイルのハンドルを解放
	freepdf

	;▼ライブラリの解放
	freelib
	stop

	;***** PDFファイルの指定されたページを回転 (sample11.hsp) *****
	#include "pdfmod.as"

	if pdfload("test.pdf")==0 { dialog "ハンドルの取得に失敗しました。" : stop }

	;▼rotatepdf() 関数の p1に回転開始ページ番号を指定する
	;▼rotatepdf() 関数の p2に回転終了ページ番号を指定する
	;▼rotatepdf() 関数の p3に回転後の出力PDFファイル名を指定する
	;▼rotatepdf() 関数の p4に回転角度番号 (1)右90度(2)左90度(3)180度 を指定する

	if rotatepdf(1,2,"test1.pdf",1)==1 {
		mes "ページの回転に成功しました。"
	} else { mes "ページの回転に失敗しました。" }

	;▼PDFファイルのハンドルを解放
	freepdf

	;▼ライブラリの解放
	freelib
	stop

	;***** PDFファイルから指定されたページを削除 (sample12.hsp) *****
	#include "pdfmod.as"

	if pdfload("test.pdf")==0 { dialog "ハンドルの取得に失敗しました。" : stop }

	;▼deletepdf() 関数の p1に削除開始ページ番号を指定する
	;▼deletepdf() 関数の p2に削除終了ページ番号を指定する
	;▼deletepdf() 関数の p3に削除後の出力PDFファイル名を指定する

	if deletepdf(1,2,"test1.pdf")==1 {
		mes "ページの削除に成功しました。"
	} else { mes "ページの削除に失敗しました。" }

	;▼PDFファイルのハンドルを解放
	freepdf

	;▼ライブラリの解放
	freelib
	stop
      外部dll呼出しモジュール簡易リファレンス (付録)     

 プラグイン編で紹介している外部dll呼び出しモジュールのリファレンスです。 モジュールで必要となる外部dllの入手方法や、 モジュール内の各命令や関数の引数等に について解説しています。実際の利用におけるサンプルについては、上記のプラグイン編の解説や サンプルスクリプト中のコメントを参照して下さい。

 外部dllの入手先
   ・Susie 32bitプラグインの入手先  :  作者 : 竹村嘉人 (たけちん)氏

     ▼▼▼▼ 作者のHPよりダウンロードできます。 ▼▼▼▼
     SusieとPlug-Inの最新版
     http://www.digitalpad.co.jp/~takechin/

     ※Susie 32bitプラグインは、各方面でいろんな作者の方が開発しています。対応す
       る画像形式のものをダウンロードして下さい。

   ・Unlha32.dll, UnZip32.dllの入手先

     ▼▼▼▼ 統合アーカイバプロジェクトよりダウンロードできます。 ▼▼▼▼
     http://www.csdinc.co.jp/archiver/main-j2.html

   ・Grade32.dll の入手先  :  作者 : hiso氏
     Grade32.Lib/Dll  Ver 1.24a  (グラデーションDLL)

     ▼▼▼▼ ベクターよりダウンロードできます。 ▼▼▼▼
     http://www.vector.co.jp/soft/dl/win95/prog/se073202.html

   ・bmp2rgn.dll の入手先  :  作者 : つつみきくお氏
     リージョンデータをビットマップから生成 Ver1.1

     ▼▼▼▼ ベクターよりダウンロードできます。 ▼▼▼▼
     http://www.vector.co.jp/soft/win95/prog/se122274.html

   ・VBMP3.dll の入手先  :  作者 : ミケ氏
     VisualBasic用 MP3操作DLL Ver 1.615

     ▼▼▼▼ ベクターよりダウンロードできます。 ▼▼▼▼
     http://www.vector.co.jp/soft/dl/win95/prog/se111971.html

   ・(*2)nkf32.dll の入手先  :  作者 : 海人氏
     Network Kanji Filter V1.5kの32bit DLL移植版

     ▼▼▼▼ ベクターよりダウンロードできます。 ▼▼▼▼
     http://www.vector.co.jp/authors/VA002133/

     (*2)nkf32.dllと同名の他の作者のバージョンも存在するようですが、オリジナル版
        と呼ばれている海人氏作のものを対象としています。

   ・gogo.dll の入手先  :  作者 : PEN@MarineCat, へるみ氏

     ▼▼▼▼ 作者のHPよりダウンロードできます。 ▼▼▼▼
     http://www.marinecat.net/free/windows/mct_free.htm

   ・jre32.dll の入手先  :  作者 : 山田和夫氏

     ▼▼▼▼ 作者のHPよりダウンロードできます。 ▼▼▼▼
     http://www.yamada-labs.com/software/yama.htm

   ・pdftool.dll の入手先  :  作者 : PAPY氏

     ▼▼▼▼ 作者のHPよりダウンロードできます。 ▼▼▼▼
     http://homepage3.nifty.com/e-papy/pdftool/index.html 
      モジュールリファレンス     

Susie 32bitプラグイン呼び出しモジュールリファレンス
 ・ Susie 32bit Plug-in dllのロード                            (spidllload)
 ・ 画像ファイルの読み込み描画                                 (spipicload)
 ・ Plug-inに関する情報を取得                                  (getdllinfo)
 ・ 画像ファイルに関する情報を取得                             (getpictinfo)
 ・ プラグインの解放                                           (spidllfree)
利用する場合は、Susie対応のプラグイン ( xxxxxxx.spi ) をHSPのフォルダ ( hsp3.exe のある場所 ) にコピーして下さい。
exeを作成した場合は、 exeと同じ場所に置いて利用して下さい。
また、スクリプトの先頭に #include "exspidll.as" と記述してモジュールをインクルードして下さい。
各命令(関数)の書式は、下記の通りです。
   ●命令  : Susie 32bit Plug-in dllのロード  (spidllload)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : spidllload dllName
              dllName (str) : 文字列 or 文字列型変数 (利用するプラグイン名)

   (使用例)
   spidllload "ifjpeg.spi"


   ●命令  : 画像ファイルの読み込み描画  (spipicload)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : spipicload ImgFname,nPosx,nPosy
              ImgFname (str) : 文字列 or 文字列型変数 (画像ファイル名)
              nPosx (int)    : 画像の表示位置 X座標
              nPosy (int)    : 画像の表示位置 y座標

   (使用例)
   ;※最初にspidllload命令を実行してから、spipicload命令を発行して下さい。
   spipicload "hspttl3.jpg",100,100


   ●命令  : 画像ファイルの読み込み描画  (spipicload)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : spipicload ImgFname,nPosx,nPosy
              ImgFname (str) : 文字列 or 文字列型変数 (画像ファイル名)
              ImgMode (int) 0〜1(0) : イメージ読み込み・展開モード (0 : ファイル、1 : メモリイメージ)
              nPosx (int)    : 画像の表示位置 X座標 (省略時 : x=0)
              nPosy (int)    : 画像の表示位置 y座標 (省略時 : y=0)

   (使用例)
   ;※最初にspidllload命令を実行してから、spipicload命令を発行して下さい。
   spipicload "hspttl3.jpg",0,100,100


   ●命令  : Plug-inに関する情報を取得  (getdllinfo)
     戻り値: 成功 stat=取得文字列情報のバイト数
     書式  : spipicload ImgFname,nPosx,nPosy
              Value (var) : 取得用文字列型変数
              nMode (int) 0〜1(0) : 取得モード

             nMode :   内   容
           ------------------------------------------------
               0   : Plug-in APIバージョン
               1   : Plug-in名、バージョン及び copyright

   (使用例)
   ;※最初にspidllload命令を実行してから、getdllinfo命令を発行して下さい。
      getdllinfo String,1 : mes String


   ●命令  : 画像ファイルに関する情報を取得  (getpictinfo)
     戻り値: 成功 stat=取得文字列情報のバイト数
     書式  : spipicload ImgFname,nPosx,nPosy
              Value (array)  : 取得用数値型配列変数
              ImgFname (str) : 文字列 or 文字列型変数 (画像ファイル名)

             PICTUREINFO構造体からの取得情報
          ----------------------------------------------------
             1.PICTUREINFO(0)    ;画像を展開する位置 (left)
             2.PICTUREINFO(1)    ;画像を展開する位置 (top)
             3.PICTUREINFO(2)    ;画像の幅(pixel)
             4.PICTUREINFO(3)    ;画像の高さ(pixel)
             5.PICTUREINFO(4)    ;画素の水平方向密度
             6.PICTUREINFO(5)    ;画素の垂直方向密度
             7.PICTUREINFO(6)    ;1画素当たりのbit数
             8.PICTUREINFO(7)    ;画像内のテキスト情報

   (使用例)
   ;※最初にspidllload命令を実行してから、getpictinfo命令を発行して下さい。
   dim info,8 : getpictinfo info,"hspttl3.jpg"
   mes "画像を展開する位置 (left) : "+info(0)  
   mes "画像を展開する位置 (top)  : "+info(1)
   mes "画像の幅(pixel)           : "+info(2)
   mes "画像の高さ(pixel)         : "+info(3)
   mes "画素の水平方向密度        : "+info(4)
   mes "画素の垂直方向密度        : "+info(5)
   mes "1画素当たりのbit数       : "+info(6)
   mes "画像内のテキスト情報      : "+info(7)


   ●命令  : プラグインの解放  (spidllfree)
     戻り値: 成功 stat=0
     書式  : spidllfree

   (使用例)
   spidllfree


Unlha32.dll呼び出しモジュールリファレンス
 ・ 環境設定ダイアログを表示                                 (UnlhaConfigDialog)
 ・ 書庫ファイルのチエック                                   (acheckarc)
 ・ 書庫内の格納ファイル数取得                               (lhagetfcount)
 ・ 各種書庫の操作                                           (unlhaset)
 ・ Unlha32.dllのバージョンを取得                            (unlhagetver)
利用する場合は、Unlha32.dllをWindowsのシステムフォルダにコピーして下さい。
また、スクリプトの先頭に #include "exunlha.as"と記述してモジュールをインクルードして下さい。
各命令(関数)の書式は、下記の通りです。
   ●命令  : 環境設定ダイアログを表示  (lhacfgdlg)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : lhacfgdlg

   (使用例)
   lhacfgdlg


   ●命令  : 書庫ファイルのチエック  (acheckarc)
     戻り値: 成功 stat=1, 失敗 stat=-1, エラーは、1以外の数値
     書式  : acheckarc sfile
              sfile (str) : 文字列 or 文字列型変数 (LHAファイル名)

   (使用例)
   acheckarc "sample.lzh"


   ●命令  : 書庫内の格納ファイル数取得  (lhagetfcount)
     戻り値: 成功 stat=書庫内の格納ファイル数, 失敗 stat=-1
     書式  : lhagetfcount sfile
              sfile (str) : 文字列 or 文字列型変数 (LHAファイル名)

   (使用例)
   lhagetfcount "sample.lzh" : num=stat


   ●命令  : 各種書庫の操作  (unlhaset)
     戻り値: 成功 stat=エラーステータスコード, 失敗 stat=-1
     書式  : unlhaset cmd,buf
              cmd (str) : 書庫操作コマンド文字列 or 文字列型変数
              buf (var) : 書庫操作用バッファ

   (使用例)
   unlhaset "e sample.lzh",buf


   ●命令  : Unlha32.dllのバージョンを取得  (unlhagetver)
     戻り値: 成功 stat=バージョンコード
     書式  : unlhagetver

   (使用例)
   unlhagetver : mes stat


Unzip32.dll呼び出しモジュールリファレンス
 ・ 環境設定ダイアログを表示                                 (zipcfgdlg)
 ・ 書庫ファイルのチエック                                   (zipckarc)
 ・ 書庫内の格納ファイル数取得                               (zipgetfcount)
 ・ 各種書庫の操作                                           (zipset)
 ・ Unzip32.dllのバージョンを取得                            (unzipgetver)
利用する場合は、Unzip32.dllをWindowsのシステムフォルダにコピーして下さい。
また、スクリプトの先頭に #include "exunzip.as"と記述してモジュールをインクルードして下さい。
各命令(関数)の書式は、下記の通りです。
   ●命令  : 環境設定ダイアログを表示  (zipcfgdlg)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : zipcfgdlg

   (使用例)
   zipcfgdlg


   ●命令  : 書庫ファイルのチエック  (zipckarc)
     戻り値: 成功 stat=1, 失敗 stat=-1, エラーは、1以外の数値
     書式  : zipckarc sfile
              sfile (str) : 文字列 or 文字列型変数 (ZIPファイル名)

   (使用例)
   zipckarc "sample.zip"


   ●命令  : 書庫内の格納ファイル数取得  (zipgetfcount)
     戻り値: 成功 stat=書庫内の格納ファイル数, 失敗 stat=-1
     書式  : zipgetfcount sfile
              sfile (str) : 文字列 or 文字列型変数 (LHAファイル名)

   (使用例)
   zipgetfcount "sample.zip" : num=stat


   ●命令  : 各種書庫の操作  (zipset)
     戻り値: 成功 stat=エラーステータスコード, 失敗 stat=-1
     書式  :zipset cmd,buf
             cmd (str) : 書庫操作コマンド文字列 or 文字列型変数
             buf (var) : 書庫操作用バッファ

   (使用例)
   zipset "-x sample.zip",buf


   ●命令  : Unzip32.dllのバージョンを取得  (unzipgetver)
     戻り値: 成功 stat=バージョンコード
     書式  : unzipgetver

   (使用例)
   unzipgetver : mes stat


Grade32.dll呼び出しモジュールリファレンス
 ・ 円弧の描画                                                    (grarc)
 ・ Bmp FileをLoadしてパターンとして扇型を埋め尽くす              (grbmppie)
 ・ Bmp FileをLoadして枠を埋め尽くす。または枠の大きさに拡大縮小  (grbmprect)
 ・ Boxの描画                                                     (grbox)
 ・ BoxのDiagonalグラデーション (左上 -> 右下)                    (grfillrectdl)
 ・ BoxのDiagonalグラデーション (右上 -> 左下)                    (grfillrectdr)
 ・ BoxのHorizontalグラデーションを作成                           (grfillrecth)
 ・ BoxのVerticalグラデーションを作成                             (grfillrectv)
 ・ 三角形内部の塗り潰し                                          (grfilltri)
 ・ グラデーションカラーの取得                                    (grgetcolor)
 ・ Lineの描画                                                    (grline)
 ・ 扇型のグラデーション                                          (grpie)
 ・ グラデーションするStartColorとEndColorを設定                  (grsetcolor)
利用する場合は、Grade32.dll をHSPのフォルダ ( hsp3.exe のある場所 ) にコピーして下さい。
exeを作成した場合は、 exeと同じ場所に置いて利用して下さい。
また、スクリプトの先頭に #include "exgradedll.as" と記述してモジュールをインクルードして下さい。
各命令の書式は、下記の通りです。
   ●命令  : 円弧の描画 (grarc)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grarc param,ArcMode
              param   (array) : パラメータ数値型配列変数
              ArcMode (int)   : 0 or 0以外 円弧のモード

           param
         ---------------------------------------------------
           left       = p1(0) (int) : RECT左上
           top        = p1(1) (int) : RECT左上
           right      = p1(2) (int) : RECT右下
           bottom     = p1(3) (int) : RECT右下
           StartAngle = p1(4) (int) : Start角度 (0〜360゚)
           WidthAngle = p1(5) (int) : 角度幅    (0〜360゚)
           PenStyle   = p1(6) (int) : ペンスタイル (0〜8)

                        PenStyle          値
                     ---------------------------------------------------
                        PS_SOLID       :   0 実線
                        PS_DASH        :   1 破線
                        PS_DOT         :   2 点線
                        PS_DASHDOT     :   3 一点鎖線
                        PS_DASHDOTDOT  :   4 二点鎖線
                        PS_NULL        :   5 不可視
                        PS_INSIDEFRAME :   6 実線
                        PS_USERSTYLE   :   7 ユーザー
                        PS_ALTERNATE   :   8 ピクセルを1つおきに描画

           PenWidth   = p1(7)  (int) : ペンの太さ   (0〜)
           PenColor   = p1(8)  (COLORREF) : ペンの色 RGB(r,g,b)で指定

           ArcMode 0     : 円弧
           ArcMode 0以外 : 中心点から始点及び終点へ直線描画

   (使用例)
   StartAngle=0
   WidthAngle=360
   PenStyle=0
   PenWidth=0
   PenColor=RGB(0,200,200)
   p=50,50,300,300,StartAngle,WidthAngle,PenStyle,PenWidth,PenColor
   grarc param,1


   ●命令  : Bmp FileをLoadしてパターンとして扇型を埋め尽くす (grbmppie)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grbmppie param,sFile
              param   (array) : パラメータ数値型配列変数
              sFile   (str)   : bmp file名文字列 or 文字列型変数

           param
         --------------------------------------------------
           left       = p1(0) (int) : RECT左上
           top        = p1(1) (int) : RECT左上
           right      = p1(2) (int) : RECT右下
           bottom     = p1(3) (int) : RECT右下
           StartAngle = p1(4) (int) : Start角度 (0〜360゚)
           WidthAngle = p1(5) (int) : 角度幅    (0〜360゚)

   (使用例)
   StartAngle=0
   WidthAngle=360
   prm=50,50,300,300,StartAngle,WidthAngle
   grarc param,"羽毛.bmp"


   ●命令  : Bmp FileをLoadして枠を埋め尽くす。または枠の大きさに拡大縮小 (grbmprect)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grbmprect param,sFile,nMode
              param (array) : パラメータ数値型配列変数
              sFile (str)   : bmp file名文字列 or 文字列型変数
              nMode (int)   : 2〜4(2) モード

           param
         ------------------------------------
           left   = p1(0) (int) : RECT左上
           top    = p1(1) (int) : RECT左上
           right  = p1(2) (int) : RECT右下
           bottom = p1(3) (int) : RECT右下

       nMode
         2 :  GD_BMP_ADJUST :  調整(枠のサイズに拡大縮小する)
         3 :  GD_BMP_FILL   :  オリジナルサイズで埋め尽くす
         4 :  GD_BMP_NORMAL :  オリジナル表示、埋め尽くさない(right, bottom は無視)

   (使用例)
   sdim bmfile,24,6
   bmfile.0 ="../data/back01.bmp"
   bmfile.1 ="../data/back02.bmp"
   bmfile.2 ="../data/back03.bmp"
   bmfile.3 ="../data/back04.bmp"
   bmfile.4 ="../data/back05.bmp"
   bmfile.5 ="../data/back06.bmp"
   mx=0 : my=0
   repeat 6
       prm=403,53+mx,597,82+my,PenStyle,PenWidth,PenColor,BrushColor
       grbox prm,1
       prm=405,55+mx,595,80+my
       grbmprect prm,Startdir+bmfile.cnt,3
       mx+=40 : my+=40
   loop


   ●命令  : Boxの描画 (grbox)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grbox param,BoxMode
              param   (array) : パラメータ数値型配列変数
              BoxMode (int)   : 0〜1(0) ボックスモード

           param
         --------------------------------------------------
           left     = p1(0) (int) : RECT左上
           top      = p1(1) (int) : RECT左上
           right    = p1(2) (int) : RECT右下
           bottom   = p1(3) (int) : RECT右下
           PenStyle = p1(4) (int) : ペンスタイル (0〜8)

                        PenStyle           値
                     --------------------------------------
                        PS_SOLID       :   0 実線
                        PS_DASH        :   1 破線
                        PS_DOT         :   2 点線
                        PS_DASHDOT     :   3 一点鎖線
                        PS_DASHDOTDOT  :   4 二点鎖線
                        PS_NULL        :   5 不可視
                        PS_INSIDEFRAME :   6 実線
                        PS_USERSTYLE   :   7 ユーザー
                        PS_ALTERNATE   :   8 ピクセルを1つおきに描画

           PenWidth   = p1(5)  (int) : ペンの太さ   (0〜)
           PenColor   = p1(6)  (COLORREF) : ペンの色   RGB(r,g,b)で指定
           BrushColor = p1(7)  (COLORREF) : ブラシの色 RGB(r,g,b)で指定

           0   GD_FILL    : 内部を塗り潰す
           1   GD_NOTFILL : 内部を塗り潰さない(NULL_BRUSHする)

   (使用例)
   PenStyle=0
   PenWidth=2
   PenColor=RGB(255,255,255)
   BrushColor=RGB(255,0,0)
   prm=390,40,610,300,PenStyle,PenWidth,PenColor,BrushColor
   grbox prm,1


   ●命令  : BoxのDiagonalグラデーション (左上 -> 右下) (grfillrectdl)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grfillrectdl param,MidPosition
              param     (array) : パラメータ数値型配列変数
              MidPosition (int) : MidColor の位置 (0〜100%)

           param
         -----------------------------------------------------
           left       = p1(0) (int)      : RECT左上
           top        = p1(1) (int)      : RECT左上
           right      = p1(2) (int)      : RECT右下
           bottom     = p1(3) (int)      : RECT右下
           StartColor = p1(4) (COLORREF) : RGB(r,g,b)で指定
           MidColor   = p1(5) (COLORREF) : RGB(r,g,b)で指定
           EndColor   = p1(6) (COLORREF) : RGB(r,g,b)で指定

   (使用例)
   StartColor=RGB(0,0,255)
   MidColor=RGB(0,255,255)
   EndColor=RGB(0,0,255)
   prm=0,0,ginfo(10),ginfo(11),StartColor,MidColor,EndColor
   grfillrectdl prm,50


   ●命令  : BoxのDiagonalグラデーション (右上 -> 左下) (grfillrectdr)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grfillrectdr param,MidPosition
              param     (array) : パラメータ数値型配列変数
              MidPosition (int) : MidColor の位置 (0〜100%)

           param
         -------------------------------------------------------
           left       = p1(0) (int)      : RECT左上
           top        = p1(1) (int)      : RECT左上
           right      = p1(2) (int)      : RECT右下
           bottom     = p1(3) (int)      : RECT右下
           StartColor = p1(4) (COLORREF) : RGB(r,g,b)で指定
           MidColor   = p1(5) (COLORREF) : RGB(r,g,b)で指定
           EndColor   = p1(6) (COLORREF) : RGB(r,g,b)で指定

   (使用例)
   StartColor=RGB(0,0,255)
   MidColor=RGB(0,255,255)
   EndColor=RGB(0,0,255)
   prm=0,0,ginfo(10),ginfo(11),StartColor,MidColor,EndColor
   grfillrectdr prm,50


   ●命令  : BoxのHorizontalグラデーションを作成 (grfillrecth)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grfillrecth param,MidPosition
              param     (array) : パラメータ数値型配列変数
              MidPosition (int) : MidColor の位置 (0〜100%)

           param
         -------------------------------------------------------
           left       = p1(0) (int)      : RECT左上
           top        = p1(1) (int)      : RECT左上
           right      = p1(2) (int)      : RECT右下
           bottom     = p1(3) (int)      : RECT右下
           StartColor = p1(4) (COLORREF) : RGB(r,g,b)で指定
           MidColor   = p1(5) (COLORREF) : RGB(r,g,b)で指定
           EndColor   = p1(6) (COLORREF) : RGB(r,g,b)で指定

   (使用例)
   StartColor=RGB(0,0,255)
   MidColor=RGB(0,255,255)
   EndColor=RGB(0,0,255)
   prm=0,0,ginfo(10),ginfo(11),StartColor,MidColor,EndColor
   grfillrecth prm,50


   ●命令  : BoxのVerticalグラデーションを作成 (grfillrectv)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grfillrectv param,MidPosition
              param     (array) : パラメータ数値型配列変数
              MidPosition (int) : MidColor の位置 (0〜100%)

           param
         -------------------------------------------------------
           left       = p1(0) (int)      : RECT左上
           top        = p1(1) (int)      : RECT左上
           right      = p1(2) (int)      : RECT右下
           bottom     = p1(3) (int)      : RECT右下
           StartColor = p1(4) (COLORREF) : RGB(r,g,b)で指定
           MidColor   = p1(5) (COLORREF) : RGB(r,g,b)で指定
           EndColor   = p1(6) (COLORREF) : RGB(r,g,b)で指定

   (使用例)
   StartColor=RGB(0,0,255)
   MidColor=RGB(0,255,255)
   EndColor=RGB(0,0,255)
   prm=0,0,ginfo(10),ginfo(11),StartColor,MidColor,EndColor
   grfillrectv prm,50


   ●命令  : 三角形内部の塗り潰し (grfilltri)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grfilltri param,col
              param     (array) : パラメータ数値型配列変数
              col       (int)   : 塗り潰し色 (COLORREF) : RGB(r,g,b)で指定

           param  (各x,y座標を3点指定する)
         --------------------------------
           頂点座標 x1 = p1(0) (int)
           頂点座標 y1 = p1(1) (int)
           頂点座標 x2 = p1(2) (int)
           頂点座標 y2 = p1(3) (int)
           頂点座標 x3 = p1(4) (int)
           頂点座標 y3 = p1(5) (int)

   (使用例)
   col=RGB(0,128,255)
   prm=495,150,400,200,590,200
   grfilltri prm,col


   ●命令  : グラデーションカラーの取得 (grgetcolor)
     戻り値: 成功 stat=0, 失敗 stat=1, 取得値=rval,gval,bval
     書式  : grgetcolor count
              count (int) : StartColor からの距離 (width 内)

   (使用例)
   StartColor =RGB(255,255,0)
   EndColor   =RGB(0,255,255)
   repeat 4
       grsetcolor StartColor,EndColor,mwidth(cnt)
       grgetcolor count(cnt)
       BrushColor(cnt)=RGB(ginfo(16),ginfo(17),ginfo(18))
   loop


   ●命令  : Lineの描画 (grline)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grline param
              param   (array) : パラメータ数値型配列変数

           param
         -------------------------------------------------
           left     = p1(0) (int) : RECT左上
           top      = p1(1) (int) : RECT左上
           right    = p1(2) (int) : RECT右下
           bottom   = p1(3) (int) : RECT右下
           PenStyle = p1(4) (int) : ペンスタイル (0〜8)

                        PenStyle           値
                     ---------------------------------------------------
                        PS_SOLID       :   0 実線
                        PS_DASH        :   1 破線
                        PS_DOT         :   2 点線
                        PS_DASHDOT     :   3 一点鎖線
                        PS_DASHDOTDOT  :   4 二点鎖線
                        PS_NULL        :   5 不可視
                        PS_INSIDEFRAME :   6 実線
                        PS_USERSTYLE   :   7 ユーザー
                        PS_ALTERNATE   :   8 ピクセルを1つおきに描画

           PenWidth   = p1(5)  (int) : ペンの太さ   (0〜)
           PenColor   = p1(6)  (COLORREF) : ペンの色 RGB(r,g,b)で指定

   (使用例)
   PenWidth=1
   PenColor=RGB(0,0,0)
   my=0
   repeat 5
       PenStyle=cnt
       prm=100,100+my,300,100+my,PenStyle,PenWidth,PenColor
       grline prm
       my+=10
   loop


   ●命令  : 扇型のグラデーション (grpie)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grpie param,MidPosition
              param     (array) : パラメータ数値型配列変数
              MidPosition (int) : MidColor の位置 (0〜100%)

           param
         -----------------------------------------------------------
           left       = p1(0) (int)      : RECT左上
           top        = p1(1) (int)      : RECT左上
           right      = p1(2) (int)      : RECT右下
           bottom     = p1(3) (int)      : RECT右下
           StartAngle = p1(4) (int)      : Start角度 (0〜360゚)
           WidthAngle = p1(5) (int)      : 角度幅    (0〜360゚)
           StartColor = p1(6) (COLORREF) : RGB(r,g,b)で指定
           MidColor   = p1(7) (COLORREF) : RGB(r,g,b)で指定
           EndColor   = p1(8) (COLORREF) : RGB(r,g,b)で指定

   (使用例)
   StartAngle=0
   WidthAngle=360
   StartColor=RGB(255,130,0)
   MidColor=RGB(0,255,64)
   EndColor=RGB(0,60,255)
   prm=50,350,150,450,StartAngle,WidthAngle,StartColor,MidColor,EndColor
   grpie prm,50


   ●命令  : グラデーションするStartColorとEndColorを設定 (grsetcolor)
     戻り値: 成功 stat=0, 失敗 stat=1
     書式  : grsetcolor StartColor,EndColor,nWidth
              StartColor (COLORREF) : RGB(r,g,b)で指定
              EndColor   (COLORREF) : RGB(r,g,b)で指定
              nWidth     (int)      : グラデーション幅

   (使用例)
   StartColor =RGB(255,255,0)
   EndColor   =RGB(0,255,255)
   repeat 4
       grsetcolor StartColor,EndColor,mwidth(cnt)
       grgetcolor count(cnt)
       BrushColor(cnt)=RGB(ginfo(16),ginfo(17),ginfo(18))
   loop


bmp2rgn.dll呼び出しモジュールリファレンス
 ・ bmp2rgn.dllによる不定形リージョンの作成                       (setrgnwin)
利用する場合は、bmp2rgn.dll をHSPのフォルダ ( hsp3.exe のある場所 ) にコピーして下さい。
exeを作成した場合は、 exeと同じ場所に置いて利用して下さい。
また、スクリプトの先頭に #include "exbmp2rgn.as" と記述してモジュールをインクルードして下さい。
各命令の書式は、下記の通りです。
   ●命令  : bmp2rgn.dllによる不定形リージョンの作成  (setrgnwin)
     戻り値: 成功 stat=リージョンの作成ウィンドウID, 失敗 stat=-1
     書式  : setrgnwin sFile (str) : 画像 (bmp file)名

   (使用例)
   setrgnwin "rgnsample.bmp"


VBMP3.dll呼び出しモジュールリファレンス
 ・ 左右音量バランスの配分設定                           (SetVolume)
 ・ totalSecをmm:ssの形式に変換                          (MakeMSTime)
 ・ VBMP3.dllイニシャライズ                              (initmp3)
 ・ 演奏開始                                             (playmp3)
 ・ 演奏終了                                             (closemp3)
 ・ 音量ボリュームの設定                                 (setvolmp3)
 ・ 音量ボリュームの取得                                 (getvolmp3)
 ・ 演奏の停止                                           (stopmp3)
 ・ 演奏の一時停止                                       (pausemp3)
 ・ 左右バランスの設定                                   (setbalmp3)
 ・ 左右バランスの取得                                   (getbalmp3)
 ・ MPEG Audioファイルのタグ情報を設定                   (settagmp3)
 ・ MPEG Audioファイルのタグ情報を取得                   (gettagmp3)
 ・ MPEG Audioファイルのヘッダ情報を取得                 (getmpegheadmp3)
 ・ 歌詞ファイルから歌詞を取得                           (getlyricsmp3)
 ・ VBMP3の各設定値取得                                  (getvbmp3opt)
 ・ デコードエンジンの各設定値設定                       (setDecodeOption)
 ・ デコードエンジンの各設定値取得                       (getDecodeOption)
 ・ 再生状態と再生時間の取得                             (getstamp3)
 ・ エンコード対象ファイルのオープン                     (encodeOpen)
 ・ エンコード開始                                       (encodeStart)
 ・ エンコード中止                                       (encodeStop)
 ・ 再生しながらWAVEファイルデコード                     (playdecwave)
 ・ WAVEファイルデコード                                 (decodewave)
 ・ 標準MP3ファイルを RIFF WAVE形式ファイルに変換        (changewave)
 ・ 標準MP3ファイルを RIFF MP3形式ファイルに変換         (changermp)
 ・ RIFF形式ファイルを標準MP3ファイルに変換              (changemp3)
 ・ ファイル内のマックヘッダ除去                         (cutmacbin)
 ・ 演奏位置の移動                                       (seekmp3)
 ・ ファイルの種類取得                                   (getmpFileType)
 ・ VBMP3.dllのバージョン取得                            (getmp3dllver)
 ・ グラフィックイコライザの設定                         (setEqualizer)
 ・ オシロスコープ(WAVE成分)の取得                       (getWavemp3)
利用する場合は、VBMP3.dllをHSPのフォルダ ( hsp3.exe のある場所 ) にコピーして下さい。
exeを作成した場合は、 exeと同じ場所に置いて利用して下さい。
また、スクリプトの先頭に #include "exmp3dll.as" と記述してモジュールをインクルードして下さい。
各命令の書式は、下記の通りです。
   ●命令  : 左右音量バランスの配分設定  (SetVolume)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : SetVolume (void)

   (使用例)
   SetVolume


   ●命令  : totalSecをmm:ssの形式に変換  (MakeMSTime)
     戻り値: 成功 statは常に0, Value=mm:ss形式に編集した文字列
     書式  : MakeMSTime Value,totalSec
              Value    (var) : 文字列型変数
              totalSec (int) : InputInfo構造体のtotalSec

   (使用例)
   MakeMSTime s,totalSec


   ●命令  : VBMP3.dllイニシャライズ  (initmp3)
     戻り値: 成功 statは常に0, Value=mm:ss形式に編集した文字列
     書式  : initmp3 Mainvol,Leftvol,Rightvol
              Mainvol  (int) : 0〜100(50)  メインボリューム音量
              Leftvol  (int) : 0〜100(100) 左バランス
              Rightvol (int) : 0〜100(100) 右バランス

   (使用例)
   initmp3 50,100,100


   ●命令  : 演奏開始  (playmp3)
     戻り値: 成功 stat=0, Value=初期取得InputInfo構造体情報 ,失敗 stat=-1
                   refstr= mm:ss形式のtotalSec(秒)
     書式  : playmp3 Value,sFile
              Value  (array) : 数値型配列変数
              sFile  (str)   : 演奏ファイル名文字列 or 文字列型変数

   (使用例)
   playmp3 n,"sample.mp3"


   ●命令  : 演奏終了  (closemp3)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : closemp3 (void)

   (使用例)
   closemp3


   ●命令  : 音量ボリュームの設定  (setvolmp3)
     戻り値: 成功 statは常に0
     書式  : setvolmp3 Mainvol
              Mainvol  (int) : 0〜100(0) 音量ボリューム設定値

   (使用例)
   setvolmp3 50


   ●命令  : 音量ボリュームの取得  (getvolmp3)
     戻り値: 成功 statは常に0
     書式  : getvolmp3 Value
              Value  (var) : 数値型変数

   (使用例)
   getvolmp3 n : mes "現在の音量ボリューム値 = "+n


   ●命令  : 演奏の停止  (stopmp3)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : stopmp3 (void)

   (使用例)
   stopmp3


   ●命令  : 演奏の一時停止  (pausemp3)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : pausemp3 (void)

   (使用例)
   pausemp3


   ●命令  : 左右バランスの設定  (setbalmp3)
     戻り値: 成功 statは常に0
     書式  : setbalmp3 blance
              blance  (int) : 0〜200(0) 左右バランス設定値 (左右振分け)

   (使用例)
   setbalmp3 80


   ●命令  : 左右バランスの取得  (getbalmp3)
     戻り値: 成功 statは常に0
     書式  : getbalmp3 Value
              Value  (var) : 数値型変数

   (使用例)
   getbalmp3 n : mes "現在の左右バランス値 = "+n


   ●命令  : MPEG Audioファイルのタグ情報を設定  (settagmp3)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : settagmp3 Value,nMode,sFile,tagSet,tagAdd
              Value  (var) : 文字列型変数 (設定情報)
              nMode  (int) : 0〜6(0) 設定する情報番号
              sFile  (str) : MPEG Audioファイル名文字列 or 文字列型変数
              tagSet (int) : 0〜1(0) タグセット (省略可)
              tagAdd (int) : 0〜1(0) タグ追加   (省略可)

        ---------------------------------------------------------------------
          tagSet   = 1 : DLL 内部の TAG 情報書き換え(再生中ファイル時指定)
                     0 :     〃             変更無し
          tagAdd   = 1 : ID3Tag v1 が存在しないとき追加する
                     0 :              〃           追加しない
 
          nMode  :  設定する情報
        --------------------------------
            0    :  曲名
            1    :  アーティスト名
            2    :  アルバム名
            3    :  リリース年号
            4    :  コメント文字列
            5    :  ジャンル
            6    :  ジャンル名称

   (使用例)
   s="なんちゃって音楽"
   settagmp3 s,0,"sample.mp3",0,0


   ●命令  : MPEG Audioファイルのタグ情報を取得  (gettagmp3)
     戻り値: 成功 stat=0, 失敗 stat=-1, refstr=取得したタグ情報
     書式  : gettagmp3 nMode
              nMode  (int) : 0〜6(0) 取得する情報番号

          nMode  :  取得する情報
        --------------------------------
            0    :  曲名
            1    :  アーティスト名
            2    :  アルバム名
            3    :  リリース年号
            4    :  コメント文字列
            5    :  ジャンル
            6    :  ジャンル名称

   (使用例)
   gettagmp3 0 : mes refstr


   ●命令  : MPEG Audioファイルのヘッダ情報を取得  (getmpegheadmp3)
     戻り値: 成功 stat=0, 失敗 stat=-1, refstr=取得したヘッダ情報
     書式  : getmpegheadmp3 nMode
              nMode  (int) : 0〜13(0) 取得する情報番号

          nMode  :  取得する情報
        --------------------------------
            0    :  MPEGのバージョン
            1    :  MPEGのレイヤ
            2    :  エラー保護
            3    :  個人情報
            4    :  チャンネルモード
            5    :  著作権
            6    :  オリジナル
            7    :  エンフォシス
            8    :  出力チャンネル数
            9    :  ビットレート
           10    :  サンプリングレート
           11    :  ファイルサイズ
           12    :  フレーム数
           13    :  総合演奏時間

   (使用例)
   getmpegheadmp3 0 : mes refstr


   ●命令  : 歌詞ファイルから歌詞を取得  (getlyricsmp3)
     戻り値: 成功 stat=0, 失敗 stat=-1, refstr=取得した歌詞 (nMode=0はミリ秒)
     書式  : getlyricsmp3 nMode
              nMode  (int) : 0〜5(0) 取得する情報番号

          nMode  :  取得する情報
        --------------------------------
            0    :  ミリ秒
            1    :  次々行の歌詞
            2    :  次行の歌詞
            3    :  カレント行の歌詞
            4    :  前行の歌詞
            5    :  前々行の歌詞

   (使用例)
   getlyricsmp3 0 : mes refstr


   ●命令  : VBMP3の各設定値取得  (getvbmp3opt)
     戻り値: 成功 statは常に0,成功した場合は、Valueの数値型配列変数に設定値が返る
     書式  : getvbmp3opt Value
              Value  (array) : 数値型配列変数

          取得させる設定値 (Value)
        -------------------------------
          Value(0) : inputSize
          Value(1) : inputTrigger
          Value(2) : outputSize
          Value(3) : outputTrigger
          Value(4) : sleepTime

   (使用例)
   getvbmp3opt n
   mes "inputSize = "+n(0)
   mes "inputTrigger = "+n(1)
   mes "outputSize = "+n(2)
   mes "outputTrigger = "+n(3)
   mes "sleepTime = "+n(4)


   ●命令  : デコードエンジンの各設定値設定 (setDecodeOption)
     戻り値: 成功 statは常に0
     書式  : setDecodeOption Value
              Value  (array) : 数値型配列変数 (設定値設定)

          設定値 (Value)
        ------------------------------------------------------------------------------
          reduction - Value(0) : ダウンサンプリング (0:1/1 1:1/2 2:1/4 [Default = 0])
                                 データのサンプリングレートを下げて読み込み
          convert   - Value(1) : 出力チャンネル (0:ステレオ 1:モノラル[Default = 0])
                                 読み込むチャンネル数を設定
                                 モノラルの場合読み込むデータ量が1/2となる。
          freqLimit - Value(2) : 出力サンプリングレート[Default = 24000]
                                 出力時のサンプリングレートを設定

   (使用例)
   setDecodeOption 0,0,24000


   ●命令  : デコードエンジンの各設定値取得 (getDecodeOption)
     戻り値: 成功 statは常に0
     書式  : getDecodeOption Value
              Value  (array) : 数値型配列変数 (設定値取得)

          取得させる設定値 (Value)
        ----------------------------
          Value(0) : reduction
          Value(1) : convert
          Value(2) : freqLimit

   (使用例)
   getDecodeOption n


   ●命令  : 再生状態と再生時間の取得 (getstamp3)
     戻り値: 成功 stat=status,refstr=mm:ss形式のtotalSec
     書式  : getstamp3 Value
              Value  (var) : 数値型変数 (再生時間の取得)

   (使用例)
   getstamp3 TSec : mes "再生状態 = "+stat+" 再生時間 = "+refstr+" "+TSec


   ●命令  : エンコード対象ファイルのオープン (encodeOpen)
     戻り値: 成功 stat=0, 失敗 stat=-1, Value=WAVE_FORM構造体の設定値
     書式  : encodeOpen Value,sFile
              Value  (array) : 数値型配列変数 (設定値取得)
              sFile  (str)   : 文字列 or 文字列型変数

          WAVE_FORM構造体の設定値
        ----------------------------------------------------
          Value(0) : チャンネル数
          Value(1) : 1サンプルあたりのビット数 (8 or 16)
          Value(2) : サンプリングレート(44100 等)
          Value(3) : データサイズ

   (使用例)
   encodeOpen n,"sample.mp3"


   ●命令  : エンコード開始 (encodeStart)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : encodeOpen sFile
              sFile  (str) : 文字列 or 文字列型変数 (出力ファイル名)

   (使用例)
   encodeStart "sample.mp3"


   ●命令  : エンコード中止 (encodeStop)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : encodeStop (void)

   (使用例)
   encodeStop


   ●命令  : 再生しながらWAVEファイルデコード (playdecwave)
     戻り値: 成功 stat=0, 失敗 stat=-1, Value=InputInfo構造体からの取得情報
                   refstr=失敗,成功の文字列情報
     書式  : playdecwave Value,oFile,sFile
              Value  (array) : InputInfo構造体からの取得情報
              oFile  (str)   : 文字列 or 文字列型変数 (出力するWAVEファイル名)
              sFile  (str)   : 文字列 or 文字列型変数 (入力mp3ファイル名)

          InputInfo構造体からの取得情報
        ---------------------------------
          Value(0) : channel
          Value(1) : bitrate
          Value(2) : samplingRate
          Value(3) : totalSec

   (使用例)
   playdecwave n,"sample.wav","sample.mp3"


   ●命令  : WAVEファイルデコード (decodewave)
     戻り値: 成功 stat=0, 失敗 stat=-1, Value=InputInfo構造体からの取得情報
                   refstr=失敗,成功の文字列情報
     書式  : decodewave Value,oFile,sFile
              Value  (array) : InputInfo構造体からの取得情報
              oFile  (str)   : 文字列 or 文字列型変数 (出力するWAVEファイル名)
              sFile  (str)   : 文字列 or 文字列型変数 (入力mp3ファイル名)

          InputInfo構造体からの取得情報
        ---------------------------------
          Value(0) : channel
          Value(1) : bitrate
          Value(2) : samplingRate
          Value(3) : totalSec

   (使用例)
   decodewave n,"sample.wav","sample.mp3"


   ●命令  : 標準MP3ファイルを RIFF WAVE形式ファイルに変換 (changewave)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : changewave sFile
              sFile  (str) : 文字列 or 文字列型変数 (変換対象ファイル名)

   (使用例)
   changewave "sample.mp3"  ;MP3 -> WAV


   ●命令  : 標準MP3ファイルを RIFF MP3形式ファイルに変換 (changermp)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : changermp sFile
              sFile  (str) : 文字列 or 文字列型変数 (変換対象ファイル名)

   (使用例)
   changermp "sample.mp3"  ;MP3 -> RMP


   ●命令  : RIFF形式ファイルを標準MP3ファイルに変換 (changemp3)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : changemp3 sFile
              sFile  (str) : 文字列 or 文字列型変数 (変換対象ファイル名)

   (使用例)
   changemp3 "sample.rmp"  ;RIFFファイル -> MP3


   ●命令  : ファイル内のマックヘッダ除去 (cutmacbin)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : cutmacbin sFile
              sFile  (str) : 文字列 or 文字列型変数 (変換対象ファイル名)

   (使用例)
   cutmacbin "sample.mp3"  ;マックヘッダ除去


   ●命令  : 演奏位置の移動 (seekmp3)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : seekmp3 seektime
              seektime  (int)  : シークタイム (秒)

   (使用例)
   seekmp3 10  ;再生位置を移動


   ●命令  : ファイルの種類取得 (getmpFileType)
     戻り値: 成功 stat=取得種類の合計値, 失敗 stat=-1
     書式  : getmpFileType sFile
              sFile  (str) : 文字列 or 文字列型変数 (ファイル名)

          取得種類の合計値 (stat)
        --------------------------------------------
            0  :  標準MP3ファイル
            1  :  Riff WAVE形式
            2  :  Riff MP3形式
            4  :  ID3 v2 Tag 有り
            8  :  Macヘッダ有り
           16  :  ID3 v1 Tag 有り
           32  :  LYRICS3 v2.00 有り
           64  :  標準WAVEファイル(リアルPCM)

   (使用例)
   getmpFileType "sample.mp3" : mes "ファイル種類 : "+stat


   ●命令  : VBMP3.dllのバージョン取得 (getmp3dllver)
     戻り値: 成功 stat=バージョン番号 * 100 (1.00 なら 100)
     書式  : getmp3dllver (void)

   (使用例)
   getmp3dllver : mes "VBMP3.dll Ver = "+stat


   ●命令  : グラフィックイコライザの設定 (setEqualizer)
     戻り値: 成功 statは常に0
     書式  : setEqualizer Equalizer
              Equalizer (array) : 各周波数帯のデシベル指定(-120[-12dB]〜120[12dB])

   (使用例)
   dim Equalizer,10
   Equalizer(0) = -60    ;60Hz
   Equalizer(1) = -40    ;170Hz
   Equalizer(2) = -20    ;310Hz
   Equalizer(3) = -10    ;600Hz
   Equalizer(4) =  -5    ;1KHz
   Equalizer(5) =   5    ;3KHz
   Equalizer(6) =  10    ;6KHz
   Equalizer(7) =  20    ;12KHz
   Equalizer(8) =  40    ;14KHz
   Equalizer(9) =  60    ;16KHz
   setEqualizer Equalizer


   ●命令  : オシロスコープ(WAVE成分)の取得 (getWavemp3)
     戻り値: 成功 statは常に0
     書式  : getWavemp3 lchWav,rchWav
              lchWav  (var) : 0〜255 左チャンネルのWAVE成分 (-100〜100)
              rchWav  (var) : 0〜255 右チャンネルのWAVE成分 (-100〜100)

   (使用例)
   dim lchWav,256 : dim rchWav,256
   getWavemp3 lchWav,rchWav


   ■VBMP3.dllで使用する主な構造体 (ご参考)

	InputInfo構造体            : 272
		szTrackName            : 128   曲名
		szArtistName           : 128   アーティスト名
		channels               :   4   チャンネル数
		bitrate                :   4   ビットレート(kbit/s)
		samplingRate           :   4   サンプルレート(Hz)
		totalSec               :   4   演奏時間

	TAG_INFO構造体             : 652
		szTrackName            : 128   曲名
		szArtistName           : 128   アーティスト名
		szAlbumName            : 128   アルバム名
		szYear                 :   8   リリース年号
		szComment              : 128   コメント文字列
		genre                  :   4   ジャンル
		szGanreName            : 128   ジャンル名称

	TAG_INFO_11構造体          : 656
		szTrackName            : 128   曲名
		szArtistName           : 128   アーティスト名
		szAlbumName            : 128   アルバム名
		szYear                 :   8   リリース年号
		szComment              : 128   コメント文字列
		genre                  :   4   ジャンル
		szGanreName            : 128   ジャンル名称
		trackNo                :   4   トラック番号 (-1 = v1.0)

	MPEG_INFO構造体            :  56(14*4)
		version                :   4   MPEGのバージョン
		layer                  :   4   MPEGのレイヤ
		crcDisable             :   4   エラー保護
		extension              :   4   個人情報
		mode                   :   4   チャンネルモード
		copyright              :   4   著作権
		original               :   4   オリジナル
		emphasis               :   4   エンフォシス
		channels               :   4   出力チャンネル数
		bitRate                :   4   ビットレート
		samplingRate           :   4   サンプリングレート
		fileSize               :   4   ファイルサイズ
		flames                 :   4   フレーム数
		totalSec               :   4   総合演奏時間

	DEC_OPTION構造体           :  12(4*3)
		reduction              :   4   サンプリング 0:1/1 1:1/2 2:1/4  (Default = 0)
		convert                :   4   チャンネル 0:ステレオ 1:モノラル(Default = 0)
		freqLimit              :   4   周波数

	VBMP3_OPTION構造体         :  20(4*5)
		inputSize              :   4   入力バッファサイズ(フレームサイズに対する倍率)
		inputTrigger           :   4   次回読み込みまでの入力バッファサイズ(inputSize以下)
		outputSize             :   4   出力バッファサイズ(フレームサイズに対する倍率)
		outputTrigger          :   4   次回読み込みまでの出力バッファサイズ(outputSize以下)
		sleepTime              :   4   入力直後のスリープ時間(ミリ秒)

	WAVE_FORM構造体            :  16(4*4)
		channels               :   4   チャンネル数
		bitsPerSample          :   4   ビット数/1サンプル
		samplingRate           :   4   サンプリングレート
		dataSize               :   4   ファイルサイズ

	LIST_INFO構造体            :1792
		INAM                   : 128   曲名
		IART                   : 128   アーティスト名
		IPRD                   : 128   製品名
		ICMT                   : 128   コメント文字列
		ICRD                   : 128   リリース年号
		IGNR                   : 128   ジャンル名
		ICOP                   : 128   著作権
		IENG                   : 128   エンジニア
		ISRC                   : 128   ソース
		ISFT                   : 128   ソフトウェア
		IKEY                   : 128   キーワード
		ITCH                   : 128   技術者
		ICMS                   : 128   コミッション
		ILYC                   : 128   歌詞

	LIST_INFO_EX2構造体        :2176
		INAM                   : 128   曲名
		IART                   : 128   アーティスト名
		IPRD                   : 128   製品名
		ICMT                   : 128   コメント文字列
		ICRD                   : 128   リリース年号
		IGNR                   : 128   ジャンル名
		ICOP                   : 128   著作権
		IENG                   : 128   エンジニア
		ISRC                   : 128   ソース
		ISFT                   : 128   ソフトウェア
		IKEY                   : 128   キーワード
		ITCH                   : 128   技術者
		ICMS                   : 128   コミッション
		IMED                   : 128   中間
		ISBJ                   : 128   タイトル
		IMP3                   : 128   MP3情報
		ILYC                   : 128   歌詞

	LYRICS_INFO構造体          : 644
		sec                    :   4   ミリ秒
		LyricsNext2            : 128   次々行の歌詞
		LyricsNext1            : 128   次行の歌詞
		LyricsCurrent          : 128   カレント行の歌詞
		LyricsPrev1            : 128   前行の歌詞
		LyricsPrev2            : 128   前々行の歌詞

	LYRICS_INFO2構造体         :1040
		sec                    :   4   ミリ秒
		lineno                 :   4   行数
		point                  :   4   カレント行でのタグの位置
		length                 :   4   カレントタグの長さ(ミリ秒)
		LyricsNext2            : 128   次々行の歌詞
		LyricsNext1            : 128   次行の歌詞
		LyricsCurrent          : 128   カレントタグの歌詞
		LyricsCurrentBegin     : 128   カレントタグより前の歌詞
		LyricsCurrentLyrics    : 128   カレントタグまでの歌詞
		LyricsCurrentAll       : 128   カレント行の歌詞
		LyricsPrev1            : 128   前行の歌詞
		LyricsPrev2            : 128   前々行の歌詞

	(module独自)
	Volume_Inf構造体           :  12(4*3)
		Main                   :   4   主ボリューム
		Left                   :   4   左ボリューム
		Right                  :   4   右ボリューム


nkf32.dll呼び出しモジュールリファレンス
 ・ nkf32.dllバージョン(1.5k 1.03.32)を取得                 (getnkfver)
 ・ 漢字変換オプションの指定                                  (setnkfopt)
 ・ 漢字コード変換                                            (nkfconv)
 ・ 全角英数字・記号文字列を半角文字列に変換                   (ToHankakucnv)
 ・ 半角カタカナと一部の記号(「」ー等)を全角カタカナに変換     (ToZenkakuKanacnv)
 ・ メールのサブジェクト(タイトル)をMIME(Base64)に変換    (Encsubject)
利用する場合は、nkf32.dllをHSPのフォルダ ( hsp3.exe のある場所 ) にコピーして下さい。
exeを作成した場合は、 exeと同じ場所に置いて利用して下さい。
また、スクリプトの先頭に #include "exnkf32dll.as" と記述してモジュールをインクルードして下さい。
各命令の書式は、下記の通りです。
   ●命令  : nkf32.dllバージョン(1.5k 1.03.32)を取得  (getnkfver)
     戻り値: 成功 stat=0, Value=取得したバージョン文字列, 失敗 stat=-1
     書式  : getnkfver Value
              Value (var) : 文字列型変数

   (使用例)
   getnkfver s


   ●命令  : 漢字変換オプションの指定  (setnkfopt)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : setnkfopt optstr
              optstr (str) : オプション文字列 or 文字列型変数

   (使用例)
   setnkfopt "e"


   ●命令  : 漢字コード変換  (nkfconv)
     戻り値: 成功 stat=0, outstr=変換後の文字列, 失敗 stat=-1
     書式  : nkfconv outstr,basestr
              outstr  (var) : 文字列型変数
              basestr (str) : 変換元入力文字列 or 文字列型変数

   (使用例)
   setnkfopt "e"  ;SHIFT-JIS→EUCに変換
   basestr="1234567890"
   nkfconv outstr,basestr


   ●命令  : 全角英数字・記号文字列を半角文字列に変換  (ToHankakucnv)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : ToHankakucnv inoutstr
              inoutstr (var) : 文字列型変数

   (使用例)
   inoutstr="ABCD12345$#%&"
   ToHankakucnv inoutstr : mes inoutstr


   ●命令  : 半角カタカナと一部の記号(「」ー等)を全角カタカナに変換  (ToZenkakuKanacnv)
     戻り値: 成功 stat=0, outstr=変換後の文字列, 失敗 stat=-1
     書式  : ToZenkakuKanacnv outstr,basestr
              outstr  (var) : 文字列型変数
              basestr (str) : 変換元入力文字列 or 文字列型変数

   (使用例)
   basestr="アイウエオカキクケコ"
   ToZenkakuKanacnv outstr,basestr : mes outstr


   ●命令  : メールのサブジェクト(タイトル)をMIME(Base64)に変換  (Encsubject)
     戻り値: 成功 stat=0, outstr=変換後の文字列, 失敗 stat=-1
     書式  : Encsubject outstr,basestr
              outstr  (var) : 文字列型変数
              basestr (str) : 変換元入力文字列 or 文字列型変数

   (使用例)
   ※SHIFT-JISのメールタイトルの場合は、一旦、JISに変換後、実施のこと。
   basestr="メールのテスト"
   setnkfopt "j"  ;SHIFT-JIS→JISに変換
   Encsubject outstr,basestr : mes outstr


   ■指定できるオプション ( - : ハイフォン省略可能)

  指定できるオプションは、以下の通り。-mu のように続けることができる。

  -b  : バッファリング出力を行う。(デフォルト)
  -u  : 出力時に、バッファリングしない。
        rsh localhost | nkf -u というように使う。
  -t  : 何もしない。
  -j  : JISコードを出力する。(デフォルト)
  -e  : EUCコードを出力する。
  -s  : シフトJISコードを出力する。
  -i? : JIS漢字を指示するシーケンスとして ESC-'$'-?を使用する。
       (デフォルトは、ESC-'$'-'B')
  -o? : 1バイト英数文字セットを指示するシーケンスとして、ESC- '('-?を使用する。
        (デフォルトは、ESC-'('-'B')
  -r  : ROT13/47の変換をする。
  -v  : バージョンを表示する。
  -T  : テキストモードで出力する。(MS-DOS上でのみ効力を持つ)
  -m  : MIME を解読する。ISO-2022-JP(base64)とISO-8859-1(Q encode)のみを解読する。
        ISO-8859-1 (Latin-1) を解読する時は、 -lフラグも必要である。
      -l  :  0x80-0xfeのコードをISO-8859-1 (Latin-1)として扱う。
             JISコードアウトプットとの組合せみのみ有効。-s, -e, -xとは両立しない。
      -f? :  一行?文字になるように簡単な整形をおこなう。デフォルトは60文字である。
      -Z  :  X0208中の英数字と若干の記号をASCIIに変換する。
      -J -E -S -X -B : 期待される入力コードの性質を指定する。
         -J  : ISO-2022-JPを仮定する。
         -E  : 日本語EUC(AT&T)を仮定する。
         -S  : MS漢字を仮定する。X0201仮名も仮定される。
         -X  : MS漢字中にX0201仮名があると仮定する。
      -B  :  壊れた(Broken)JISコード。ESCがなくなったと仮定する。
      -x     通常おこなわれるX0201仮名->X0208の仮名変換をしないで、 X0201仮名
             を保存する。入力は、MS-Kanjiの1byte仮名、SO/SI、ESC-(-I, SSOを受け付ける。
             出力は、日本語EUC中ではSSO、JISでは ESC-'('-I を使う。


gogo.dll呼び出しマクロリファレンス
 ・ gogo.dllの初期化                                           (gogoinitwork)
 ・ エンコード入力ファイル名の設定                             (gogosetInpfile)
 ・ エンコード出力ファイル名の設定                             (gogosetOutfile)
 ・ エンコード条件の設定                                       (gogosetConfig)
 ・ エンコード条件の取得                                       (gogogetConfig)
 ・ 設定状態の確認                                             (gogodetConfug)
 ・ エンコードユニットの組合せを取得                           (gogogetUnistate)
 ・ バージョンコードの取得                                     (gogogetVersion)
 ・ 1フレームエンコード処理                                   (gogoprocFrame)
 ・ エンコード開放処理                                         (gogocloseCoder)
 ・ エンコードエンジンの終了                                   (gogoendCoder)
利用する場合は、gogo.dllをHSPのフォルダ ( hsp3.exe のある場所 ) にコピーして下さい。
exeを作成した場合は、 exeと同じ場所に置いて利用して下さい。
また、スクリプトの先頭に #include "exgogoenc.as" と記述してモジュールをインクルードして下さい。
各命令(関数)の書式は、下記の通りです。
   ●命令  : gogo.dllの初期化  (gogoinitwork)
     戻り値: 成功 stat=0 (ME_NOERR), 失敗 stat=12 (ME_NOFPU)
     書式  : gogoinitwork (void)

   (使用例)
    gogoinitwork : ret=stat
    if ret!= ME_NOERR { dialog "gogo.dllの初期化に失敗しました。" : stop }


   ●命令  : エンコード入力ファイル名の設定  (gogosetInpfile)
     戻り値: 成功 stat=0, 失敗 stat=0以外
     書式  : gogosetInpfile(sFile)
              sFile(str) : 文字列型変数 (エンコード入力ファイル名)

   (使用例)
    wavfile="sample.wav"
    gogosetInpfile(wavfile)


   ●命令  : エンコード出力ファイル名の設定  (gogosetOutfile)
     戻り値: 成功 stat=0, 失敗 stat=0以外
     書式  : gogosetOutfile(sFile)
              sFile(str) : 文字列型変数 (エンコード出力ファイル名)

   (使用例)
    mp3file="sample.mp3"
    gogosetOutfile(mp3file)


   ●命令  : エンコード条件の設定  (gogosetConfig)
     戻り値: 成功 stat=0 (ME_NOERR), 失敗 stat=11 (ME_PARAMERROR)
     書式  : gogosetConfig(p1,p2,p3)
              p1(int) : 項目名
              p2(int) : エンコード条件に対応したパラメータ
              p3(int) : エンコード条件に対応したパラメータ

   (使用例)
    ;▼ビットレートを 128 kbps に設定
    gogosetConfig(MC_BITRATE,128,0)
    ;▼ABR(平均ビットレート)エンコードに設定
    gogosetConfig(MC_ABR,0,0)
    ;▼エンコードモードをジョイントステレオに設定
    gogosetConfig(MC_ENCODEMODE,MC_MODE_JOINT,0)


   ●命令  : エンコード条件の取得  (gogogetConfig)
     戻り値: 成功 stat=0 (ME_NOERR), 失敗 stat=11 (ME_PARAMERROR)
     書式  : gogogetConfig(p1,p2)
              p1(int) : 項目名
              p2(int) : 取得した条件を格納する数値型変数

   (使用例)
    ;▼総フレーム数の取得
    gogogetConfig(MG_COUNT_FRAME,numFrame)


   ●命令  : 設定状態の確認  (gogodetConfug)
     戻り値: 成功 stat=0 (ME_NOERR)
              失敗
                   stat=10 (ME_INTERNALERROR)
                   stat=13 (ME_INFILE_NOFOUND)
                   stat=17 (ME_WAVETYPE_ERR)
                   stat=14 (ME_OUTFILE_NOFOUND)
                   stat=15 (ME_FREQERROR)
                   stat=16 (ME_BITRATEERROR)
     書式  : gogodetConfug

   (使用例)
    ;▼設定状態の確認 (確定)
    gogodetConfug : ret=stat


   ●命令  : エンコードユニットの組合せを取得  (gogogetUnistate)
     戻り値: 成功 stat=0 (ME_NOERR)
     書式  : gogogetUnistate(p1)
              p1(int) : 取組み合わせを取得する数値型変数

   (使用例)
    gogogetUnistate(value)


   ●命令  : バージョンコードの取得  (gogogetVersion)
     戻り値: 成功 stat=0 (ME_NOERR)
     書式  : gogogetVersion(p1,p2)
              p1(int) : バージョンコードを格納する数値型変数
              p2(str) : バージョンを示す文字列を格納する文字列型変数

   (使用例)
    vstr=""
    gogogetVersion(vc,vstr)
    mes "VersionCode="+vc+"  Version : "+vstr


   ●命令  : 1フレームエンコード処理  (gogoprocFrame)
     戻り値: 成功 stat=0 (ME_NOERR)
              失敗
                   stat=1  (ME_EMPTYSTREAM)
                   stat=10 (ME_INTERNALERROR)
                   stat=11 (ME_PARAMERROR)
                   stat=20 (ME_BADMODEORLAYER)
                   stat=21 (ME_NOMEMORY)
                   stat=22 (ME_CANNOT_SET_SCOPE)
                   stat=23 (ME_CANNOT_CREATE_THREAD)
                   stat=24 (ME_WRITEERROR)
     書式  : gogoprocFrame

   ※戻り値 stat=1 (ME_EMPTYSTREAM) が返ってくるまで、連続してこの関数を呼び出すこと。

   (使用例)
    ;▼設定状態の確認 (確定)
    gogodetConfug : ret=stat
    if ret==ME_NOERR {
        ;▼総フレーム数の取得
        gogogetConfig(MG_COUNT_FRAME,numFrame)
        repeat
            await
            gogoprocFrame : ret=stat
            num=""+cnt+"/"+numFrame
            if ret==ME_EMPTYSTREAM : break
        loop
    }
    dialog "変換が終了しました。",0,"確認"


   ●命令  : エンコード開放処理  (gogocloseCoder)
     戻り値: 成功 stat=0 (ME_NOERR)
     書式  : gogocloseCoder

   (使用例)
    gogocloseCoder


   ●命令  : エンコードエンジンの終了  (gogoendCoder)
     戻り値: 成功 stat=0 (ME_NOERR)
     書式  : gogoendCoder

   (使用例)
    gogoendCoder


jre32.dll呼び出しモジュールリファレンス
 ・ JRE2構造体の初期化                                         (initjre)
 ・ jre32.dllのバージョンを取得 (ファイルバージョン)           (getjrever)
 ・ コンパイル作業領域を初期化                                 (jreopen)
 ・ JRE2構造体の使用終了宣言                                   (jreclose)
 ・ エラー番号からエラーメッセージの文字列を取得               (getjreerrstr)
 ・ 検索パターンをコンパイルしJRE2構造体へデータを格納         (jrecomp)
 ・ JRE2構造体をもとに一行検索を行い、結果をJRE2構造体へ格納   (getmatchinfo)
 ・ JRE2構造体から情報を取得                                   (getstrucinfo)
利用する場合は、jre32.dllをHSPのフォルダ ( hsp3.exe のある場所 ) にコピーして下さい。
exeを作成した場合は、 exeと同じ場所に置いて利用して下さい。
また、スクリプトの先頭に #include "exjre32dll.as" と記述してモジュールをインクルードして下さい。
各命令(関数)の書式は、下記の通りです。
   ●命令  : JRE2構造体の初期化  (initjre)
     戻り値: 成功 statは常に0
     書式  : initjre (void)

   (使用例)
   ;▼jreopenで自動で呼ばれる
   initjre


   ●命令  : jre32.dllのバージョンを取得 (ファイルバージョン)  (getjrever)
     戻り値: 成功 stat=DLLのバージョンを0x100倍した値
     書式  : getjrever (void)

   (使用例)
   getjrever : mes stat


   ●命令  : コンパイル作業領域を初期化  (jreopen)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : jreopen (void)

   (使用例)
   ;▼戻り値のstatで初期化が成功したかどうかを必ずチエックして下さい。
   jreopen : if stat!0 : dialog "初期化に失敗",0,"確認" : jreclose : stop


   ●命令  : JRE2構造体の使用終了宣言  (jreclose)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : jreclose (void)

   (使用例)
   ;▼終了時は必ず発行すること。
   jreclose


   ●命令  : エラー番号からエラーメッセージの文字列を取得  (getjreerrstr)
     戻り値: 成功 stat=0, 失敗 stat=-1, refstr=日本語のエラーメッセージ
     書式  : getjreerrstr Errnum
              Errnum (int) : JRE2構造体のnErrorメンバで取得される番号

    エラーコード
  ------------------------------------------------------------------------------
    CantAllocate      1 : メモリの確保ができない。絶対的なメモリ不足。
    MemoryTooFew1     2 : メモリが足りない 1。
                          (実行時に決まるもの。メモリサイズの予測に失敗した)
    MemoryTooFew2     3 : メモリが足りない 2。
                          (DLL作成時に決まるもの)
    ReTooLong        10 : 正規表現が長すぎる。
    TooComplex       13 : もっと簡単な表現にして下さい。
                          このDLLの弱いパターンで見つけられない。
    MismatchBracket  20 : 括弧の対応が正しくない。
    InvalidChClass   21 : キャラクタクラスの内容が解釈できない。
                          殆どの場合範囲指定が正しくない。
    EscErr           24 : エスケープシーケンスが解釈できない。
    Unknown          31 : 何だか良くわからないエラー。
                          複合的な要因で発生するエラー。
    NoReString       32 : 検索パターンを指定して下さい。正規表現長が0バイト。
    IncorrectUsing   33 : パラメータがおかしい。DLLの不正な使用法。
    ReNotExist       34 : 検索する前にコンパイルして下さい。
    InternalErr      35 : DLLのバグを検出した。
                          これが発生したら作者に連絡して欲しい。
    UsrAbort         36 : ユーザー(アプリケーション)による中断。
    OldVersion       37 : 古い(解釈できない)バージョンの呼び出し手順を使用した。

   (使用例)
   getstrucinfo n,2
   getjreerrstr n : mes refstr


   ●命令  : 検索パターンをコンパイルしJRE2構造体へデータを格納  (jrecomp)
     戻り値: 成功 stat=0, 失敗 stat=-1
     書式  : jrecomp Patstr
              Patstr (str) : 検索パターン文字列 or 文字列型変数

   (使用例)
   ※HTMLタグを検索するパターン
   jrecomp "|<[^>]*>"


   ●命令  : JRE2構造体をもとに一行検索を行い、結果をJRE2構造体へ格納  (getmatchinfo)
     戻り値: 成功 stat=0, 失敗 stat=-1, 検索マッチした場合は、stat=0となる。
     書式  : getmatchinfo Targetstr,nStart
              Targetstr (str) : 検索対象文字列 or 文字列型変数
              nStart    (int) : 0〜(0) 検索開始位置

   (使用例)
   buf="abcdefg aaaa 12301456987 あいうえおかきくけこ"
   jrecomp "123"
   getmatchinfo buf,0


   ●命令  : JRE2構造体から情報を取得  (getstrucinfo)
     戻り値: 成功 stat=0, 失敗 stat=-1, Value=取得情報(数値)
     書式  : getstrucinfo Value,nMode
              Value (var) : 数値型変数
              nMode (int) : 0〜4(0) 取得情報番号

   (使用例)
   getstrucinfo n,3 : mes "Length = "+n


pdftool.dll呼び出しモジュールリファレンス
 ・ pdftool.dllのロード                                        (pdftoolini)
 ・ PDFファイルのローディング                                  (pdfload)
 ・ PDFファイルハンドルの解放                                  (freepdf)
 ・ PDFファイルハンドルの解放 (ハンドル指定)                   (freepdf2)
 ・ PDFページ数の取得                                          (getpdfpagecount)
 ・ PDF Versionの取得 (整数値)                                 (grtpdfversion)
 ・ PDFファイルのしおり情報を取得                              (getpdfbookmark)
 ・ PDFファイルをテキストファイルに変換                        (getpdftext)
 ・ PDFファイルをテキストファイルに変換 (拡張版)               (getpdftextex)
 ・ PDFファイルの文章情報(構造体にセット)を取得                (getpdfstrinfo)
 ・ PDFファイルの文章情報を取得                                (getpdfinfo)
 ・ テキストファイルをPDFに変換                                (writepdftext)
 ・ PDFファイルを結合                                          (combinepdf)
 ・ PDFファイルを結合 (拡張版)                                 (combinepdfex)
 ・ PDFファイルから指定されたページを抽出                      (cutpdf)
 ・ PDFファイルの指定されたページを回転                        (rotatepdf)
 ・ PDFファイルから指定されたページを削除                      (deletepdf)
 ・ ライブラリの開放                                           (freelib)
利用する場合は、pdftool.dllをHSPのフォルダ ( hsp3.exe のある場所 ) にコピーして下さい。
exeを作成した場合は、 exeと同じ場所に置いて利用して下さい。
また、スクリプトの先頭に #include "pdfmod.as" と記述してモジュールをインクルードして下さい。
  ( - pdftool.dllのAPI説明書より抜粋 - )
  Acrobat3.0-5.0(PDF1.2〜1.4形式)に対応
   ・Acrobat6/7(PDF1.5/1.6)には未対応
   ・PDF1.0-1.1形式はもはや存在しない古すぎるデータ?なので未確認
   ・暗号化されたファイルには未対応

各命令(関数)の書式は、下記の通りです。

   ●命令  : pdftool.dllのロード  (pdftoolini)
     戻り値: 成功 pdftool.dllのハンドル,失敗 stat=-1
     書式  : pdftoolini

   (使用例)
   #includeした時点で自動実行する


   ●命令  : PDFファイルのローディング  (pdfload)
     戻り値: 成功 stat=hpdf(ファイルのハンドル), 失敗 stat=0 or -1
     書式  : pdfload(OpenFileName)
              OpenFileName (str) : PDFファイル名文字列 or 文字列型変数

   (使用例)
   ret=pdfload(OpenFileName)


   ●命令  : PDFファイルハンドルの解放  (freepdf)
     戻り値: 成功 stat=0,失敗 stat=-1
     書式  : freepdf

   (使用例)
   freepdf


   ●命令  : PDFファイルハンドルの解放 (ハンドル指定)  (freepdf2)
     戻り値: 成功 stat=0,失敗 stat=-1
     書式  : freepdf2(pdfhwnd)
              pdfhwnd (int) : PDFファイルハンドル

   (使用例)
   ret=freepdf2(pdfhwnd)


   ●命令  :  PDFページ数の取得  (getpdfpagecount)
     戻り値: 成功 stat=PDFページ数,失敗 stat=-1
     書式  : getpdfpagecount()

   (使用例)
   ret=pdfload("test.pdf")
   mes "ページ数 = "+getpdfpagecount()
   freepdf
   freelib


   ●命令  : PDF Versionの取得 (整数値)  (grtpdfversion)
     戻り値: 成功 stat=PDFファイルのバージョン,失敗 stat=-1
     書式  : grtpdfversion(OpenFileName)
              OpenFileName:読み込むPDFファイル名文字列 or 文字列型変数

   (使用例)
   version=grtpdfversion("test.pdf")
   mes "Version = "+version
   freelib


   ●命令  : PDFファイルのしおり情報を取得  (getpdfbookmark)
     戻り値: 成功 stat=1,失敗 stat=-1, stat=-2 : しおりがない 
     書式  : getpdfbookmark(SaveFileName,flag)
              SaveFileName:保存先のファイル名文字列 or 文字列型変数
              flag        : CSV形式で保存するかどうか 1:する 0:しない

   (使用例)
   ret=pdfload("test.pdf")
   ret=getpdfbookmark("しおり.txt",0)
   freepdf
   freelib


   ●命令  : PDFファイルをテキストファイルに変換  (getpdftext)
     戻り値: 成功 stat=1,失敗 stat=-1, stat=-2 : PDFファイルが暗号化されてる
     書式  : getpdftext(OpenFileName,SaveFileName)
              OpenFileName:読み込むPDFファイル名文字列 or 文字列型変数
              SaveFileName:保存先のファイル名文字列 or 文字列型変数

   (使用例)
   ret=getpdftext("test.pdf","test.txt")
   freelib


   ●命令  : PDFファイルをテキストファイルに変換 (拡張版)  (getpdftextex)
     戻り値: 成功 stat=1,失敗 stat=-1, stat=-2 : ユーザーによって処理をキャンセルされた
     書式  : getpdftextex(StartPos,EndPos,SaveFileName,LinePage)
              StartPos : 読み込みを開始するページ番号
              EndPos   : 読み込みを終了するページ番号
              SaveFileName:保存先のファイル名文字列 or 文字列型変数
              LinePage : ページごとに区切り線をいれるかどうか (1:入れる)(0 : 入れない)
     その他   進捗状況を表すプログレスバーが表示される

   (使用例)
   ret=getpdftextex(1,getpdfpagecount(),"test.txt",0)
   freepdf
   freelib


   ●命令  : PDFファイルの文章情報(構造体にセット)を取得  (getpdfstrinfo)
     戻り値: 成功 stat=1,失敗 stat=0
     書式  : getpdfstrinfo()
     その他   一度に情報を取得するための準備 (この関数を発行後、getpdfinfoで取得)

   (使用例)
   ret=pdfload("test.pdf")
   ret=getpdfstrinfo()
   getpdfinfo(0) : mes "タイトル : "+refstr
   freepdf
   freelib


   ●命令  : PDFファイルの文章情報を取得  (getpdfinfo)
     戻り値: 成功 stat=1,失敗 stat=0
     書式  : getpdfstrinfo(nMode)
              nMode : 文章情報取得番号

              nMode :          取得内容
             -----------------------------------------------
                0   : タイトル (PDFTitle)
                1   : サブタイトル(PDFSubject)
                2   : 作成者(PDFAuthor)
                3   : キーワード(PDFKeywords)
                4   : 作成(PDFCreator)
                5   : PDF変換(PDFProducer)
                6   : 作成日時(PDFCreationDate)
                7   : 更新日時(PDFModDate)

   (使用例)
   ret=pdfload("test.pdf")
   ret=getpdfstrinfo()
   repeat 8
       getpdfinfo(cnt) : mes ""+refstr
   loop
   freepdf
   freelib


   ●命令  : テキストファイルをPDFに変換  (writepdftext)
     戻り値: 成功 stat=1,失敗 stat=0
     書式  : writepdftextOpenFileNamem,SaveFileName)
              OpenFileName:読み込むキストファイル名文字列 or 文字列型変数
              SaveFileName:保存先のPDFファイル名文字列 or 文字列型変数

   (使用例)
   ret=writepdftext("test.txt","test.pdf")
   freelib


   ●命令  : PDFファイルを結合  (combinepdf)
     戻り値: 成功 stat=1,失敗 stat=0
     書式  : combinepdf(PDF1,PDF2,SaveFileName)
              PDF1:PDFファイルのハンドル
              PDF2:PDFファイルのハンドル
              SaveFileName:保存先のPDFファイル名文字列 or 文字列型変数

   (使用例)
   pdfhwnd1=pdfload("test1.pdf")
   pdfhwnd2=pdfload("test2.pdf")
   ret=writepdftext(pdfhwnd1,pdfhwnd2,"test3.pdf")
   freelib


   ●命令  : PDFファイルを結合 (拡張版)  (combinepdfex)
     戻り値: 成功 stat=1,失敗 stat=0
     書式  : combinepdfex(OpenFileListName,SaveFileName,SaveFileName)
              OpenFileName:結合ファイルリストテキストファイル名 or 文字列型変数
              SaveFileName:結合後のPDF出力ファイル名文字列 or 文字列型変数
              flag :しおりを作成するかどうかのフラグを指定する (1:作成)(0 : しない)
     その他 : 複数のPDFファイルを結合する。結合対象ファイル名をテキストファイルで
              リストを作成しておく。
              ; 例 : (pdflist.txt) - 必ずフルパスで指定しておくこと。
              ; C:\test1.pdf
              ; C:\test2.pdf
              ; C:\pdf\test3.pdf

   (使用例)
   ret=combinepdfex("pdflist.txt","test.pdf",0)
   freelib


   ●命令  : PDFファイルから指定されたページを抽出  (cutpdf)
     戻り値: 成功 stat=1,失敗 stat=0
     書式  : cutpdf(StartPos,EndPos,SaveFileName)
              StartPos : 抽出を開始するページの番号
              EndPos   : 抽出を終了するページの番号
              SaveFileName:PDF出力ファイル名文字列 or 文字列型変数

   (使用例)
   ret=cutpdf(1,2,"test1.pdf")
   freelib


   ●命令  : PDFファイルの指定されたページを回転  (rotatepdf)
     戻り値: 成功 stat=1,失敗 stat=0
     書式  : rotatepdf(StartPos,EndPos,SaveFileName,Rotate)
              StartPos : 回転開始ページ番号
              EndPos   : 回転終了ページ番号
              SaveFileName:PDF出力ファイル名文字列 or 文字列型変数
              Rotate : 回転角度番号 (1)右90度(2)左90度(3)180度 を指定

   (使用例)
   ret=pdfload("test.pdf")
   ret=rotatepdf(1,2,"test1.pdf",1)
   freepdf
   freelib


   ●命令  : PDFファイルから指定されたページを削除  (deletepdf)
     戻り値: 成功 stat=1,失敗 stat=0
     書式  : deletepdf(StartPos,EndPos,SaveFileName)
              StartPos : 削除開始ページ番号
              EndPos   : 削除終了ページ番号
              SaveFileName:削除後の出力PDFファイル名文字列 or 文字列型変数

   (使用例)
   ret=pdfload("test.pdf")
   ret=deletepdf(1,2,"test1.pdf")
   freepdf
   freelib


   ●命令  : ライブラリの開放  (freelib)
     戻り値: なし
     書式  : freelib

   (使用例)
   freelib

▲ Page Top    

  Copyright (C)HSP-NEXT sakura. 1998-2007 . All rights reserved.