namazu-ml(avocado)


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

Re: pnamazu.cgi-98.10.01



山本と申します。

From: mithara <mithara@xxxxxxxxxxxxxxxx>
Subject: [namazu:01262] Re: pnamazu.cgi-98.10.01
Date: Thu, 1 Oct 1998 22:26:05 +0900

:> ところで、以前に投稿[namazu:01187]しましたように、htmlファイルは一太郎等
:> のファイルを変換したものであり、その原文書にもリンクを張ることを考えて
:> おります。
:> ファイル名は、原文書ファイル名(jtd).html (一太郎の場合)となっており、
:> パターンマッチング処理により簡単に 原文書ファイル名.jtd が復元でき、
:> このアンカーをタイトルの横に配置しようと考えております。
:> ところが、正直、どこにこの検索結果のタイトルをprintするスクリプトがあるの
:> かよくわかりません。(^ ^;;)
:> 教えていただけないでしょうか?

自分が管理している機械(SS20,sunos4.1.4,apache1.2.6,perl5.004 など)には、
wwwmgr@e1hs01<183> ls -l atm98-0050*
-rw-r--r--  1 wwwmgr       8228 Aug 11 19:27 atm98-0050.doc.gz
-rw-r--r--  1 wwwmgr      13032 Aug 11 19:27 atm98-0050.pdf.gz
-rw-r--r--  1 wwwmgr      13715 Aug 11 19:27 atm98-0050.ps.gz
-rw-r--r--  1 wwwmgr       9865 Aug 11 19:27 atm98-0050.txt

の様に.txt, .pdf, .ps, .doc, .rtf が大量にあって、一般的に
サイズの大きい pdf/ps/doc/rtf の各ファイルは、gzip で圧縮してあります。

それで、namazu-1.2.0 に、はずかしくて人には、とても見せられない強引な
パッチを当てて使っています。

1. ファイル名が、 hoge.txt ならば、
   hoge.doc.gz,hoge.pdf.gz,hoge.ps.gz,hoge.rtf.gz ファイルを探し、
   ファイルが有ればリンクを張る。
2. 圧縮されたファイルを取り扱えない人のために zcat に喰わせ転送
   するためのリンクを張る。

で検索結果の表示は、

1. ltd-cs-ra-pnni-02.03.txt (Text File) (score: 631) 
     ** SOURCE: Ted Tedijanto FORE Systems Inc. 1000 FORE Drive Warrendale,
 PA 15086 +1 724 742 6930 e-mail: tet@xxxxxxxx Fax: +1 724 742 6900 ** TITLE:
 Private Network-Network Interface (PNNI) v2.0 Living 
 | Text file | pdf file(gz) | expand pdf.gz | microsoft word file(gz) | expand doc.gz | ps file(gz) | expand ps.gz | 

みたいに成ります。| Text file |... の行が修正された出力で

<DD> | <A HREF="/docs/atmforum/ltd/ltd-cs-ra-pnni-02.03.txt">Text file</A> | 
<A HREF="/docs/atmforum/ltd/ltd-cs-ra-pnni-02.03.pdf.gz">pdf file(gz)</A> |
 <A HREF="/cgi-bin/expand?file=/usr/local/etc/httpd/htdocs/docs/atmforum/ltd/ltd-cs-ra-pnni-02.03.pdf">expand pdf.gz</A> | 
<A HREF="/docs/atmforum/ltd/ltd-cs-ra-pnni-02.03.doc.gz">microsoft word file(gz)</A> |
 <A HREF="/cgi-bin/expand?file=/usr/local/etc/httpd/htdocs/docs/atmforum/ltd/ltd-cs-ra-pnni-02.03.doc">expand doc.gz</A> | 
<A HREF="/docs/atmforum/ltd/ltd-cs-ra-pnni-02.03.ps.gz">ps file(gz)</A> |
 <A HREF="/cgi-bin/expand?file=/usr/local/etc/httpd/htdocs/docs/atmforum/ltd/ltd-cs-ra-pnni-02.03.ps">expand ps.gz</A> | 
<BR><BR>

