=only って初めて見た
anarchy golf - the source code で =only という手続きが使われていた。動作はスタックの一番上にあるものを標準出力に出力して改行しない、という "=" の改行なし版のようなのだけど、web 上で読めるリファレンスに見当たらない。一体何なのかと思ってちょっと調べたら /usr/share/ghostscript/7.07/lib/gs_init.ps で定義されていた。
他にも幾つか便利そうな物があったのでメモ
- =only
- = の改行なし版
- getenv
- 環境変数を取得
- unread
- C でいう ungetc のようなもの
- .execn
- スタックにある手続きを n 個、深い方から exec する
- concatstrings
- 文字列を連結
- copyarray
- 配列をコピー (新しくオブジェクトを作る)
- copystring
- 文字列をコピー (新しくオブジェクトを作る)
- max
- スタックから 2 個取り出して大きい方をスタックに入れる
- min
- スタックから 2 個取り出して小さい方をスタックに入れる
多分言語の標準で決められたものではないので、いつでも使えるわけではないと思う。
追加- =string
- 256 文字の文字列バッファ。グローバルなので上書き注意。
- .runstdin
- 標準入力を実行。(%stdin)run よりも短く書けるが、{.runstdin}stopped としたときにエラーを捕まえてくれない。なぜだろう。
- ===
- == とほぼ同じだが、辞書の中身も表示してくれる。
- .sort
- 配列を手続きでソート。
[0 3 2 5 1]{lt}.sort
。GNU GhostScript 7.05 には無し、ESP Ghostscript 8.15 には有り。文字列にも使える。8.57 から文字列には使えなくなった。http://ghostscript.com/doc/current/Details8.htm#2007-04-22T175556.827285Z の影響
systemdict {pop ==}forall globaldict {pop ==}forall userdict {pop ==}forall
などとしても色々見つかる。
- .bitadd
- C とかでよくあるようなあふれた桁を捨てる足し算 (PostScript の add は整数型で表せる範囲を越えると実数に変わる)
- .cvbsi
- 文字列をビッグエンディアンの数値に変える。(abc)->0x616263 GNU GhostScript の 8.53 では使え、8.54 ではそのままでは使えない。どちらでも .cvbsi は gs_cidfn.ps で定義されているので、gs_cidfn.ps を起動時に読むか否かがこの間に変わったようだ。
- arccos
- 逆余弦
- arcsin
- 逆正弦
- .copytree
- 辞書を再帰的にコピー
追記:命令の追加や廃止について参考になる URL http://www.ghostscript.com/doc/current/History8.htm