#!/usr/mesh/bin/perl # # program name : commsg.cgi(comment message form) # # function : Show comment message input form to user. # # programmer : makoto takenaka (takesoft@mxs.meshnet.or.jp) # # copyright : (c) 1996, 1997 by Takesoft # # version(date) : # 1.0 (Nov 20, 1996) # 1.1 (Jan 24, 1997) Add conversion process of Japnese code and # (" & < >). # 1.2 (Jan 29, 1997) Change $cgi_dir to $commsg_cgi # 1.3 (Feb 3, 1997) Bug fix of title quoting process in (5.3) # #(1) Send header lines to browser and prepare jcode.pl. # print "Content-type: text/html\n\n"; require 'jcode.pl'; # #(2) set constants. # $web_code = "euc"; # "euc", "sjis" or "jis" $base_dir = "./"; # base directory of CLWB $commsg_cgi = "./commsg.cgi"; # URL of commsg.cgi $top_html = "${base_dir}top.html"; # top part of Web page $form_html = "${base_dir}form.html"; # message input form $msg_from[0] = 1; # first message number of $msg_file[0] $msg_file[0] = "${base_dir}msg001.html"; # first message file # $msg_from[1] = 201; # sample of second message file # $msg_file[1] = "${base_dir}msg002.html"; # sample of second message file # #(3) get parameters from sent data. # if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # @pairs = split(/&/, $buffer); # foreach $pair (@pairs) { ($pname, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; # &jcode'convert(*value, $web_code); # Convert to $web_code $value =~ s/&/&/go; # Change & to & $value =~ s/\x22/"/g; # Change " to " $value =~ s//>/g; # Change > to > $value =~ s/\x0D\x0A/\x0A/g; # Change CR LF to LF $value =~ s/\x0D/\x0A/g; # Change CR to LF # $parameters{$pname} = $value; } # $owner_mode = $parameters{'owner_mode'}; $to = $parameters{'to'}; $name = $parameters{'name'}; $url = $parameters{'url'}; $mail = $parameters{'mail'}; $title = $parameters{'title'}; $message = $parameters{'message'}; # $quote_code = $parameters{'quote_code'}; $quote_part = $parameters{'quote_part'}; # #(4) Top part of page # open(HTML_FILE, $top_html) ||&error_message("(4.1)Unable to open $top_html"); # print ; close(HTML_FILE); # #(5) Show message $to to be commented. # #(5.1) Find message file of number $to messge. # if($to > 0) { print "

Comment to Message $to

\n
\n"; foreach $i (0 .. $#msg_from) { if($msg_from[$i] > $to) { $n = $i - 1; last; } $n = $i; } # $msg_html = $msg_file[$n]; # #(5.2) Find $to message and show it on browser. # open(MSG_FILE, "$msg_html") || &error_message("(5.2):Unable to open $msg_html"); # $set_quote_message = 0; $set_quote_title = 0; $found = 0; while() { if(/\<\!--BM:MSGN=$to/) { while() { # #(5.3) Set $title and $message if $quote_part is exist. # if($quote_part) { if($quote_part =~ /title/) { unless($set_quote_title) { if(/.*((.*)<\/A>$/){$title = $2 ;} if($title) { unless($title =~ /^RE/i){$title = "RE:".$title;} $set_quote_title = 1; } } } if($quote_part =~ /message/) { if(/\(.*)/) { $message = $1; if($message =~ /(.*)\<\/PRE\>/ ) { $message = $1; $set_quote_message = 2; } else {$set_quote_message = 1;} } elsif($set_quote_message == 1) { if(/(.*)\<\/PRE\>/) { $message = $message.$1; $set_quote_message = 2; } else {$message = $message.$_;} } } } if( /\<\!--BM:MSGN=/ || /\<\!--EM:MSGN=/ ) { $found = 1; last; } print $_; } } if($found) {last;} } close(MSG_FILE); # #(5.4) Convert japanese code. # # if($set_quote_title > 0){&jcode'convert(*title, $quote_code, $web_code);} # if($set_quote_message > 1){&jcode'convert(*message, $quote_code, $web_code);} # #(5.5) Show quote form. # print <
EOF print <<'EOF'; Before FORM input, you can quote title and/or message shown above.
Quote following part: Title and Message Message Title

EOF unless($found) {print "

Message $to is not found in file $msg_html.

\n";} } # #(6) Show input form. # #(6.1) Open $form_html file and read each line. # open(HTML_FILE, $form_html) ||&error_message("(6.1)Unable to open $form_html"); # while() { # #(6.2)If this line contains key word, insert value parameter. # if($owner_mode) {s/NAME=\"owner_mode\"\s+VALUE=\"0\"/NAME=\"owner_mode\" VALUE=\"$owner_mode\"/;} if($to){s/NAME=\"to\"\s+VALUE=\"0\"/NAME=\"to\" VALUE=\"$to\"/;} if($name) { s/(NAME=\"name\")/$1 VALUE=\"$name\"/; s/VALUE=\"http:\/\/\"/VALUE=\"$url\"/; s/(NAME=\"mail\")/$1 VALUE=\"$mail\"/; } if($title){s/(NAME=\"title\")/$1 VALUE=\"$title\"/;} if($message){s/(<\/TEXTAREA>)/$message$1/;} print $_; } # close(HTML_FILE); # exit 0; # sub error_message { local($message) = @_; print "Error Message from commsg.cgi of Web page: \n"; print "$message\n"; exit 1; }