/***********************************************************

	2つのコンソール・アプリケーションをパイプでつないで実行

		【2005/10/05 更新】

***********************************************************/
#const	TRUE		1
#const	FALSE		0
#const	NULL		0

/* API登録 */
#uselib	"kernel32.dll"
#func	CreatePipe	"CreatePipe"	sptr,sptr,sptr,sptr
#func	CloseHandle	"CloseHandle"	sptr
#func	CreateProcessA	"CreateProcessA"	sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr
#func	WaitForSingleObject "WaitForSingleObject"	sptr,sptr
#const	INFINITE	0xFFFFFFFF	// WaitForSingleObject待ち時間=無限

/* SECURITY_ATTRIBUTES構造体サイズ */
#const	SIZE_SEC_ATTR	12

/* STARTUPINFO構造体パラメータ */
#const	SIZE_SUP_INFO	68			// STARTUPINFO構造体サイズ
#const	STARTF_USESHOWWINDOW	0x00000001	//  パラメータ使用フラグ
#const	STARTF_USESTDHANDLES	0x00000100
#const	SW_HIDE			0		// 起動時ウィンドウを表示しない

#include "gm_beep.hsp"


	/* 名無しパイプ作成 */
	secAttr = SIZE_SEC_ATTR, NULL, TRUE		// SECURITY_ATTRIBUTES構造体
	CreatePipe varptr(hReadPipe),varptr(hWritePipe),varptr(secAttr),0
	if stat=FALSE {
		dialog "パイプの作成に失敗しました。スクリプトを終了します。",1,"エラー"
		end
	}
	// (スクリプト上ではhWritePipe、hReadPipeを使った処理を行わないこと)

	/* 標準出力をパイプの書き込み側につないでmes.exeを起動 */
	cmdline		= "mes.exe test.txt"
	supInfo		= SIZE_SUP_INFO,	NULL,	NULL,	NULL	// STARTUPINFO構造体
	supInfo(4)	= 0,		0,	0,	0
	supInfo(8)	= 0,		0,	NULL,	STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES
	supInfo(12)	= SW_HIDE,	NULL,	NULL,	hWritePipe,	NULL
	dim procInfo1,4
	CreateProcessA NULL,cmdline,0,0,TRUE,NULL,NULL,NULL,varptr(supInfo),varptr(procInfo1)
	result = stat
	/* パイプの書き込み側ハンドルを閉じる */
	CloseHandle hWritePipe
	if result=0 {
		dialog "mes.exeの起動に失敗しました。スクリプトを終了します。",1,"エラー"
		end
	}
	/* mes.exe関連のハンドルを閉じる */
	CloseHandle procInfo1(0)
	CloseHandle procInfo1(1)

	/* 標準入力をパイプの読み出し側につないでsort.exeを起動 */
	cmdline		= "sort.exe /o result.txt"	// Windowsに付属のコンソール・プログラム
	supInfo		= SIZE_SUP_INFO,NULL,	NULL,	NULL	// STARTUPINFO構造体
	supInfo(4)	= 0,		0,	0,	0
	supInfo(8)	= 0,		0,	NULL,	STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES
	supInfo(12)	= SW_HIDE,	NULL,	hReadPipe,NULL,	NULL
	dim procInfo2,4
	CreateProcessA NULL,cmdline,0,0,TRUE,NULL,NULL,NULL,varptr(supInfo),varptr(procInfo2)
	result = stat
	/* パイプの読み出し側ハンドルを閉じる */
	CloseHandle hReadPipe
	if result=0 {
		dialog "sort.exeの起動に失敗しました。スクリプトを終了します。",1,"エラー"
		end
	}
	/* sort.exeが終了するまで待つ */
	WaitForSingleObject procInfo2(0),INFINITE
	/* sort.exe関連のハンドルを閉じる */
	CloseHandle procInfo2(0)
	CloseHandle procInfo2(1)
	/* 処理終了の合図 */
	beep
	end