Hatena::ブログ(Diary)

永字八法 RSSフィード Twitter

 | 

2011-08-17 Wednesday

nsluaからデフォルトの変数等にアクセスするライブラリ

以下のスクリプトをどっかにはると、いくつかのクラスオブジェクトが追加される。

na

numaliasの略
あらかじめ、*define節で、numalias zero,0などと定義しておく。
そうすると、na.zero自動的に0になっている。(変更してはいけない)

sa

straliasの略
nsのstralias版。

exec

NSExecの限定された、かつ豪華なラッパー
nsluaの側からNScripterネイティブな命令を簡単に実行、また結果を取得しやすくする。

exec.puttext("表示したいテキスト")

これは、以下のスクリプトと(変数の処理以外は)等価である

NSSetStrValue(999, "表示したいテキスト")
NSExec("_puttext $999")

また、引数に入った結果を取得することもできる。

local x, y = exec.getcursorpos(iRet, iRet)

返り値を取得した引数の部分に、数値が欲しいならばiRet, 文字列が欲しいならば、sRetを置くと、返り値にそれが反映される。

スクリプト

do
	-- numaliasを定義する。
	na = setmetatable({}, {__index=function(na, key)
		rawset(na, key, exec.mov(iRet, {str=key})); return rawget(na, key)
	end})

	-- straliasを定義する。
	sa = setmetatable({}, {__index=function(sa, key)
		rawset(sa, key, exec.mov(sRet, {str=key})); return rawget(sa, key)
	end})

	-- 数値変数オブジェクトを定義する。
	local num_class = {}
	num_class.set = function(ob, val) NSSetIntValue(ob.ref, val) end
	num_class.get = function(ob) return NSGetIntValue(ob.ref) end
	num_class.val = function(ob, val) ob:set(val); return ob:get() end
	num = setmetatable({}, {__index=function(num, key)
		if type(key)=="string" then return num[ns[key]] end
		local ob = setmetatable({}, {__index=num_class})
		ob.ref = key; ob.str = "%"..tostring(key)
		rawset(num, key, ob); return rawget(num, key)
	end})
	
	-- 文字列変数オブジェクトを定義する。
	local str_class = {}
	str_class.set = function(ob, val) NSSetStrValue(ob.ref, val) end
	str_class.get = function(ob) return NSGetStrValue(ob.ref) end
	str_class.val = function(ob, val) ob:set(val); return ob:get() end
	str = setmetatable({}, {__index=function(str, key)
		if type(key)=="string" then return str[ns[key]] end
		local ob = setmetatable({}, {__index=str_class})
		ob.ref = key; ob.str = "$"..tostring(key)
		rawset(str, key, ob); return rawget(str, key)
	end})
	
	-- 配列変数オブジェクトを定義する。
	local dim_class = {}
	dim_class.get = function(ob, ...)
		local temp = temp_num()
		exec.mov(temp, ob:str(...))
		return temp:get()
	end
	dim_class.set = function(ob, ...)
		local arg = {...}
		local new = table.remove(arg)
		exec.mov(ob:str(unpack(arg)), new)
	end
	dim_class.str = function(ob, ...)
		local com = "?"..tostring(ob.ref)
		for i, v in ipairs({...}) do com = com.."["..tostring(v).."]" end
		return com
	end
	dim = setmetatable({}, {__index=function(dim, key)
		if type(key)=="string" then return dim[ns[key]] end
		local ob = setmetatable({}, {__index=dim_class})
		ob.ref = key
		rawset(dim, key, ob); return rawget(dim, key)
	end})
	
	-- 一時数値変数を作成する。
	-- 一時文字列変数を作成する。
	local temp_num_list = {}
	local temp_str_list = {}
	for i=980, 999 do
		temp_num_list[1+#temp_num_list] = num[i]
		temp_str_list[1+#temp_str_list] = str[i]
	end
	
	-- 空いている一時変数を返す関数を定義する。
	function temp_num()
		local res = table.remove(temp_num_list, 1)
		temp_num_list[1+#temp_num_list] = res
		return res
	end
	function temp_str()
		local res = table.remove(temp_str_list, 1)
		temp_str_list[1+#temp_str_list] = res
		return res
	end

	-- NSExecをつかいやすくする。
	iRet = function(res)
		local temp = temp_num()
		res[1+#res] = function() return temp:get() end
		return temp.str
	end

	sRet = function(res)
		local temp = temp_str()
		res[1+#res] = function() return temp:get() end
		return temp.str
	end
	
	local exec_choose = {}
	exec_choose["number"] = function(v, res) return tostring(v) end
	exec_choose["string"] = function(v, res)
		local head = string.char(v:byte(1))
		if head == "*" then return v end
		if head == "#" then return v end
		local temp = temp_str()
		temp:set(v)
		return temp.str
	end
	exec_choose["function"] = function(v, res) return v(res) end
	exec_choose["table"] = function(v, res) return v.str end
	
	exec = setmetatable({}, {__index=function(exec, key)
		local com = "_"..key
		local func = function(...)
			local res = {}
			for i, v in ipairs({...}) do
				if i==1 then com = com .. " " else com = com .. "," end
				local choose = exec_choose[type(v)]
				if choose then com = com .. choose(v, res) end
			end
			NSOkBox(com, "実行中")
			NSExec(com)
			if #res>0 then
				for i, v in ipairs(res) do res[i] = v() end
				return unpack(res)
			end
		end
		rawset(exec, key, func)
		return rawget(exec, key)
	end})
end

eiji8poueiji8pou 2011/08/17 07:35 作り直そう。特に変数周り。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/eiji8pou/20110817/1313508646
 | 

Notice

コメント等は基本的に自由ですが、通りすがりとかななしさんとかの場合、いじっても面白くないので放置する可能性があります。

最近のエントリー

カウンター:
<< 2011/08 >>
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
あわせて読みたい
過去ログ
0000 | 00 |
1800 | 10 |
1908 | 06 |
1983 | 06 | 12 |
1985 | 01 | 08 | 09 | 10 | 11 |
1986 | 10 |
1990 | 01 | 02 | 03 | 04 | 05 | 06 |
1995 | 01 |
1996 | 02 | 03 | 04 | 05 | 06 |
1997 | 03 | 05 |
1999 | 02 | 09 |
2000 | 00 |
2001 | 12 |
2002 | 01 | 02 | 03 | 04 |
2003 | 04 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2004 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 |

Mail Form
お名前
メールアドレス
本文
公開の是非 公開してもよござんす/公開してはいけません
ブロ電™切符
RSS feed meter for http://d.hatena.ne.jp/eiji8pou/
著作権保護期間の70年延長に反対
NHK(日本放置協会)は放置される側の団体です
やる気の無いサイトリング
時間のないサイト運営者リング
ヒロインリコメンダー
私設コミケカタログ
「ひぐらしのなく頃に」を応援しています。
07th Expansion
「ひぐらしのなく頃に」のネタばれがあるのです。

最新コメント一覧

1. 04/29 柊
2. 02/13 湖都
3. 02/13 eiji8pou
4. 02/13 湖都
5. 10/06 湖都
6. 10/06 リメ
7. 10/06 eiji8pou
8. 10/06 リメ
9. 02/13 パンダ5
10. 05/26 eiji8pou
11. 05/26 パンダ5
12. 05/26 パンダ5
13. 10/01 リメ
14. 10/01 eiji8pou
15. 09/17 eiji8pou

最新トラックバック一覧

1. 06/19 Twitter / @maedaema
2. 01/14 同人サークル 金沢自転車学校 - NScripterでプレーヤーに文字入力...
3. 01/14 吉野家 ゆでたまご
4. 12/18 ガンダム無双3
5. 08/18 長山洋子 動画
6. 06/20 聖☆おにいさん(5) (モーニングKC) |中村 光
7. 06/01 Twitter / @fkm
8. 04/03 長山洋子 おにゃんこ
9. 07/03 Myrmecoleon in Paradoxical Library. はてな新館 - Sat, Dec 19
10. 08/03 幻惑密室 西澤保彦
11. 10/01 Atelier de Muguet 制作記録 - エフェクト自作 その2
12. 10/07 Atelier de Muguet 制作記録 - 圧縮方式について
13. 09/27 Atelier de Muguet 制作記録 - 花火
14. 09/27 Atelier de Muguet 制作記録 - 花火
15. 09/26 Atelier de Muguet 制作記録 - マップ自動生成

言及URL

1. むいむい。の所蔵 / figma ファイアボール チャーミング ドロッセル( チャーミング) - メディアマーカー
2. t.co
3. 占ぃったー
4. Twitter / eiji8pou: わたしの今日の運??
5. Twitter / eiji8pou: [MM登録] コミックヴ
6. Twitter / eiji8pou: [MM登録] figma ファイ
7. eiji8pou (eiji8pou) :: twtr2src | Post your Twitter timeline to Evernote or send by mail everyday!
8. t.co
9. t.co
10. t.co

言及ISBN/ASIN

1. バブルガムクライシス 超鋼守護天使 (朝日ノベルズ)
2. UN‐GO 敗戦探偵・結城新十郎(1) (カドカワコミックス・エース)
3. UN‐GO~因果論 (カドカワコミックス・エース)
4. 京四郎と永遠の空 (1) (カドカワコミックスドラゴンJr)
5. 京四郎と永遠の空 (2) (角川コミックスドラゴンJr. (KCJ99-2))
6. 京四郎と永遠の空 3 (角川コミックス ドラゴンJr. 99-3)
7. 私立樋渡高校COMICS (1) (角川コミックス・エース・エクストラ)
8. 私立樋渡高校COMICS (2) (角川コミックス・エース・エクストラ)
9. アトムちゃん (単行本コミックス)
10. 舞-HiME戦 (電撃コミックス EX 144-1)
11. 武装神姫2036 3 (電撃コミックス)
12. 魔王なあの娘と村人A〈3〉ロボ娘は今日も空を飛べない (電撃文庫)
13. キャッツ・ワールド (2) (ドラゴンコミックス)
14. レイモンド2 (ドラゴンコミックス 56-6)
15. TWD express vol.1 (NORAコミックス)
16. 白貌の伝道師 (星海社FICTIONS)
17. 殺竜事件 (講談社ノベルス)
18. 悲鳴伝 (講談社ノベルス)
19. デビルマン(1) (講談社漫画文庫)
20. デビルマン(2) (講談社漫画文庫)
21. デビルマン(3) (講談社漫画文庫)
22. デビルマン(4) (講談社漫画文庫)
23. デビルマン(5) (講談社漫画文庫)
24. AKB0048ハート型オペレーション(1) (KCデラックス)
25. RD 潜脳調査室(1) (マガジンZコミックス)
26. ミニマム(1) (ヤングマガジンコミックス)
27. AKB0048 EPISODE0 1 (講談社コミックスなかよし)
28. 漢式青春ばくはつ劇場(2) (KCデラックス)
29. 銃夢 Last Order(17) (KCデラックス)
30. 銃夢 Last Order NEW EDITION(10) (KCデラックス)

言及JAN/EAN

1. HGST 3.5inch 7200rpm 2.0TB 64MB SATA 6.0Gbps
2. 裸族のインテリジェントビル5Bay USB3.0 eSATAコンボ
3. luv wave
4. 妄想科学シリーズ ワンダバスタイル 1(限定盤)
5. 妄想科学シリーズ ワンダバスタイル 1
6. 妄想科学シリーズ ワンダバスタイル 2
7. 妄想科学シリーズ ワンダバスタイル 3
8. 妄想科学シリーズ ワンダバスタイル 4
9. 妄想科学シリーズ ワンダバスタイル 5
10. 妄想科学シリーズ ワンダバスタイル 6
11. カステラ あんサンド
12. ScanSnap S1500
13. スタンド型ワンクリックスキャナー
14. アンドロイド ローション付
15. FUTURE LOID ミクティー
16. FUTURE LOID ミクティ ver.2.0
17. ミクティPocket
18. ミクティPocket Ver.2.0
19. ヴァージンロイド ルルカ ローション付
20. ヴァージンロイド リンリン ローション付
21. Transformers: The Movie
22. アニメ★マニア
23. 『超重神グラヴィオンツヴァイ』オリジナルサウンドトラック
24. 月光嗜好症〜moonlights intoxication〜
25. 雪と氷の旋律
26. Noblerot
27. MUSIC TRACKS FROM Wi
28. 麗人ニルヴァーナ来駕〜ボクのアンドロ
29. 星と月のソナタ
30. 決定盤! ローカルヒーロー大全集

eiji8pouのアンテナ

1. Yahoo!ブログ - マンガ好きの戯れ言
2. ほぼ日刊資料保存
3. 『書店員の本音で生きたい!』
4. くすみんと
5. 放蕩オペラハウス
6. ゆうきさらのほんよみにっき
7. すいーとポテト@はてな
8. 本屋さんからの風景
9. diary / nowadays
10. はてなダイアリー - 永字八法
11. 富士書房
12. EXPLORE MONOGAMY BLOG
13. 雑多三昧記//禅
14. みてのとおりのありさまだ
15. 駄目社員はむの日記
16. 落葉のささやき
17. 雲上四季
18. モルツーの日々
19. ”裏”日本工業新聞!!
20. 本のがんこ堂 ブログ

注目URL

1. t2b - Twitterのツイートをブログに自動投稿
2. georss - GeoRSS
3. # - Twitter Search
4. 読書メーター - あなたの読書量をグラフで管理
.
.
.
.
.
.

注目ISBN/ASIN

1. ドラゴンクエストモンスターズ テリーのワンダーランド3D
2. きのう何食べた?(6) (モーニング KC)
3. レセプタクル (書籍扱い楽園コミックス)
4. 乙嫁語り 4巻 (ビームコミックス)
5. 東雲侑子は全ての小説をあいしつづける (ファミ通文庫)
6. カゲロウデイズ -in a daze- (KCG文庫)
7. スマイレージ ベストアルバム完全版 (1) (初回生産限定盤)
8. ドラゴンクエスト25thアニバーサリー モンスター大図鑑
9. ドラゴンズドグマ
10. 私がモテないのはどう考えてもお前らが悪い!(2) (ガンガンコミックスONLINE)

最新JAN/EAN

1. クリアアサヒ スリムボトル缶 350ml
2. ハーゲンダッツ クレープグラッセ ティラミス
3. ハートキャッチプリキュア! 耐熱コップ
4. ハーゲンダッツ kajitsu マンゴー
5. トイザらス限定 スマイルプリキュア! なりきりキャラリートキッズ

注目JAN/EAN

1. クリアアサヒ スリムボトル缶 350ml
.
.
.
.

書いたコメント