プログラム名で処理を変えるdos2unix


『超速変形ジャイロゼッター』(2012)

オロチやらスープラがロボットに変形します。こんな変形ロボアニメがあったとは。超速変形なので、どのような仕組みで変形してるか分かりません。スポーツカー形態の時は、もちろんカッコいいのですが、ロボット形態はいまいち。やはり子供向けだからでしょうか。
昔海外の友人にセリカのパンフレットを見せたら、「スープラカッコイイネ」と言ってたのを思い出しました。セリカはアメリカではスープラという名前なのを初めて知った時(スープラは日本でも元々セリカだったらしいですが)、何故だか感動し、しばらくセリカのことをスープラと呼んでた時がありました。

さて今回も前回の続きで、dos2unixです。ソースを見ようと思います。
dos2unixパッケージを指定してソースを取得すれば、dos2unixとunix2dos両方のソースが格納されています。

takk@deb9:~$ mkdir crlf
takk@deb9:~$ cd crlf
takk@deb9:~/crlf$ ls
takk@deb9:~/crlf$ apt-get source dos2unix

~省略~

takk@deb9:~/crlf$ ls
dos2unix-7.3.4                  dos2unix_7.3.4-3.dsc
dos2unix_7.3.4-3.debian.tar.xz  dos2unix_7.3.4.orig.tar.gz
takk@deb9:~/crlf$ cd dos2unix-7.3.4/
takk@deb9:~/crlf/dos2unix-7.3.4$ ls
BUGS.txt       NEWS.txt    debian      po          unix2dos.h    wccos2.mak
COPYING.txt    README.txt  djgpp.mak   po-man      vc.mak        wccwin32.mak
ChangeLog.txt  TODO.txt    dos2unix.c  querycp.c   version.mk
DEVEL.txt      bcc.mak     dos2unix.h  querycp.h   wcc.mif
INSTALL.txt    common.c    emx.mak     test        wccdos16.mak
Makefile       common.h    man         unix2dos.c  wccdos32.mak
takk@deb9:~/crlf/dos2unix-7.3.4$ 

dos2unix.cとunix2dos.cが、それぞれdos2unixコマンド、unix2dosというわけですね。

dos2unix.cの方の冒頭のコメントを見てみます。

takk@deb9:~/crlf/dos2unix-7.3.4$ sed '/\*\//q' dos2unix.c
/*
 *  Name: dos2unix
 *  Documentation:
 *    Remove cr ('\x0d') characters from a file.
 *
 *  The dos2unix package is distributed under FreeBSD style license.
 *  See also http://www.freebsd.org/copyright/freebsd-license.html
 *  --------
 *
 *  Copyright (C) 2009-2016 Erwin Waterlander
 *  Copyright (C) 1998 Christian Wurll
 *  Copyright (C) 1998 Bernd Johannes Wuebben
 *  Copyright (C) 1994-1995 Benjamin Lin.
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *  1. Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright
 *     notice in the documentation and/or other materials provided with
 *     the distribution.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
 *  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 *  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
 *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 *  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 *  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
 *  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *  == 1.0 == 1989.10.04 == John Birchfield (jb@koko.csustan.edu)
 *  == 1.1 == 1994.12.20 == Benjamin Lin (blin@socs.uts.edu.au)
 *     Cleaned up for Borland C/C++ 4.02
 *  == 1.2 == 1995.03.16 == Benjamin Lin (blin@socs.uts.edu.au)
 *     Modified to more conform to UNIX style.
 *  == 2.0 == 1995.03.19 == Benjamin Lin (blin@socs.uts.edu.au)
 *     Rewritten from scratch.
 *  == 2.1 == 1995.03.29 == Benjamin Lin (blin@socs.uts.edu.au)
 *     Conversion to SunOS charset implemented.
 *  == 2.2 == 1995.03.30 == Benjamin Lin (blin@socs.uts.edu.au)
 *     Fixed a bug in 2.1 where in new-file mode, if outfile already exists
 *     conversion can not be completed properly.
 *
 * Added Mac text file translation, i.e. \r to \n conversion
 * Bernd Johannes Wuebben, wuebben@kde.org
 * Wed Feb  4 19:12:58 EST 1998
 *
 * Added extra newline if ^M occurs
 * Christian Wurll, wurll@ira.uka.de
 * Thu Nov 19 1998
 *
 *  See ChangeLog.txt for complete version history.
 *
 */
takk@deb9:~/crlf/dos2unix-7.3.4$ 

FreeBSDライセンスのようです。
ファイルからcr ‘0xd’を取り除く、とあります。crさえ取り除けばよいのならtrコマンドでもよいような気がしますが。
man dos2unixを見てみましょう。

dos2unix(1)                       2016-11-11                       dos2unix(1)

NAME
       dos2unix - DOS/Mac to Unix and vice versa text file format converter

SYNOPSIS
           dos2unix [options] [FILE ...] [-n INFILE OUTFILE ...]
           unix2dos [options] [FILE ...] [-n INFILE OUTFILE ...]

NAMEを見ると、Macも対応しているようです。dos2unix.cの処理の中でMacの処理もしているのでしょうか。コメントを探してみましょう。macで検索すると見つけやすいと思います。

takk@deb9:~/crlf/dos2unix-7.3.4$ grep mac dos2unix.c
      case FROMTO_MAC2UNIX: /* mac2unix */
      case FROMTO_MAC2UNIX: /* mac2unix */
  if ((strcmpi("mac2unix", ptr) == 0) || (strcmpi("mac2unix.exe", ptr) == 0)) {
    strcpy(progname,"mac2unix");
takk@deb9:~/crlf/dos2unix-7.3.4$ 

すぐに見つかりました。しかも、プログラム名がmac2unixかどうかのチェックをしているので、dos2unixという実行ファイルをmac2unixという名前にすれば、Macの改行コードに対応できる、ということになると思います。シンボリックリンクが貼られているのでしょうか。
mac2unixとunix2macコマンドについて探っていきます。まずは実行ファイルの場所。

takk@deb9:~$ which mac2unix unix2mac
/usr/bin/mac2unix
/usr/bin/unix2mac
takk@deb9:~$

次はシンボリックリンクを辿ります。

takk@deb9:~$ !! | xargs ls -l
which mac2unix unix2mac | xargs ls -l
lrwxrwxrwx 1 root root 8 11月 11  2016 /usr/bin/mac2unix -> dos2unix
lrwxrwxrwx 1 root root 8 11月 11  2016 /usr/bin/unix2mac -> unix2dos
takk@deb9:~$

それぞれdos2unixとunix2dosのシンボリックリンクになってました。プログラム名により処理を変えるというのは、なかなか面白いテクニックです。
物は同じなのに、名前が異なる。セリカとスープラのようです。
ちなみに自動車に無頓着過ぎる私は、セリカもスープラもとっくの昔に生産終了してることを今日知りました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA