年寄の昔話

先日、若者達につみき書店の組版の前処理はawk(おーく)でやっているという話をしたら「そんな言語聞いたことない」と言われた。

昔、次男の友達が家に遊びに来たとき、黒電話を見て「これ、なに?」と言われたとき以来のショックである。

そういえばその次男にもawkのスクリプトを書くアルバイトをしないかと持ちかけたときにも、「言語の歴史の授業できいたことがあるかも」と言われたっけ。

35年くらい前に中学校に就職したとき、PCを使うのは文書作成と成績処理の場面だった。
文書作成には「文作君」が縦長の画面がよかった。今も売っているのかな?

PCソフトでは、罫線の処理に独自性のあった「ひかり」もよく使った。
「松」も使ったっけ。

ところがそれまで日本電気のPC-9801VM2ではメモリーが足りなくて動かなかったが、京都マイコンクラブがRAMディスクを拡張メモリーとして使えるようにしてくれたんだったか(記憶がもう曖昧)、LaTeXがパソコンで動くようになった。

それ以来「一太郎ver3」を削除して、ワープロソフトとは縁を切った。

成績処理は表計算ソフトとして「mp」とか「ロータス123」とか「鶴」とかあったような記憶があるが、それと前後して awk を使うようになった。

表計算ソフトは履歴が残らないが、awkでテンポラリファイルを全部残していった方がミスが減る。

それからずっと仕事で使うソフトは sed, awk, LaTeX が主で、あとはエディタだ。

今から約10年前、それではオイラの仕事を他の人が再利用するのに不便だということでexcelを使い出した。それでsed とawk の出番はほぼなくなったが、ずっと現役で頑張ってきたソフトだ。

ただawkのgnu版のgawkをの日本語化してjgawkを使っていたが、数年前にとうとう更新されなくなった。
それで今はgawkを使っているが、特に支障はない。

いや本当に便利だから使ってみて欲しい。
例えば、『野村量の詰将棋560』の初出情報だけを引き出したいとしよう。

gawk -e"/発表年月/ {print}" nomura500.tex

これだけだ。さらに余分な部分を削除するスクリプトを書いてパイプでsedを通せば完璧。

次は実際に昔使っていた詰パラの解答を書くためのスクリプト。
たったこれだけの短いスクリプトだけど、結構便利に使っていた。

写真の2冊はつみき書店にとって宝物のような本。

#
#	詰将棋学校の解答書を作成する
#
#						1995.11.11	Koizumi


BEGIN{
while(1){
	nen = Input("年を入力してください")
	tsuki = Input("月を入力してください")
	ofname = "解答" nen tsuki ".tex"
	printf("\n%s\n",ofname)
	if("Y"==Yn("よろしいですか?  y/[n]")) break
}

#####	ヘッダーの出力	#####
printf("\\documentstyle[12pt,b5j]{jarticle}\n")	>>	ofname
printf("\\input{kaitou}\n")	>>	ofname
printf("\\begin{document}\n\n")	>>	ofname

#####	解答入力	#####
while(1){
	gakko=Input("学校名を入力してください")
	printf("\n\\宛先{%s}{%s}\n\n",tsuki,gakko)	>> ofname
	bango=Input("先頭の番号を入力してください")
	
	while(1){
		printf("\\解答{%d}\n{\n",bango)	>> ofname
		printf("%s:%d の解答を入力してください :\n",gakko,bango)
		
		tesuu = 1
			getline itte < "/dev/stdin"
			itte = Henkan(itte)
			printf("%d手:%s\n",tesuu,itte)
			kaito = itte
			tesuu++
		while(1){
			getline itte < "/dev/stdin"
			itte = Henkan(itte)
			if(itte == "M") break
			if(itte == "BS") continue
			printf("%d手:%s\n",tesuu,itte)
			kaito = kaito " ," itte

			if(length(kaito)>60){
				printf("\t%s\n",kaito)	>>ofname
				kaito = ""
			}
			tesuu++
		}
		printf("\t%s  迄 %d 手詰\n}\n{\n",kaito,tesuu-1)	>>ofname
		printf("短評を入力してください。終了は空行。\n")
		hyou = Input(">")
		while(hyou != ""){
			printf("\t%s\n",hyou)	>>ofname
			hyou = Input(">")
		}
		hyoka = Yn("評価を入力してください  (1桁)")
		printf("}{%s}\n\n",hyoka)	>>ofname
		printf("%s は,",gakko)
		if("Y" == Yn("これで終わりですか?   y/[n]")) break
		bango++
	}

	printf("総評を入力してください。終了は空行。\n")
	printf("\\総評{\n")		>>ofname
	hyou = Input(">")
	while(hyou != ""){
		printf("\t%s\n",hyou)	>>ofname
		hyou = Input(">")
	}
	printf("}\n\\署名")	>>ofname
	if("Y" == Yn("解答は,これで終わりですか?  y/[n]")) break
	printf("\n\\newpage\n")	>>ofname
}

#####	フッター出力	#####
printf("\n\\end{document}\n")	>>	ofname
}


#####	関数	#####
func Yn(msg,	ans){
	printf("%s :",msg)
	getline ans < "/dev/stdin"
	return toupper(substr(ans,1,1))
}
func Input(msg,		ans){
	printf("\n%s : ",msg)
	getline ans < "/dev/stdin"
	return ans
}
func Henkan(itte){
	itte=toupper(itte)
	gsub(/MIGI/,"右",itte)
	gsub(/HIDARI/,"左",itte)
	gsub(/FU/,"歩",itte)
	gsub(/KY/,"香",itte)
	gsub(/KE/,"桂",itte)
	gsub(/GI/,"銀",itte)
	gsub(/KI/,"金",itte)
	gsub(/HIKU/,"引",itte)
	gsub(/HI/,"飛",itte)
	gsub(/KA/,"角",itte)
	gsub(/OU/,"玉",itte)
	gsub(/GY/,"玉",itte)
	gsub(/TO/,"と",itte)
	gsub(/NG/,"全",itte)
	gsub(/NK/,"圭",itte)
	gsub(/NY/,"杏",itte)
	gsub(/RY/,"龍",itte)
	gsub(/UM/,"馬",itte)
	gsub(/NAMA/,"生",itte)
	gsub(/NARAZU/,"生",itte)
	gsub(/N/,"成",itte)
	gsub(/IKU/,"行",itte)
	gsub(/UE/,"上",itte)
	gsub(/DA/,"打",itte)
	gsub(/D/,"同",itte)
	gsub(/DO/,"同",itte)
	gsub(/YORI/,"寄",itte)
	gsub(/YORU/,"寄",itte)
	gsub(/TYOKU/,"直",itte)
	gsub(/SUGU/,"直",itte)
	gsub(/DU/,"直",itte)
	gsub(/UTU/,"打",itte)
	gsub(/AI/,"合",itte)
	return itte
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください