[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:15378] Re: Printing on emacs



ふたみなのです。

From: Keiichi Suzuki <keiichi@nanap.org>
Subject: [plamo:15371] Re: Printing on emacs
Date: 17 Sep 2002 11:28:02 +0900

> ;; 手元に Plamo 2.2 の lpr はありませんので,確認はしていません
> ;; が, unix 系の一般的なコマンドとして。 m(_ _)m

 Plamo で稼働している lpr のソースが何処にあるのか探せなかったので、
どうせ BSD 由来だろうということで、NetBSD-1.6H のソースで調べました。

 コマンドライン引数は、getopt()で処理されます。lpr.c の場合は、

        while ((c = getopt(argc, argv,
            ":#:1:2:3:4:C:J:P:T:U:cdfghi:lmnprstvw:")) != -1) {
                switch (c) {
        (中略)
                case 'P':               /* specifiy printer name */
                        printer = optarg;
                        break;


となっています。ということで、

       lpr -Phoge foo.txt

であろうが、

       lpr -P hoge foo.txt

であろうが、printer という変数には hoge が代入されます。この後に、

        if (printer == NULL && (printer = getenv("PRINTER")) == NULL)
                printer = DEFLP;
        chkprinter(printer);

とあるので、Pオプションが指定されておらず、環境変数 PRINTER が定義されて
いないと、デフォルトのプリンター(lp)が使われますが、Pで指定している場合
は chkprinter() で /etc/printcap のエントリとの整合性等をチェックします。

# GNU ツールの場合ですと、getopt()ではなくて、getopt_long()を使っている
# のですが、基本的な動作は同じです。

        lpr -P foo.txt

とタイプすると、lpr: lpr.c: unknown printer になります。

 参考までに、4.2BSD の場合はこんなソースになっていました。

        while (argc > 1 && argv[1][0] == '-') {
                argc--;
                arg = *++argv;
                switch (arg[1]) {

                case 'P':               /* specifiy printer name */
                        if (arg[2])
                                printer = &arg[2];
                        else if (argc > 1) {
                                argc--;
                                printer = *++argv;
                        }
                        break;

-- ふ

References
[plamo:15322] Printing on emacs, MOUE Kiyoshi
[plamo:15371] Re: Printing on emacs, Keiichi Suzuki

[検索ページ] [メール一覧]
Plamo ML 公開システム