サンプルのLEDの点滅間隔制御は、設定用のCGIが、静的なHTMLになっているため、設定されている値の如何に関わらず、常に’1’を表示していて面白くない。ので、設定値を読み込んで、設定ページのフォームに値を埋めるようにしてみた。
何のことはない。’/’ を text/html の index.htmlにしてあった部分を変えて、’/’も cgi で、index_func()とかを実行するという風に変えただけ。
あとは、生成された、main.cに、indexページを生成するコードを書けばいいだけ。尤も、main.cに書き込むとごちゃごちゃしすぎるから、sample_cgi.cの中に、本体を作って、main.cはそれを呼び出すだけにした。
設定値を書き込むのに、安易にsprintf()を使ったら、「制限サイズを超える」とリンカに怒られてしまった。横着しないで、一桁ずつ書き込むことに。
void CgiScriptIndex(T_HTTP_SERVER *http)
{
static char page[512];
char *p;
strcpy(page, (char*)index_cgi1);
TMO tmo = LedTmo / 100;
unsigned long n;
unsigned int nz = 0;
p = &page[strlen(page)];
for (n = 1000000 ; n > 0 ; n /= 10) {
if (nz || tmo / n > 0) {
*p++ = '0' + (tmo / n);
tmo %= n;
nz = 1;
}
}
strcpy(p, (char *)index_cgi2);
HttpSendText(http, (char*)page, strlen(page) + 1);
}
{
static char page[512];
char *p;
strcpy(page, (char*)index_cgi1);
TMO tmo = LedTmo / 100;
unsigned long n;
unsigned int nz = 0;
p = &page[strlen(page)];
for (n = 1000000 ; n > 0 ; n /= 10) {
if (nz || tmo / n > 0) {
*p++ = '0' + (tmo / n);
tmo %= n;
nz = 1;
}
}
strcpy(p, (char *)index_cgi2);
HttpSendText(http, (char*)page, strlen(page) + 1);
}
あまり、凝ったページは作れないし、とりあえず内容がないようだから、512byte以内ってコトにしたけれど、まぁ、こんなものだろうか?
とりあえず、当初の目標通り、最初のフォームに、設定値が出るようになったので、プチうれしい(^^)。
コメント