超簡易ランチャ
Luarida用の超簡易ランチャを作りました。
実行したいプログラム名を選ぶだけのシンプルなもので、目的はプログラム開発用です。httpで取得できるのが特徴で、PCでプログラムを書きつつ、そのPCでhttpサーバを動かしておき、この超簡易ランチャを用いてテスト実行するという感じです。エミュレータで使うにもこれがあるだけですごく楽です。
Androidマーケットに登録しましたが、ここにもダウンロードリンクを貼っておきます。
メニュの設定方法
メニュに表示されるプログラムは、luaridaフォルダにあるlauncher.txtに書かれています。追記や編集がしたい場合は、/luarida/launcher.txtを Jota Text Editor等のエディタソフトで書き換えてください。launcher.txtは下記のように、1行単位で実行プログラムのフルパスが書いてあるだけです。
http://192.168.1.1/sample.lua /mnt/sdcard/luarida/test/test.lua /mnt/sdcard/luarida/luarida.lua /mnt/sdcard/luarida/slauncher/slauncher.lua
ちなみに、このプログラムもLuaridaで書いているので、以下にソースを書いておきます。
------------------------------------------ --超簡易ランチャ ------------------------------------------ --関数宣言-------------------------------- main={} --mainメソッド readtxt={} --/luarida/launcher.txtファイルを読み込みます selectmenu={} --実行するプログラムを選択します getHttp={} --http.getを用いてファイルを取得します --グローバル変数宣言---------------------- Launchertxt = system.getCardMnt().."/luarida/launcher.txt" --ランチャデータファイル LauncherFile={} LuaridaPath = system.getCardMnt().."/luarida" --ランチャファイルを保存しているパス ------------------------------------------ mt={} mt.__newindex=function(mtt,mtn,mtv) dialog( "Error Message", "宣言していない変数 "..mtn.." に値を入れようとしています", 0 ) toast("画面タッチで実行を続けます", 1) touch(3) end mt.__index=function(mtt,mtn) dialog( "Error Message", "変数 "..mtn.." は宣言されていません", 0 ) toast("画面タッチで実行を続けます", 1) touch(3) end setmetatable(_G,mt) --------以下が実プログラム---------------- ------------------------------------------ --/luarida/launcher.txtファイルを読み込みます ------------------------------------------ function readtxt() local fp fp = io.open( Launchertxt, "r" ) --ランチャデータファイルを開きます if( not(fp) )then --ランチャデータファイルが無かったので、自動生成します fp = io.open( Launchertxt, "w+" ) if( not(fp) )then dialog( Launchertxt.." がオープンできません","変更しないで終了します", 1 ) return -1 else LauncherFile[1] = system.getAppPath().."/slauncher.lua" fp:write( LauncherFile[1] .."\n" ) io.flush() io.close( fp ) return 0 end else --ランチャデータを読み込みます local n = 1 while(true)do local str = fp:read("*l") --1行読み込み if( str==nil )then break end --読込むデータが無ければ終了 str = string.gsub( str,"\r","" ) --改行コードを外す LauncherFile[n] = str n = n + 1 end io.close(fp) end return 0 end ------------------------------------------ --実行するプログラムを選択します ------------------------------------------ function selectmenu() local i item.clear() for i=1, #LauncherFile do item.add( LauncherFile[i], 0 ) end return item.list("実行するプログラムを選んでください") end ------------------------------------------ --http.getを用いてファイルを取得します -- Error:-1 ------------------------------------------ function getHttp( url, putFilename ) http.get( url, putFilename ) local s = http.status() while( s==0 )do --ファイルを取得するまで待ちます。 s = http.status() end if( s~=1 )then if( s==2 )then dialog( "取得エラーです" , "URLのプロトコルが開けません", 1 ) elseif( s==3 )then dialog( "取得エラーです" , "接続できない、またはURLが見つかりません", 1 ) elseif( s==4 )then dialog( "取得エラーです" , "データ取得時にエラーが発生しました", 1 ) elseif( s==5 )then dialog( "取得エラーです" , "保存ファイルが開けませんでした", 1 ) elseif( s==6 )then dialog( "取得エラーです" , "接続がタイムアウトしました", 1 ) else dialog( "取得エラーです" , "httpスレッド起動時にエラーが発生しました", 1 ) end return -1 end return 0 end ------------------------------------------ --メインプログラム ------------------------------------------ function main() local i = 1 --ランチャデータを読み込みます if( readtxt()==-1 )then toast( "データエラーで終了します") return end --実行するファイルを選びます local num = selectmenu() if( num==0 )then toast( "簡易ランチャを終了します") return end --先頭がhttp://かどうか調べます if( string.sub( LauncherFile[num],1,7)=="http://" )then --http://だった local filename = LauncherFile[num] for i=1, string.len( filename ) do local cname = string.sub( filename, -i ) if( string.sub( cname, 1, 1 )=="/" )then filename = string.sub( cname, 2 ) break end end --filenameをダウンロードします toast( filename.." のダウンロード中です" ) if( getHttp( LauncherFile[num], LuaridaPath.."/"..filename )==-1)then toast( "エラーが発生したので終了します" ) return end system.setrun( LuaridaPath.."/"..filename ) --実行ファイルをセットします else --通常のluaファイルだった system.setrun( LauncherFile[num] ) --実行ファイルをセットします end end main()