コンピュータを楽しもう! RSSフィード Twitter

2011-09-04

[]超簡易ランチャ 14:04

Luarida用の超簡易ランチャを作りました。

f:id:tarosay:20110904134454p:image

実行したいプログラム名を選ぶだけのシンプルなもので、目的はプログラム開発用です。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()
トラックバック - http://d.hatena.ne.jp/tarosay/20110904/1315112655