拡張子からコンソール実行

提供:MeryWiki
2016年5月16日 (月) 22:20時点におけるYOS G-spec (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

拡張子でコンソール実行.png 概要

コンソール実行をVBSに移植して、1ファイルのみで多言語対応出来るように機能強化したものです。
拡張子からコマンドを判別するため、以前のように呼び出す時に設定する必要はありません。
足りない言語についても、Caseを追加して実行コマンドを設定することで使用できるようになります。
不具合要望などは以下のリンクまで。

もう少しリファレンス

拡張子でコンソール実行.png 対応済み言語処理系一覧

C、C++(VC++、BCC32、GCC、G++)、D、C#(Mono)、scriptcs、Java、Scala、Groovy、Perl、PHP(Phalanger)、
Go、Dart、R言語、JavaScript(Node.js、JScript、JScript.NET、Rhino)、TypeScript、Fortran(G)、
VBScript、VB.NET(Mono)、BASIC(FreeBasic)、Pascal(FPC)、Ada(GNAT)、Ruby(JRuby、IR)、Lua(JIT)、
Matlab(Octave)、Scilab、Python(PyPy、Jython、IPy)、なでしこ、CoffeeScript、
CommonLisp(CLISP、SBCL、MKCL、CCL)、Scheme(Gauche)、Clojure(JVM、CLR)、
F#、Haskell(GHC)、CASL II、NASM、.NetIL(ilasm)、BAT、WSF、PowerShell

※ただし、基本的にはパスが通っていることが前提。
HSPはコマンドラインコンパイラが標準で用意されていないため断念。
公式プラグインのHSPコンパイル実行プラグインをご利用ください。

※2 処理系ではないけどjs系はUglify.jsがコメント追記で呼べるようになりました。

拡張子でコンソール実行.png ZIP

ダウンロード【2016/05/16版】
旧版
変換済みicoファイル込

拡張子でコンソール実行.png アイコン

  拡張子でコンソール実行.png 拡張子でコンソール実行2.png

拡張子でコンソール実行.png ソース

exec_cmd.vbs
#icon="exec_cmd.ico"
#title="コンソール実行"
' exec_cmd.vbs

'ファイルの保存
Document.Save()

'保存してなければ終了。
If Document.Name="" Then
	MsgBox "ファイルが保存されてません。"
	Quit
End If

'タイトル名
Dim TITLE
'実行コマンド
Dim EXEC_COMMAND

'使用エンジン選択
Function ENGINE(file_format)
	Select Case LCase(file_format)
		'C言語
		Case "c"
			'ENGINE="bcc32"
			ENGINE="gcc"
		'C++
		Case "cpp"
			'ENGINE="cl"
			'ENGINE="bcc32"
			ENGINE="g++"
		'C#
		Case "cs"
			ENGINE="csc"
			'ENGINE="mcs"
		'Perl
		Case "pl"
			ENGINE="perl"
			'ENGINE="perl6"
		'PHP
		Case "php"
			ENGINE="php"
			'ENGINE="phpc"
		'JavaScript
		Case "js"
			ENGINE="node"
			'ENGINE="jscript"
			'ENGINE="jsc"
			'ENGINE="rhino"
		'VB.NET
		Case "vb"
			ENGINE="vbc"
			'ENGINE="vbnc"
		'Ruby
		Case "rb"
			ENGINE="ruby"
			'ENGINE="jruby"
			'ENGINE="ir"
		'Lua
		Case "lua"
			ENGINE="lua"
			'ENGINE="luajit"
		'MATLAB
		Case "m"
			'ENGINE="matlab"
			ENGINE="octave"
		'Python
		Case "py"
			ENGINE="python"
			'ENGINE="pypy"
			'ENGINE="jython"
			'ENGINE="ipy"
			'ENGINE="ipy64"
		'LISP, CommonLisp
		Case "l","lisp","lsp","cl"
			ENGINE="clisp"
			'ENGINE="sbcl"
			'ENGINE="ccl"
			'ENGINE="ccl64"
			'ENGINE="mkcl"
		'Clojure
		Case "clj"
			ENGINE="clojure"
			'ENGINE="clojure-clr"
	End Select
End Function

'使用するエンジンのパス	パスが通しにくかったり通らないものを記述
Function ENGINE_PATH(file_format)
	Select Case LCase(file_format)
		'C#, VB.NET
		Case "csc","vbc"
			ENGINE_PATH="%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319"
			'ENGINE_PATH="%ProgramFiles%\MSBuild\12.0\Bin"
			'ENGINE_PATH="%ProgramFiles%\MSBuild\14.0\Bin"
			'ENGINE_PATH="%ProgramFiles(x86)%\MSBuild\12.0\Bin"
			'ENGINE_PATH="%ProgramFiles(x86)%\MSBuild\14.0\Bin"
		'Mono C#, Mono VB.NET
		Case "mcs","vbnc"
			ENGINE_PATH="%ProgramFiles%\Mono\lib\mono\4.5"
			'ENGINE_PATH="%ProgramFiles(x86)%\Mono\lib\mono\4.5"
		'JScript.NET
		Case "jsc"
			ENGINE_PATH="%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727"
		'Rhino
		Case "rhino"
			ENGINE_PATH="%HOMEDRIVE%\rhino"
		'TypeScript
		Case "ts"
			'ENGINE_PATH="%ProgramFiles%\Microsoft SDKs\TypeScript\1.0"
			'ENGINE_PATH="%ProgramFiles(x86)%\Microsoft SDKs\TypeScript\1.0"
			ENGINE_PATH="%APPDATA%\npm"
		'CoffeeScript
		Case "coffee"
			ENGINE_PATH="%APPDATA%\npm"
		'Clojure(JVM)
		Case "clojure"
			'clojure-x.x.xのバージョン表記"-x.x.x"を消すと動かなくなる。
			ENGINE_PATH="%HOMEDRIVE%\clojure-1.8.0"
		'F#
		Case "fs","ml","mli"
			ENGINE_PATH="%ProgramFiles%\Microsoft SDKs\F#\3.1\Framework\v4.0"
			'ENGINE_PATH="%ProgramFiles(x86)%\Microsoft SDKs\F#\3.1\Framework\v4.0"
		'CASL II
		Case "cas"
			ENGINE_PATH="%HOMEDRIVE%\javaCASL2"
		'NASM LINK用(VC++必須)
			Case "link"
				ENGINE_PATH="%ProgramFiles%\Microsoft Visual Studio 12.0\VC\bin"
				'ENGINE_PATH="%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\bin"
			Case "msvcrt"
				ENGINE_PATH="%ProgramFiles%\Microsoft Visual Studio 12.0\VC\lib"
				'ENGINE_PATH="%ProgramFiles(x86)%Microsoft Visual Studio 12.0\VC\lib"
			Case "kernel32"
				ENGINE_PATH="%ProgramFiles%\Microsoft SDKs\Windows\v7.1A\Lib"
				'ENGINE_PATH="%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Lib"
			Case "addlib"
				'ライブラリが他に必要であれば空白区切りで与えてください。
				'(ファイルパスに空白を含む時は注意)
				ENGINE_PATH=""
		'NASM LINK用ここまで
		'.NetILアセンブラ
		Case "il"
			ENGINE_PATH="%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319"
	End Select
End Function

'js圧縮コマンド(uglifyjs)
Function COMP_JS()
	COMP_JS=Join(Array("uglifyjs -m -o ",DOC_NAME,".min.js ",DOC_NAME,".js"),"")
End Function

'パッケージファイル
Dim PKG_FILES
'コマンドオプション
Dim CMD_OPTION
'ビルドメッセージ
'頭の&は何も無い所に付け加えるため必須とする。
Dim BUILDED
BUILDED=" & Echo Complited."

Dim br:br=" & " '改行用

'Document.Name:現在のファイル名
Dim doc_names:doc_names=Split(Document.Name,".")

'拡張子
Dim file_format:file_format=doc_names(UBound(doc_names))
doc_names(UBound(doc_names))=""

'拡張子を除いたファイル名
Dim DOC_NAME
DOC_NAME=Join(doc_names,".")
DOC_NAME=Mid(DOC_NAME,1,Len(DOC_NAME)-1)

'実行時exe、class、obj、js、min.jsにコンパイルする形式の場合は一行目にコメントで
' delexe, delclass, delobj, deljs, delmin を含めることで
'事前にexe, class, obj, js, min.jsを削除することができます。

'タイトル、実行コマンド
Select Case LCase(file_format)
	Case "c","cpp"	'C, C++
		Select Case ENGINE(file_format)
			Case "cl"		'Visual C++ 
				TITLE="Visual C++ " & Document.Name
				EXEC_COMMAND=Join(Array( _
					"cl ",Document.Name,br, _
					DOC_NAME,".exe" _
				),"")

			Case "bcc32"	'Borland C++
				TITLE="Borland C++ " & Document.Name
				EXEC_COMMAND=Join(Array( _
					"bcc32 ",Document.Name,br, _
					DOC_NAME,".exe" _
				),"")

			Case "gcc"		'GCC C
				TITLE="GCC C " & Document.Name
				EXEC_COMMAND=Join(Array( _
					"gcc -o ",DOC_NAME,".exe ",Document.Name,br, _
					DOC_NAME,".exe" _
				),"")

			Case "g++"		'GCC C++
				TITLE="GCC C++ " & Document.Name
				EXEC_COMMAND=Join(Array( _
					"g++ -o ",DOC_NAME,".exe ",Document.Name,br, _
					DOC_NAME,".exe" _
				),"")
		End Select

	Case "d"		'D言語
		TITLE="D言語 " & Document.Name
		EXEC_COMMAND="dmd " & Document.Name & br & DOC_NAME & ".exe"

	Case "cs"		'C#
		'コンパイルファイル選択
		'デフォルトでフォルダ内全てをコンパイル。
		'一行目に //only と加えることでそのファイルのみコンパイルを行う。
		If load_option("//only") Then
			PKG_FILES=Document.Name
		Else
			PKG_FILES="*.cs"
		End If

		Select Case ENGINE(file_format)
			Case "csc"		'C#
				TITLE="C# "+ Document.Name
				EXEC_COMMAND=Join(Array( _
					"""",ENGINE_PATH(ENGINE(file_format)),"\csc"" ", _
					"/nologo /out:",DOC_NAME,".exe ",PKG_FILES," /optimize+",br, _
					DOC_NAME,".exe" _
				),"")

			Case "mcs"		'Mono C#
				TITLE="Mono C# "+ Document.Name
				EXEC_COMMAND=Join(Array( _
					"""",ENGINE_PATH(ENGINE(file_format)),"\mcs"" ", _
					"-out:",DOC_NAME,".exe ",PKG_FILES," -optimize+",br, _
					DOC_NAME,".exe" _
				),"")
		End Select

	Case "csx"		'scriptcs
		TITLE="scriptcs "+ Document.Name
		EXEC_COMMAND="scriptcs " & Document.Name

	Case "java"		'Java
		'jar化は手順が面倒そうなので保留
		TITLE="Java " & Document.Name
		EXEC_COMMAND=Join(Array( _
			"javac ",Document.Name,br, _
			"java ",DOC_NAME _
		),"")

	Case "scala"		'Scala
		'コンパイルオプション
		'一行目に //class と加えることでclassファイルにコンパイルを行う。
		TITLE="Scala " & Document.Name
		If load_option("//class") Then
			EXEC_COMMAND="scalac " & Document.Name
		Else
			EXEC_COMMAND="scala " & Document.Name
		End If

	Case "groovy"		'Groovy
		'コンパイルオプション
		'一行目に //class と加えることでclassファイルにコンパイルを行う。
		TITLE="Groovy " & Document.Name
		If load_option("//class") Then
			EXEC_COMMAND="groovyc " & Document.Name
		Else
			EXEC_COMMAND="groovy " & Document.Name
		End If

	Case "pl"		'Perl
		Select Case ENGINE(file_format)
			Case "perl"
				TITLE="Perl " & Document.Name
				EXEC_COMMAND="perl " & Document.Name

			Case "perl6"
				TITLE="Perl6 " & Document.Name
				EXEC_COMMAND="perl6 " & Document.Name
		End Select

	Case "php"		'PHP
		Select Case ENGINE(file_format)
			Case "php"		'PHP
				TITLE="PHP " & Document.Name
				EXEC_COMMAND="php " & Document.Name

			Case "phpc"		'Phalanger
				TITLE="Phalanger " & Document.Name
				EXEC_COMMAND=Join(Array( _
					"phpc /debug- /quiet ",Document.Name,br, _
					"bin\",DOC_NAME,".exe" _
				),"")
		End Select

	Case "go"		'Go
		'コンパイルオプション
		'一行目に//buildでビルドを行う。
		If load_option("//build") Then
			CMD_OPTION="build"
		Else
			CMD_OPTION="run"
		End If
		TITLE="GO " & Document.Name
		EXEC_COMMAND=Join(Array( _
			"go ",CMD_OPTION,Document.Name _
		),"")

	Case "dart"		'Dart
		TITLE="Dart " & Document.Name
		EXEC_COMMAND="dart " & Document.Name _

	Case "r","q","s"	'R言語
		TITLE="R言語 " & Document.Name
		EXEC_COMMAND="rscript " & Document.Name

	Case "js"		'JavaScript
		If load_option("//comp") Then
			'js圧縮モード
			'一行目にコメントで //compと加える。
			TITLE="Uglify.js " & Document.Name
			EXEC_COMMAND=COMP_JS & BUILDED
		Else
			Select Case ENGINE(file_format)
				Case "node"		'Node.js
					'デバッグオプション
					'一行目に、
					' //debug と加えることでデバッグモードでの実行を行う。
					If load_option("//debug") Then
						CMD_OPTION="debug"
					Else
						CMD_OPTION=""
					End If

					TITLE="Node.js " & Document.Name
					EXEC_COMMAND=Join(Array("node ",CMD_OPTION," ",Document.Name),"")

				Case "jscript"	'JScript
					TITLE="JScript " & Document.Name
					EXEC_COMMAND="cscript //nologo //E:JScript " & Document.Name

				Case "jsc"		'JScript.NET
					PKG_FILES=Document.Name
					TITLE="JScript.NET "+ Document.Name
					EXEC_COMMAND=Join(Array( _
						"""",ENGINE_PATH(ENGINE(file_format)),"\jsc"" /nologo /out:", _
							DOC_NAME,".exe ",PKG_FILES,br, _
						DOC_NAME,".exe" _
					),"")

				Case "rhino"	'Rhino
					TITLE="Rhino " & Document.Name
					EXEC_COMMAND=Join(Array("java -jar ",ENGINE_PATH(ENGINE(file_format)),"\js.jar ",Document.Name),"")
			End Select
		End If

	Case "ts"		'TypeScript
		TITLE="TypeScript to " & ENGINE("js") & " " & Document.Name
		EXEC_COMMAND=Join(Array("""",ENGINE_PATH(file_format),"\tsc"" ",Document.Name,br),"")
		
		If load_option("//comp") Then
			'js圧縮モード
			'一行目にコメントで //compと加える。
			TITLE="Uglify.js + " & TITLE
			EXEC_COMMAND=EXEC_COMMAND & COMP_JS & BUILDED
		Else
			'JavaScript実行
			Select Case ENGINE("js")
				Case "node"	'Node.js
					EXEC_COMMAND=Join(Array(EXEC_COMMAND, _
						"node ",DOC_NAME,".js" _
					),"")

				Case "jscript"	'JScript
					EXEC_COMMAND=Join(Array(EXEC_COMMAND, _
						"cscript //nologo //E:JScript ",DOC_NAME,".js" _
					),"")
			End Select
		End If

	Case "f","f90","f95","f03"	'Fortran
		TITLE="GFortran " & Document.Name
		EXEC_COMMAND=Join(Array( _
			"gfortran -o ",DOC_NAME," ",Document.Name,br, _
			DOC_NAME,".exe" _
		),"")

	Case "vbs"		'VBScript
		TITLE="VBScript " & Document.Name
		EXEC_COMMAND="cscript  //nologo //E:VBScript " & Document.Name

	Case "vb"		'VB.NET
		'コンパイルファイル選択
		'デフォルトでフォルダ内全てをコンパイル。
		'一行目に 'only と加えることでそのファイルのみコンパイルを行う。
		If load_option("'only") Then
			PKG_FILES=Document.Name
		Else
			PKG_FILES="*.vb"
		End If

		Select Case ENGINE(file_format)
			Case "vbc"		'VB.NET
				TITLE="VB.NET "+ Document.Name
				EXEC_COMMAND=Join(Array( _
					"""",ENGINE_PATH(ENGINE(file_format)),"\vbc""", _
					" /nologo /out:",DOC_NAME,".exe ",PKG_FILES," /optimize+",br, _
					DOC_NAME,".exe" _
				),"")

			Case "vbnc"		'Mono VB.NET
				TITLE="Mono VB.NET"
				EXEC_COMMAND=Join(Array( _
					"""",ENGINE_PATH(ENGINE(file_format)),"\vbnc""", _
					" /quiet /nologo /out:",DOC_NAME,".exe ",PKG_FILES," /optimize+",br, _
					DOC_NAME,".exe" _
				),"")
		End Select

	Case "bas"		'BASIC
		TITLE="FreeBasic " & Document.Name
		EXEC_COMMAND=Join(Array( _
			"fbc -lang deprecated ",Document.Name,br _
			,DOC_NAME,".exe" _
		),"")

	Case "pas","pp"	'PASCAL
		TITLE="FreePascal " & Document.Name
		EXEC_COMMAND=Join(Array( _
			"fpc ",Document.Name,br, _
			DOC_NAME,".exe" _
		),"")

	Case "adb"		'Ada
		TITLE="GNAT Ada " & Document.Name
		EXEC_COMMAND=Join(Array( _
			"gnatmake ",Document.Name,br _
			,DOC_NAME,".exe" _
		),"")

	Case "rb"		'Ruby
		Select Case ENGINE(file_format)
			Case "ruby"		'Ruby
				TITLE="Ruby " & Document.Name
				EXEC_COMMAND="ruby " & Document.Name

			Case "jruby"	'JRuby
				TITLE="JRuby " & Document.Name
				EXEC_COMMAND="jruby " & Document.Name

			Case "ir"		'IronRuby
				TITLE="IronRuby " & Document.Name
				EXEC_COMMAND="ir " & Document.Name
		End Select

	Case "lua"		'Lua
		Select Case ENGINE(file_format)
			Case "lua"		'Lua
				TITLE="Lua " & Document.Name
				EXEC_COMMAND="lua " & Document.Name

			Case "luajit"	'LuaJIT
				TITLE="LuaJIT " & Document.Name
				EXEC_COMMAND="luajit " & Document.Name
		End Select

	Case "m"		'MATLAB
		Select Case ENGINE(file_format)
			Case "matlab"	'MATLAB
				'環境不所持により、動作未確認。
				TITLE="Matlab " & Document.Name
				EXEC_COMMAND="matlab -nodisplay " & Document.Name

			Case "octave"	'GNU Octave
				TITLE="GNU Octave " & Document.Name
				EXEC_COMMAND="octave-cli " & Document.Name
		End Select

	Case "sce"		'Scilab
		'最後にexitを実行しないとreplに移行します。
		'また、日本語で文字化け注意。
		TITLE="Scilab " & Document.Name
		EXEC_COMMAND="Scilex -nwni -nb -l ja -f " & Document.Name

	Case "py"		'Python
		Select Case ENGINE(file_format)
			Case "python"	'Python
				'コンパイルオプション
				'一行目に #pyc と加えることでコンパイルを行う。
				If load_option("#pyc") Then
					CMD_OPTION="-m compileall"
				Else
					CMD_OPTION=""
				End If

				TITLE="Python " & Document.Name
				EXEC_COMMAND=Join(Array( _
					"python ",CMD_OPTION," ",Document.Name _
				),"")

			Case "pypy"		'PyPy
				TITLE="PyPy " & Document.Name
				EXEC_COMMAND="pypy " & Document.Name

			Case "jython"	'Jython
				TITLE="Jython " & Document.Name
				EXEC_COMMAND="jython " & Document.Name

			Case "ipy"		'IronPython
				TITLE="IronPython " & Document.Name
				EXEC_COMMAND="ipy " & Document.Name

			Case "ipy64"		'IronPython
				TITLE="IronPython64 " & Document.Name
				EXEC_COMMAND="ipy64 " & Document.Name
		End Select

	Case "coffee"	'CoffeeScript
		'コンパイルオプション
		'一行目に #js と加えることでjsファイルにコンパイルを行う。
		If load_option("#js") Then
			CMD_OPTION="--compile"
		Else
			CMD_OPTION=""
			BUILDED=""
		End If

		TITLE="CoffeeScript " & Document.Name
		EXEC_COMMAND=Join(Array( _
			"""",ENGINE_PATH(file_format),"\coffee"" ",CMD_OPTION," ",Document.Name, _
			BUILDED _
		),"")
		If load_option("#js") And load_option("comp") Then
			'js圧縮モード
			'一行目にコメントで #comp と加える。
			TITLE="Uglify.js + " & TITLE
			EXEC_COMMAND=Join(Array(EXEC_COMMAND,br,COMP_JS,BUILDED),"")
		End If

	Case "nako"		'なでしこ
		'起動オプション
		'一行目にコメントで下記を含める。なしでコンソール実行
		'	vnako: 標準GUI
		'	gnako: 簡易GUI
		'	pad:   なでしこエディタ起動(コンパイルはエディタから行う)
		TITLE="なでしこ " & Document.Name
		If load_option("vnako") Then
			EXEC_COMMAND="vnako " & Document.Name
		ElseIf load_option("gnako") Then
			EXEC_COMMAND="gnako " & Document.Name
		ElseIf load_option("pad") Then
			EXEC_COMMAND="nakopad " & Document.Name
		Else
			EXEC_COMMAND="cnako " & Document.Name
		End If

	Case "l","lisp","lsp","cl"	'LISP, CommonLisp
		Select Case ENGINE(file_format)
			Case "clisp"	'CLISP
				'コンパイルオプション
				'一行目に ;fas と加えることでfasファイルにコンパイルを行う。
				If load_option(";fas") Then
					CMD_OPTION="-c"
				Else
					CMD_OPTION=""
				End If

				TITLE="CLISP " & Document.Name
				EXEC_COMMAND=Join(Array("clisp ",CMD_OPTION," ",Document.Name),"")

			Case "sbcl"		'SteelBankCommonLisp
				'コンパイルオプション
				'一行目に ;fasl と加えることでfaslファイルにコンパイルを行う。
				'(Macros\exec_cmdフォルダにexec_sbcl_comp.lisp 必須)
				If load_option(";fasl") Then
					Dim me_paths:me_paths=Split(Editor.FullName,"\")
					me_paths(UBound(me_paths))=""
					'Macrosフォルダのパス取得
					Dim me_path:me_path=Join(me_paths,"\") & "Macros\exec_cmd\"

					CMD_OPTION=me_path & "exec_sbcl_comp.lisp"
				Else
					CMD_OPTION=""
				End If

				TITLE="SBCL " & Document.Name
				EXEC_COMMAND=Join(Array( _
					"sbcl --script ",CMD_OPTION," ",Document.Name _
				),"")

			Case "ccl"		'ClozureLisp
				'オプション無し。コンパイルはlispファイルに以下のような設定文を書き加える。
				'(ccl:save-application "hello.exe"	;ファイル名
				'	:toplevel-function #'main		;初期起動関数
				'	:prepend-kernel t)
				TITLE="ClozureLisp " & Document.Name
				EXEC_COMMAND="wx86cl --load " & Document.Name

			Case "ccl64"	'ClozureLisp64
				TITLE="ClozureLisp64 " & Document.Name
				EXEC_COMMAND="wx86cl64 --load " & Document.Name

			Case "mkcl"		'ManKaiCommonLisp
				'コンパイルオプション
				'一行目に ;fas でfasファイル生成。
				' ;exe でexeファイル生成
				If load_option(";fas") Then
					CMD_OPTION="-compile " & Document.Name
				ElseIf load_option(";exe") Then
					TITLE="MKCL " & Document.Name
					CMD_OPTION=Join(Array( _
						"-not-fasl-p -compile ",Document.Name,br, _
						"timeout /t 1 > nul",br, _
						"mkcl -o ",DOC_NAME,".exe -link ",DOC_NAME,".o", _
						BUILDED _
					),"")
					'mkcl -not-fasl-p -compile a.lisp & mkcl -o a.exe -link a.o
					'exe化失敗を防ぐためにwaitの小細工
				Else
					CMD_OPTION="-shell " & Document.Name
				End If

				TITLE="MKCL " & Document.Name
				EXEC_COMMAND="mkcl " & CMD_OPTION
		End Select

	Case "scm"		'Scheme
		TITLE="Gauche " & Document.Name
		EXEC_COMMAND="gosh " & Document.Name

	Case "clj"		'Clojure
		Select Case ENGINE(file_format)
			Case "clojure"		'Clojure(JVM)
				Dim version
				version=Split(ENGINE_PATH(ENGINE(file_format)),"-")
				TITLE="Clojure " & Document.Name
				EXEC_COMMAND=Join(Array( _
					"java -jar """,ENGINE_PATH(ENGINE(file_format)), _
					"\clojure-",version(UBound(version)),".jar"" ",Document.Name _
				),"")

			Case "clojure-clr"	'ClojureCLR
				TITLE="ClojureCLR " & Document.Name
				EXEC_COMMAND="Clojure.Main " & Document.Name
		End Select

	Case "fs","ml","mli"		'F#
		PKG_FILES=Document.Name
		
		TITLE="F# "+ Document.Name
		EXEC_COMMAND=Join(Array( _
			"""",ENGINE_PATH(file_format),"\fsc""", _
			" --nologo --out:",DOC_NAME,".exe ",PKG_FILES," --optimize+",br, _
			DOC_NAME,".exe" _
		),"")

	Case "hs"		'Haskell
		TITLE="GHC " & Document.Name
		EXEC_COMMAND=Join(Array( _
			"ghc --make ",Document.Name,br, _
			DOC_NAME,".exe" _
		),"")

	Case "cas"		'CASL II
		TITLE="Java CASL II " & Document.Name
		EXEC_COMMAND=Join(Array( _
			"java -jar """,ENGINE_PATH(file_format),"\casl2.jar"" ",Document.Name,br, _
			"java -jar ",ENGINE(file_format),"\run.jar ",DOC_NAME,".obj" _
		),"")
		'java -jar casl2.jar aaa.cas
		'java -jar run.jar aaa.obj

	Case "asm"		'NASM
		TITLE="NAST " & Document.Name
		EXEC_COMMAND=Join(Array("nasm -f win32 ",Document.Name,br, _
			"""",ENGINE_PATH("link"),"\link"" /nologo /out:",DOC_NAME,".exe ",DOC_NAME,".obj ", _
			"""",ENGINE_PATH("msvcrt"),"\msvcrt.lib"" """,ENGINE_PATH("kernel32"),"\Kernel32.lib"" ", _
			ENGINE_PATH("addlib"),br, _
			DOC_NAME,".exe" _
		),"")
		'nasm -f win32 aaa.asm
		'link /nologo /out:aaa.exe aaa.obj msvcrt.lib Kernel32.lib
		'aaa.exe

	Case "il"		'.NetILアセンブラ
		TITLE=".NetIL " & Document.Name
		EXEC_COMMAND=Join(Array( _
			"""",ENGINE_PATH(file_format),"\ilasm"" /nologo /quiet ",Document.Name,br, _
			DOC_NAME,".exe" _
		),"")

	Case "bat"		'BAT
		TITLE="BAT " & Document.Name
		EXEC_COMMAND=Document.Name

	Case "wsf"		'WSF
		TITLE="WSF " & Document.Name
		EXEC_COMMAND="cscript  //nologo " & Document.Name

	Case "ps1"		'PowerShell
		TITLE="PowerShell " & Document.Name
		EXEC_COMMAND="powershell " & Document.Name

	Case Else
		TITLE=Document.Name
		EXEC_COMMAND=Document.Name
End Select

'コマンドライン起動
Dim cmd:Set cmd = CreateObject("WScript.Shell")
cmd.Run Join(Array( _
	"cmd /C """, _
	"title ",TITLE,br, _
	"cd/d ",Document.Path,br, _
	DEL_BINARY(), _
	EXEC_COMMAND,br, _
	"pause > nul",br, _
	"exit"""),""),1

Set cmd=Nothing

'コマンドラインオプションの読込
Function load_option(opt)
	load_option=Instr(LCase(Document.GetLine(1)),opt)
End Function

'exe、class、obj、min.js、jsファイルを削除するかどうか
Function DEL_BINARY()
	If load_option("delexe") Then
		DEL_BINARY=Join(Array("del ",DOC_NAME,".exe",br),"")
	ElseIf load_option("delclass") Then
		DEL_BINARY=Join(Array("del ",DOC_NAME,".class",br),"")
	ElseIf load_option("delobj") Then
		DEL_BINARY=Join(Array("del ",DOC_NAME,".obj",br),"")
	ElseIf load_option("deljs") And file_format<>"js" Then
		DEL_BINARY=Join(Array("del ",DOC_NAME,".js",br),"")
	Else
		DEL_BINARY=""
	End IF

	If load_option("delmin") Then
		DEL_BINARY=Join(Array("del ",DOC_NAME,".min.js",br),"")
	End If
End Function


exec_sbcl_comp.lisp
;exec_sbcl_comp.lisp
;exec_cmd.vbs SBCLコンパイル用
;Mery以下のMacro\exec_cmd\に配置してください。
(compile-file (elt *posix-argv* 1))
スポンサーリンク