namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FORM tag in NMZ.head



馬場@京大宇宙物理 です。

現在の mknmz を使うと、NMZ.head の中に FORM タグが含まれています
(僕が最初にお願いしたんです)が、non CGI から
 % namazu -h keyword > results.html
のようにしてHTMLを出力した時には、そこからさらに検索できるわけでも
ない(検索するとエラーになる)のにくっついていて、これをブラウズして
いると逆にじゃまに感じます。なので、これを NMZ.form として分離して、
NMZ.form は CGI 経由の時だけ出力するようにしてみました。どうでしょ
うか。

# lynxcgi 経由の時にも NMZ.form を出力しないようにした方が良いと
# おもう(srnmz.c: 2050行目付近)んだけど、どのときに lynxcgi 経由
# なのかを判定する術を知らないのでそのままにしてあります。

このパッチを当てるときの注意点は、これを当てるとインデックスを作り
直す必要があるということです。旧来のNMZ.*を利用すると、NMZ.form が
無い、といって怒られます。まあ、NMZ.head を編集して NMZ.form を作
ればそれで済む話ではありますが。


ついでに、
 % namazu -h keyword > results.html
の出力に Content-type: が含まれるのは不格好だなとおもっていたので、
MIME_HEADER も CGI 経由の時だけ出力するようにしました。

# これらに伴って、srnmz.c の中の is_cgi はグローバル変数に変更。
--
馬場  肇 ( Hajime BABA )            E-mail: baba@xxxxxxxxxxxxxxxxxxxxxx
京都大学理学部宇宙物理学教室 博士課程一回生
--


--- mknmz.pl.orig	Fri Feb  6 18:18:16 1998
+++ mknmz.pl	Fri Feb  6 19:15:32 1998
@@ -80,6 +80,7 @@
 $HASH       = "$DBNAME.h";
 $REGLIST    = "$DBNAME.r";
 $HEADERFILE = "$DBNAME.head";
+$FORMFILE   = "$DBNAME.form";
 $FOOTERFILE = "$DBNAME.foot";
 $LOGFILE    = "$DBNAME.log";
 $SLOGFILE   = "$DBNAME.slog";
@@ -215,6 +216,10 @@
 <STRONG>インデックスの最終更新日時: <!-- DATE --> date <!-- DATE --></STRONG>
 </P>
 <HR>
+EOFheader
+
+## 検索プログラムが用いるFORMファイル ($FORMFILE) のサンプル
+$FORM_MSG = <<EOFform;
 <FORM METHOD="GET" ACTION="$CGI_ACTION">
 <P>
 <STRONG>検索式:</STRONG> 
@@ -238,7 +243,7 @@
 </P>
 <INPUT TYPE="HIDDEN" NAME="whence" VALUE="0">
 </FORM>
-EOFheader
+EOFform
 
 ## 検索プログラムが用いるフッタファイル ($FOOTERFILE) のサンプル
 $FOOTER_MSG = <<EOFfooter;
@@ -924,6 +929,7 @@
     &flist_index;
     &registration_file_put;
     &headfoot($HEADERFILE_, $file_count, $key_count);
+    &headfoot($FORMFILE_,   $file_count, $key_count);
     &headfoot($FOOTERFILE_, $file_count, $key_count);
     &lock_msg_put;
     &content_msg_put;
@@ -1037,6 +1043,7 @@
     rename($INDEXINDEX_, $INDEXINDEX);
     rename($HASH_,       $HASH);
     rename($HEADERFILE_, $HEADERFILE);
+    rename($FORMFILE_,   $FORMFILE);
     rename($FOOTERFILE_, $FOOTERFILE);
 
     # lock ファイルを削除する
@@ -1093,6 +1100,7 @@
     $HASH       = "$current_dir$PSC$HASH";
     $REGLIST    = "$current_dir$PSC$REGLIST";
     $HEADERFILE = "$current_dir$PSC$HEADERFILE";
+    $FORMFILE   = "$current_dir$PSC$FORMFILE";
     $FOOTERFILE = "$current_dir$PSC$FOOTERFILE";
     $LOGFILE    = "$current_dir$PSC$LOGFILE";
     $SLOGFILE   = "$current_dir$PSC$SLOGFILE";
@@ -1110,6 +1118,7 @@
     $INDEXINDEX_ = "$INDEXINDEX.$$";
     $HASH_       = "$HASH.$$";
     $HEADERFILE_ = "$HEADERFILE.$$";
+    $FORMFILE_   = "$FORMFILE.$$";
     $FOOTERFILE_ = "$FOOTERFILE.$$";
 }
 
@@ -1254,6 +1263,7 @@
     cp($FLIST,      "$FLIST.base");
     cp($INDEX,      $INDEX_);
     cp($HEADERFILE, $HEADERFILE_);
+    cp($FORMFILE,   $FORMFILE_);
     cp($FOOTERFILE, $FOOTERFILE_);
 
 
@@ -1328,6 +1338,7 @@
     else {
 	# ヘッダファイルとフッタファイルとそれぞれのメッセージを読み込み
 	$_ = $HEADER_MSG if $file eq $HEADERFILE_;
+	$_ = $FORM_MSG   if $file eq $FORMFILE_;
 	$_ = $FOOTER_MSG if $file eq $FOOTERFILE_;
     }
 
