コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

超簡易ランチャ

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()