次のパートは、汎用性の全くない namazu-1.2.0 に対するパッチです。適当に修正
して下さい。namazu-1.2.0/src で diff -u old new した物です。
--- Makefile.in~	Tue Jun 23 00:49:15 1998
+++ Makefile.in	Thu Aug  6 14:01:15 1998
@@ -277,6 +277,9 @@
 	cp ../contrib/* $(CONTRIBDIR)
 	cp namazu mknmz $(BINDIR_SYS)
 
+strip:
+	strip namazu namazu.cgi
+
 clean:
 	$(RM) $(TARGET) *.o config.cache config.log config.status
 
--- hlist.c.org	Tue Jun 23 00:49:15 1998
+++ hlist.c	Mon Aug 10 13:40:20 1998
@@ -348,6 +348,113 @@
     }
 }
 
+/* file が .txt だったら、.pdf.gz とかが有るかどうかチェックする */
+/* jamamoto hack */
+void gz_check(uchar * s)
+{
+    uchar filepath[256] = "/usr/local/etc/httpd/htdocs" ;
+    uchar expand_f[256] = "/cgi-bin/expand?file=/usr/local/etc/httpd/htdocs" ;
+    uchar tmp[256];
+    uchar url_base[256];
+    uchar url_str[BUFSIZ];
+    FILE *fp;
+    int i, j, k;
+    int cr = 0;
+
+    /*    strcpy (filepath, "/usr/local/etc/httpd/htdocs"); */
+    j = strlen(filepath);
+
+/* filepath は、/usr/local/etc/httpd/htdocs/docs/abc.txt
+   url_base は、/docs/abc.txt
+   みたいになっている筈なので 3 文字分戻って null を入れる。 */
+    for (i = 13, k = 0 ;; i++, j++, k++) {
+	if (s[i] == '"') {
+	    filepath[j - 3] = NULL;
+	    url_base[k - 3] = NULL;
+	    break;
+	} else {
+	    filepath[j] = s[i];
+	    url_base[k] = s[i];
+	}
+    }
+    strcpy (url_str, "<DD> | <A HREF=\"");
+    strcat (url_str, url_base);
+    strcat (url_str, "txt\">Text file</A> | ");
+    gz_output(url_str,cr);
+
+    strcpy(tmp, filepath);
+    strcat(tmp, "pdf.gz");
+    if ((fp = fopen(tmp, "r"))) {
+        strcpy (url_str, "<A HREF=\"");
+	strcat (url_str, url_base);
+	strcat (url_str, "pdf.gz\">pdf file(gz)</A> | <A HREF=\"");
+	strcat (url_str, expand_f);
+	strcat (url_str, url_base);
+	strcat (url_str, "pdf\">expand pdf.gz</A> | ");
+	gz_output(url_str,cr);
+    }
+    fclose(fp);
+
+    strcpy(tmp, filepath);
+    strcat(tmp, "doc.gz");
+    if ((fp = fopen(tmp, "r"))) {
+        strcpy (url_str, "<A HREF=\"");
+	strcat (url_str, url_base);
+	strcat (url_str, "doc.gz\">microsoft word file(gz)</A> | <A HREF=\"");
+	strcat (url_str, expand_f);
+	strcat (url_str, url_base);
+	strcat (url_str, "doc\">expand doc.gz</A> | ");
+	gz_output(url_str,cr);
+    }
+    fclose(fp);
+
+    strcpy(tmp, filepath);
+    strcat(tmp, "ps.gz");
+    if ((fp = fopen(tmp, "r"))) {
+        strcpy (url_str, "<A HREF=\"");
+	strcat (url_str, url_base);
+	strcat (url_str, "ps.gz\">ps file(gz)</A> | <A HREF=\"");
+	strcat (url_str, expand_f);
+	strcat (url_str, url_base);
+	strcat (url_str, "ps\">expand ps.gz</A> | ");
+	gz_output(url_str,cr);
+    }
+    fclose(fp);
+
+    strcpy(tmp, filepath);
+    strcat(tmp, "rtf.gz");
+    if ((fp = fopen(tmp, "r"))) {
+        strcpy (url_str, "<A HREF=\"");
+	strcat (url_str, url_base);
+	strcat (url_str, "rtf.gz\">rtf file(gz)</A> | <A HREF=\"");
+	strcat (url_str, expand_f);
+	strcat (url_str, url_base);
+	strcat (url_str, "rtf\">expand rtf.gz</A> | ");
+	gz_output(url_str,cr);
+    }
+    fclose(fp);
+    cr = 1;
+    gz_output("",cr);
+}
+
+void gz_output(uchar * s, int cr)
+{
+    if (HtmlOutput) {
+	if(cr == 0) {
+	    fputs(s, stdout);
+	    fputs("\n", stdout);
+	} else {
+	    fputs("<BR><BR>", stdout);
+	}
+    }else {
+	if(cr == 0) {
+	    fputs_without_html_tag(s);
+	} else {
+	    fputs("\n", stdout);
+	}
+    }
+}
+/* end of jamamoto hack */
 
 /* 文字列の URL をデコードする */
 void decode_url_string(uchar * s)
@@ -450,12 +557,19 @@
                 !strncmp("<DD><A HREF=\"", buf, 13)) {
                     decode_url_string(&buf[13]);
             }
-	    if (HtmlOutput)
-		fputs(buf, stdout);
-	    else {
-		jistoeuc(buf);
-		fputs_without_html_tag(buf);
+	    /* jamamoto hack */
+	    if ((NULL != strstr(buf, "<DD><A HREF=\"")) &&
+		 ( NULL != strstr(buf, ".txt"))) {
+		gz_check(buf);
+	    } else {
+		if (HtmlOutput)
+		    fputs(buf, stdout);
+		else {
+		    jistoeuc(buf);
+		    fputs_without_html_tag(buf);
+		}
 	    }
+	    /* end of jamamoto hack */
 	    if (j <= 0) {
                 if (!MoreShortFormat) {
                     printf("%d. ", i + 1);
--- namazu.h~	Tue Jun 23 00:49:15 1998
+++ namazu.h	Mon Aug 10 13:47:16 1998
@@ -139,6 +139,10 @@
 void nmz_mergesort();
 void sort_hlist();
 void replace_url();
+/* jamamoto hack */
+void gz_check();
+void gz_output();
+/* end of jamamoto hack */
 uchar URLdecode(uchar, uchar);
 void decode_url_string();
 void put_hlist();