--- srnmz.c.orig	Fri Feb  6 18:18:16 1998
+++ srnmz.c	Fri Feb  6 19:24:49 1998
@@ -140,6 +140,7 @@
 static char *INDEXINDEX = "NMZ.ii";
 static char *HASH = "NMZ.h";
 static char *HEADERFILE = "NMZ.head";
+static char *FORMFILE = "NMZ.form";
 static char *FOOTERFILE = "NMZ.foot";
 static char *LOCKFILE = "NMZ.lock";
 static char *LOCKMSGFILE = "NMZ.msg";
@@ -189,6 +190,7 @@
 
 /* グローバルな変数 */
 
+int is_cgi = 0;			/* CGI 経由での起動なら 1 */
 int RListMax = 20;		/* 一度につきの結果出力の最大数 */
 int RListWhence = 0;		/* 結果出力の先頭の値 */
 int Debug = 0;			/* デバッグ用フラグ -d オプション */
@@ -214,7 +216,7 @@
 uchar *KeyItem[KEY_ITEM_MAX + 1];		/* 検索式の各項目を示すポインタ */
 /* わかち書きプログラムとオプション */
 
-FILE *Flist, *FlistIndex, *Index, *IndexIndex, *Header, *Footer, *Hash;
+FILE *Flist, *FlistIndex, *Index, *IndexIndex, *Header, *Form, *Footer, *Hash;
 
 
 /* CGI 変数取得用マクロ */
@@ -487,7 +489,7 @@
 /* デバッグ用のセコイ関数 */
 void error(const char *msg)
 {
-    if (HtmlOutput) fputs(MIME_HEADER, stderr);
+    if (HtmlOutput && is_cgi) fputs(MIME_HEADER, stderr);
     fprintf(stderr, "%s: something error occurred.\n", msg);
     exit(1);
 }
@@ -1437,6 +1439,8 @@
 	error(HASH);
     if (NULL == (Header = fopen(HEADERFILE, "rb")))
 	error(HEADERFILE);
+    if (NULL == (Form = fopen(FORMFILE, "rb")))
+	error(FORMFILE);
     if (NULL == (Footer = fopen(FOOTERFILE, "rb")))
 	error(FOOTERFILE);
 
@@ -1451,6 +1455,7 @@
     fclose(IndexIndex);
     fclose(Hash);
     fclose(Header);
+    fclose(Form);
     fclose(Footer);
 }
 
@@ -1812,7 +1817,7 @@
 
     if ((lock = fopen(LOCKFILE, "rb"))) {
 	fclose(lock);
-	fputs(MIME_HEADER, stdout);
+	if (is_cgi) fputs(MIME_HEADER, stdout);
 	if (NULL == (lockmsg = fopen(LOCKMSGFILE, "rb")))
 	    error(LOCKMSGFILE);
 	while (fgets(buf, BUFSIZ, lockmsg))
@@ -1827,7 +1832,7 @@
 {
     for (; *dbname; dbname++) {
 	if (*dbname == '/') {
-	    fputs(MIME_HEADER, stdout);
+	    if (is_cgi) fputs(MIME_HEADER, stdout);
 	    euctojisput(INVALID_DB_NAME, 0);
 	    exit(0);
 	}
@@ -2047,8 +2052,9 @@
 
     }
 
-    if (HtmlOutput) fputs(MIME_HEADER, stdout);
+    if (HtmlOutput && is_cgi) fputs(MIME_HEADER, stdout);
     if (HtmlOutput) headfootcat(Header, keystring);
+    if (HtmlOutput && is_cgi) headfootcat(Form, keystring);
     if (!keysplit(keystring))
 	searchmain();
     if(HtmlOutput) headfootcat(Footer, keystring);
@@ -2066,13 +2072,13 @@
     if (!cgiparamget(keystring))
         usage(argv0);   /* CGI じゃないと判明すれば usage 表示 */
     if (-1 == chdir(DEFAULT_DIR)) {
-        fputs(MIME_HEADER, stderr);
+        if (is_cgi) fputs(MIME_HEADER, stderr);
         fprintf(stderr, "Cannot chdir to %s\n", DEFAULT_DIR);
         euctojisput(ERROR_MSG, 0);
         exit(1);
     }
     if (DbName[0] && validdbname(DbName) && (-1 == chdir(DbName))) {
-        fputs(MIME_HEADER, stderr);
+        if (is_cgi) fputs(MIME_HEADER, stderr);
         fprintf(stderr, "Cannot open %s/%s.\n",
                 DEFAULT_DIR, DbName);
         exit(1);
@@ -2082,7 +2088,7 @@
 /* main 関数 */
 int main(int ac, uchar *av[])
 {
-    int i = 0, is_cgi = 0;
+    int i = 0;
     uchar keystring[BUFSIZ] = "";
     
 #ifdef FAST_CGI
@@ -2138,7 +2144,7 @@
             filesopen();
             f = 1;
 #ifdef FAST_CGI_DEBUG
-            puts(MIME_HEADER);
+            if (is_cgi) puts(MIME_HEADER);
             printf("DB Changed! DbName:[%s] before[%s]\n", DbName, before_dbname);
 #endif
             strcpy(before_dbname, DbName);