#!/usr/bin/perl $datafile = "./data.txt"; # ATOM Lite が読みにくるファイル $htmlfile = "./index.html"; # ベースとなる HTML ファイル if ($ENV{'REQUEST_METHOD'} eq 'POST') { # POST メソッドで送られてきた場合 read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { # GET メソッドで送られてきた場合 $query = $ENV{'QUERY_STRING'}; } #### ATOM Lite が読みにくるデータファイルを作成する #### open (DATA, $datafile); $data = ; # 既存のデータファイルを読み内容を取り出しておく if ($data =~ /s(\d),(\d\d):(\d\d) e(\d),(\d\d):(\d\d) m(\d)/) { $in{'st'} = $1; $in{'st_hour'} = $2; $in{'st_min'} = $3; $in{'ed'} = $4; $in{'ed_hour'} = $5; $in{'ed_min'} = $6; $in{'md'} = $7; } close (DATA); if ($query) { # データを受信していた場合の処理 open (DATA, ">", $datafile); foreach $data (split(/&/, $query)) { # 「&」で分割して全て処理する ($key, $value) = split(/=/, $data); # 「name=value」のそれぞれに分割して連想配列を作っていく $value =~ s/\+/ /g; # 以下ざっくりとした URL デコードする $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg; $value =~ s/\t//g; $in{"$key"} = $value; # value = $in{"$name"} の連想配列が出来上がる } # 送られてきた内容を適用してデータファイルを更新 if (!($query =~ /st=/)) { $in{'st'} = '0'; } # チェックボックスの挙動がアレなんで個別対応(汗 if (!($query =~ /ed=/)) { $in{'ed'} = '0'; } # チェックボックスの挙動がアレなんで個別対応(汗 if ($in{'st'}) { print DATA "s1,"; } else { print DATA "s0,"; } if ($in{'st_hour'}) { printf DATA "%02d:", $in{'st_hour'}; } else { print DATA "00:"; } if ($in{'st_min'}) { printf DATA "%02d ", $in{'st_min'}; } else { print DATA "00 "; } if ($in{'ed'}) { print DATA "e1,"; } else { print DATA "e0,"; } if ($in{'ed_hour'}) { printf DATA "%02d:", $in{'ed_hour'}; } else { print DATA "00:"; } if ($in{'ed_min'}) { printf DATA "%02d ", $in{'ed_min'}; } else { print DATA "00 "; } if ($in{'md'} eq "1") { print DATA "m1\n"; } elsif ($in{'md'} eq "2") { print DATA "m2\n"; } else { print DATA "m3\n"; } close (DATA); } open (IN, $htmlfile); # 以下ベースとなる HTML ファイルを読み込み設定時間などを反映させる print "Content-type: text/html; charset=UTF-8\n\n"; @lines = ; foreach (@lines) { if ($query) { s/(
)(<\/div>)/$1設定しました$2/; } if ($in{'st'} eq "1") { s/(class="st")/$1 checked/; } if ($in{'st_hour'}) { s/(class="st_hour" value=")($in{'st_hour'}")/$1$2 selected/; } if ($in{'st_min'}) { s/(class="st_min" value=")($in{'st_min'}")/$1$2 selected/; } if ($in{'ed'} eq "1") { s/(class="ed")/$1 checked/; } if ($in{'ed_hour'}) { s/(class="ed_hour" value=")($in{'ed_hour'}")/$1$2 selected/; } if ($in{'ed_min'}) { s/(class="ed_min" value=")($in{'ed_min'}")/$1$2 selected/; } if ($in{'md'}) { s/(name="md" value=")($in{'md'}")/$1$2 checked="checked"/; } print $_; } close (IN);