今までの手抜き置換実装ではなく、本格的にCONFIG丸ごと書き換えられるように作ってみた。
配布Luaスクリプトで設定を自動で書き換えたい場合なんかにどうぞ。
動作確認はしていますが、必ず動作する・設定ファイルを破壊しない保証はありません。
三条項BSDライセンス。
--設定データテーブル。無くてもいいっちゃいい。
ini={
APPAUTOTIME="",
APPINFO="",
APPNAME="",
APPNETWORKKEY="",
APPSSID="",
BRGNETWORKKEY="",
BRGSSID="",
CID="",
CIPATH="",
DELCGI="",
LUA_RUN_SCRIPT="",
LUA_SD_EVENT="",
MASTERCODE="",
PRODUCT="",
STA_RETRY_CT="",
TIMEZONE="",
UPDIR="",
VENDOR="",
VERSION="",
IP_Address="",
Subnet_Mask="",
Default_Gateway="",
DNS_Server1="",
DNS_Server2="",
Proxy_Name="",
Port_Number="",
APPMODE="",
DNSMODE="",
IFMODE="",
LOCK="",
NOISE_CANCEL="",
UPLOAD="",
WEBDAV="",
DHCP_Enabled="",
Proxy_Enabled="",
--[[
APPCHANNEL="",
HTTPDMODE="",
HTTPDUSER="",
HTTPDPASS="",
APPMINTIME="",
APPMAXTIME="",
REDIRECT="",
APPEXT="",
APPTYPE="",
AGINGTIME="",
WLANSTAMODE="",
DOMAINNAME="",
COMMAND="",
APMODE="",
NOGATEWAYMODE="",
SCRIPT="",
]]--
}
-- CONFIG READER ---
print "HTTP/1.1 200 OK\nPragma: no-cache\nCache-Control: no-cache\n";
--READ START
f = io.open("/SD_WLAN/CONFIG","r");
if(f==nil) then print ("Not Found.");return; end;
--ANALYZE
for l in f:lines() do
s = string.gsub(l," ","");
h = string.sub(s,1,1);
print(s);
if (h ~= "[") then
for key, value in string.gmatch(s, "([^=]+)=([^=]+)") do
ini[key] = string.gsub(value,"\r","");
end
end
end
f:close();
--CONFIG...
--ここで書き換えたい設定を記入する。
--ここで変更しなかったデータはそのまま残る。(順序はシャッフルされるが)
ini["DNSMODE"]="0";
--DELETE VOID KEY
for key,value in pairs(ini) do
if(value == "")then
ini[key]=nil;
end
end
--OUTPUT a-z
fa.rename("/SD_WLAN/CONFIG","/SD_WLAN/CONFIG.bak");
fo = io.open("/SD_WLAN/CONFIG","w");
print("-----")
print("[Vendor]\n");
fo:write("[Vendor]\r\n\r\n");
for i=0,26,1 do
n = 0x61 + i;
for key,value in pairs(ini) do
h = string.byte(string.lower(key));
if(h == n) then
print(key.."="..value.."");
fo:write(key.."="..value.."\r\n");
end
end
end
fo:close();
print "Done";