最高のフォントエンジン
引用元:https://www.ioccc.org/2004/newbern/newbern.orig.c
審査員・作者による説明:https://www.ioccc.org/2004/newbern/index.html
newbern.datのフォントをレンダリングする。
第1引数にフォントファイル、第2引数にレンダリングしたい文字列を指定する。
$ gcc -o newbern newbern.c
$ ./newbern newbern.dat "Hi!"
## ###
## ###
## ###
#######################################################
#######################################################
#######################################################
#######################################################
#######################################################
## ## ###
## ## ###
## ## ###
##
##
##
##
##
##
##
## ## ###
## ## ###
#######################################################
#######################################################
#######################################################
#######################################################
#######################################################
#######################################################
## ###
## ###
## ##
## ## ####
################################ ########
################################ ########
################################ ########
################################ ######
################################ ####
##
#### ############
###### #########################
######## ########################################
######## ########################################
######## ################################
#### ############
newbern.datを作るための機能もある。 第1引数だけ指定すると、標準入力からフォントデータを作る。
$ ./newbern newbern.dat A | ./newbern A
A+++1
A+++1
A+++1
A+++9
A+++i.
A+++Qj
A+++1i2
A+++1+j,
A+++++[j
A++++++j.
A++++++.j,
A++++++.[j
A++++++.+j.
A++++++.+Kj,
A++++++.++[J
A++++++.++Kj.
A++++++.++jjj,
A++++++.+gjjj,
A++++++.Kjjj:
A++++++.ijjJ
A++++++jjjj
A++++++jjj:
A+++1+ijjj
A+++1[jjj2
A+++1jjjJ
A+++ijjj
A+++ijj:
A+++ijJ
A+++ij,
A+++i:
A+++i
A+++1
A+++1
A+++1
おまけとして、引数を与えないときはモールス信号符号化する。
$ echo SOS | ./newbern
# # #
### ### ###
# # #
設定可能なバナー。
コード形状は"IOCCC"のバナー。ただしnewbern.datのフォントとは違う。
newbern.hintに作者コメントとして「さらなる暗号化が隠されている」とある。 第3引数に何かを指定すると、1文字表示するごとにフォントテーブルを1つずらす(ヴィジュネル暗号)。 次のように実行すると"AAA"ではなく"BCD"がバナーとして出てくる。
$ ./newbern newbern.dat AAA 1
さらに最後の方に、while(argc++ < 1) { ... }のようなコードがあるが、これはまともに実行する方法がないし、中にあるコードも意味があるようにみえなかったので、ただのパディングか。