#!/usr/local/bin/perl # いつのまにやら、Netscape用になってしまった。 # これじゃぁMosaicユーザは怒るよなぁ。 # そのうち、両方に対応できるようにしたい。 # ホスト(WWW Server)の処理速度が遅くて、CGIの出力に時間がかかると、 # ネスケの漢字判別がタコいことをしてくれる。注意が必要。 # # 編成表 CGIスクリプト ver0.3 # 品川区民管弦楽団 飯塚泰樹 # # hen2txtをベースに作る。 # # 使い方 # $command の後のスクリプト名を変更すること。 # hensei.cgi 1-0 交響曲編の作曲家リスト # hensei.cgi 2-0 # hensei.cgi 3-0 # hensei.cgi 1-100 交響曲編の作曲家作品リストデータ # hensei.cgi 2-100 # hensei.cgi 3-100 # # # 変更履歴 # 1996.6.19 作成 飯塚 # ???? 修正 いろいろ # # しくみ: # 引数の形は 1-2 のようにする。 # - の前が第1引数 後が第2引数 # 第1引数は曲の区分を表す。1は交響曲、2は協奏曲、3は管弦楽曲 # これはデータ(HENSEI.euc)の中の区分を意味している。 # 第2引数が0の時は、インデックスページを作成して終了する。 # 第2引数がそれ以外の場合は、第2引数を $target_kyoku として、 # $target_kyoku番目の曲以降、同じ作曲家のデータを表示し、終了する。 # 使い方: # $command の後のスクリプト名を変更すること。 # このファイルの一行目のjperlへのパスを変更すること。 # これを呼び出すページには、次のように書く # # 交響曲 #

# # 協奏曲 #

# # 管弦楽曲 #

# そうそう、提供者名とかも出るようにしないといけないなぁ。 # # $ARGV[0] =~ /(\d)-(\d+)/ ; # 引数の解析 エラー判定無し $target_kubun = $1; $target_kyoku = $2; $command = "hensei.cgi"; # #$| = 1; # cgi用 バッファリングしない。 #上の一行を入れたばっかりに、ネスケの表示がタコイカウニになってしまった。 #これに気がつくまでに、すごーく時間がかかったー。 #Mosaicならこんなことなかったのに。 if($target_kubun == 0){ # 隠しコマンド $| = 1; # cgi用 バッファリングしない。 # ここには上の一行が必須。 print "Content-type: text/plain; charset=iso-2022-jp\n\n"; system("cat $command"); $| = 0; exit 0; } elsif($target_kubun == 5){ # もいっちょ隠しコマンド system("cat HENSEI.euc"); exit 0; } # # $kyokubangouの扱いについて # #以外の行が出てきた場合、それを1行としてカウントする。 # 最初のデータの行を1行目とする。 # このようにして、作品ごとに番号を割り振る。 $kubun = 0; $sakkyokusya = ""; $line = 0; # そのうち、lineの制御を入れる。 $col = 0; # 何カラム目まで出力したか。 $kyokubangou = 0; # &mktitle(); open(HENSEI, "HENSEI.euc") || die "データファイルオープン失敗\n"; while(){ chop; $line ++; if($line == 1 && /^\#v(\S+)(\s+)(\S+)$/){ # 作曲者ごとにもバージョン番号を出そうかと思ったけど、 # ネスケの漢字コード判別がタコなのでやめた。 if($target_kyoku == 0){ &printversion($1, $3); } } elsif(/^\#(.*)$/o){ # データに対するコメント行 # バグがありました。 # コメントアウトしたつもりが、次のパターンにマッチすることがあったのです。 ; } elsif(/^([^:]*):([^:]+):([1-3]):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]+):([^:]*):([^:]*):([^:]*):([^:]*)$/o){ $kyokubangou++; # $1 作曲者番号 # $2 作曲者名 # $3 区分 # $4 曲名 #if($kubun != $3){ # $kubun = $3; # &kubun($3); #} # 曲区分が違う場合はおしまい if($3 != $target_kubun){ next; } if($target_kyoku == 0){ # インデックス表示時 if($sakkyokusya ne $2){ # 作曲者の表示 (作曲者が変わった場合のみ) $sakkyokusya = $2; print "

\n"; print ""; print "■ $sakkyokusya

"; print "\n"; } next; # インデックス表示時おしまい } # データ表示時 # 目的作曲家より下だった場合はおしまい。 if($kyokubangou < $target_kyoku ){ next; } elsif($target_kyoku == $kyokubangou){ $sakkyokusya = $2; # 作曲家名の表示 print "管弦楽編成表

\n"; #print "$sakkyokusya"; print "「$sakkyokusya」"; &no_kyoku($target_kubun); print "

\n


\n"; } if($sakkyokusya ne $2){ # 作曲者が変わったらおしまい。 last; } print " 曲名: $4
\n"; # 編成 # $5 時間 if($5 eq "0" || $5 eq "-"){ # 演奏時間のパッチ 1996.2.27 print " 演奏時間: 不明
\n"; } else { print " 演奏時間: $5 分
\n"; } print " 編成
\n"; &colzero(); &gakki("Fl",$6); &gakki("Pic",$15); &gakki("Ob",$7); &gakki("Ehr",$16); &gakki("Cl",$8); &gakki("BCl",$17); &gakki("Fg",$9); &gakki("Cfg",$18); &gakki("Hr",$10); &gakki("Tp",$11); &gakki("Crnt",$19); &gakki("Tb",$12); &gakki("Tub",$13); &gakki("Tim",$14); &gakki("Cym",$20); &gakki("Trg",$21); &gakki("大太鼓",$22); &gakki("小太鼓",$23); &gakki("Hp",$24); if($25 ne ""){ print "
\n その他: $25
\n"; } if($26 ne ""){ print "
\n コメント: $26
\n"; } print "
\n"; } elsif(/^(\s*)$/o){ # ヌル行 ; } elsif(/^(.+)$/o){ print STDERR "Error: データフォーマットエラー。\n"; print STDERR "Error: 「$1」という行は間違いです。\n"; } } if($target_kyoku != 0){ print "
--- \n"; print "品川区民管弦楽団 Home Pageへ戻る\n"; print "--- \n"; print "管弦楽編成表 Page へ戻る ---
\n"; print "\n"; exit 0; } print "\n\n"; print "このデータは、福島市民オーケストラの沼崎義種さんが入力したものを、\n"; print "奈良交響楽団の冨田健一と品川区民管弦楽団の丸岡恭一、飯塚泰樹が修正、\n"; print "追加したものです。\n
\n"; print "取り上げた作品は、アマチュアオーケストラの選曲候補に上がるものを基\n"; print "準(弦5部が基本)にしてあります。 \n"; print "データはスコアや解説書から持ってきたものですが、最終的には必ず実際\n"; print "に演奏で使う楽譜で確認して下さい。\n"; print "
\n"; print "一覧の形で印刷できる形のデータの最新版は、\n"; print "\n"; print "http://www.mic.atr.co.jp/~ohtsuki/hensei/から入手できます。\n"; print "
\n"; print "著作権は放棄されていませんが,データの再配布は自由です.再配布は,実費\n"; print "以上の金銭授受を伴わない形で自由に行って下さい.このデータをそのまま出\n"; print "版/販売する場合などは,全てのデータ提供者と上記4人の承認を得て下さい.\n"; print "電子的に再配布をする場合は,この再配布条件を添付して下さい.\n"; print "
\n"; print "誤記、追加データなどは随時受け付けております。 今はまだ不完全な\n"; print "データですが、みなさまの修正および追加によって、より価値あるものに\n"; print "していきたいと思います。追加データにつきましては、\n"; print "配布データ\n"; print "に付属のドキュメントに指定されたフォームで冨田まで電子メールでお送り\n"; print "下さい。\n"; print "
\n"; print "
飯塚泰樹 iizuka@trl.mei.co.jp
\n"; print "
冨田健一 ken-t@is.aist-nara.ac.jp
\n"; print "\n"; print "\n"; print "\n"; exit 0; ############################################################################# # col は大域変数 sub gakki { ($name, $num) = @_; if($num ne "-" && $num ne "0"){ $str = sprintf("%s: %s, ",$name,$num); $len = length($str); if($col + $len > 75){ &colzero(); } print $str; $col = $col + $len; } } sub colzero { print "\n "; $col = 0; } sub mktitle{ #print "Content-type: text/html; charset=iso-2022-jp\n\n"; print "Content-type: text/html \n\n"; print "\n"; print "\n"; print "\n"; print "管弦楽 編成表\n"; print "\n"; print "\n"; print "\n"; print "\n"; } sub no_kyoku{ local($target_kubun) = @_; if($target_kubun == 1){ print "の交響曲"; } elsif($target_kubun == 2){ print "の協奏曲"; } elsif($target_kubun == 3){ print "の管弦楽曲"; } } sub printversion{ local($vnum, $vdate) = @_; print "\n"; if($target_kubun == 1){ print "\n"; print "
交響曲編
\n"; } elsif($target_kubun == 2){ print "
協奏曲編
\n"; } elsif($target_kubun == 3){ print "
管弦楽曲編
\n"; } print "第$vnum版
\n"; print "($vdate)
\n"; print "品川区民管弦楽団 Home Pageへ戻る\n"; print "

\n"; print "管弦楽編成表 Page へ戻る\n"; print "

\n"; } sub printHanrei { print "\n"; print "\n"; print "\n"; print " 凡例\n"; #1234567890123456789012345678901234567890123456789012345678901234567890 print " Pic: ピッコロ Fl: フルート Ob: オーボエ Ehr: イングリッシュホルン\n"; print " Cl: クラリネット BCl: バスクラリネット EbCl: Es管クラリネット\n"; print " Fg: ファゴット Cfg: コントラファゴット Sax: サクソホーン\n"; print " Hr: ホルン Tp: トランペット Crnt: コルネット Tb: トロンボーン\n"; print " Tub: チューバ \n"; print " Tim: ティンパニ 大: 大太鼓 小: 小太鼓 Trg:トライアングル\n"; print " Cym: シンバル \n"; print " Hp: ハープ Pf: ピアノ Org: オルガン Cel: チェレスタ\n"; print " (数字)は持ち替え可能を示す。\n"; print " 数字+(数字)は正奏者と持ち替え奏者の人数を示す。\n"; print "\n"; }