textpack 2.11 Copyright (c) 1990-1999, Altair☆ All rights reserved. ○ 概要 textpackはテキストファイルに次の処理を施します。 1. タブサイズの調整。 2. バックスペースとその直前の文字を除去。 3. 行末にある余分な空白文字を除去。 4. 2バイト空白文字を2つの1バイト空白文字に置換。 5. Ctrl-Z (EOF)を除去。 6. CR (0Dh)コードの調整 (DOS形式 <-> UNIX形式)。 7. 文末の複数の改行の除去。 たいていの場合は、これらの処理によって、テキストファイルをテキストファ イルとして読める形のままで、そのサイズを小さくすることができます。最近は、 大容量のストレージが手軽に利用できるので、副次的な目的でしかなくなってし まいましたが、最初はテキストファイルを小さくすることに主眼を置いていたの でtextpackという名前が付いています。 レンタルホームページを利用している場合など、限られたスペースしか利用で きない時に、textpackを本来の目的で使う必要性もまだまだ残っているのかも知 れません。また、たまに文末にゴミのような文字があるweb pageを見かけますが、 textpackは、この原因となる文末のCtrl-Z (EOF)を除去します。(^_-) Ctrl-Zは、テキストファイルのEOF (End of File)の意味で使われることがあ りますが、これはCP/Mが一世風靡していた頃の名残りでDOSに、そして、Windows や OS/2 WARPに引き継がれています。多くの場合、Ctrl-Zが無くても、Operating SystemはテキストファイルのEOFを認識できますし、これが残っているのはネッ トワークに流す文書としては好ましくありません。 また、何人かで協調してプログラムを書く時などにありがちなのですが、人に よってエディタのタブサイズが違い、インデントがガタガタになってしまうこと もあります(エディタによっては、それを未然に防ぐ機能を持ったものもあるよ うですが)。その予防に、textpackのタブサイズ調整機能を使うと良いかも知れ ません。 _________________________________________________________________ ○ 動作環境 【DOS版】 以下の何れかの環境のPC/AT互換機、PS/2で動作します。(PC/XTより前の世代 のマシンでは動作しません)。 * DOS 4.0以降のIBM DOS、MS-DOS、PC DOS (MS-DOS/VやWindowsのDOSプロ ンプトでの動作は未確認) * DR DOS 6.0、または、NOVELL DOS 7.0 * OS/2 2.0以降のDOSセッション (-eスイッチを機能させるには、eautil. exeがある \OS2ディレクトリにPATHが通ってなければなりません) 日本語のテキストを処理するには、以下の何れかの環境を前提としています。 * J4.0以降のIBM DOS/V、PC DOS/Vの日本語環境 (MS-DOS/VやWindowsのDOS プロンプトでの動作は未確認) * DR DOS 6.0/V * OS/2 J2.0以降のDOS/Vセッション (-eスイッチを機能させるには、 eautil.exeがある \OS2ディレクトリにPATHが通ってなければなりませ ん) 【OS/2 WARP版】 以下の環境のPC/AT互換機、PS/2で動作します。 * emx 0.9d FIX 02以降のランタイムライブラリをインストールしたOS/2 WARP 3.0以降 日本語のテキストを処理するには、 * emx 0.9 FIX 02d以降のランタイムライブラリをインストールしたOS/2 WARP J3.0以降のコードページ932、942、943のうちの何れかの環境。 添付のバイナリはWARP 3.0以降用です。OS/2 2.xxで使うにはemxで添付のソー スを chcp 437 gcc -O2 -Zomf -Zsmall-conv -s -Zlinkger /e:1 textpack.c で、コンパイルしなおしてください。 【Linux版】 実行形式を添付していません。 gcc -O2 -lm -s -otextpack textpack.cで、コンパイルしてください。 Linux以外のUN*Xでも利用できるかも知れませんが、動作確認していません。 _________________________________________________________________ ○ アーカイブの内容とコンパイル方法 ┏━━━━━━━━━━━┳━━━━━━━━━━┯━━━━━━━━━━┓ ┃ ┃ │ 実行形式 ┃ ┃ ┃ ファイル名 │DOS用 OS/2用 ソース ┃ ┣━━━━━━━━━━━╋━━━━━━━━━━┿━━━━━━━━━━┫ ┃ DOS用パッケージ ┃TPACK211.LZH │ ○ − ○ ┃ ┃ OS/2 WARP用パッケージ┃textpack-2.11.zip │ ○ ○ ○ ┃ ┃ Linux用パッケージ ┃textpack-2.11.tar.gz│ − − ○ ┃ ┗━━━━━━━━━━━┻━━━━━━━━━━┷━━━━━━━━━━┛ ファイル名は、CD-ROM収録の都合で変更される可能性もあります。 ソースとドキュメントの内容は、各パッケージ共通です。Linux用パッケージ と他のパッケージで、ドキュメントのファイル・サイズが異なりますが、これは、 行末のLF(0Ah)直前のCR(0Dh)の有無の違いです。Linux用パッケージに添付のド キュメントの文字コードはJISです。他のパッケージのドキュメントはシフトJIS です。 いずれのパッケージもソースコード中の日本語文字列は、シフトJISで、タブ サイズは 8、行末のCRは省いてあります。 Linux用パッケージには、実行形式を入れていません。 gcc -O2 -lm -s -o textpack textpack.cで、コンパイルしてください。 シフトJISのままでも、コンパイルは通る筈です。もし必要なら、nkfなどを利用 して変換してください。 Linux以外の環境向けには、実行形式を添付してありますので、コンパイルの 必要はありませんが、もし何らかの変更を加えてソースをコンパイルしなおした ければ、ソースの先頭のコメントとして方法を記してありますので、そちらをご 覧ください。 ちなみに、添付のDOS用実行形式のコンパイルには、Borland C++ 3.00日本語 版を、OS/2 WARP用実行形式のコンパイルにはemx 0.9d FIX 02を利用し、更に、 DOS用は LZEXE 0.91Jで、OS/2 WARP用はLxLite 1.2.1で圧縮しました。 _________________________________________________________________ ○ 変更履歴 ・2.11 * 拡張子がダブって表示されてしまうバグを修正しました。 ・2.10 * -p (HTML文書処理)、-v (適用オプション表示)、-V (バージョン表示) スイッチを追加しました。 * 拡張子が .htm、.html、.htmls、.shtmlの時、または、-pスイッチが明 示された時、
に挟まれた部分以外の空白文字をタブに変 換するようにしました。 * オプショナル・スイッチのディフォルト値を全面的に見直しました。特 に大きな変更としては、C言語タブのディフォルトを 4から 8にしまし た。 * Linux版でも拡張子をチェックするようにし、それによってオプショナ ル・スイッチのディフォルトが変わるようにしました。 * アーギュメント無しの場合、ヘルプを表示するようにしました。 * rootユーザから呼び出された場合、パーミション・チェックをしないよ うにしました。(Linux版のみ) ・2.09 * 2.07以前の版同様にOS/2拡張属性をディフォルトではセーブしないよう にしました。 * -e (OS/2拡張属性の保存)スイッチを追加しました。 ・2.08 * OS/2環境ではeautilを呼び出し、拡張属性を残すようにしました。(OS/2 版とDOS版のみ) * 処理後にファイル属性がクリアされてしまうことがあったのを対策しま した。(Linux版のみ) * 処理前のファイル・オーナやグループを残すようにしました。(Linux版 のみ)。ただし、それに失敗してもエラー・メッセージは発行しません。 * ターゲット・ファイルのクローズに失敗した場合のエラー・メッセージ を修正。 * 2.04で追加した連続領域の確保の試行が思ったほど効果が無かったので、 それを廃止しました。 * GPLドキュメント(COPYING)中のアドレス記載が古かったので、差し替え ました。 ・2.07 * unistd.hのinclude方法を変更しました(Linux版のみ)。 ・2.06 * 進行状況表示を、1秒(DOS版は0.8秒)間隔でしか行わないように制限し ました。 * オプション指定のチェックを厳密にしました。 ・2.04 * 配布条件をGPLに準じたものに改めました。 * パッケージを動作環境毎に分けました。 * 処理したテキストを書き出すためのファイルをオープンした直後、その 連続領域の確保を試みるようにしました。 * DBCS環境判別方法を変更。(OS/2 WARP版) * Linuxでも利用できるようにしました。 * Linux版とのソースコード・レベルでの互換のために、chsize()の代わ りにftruncate()を使うようにしました。(DOS版を除く) * 様々な表示環境に配慮し、ESC sequenceの利用をやめました。 * Copyright noticeとhelp出力先をstderrからstdoutに変更。また、Linux 版では、copyright noticeの表示をヘルプ・メッセージの表示のときの みとしました。 * Linux対応を機に、Switch文字は'-'のみとし '/'の利用をやめました。 * 2.02で廃止した-rwオプションの説明がhelp messageに残っていたのを 排除しました。 ・2.03 * 拡張子がhtmlsかshtmlの場合のディフォルト・パラメタを-s8 -t0 -r- -d- -qに変更しました。(2.10版で、更に変更が加わっています)。 ・2.02 * 途中にCtrl-Zが出現した時の処理を改良。 * 文末の複数のLFを除去するようにしました。 * 一部のweb browser向け調整(-rw)を廃止。 ・2.01 * Ver 2.00の以下の不具合を修正しました。 + 行末の無意味なスペースの削除処理で、全角スペースが対象外になっ ていたのを修正しました。 + Ctrl-Zで1行改行されてしまっていたのを修正しました。 ・2.00 * DOS用実行形式の他に、OS/2 WARP用実行形式も付けました。 * 複数のファイルを指定できるようにしました。 * ワイルドカードと@responseファイルを利用できるようにしました。(OS/2 WARP版のみ) * ディフォルトの適用基準となる拡張子を変更しました。 * いくつかのオプションを廃止しました。 ・1.00 (version 0.24以前に存在した以下の機能を廃止) * 英文用ASCII文字として不正な文字の削除/置換。 * BBSにアップロードするための行送り処理。 * QuickBBSへ日本語メッセージをアップした時の文字化け防止。 * テキストファイル中に含まれたANSI ESCシーケンスの除去。 * NUL (^@)、DEL (7Fh)の除去。 * バックアップ・ファイルの作成。 _________________________________________________________________ ○ 制約事項 * ワイルドカードは、DOS版では利用できません。 * Responseファイルは、OS/2 WARP版のみでしかサポートしていません。 * Linux版では、日本語に配慮していません。また、named spaceが短いファ イル・システムにも配慮していません(例えば、DOS FAT FS)。 * DOS版ならびにOS/2 WARP版においても、2バイト文字はシフトJISの日本 語しか扱えません。シフトJIS以外の日本語コードを含むテキストを処 理するにはnkfなどの漢字フィルタを併用してください。 * Version 2.0xから、スイッチのディフォルト値が変更になっていますの で、ご注意ください。 * Version 1.xxのパイプやリダイレクトによるテキスト処理を廃止しまし た。 * Version 0.24aまでのtextpackとは、互換性がありません。 _________________________________________________________________ ○ 使い方 textpack ファイル名 … [オプション] * 複数のファイルを指示することができます。その場合には、ファイル名 を空白で区切って並べます。 例: textpack foo.txt bar.html … * DOS版以外の環境では、ワイルドカードを利用できます。 * OS/2 WARP版では、responseファイルも利用できます。 + コマンドラインでファイル名やオプションを指定する代わりに、それ をテキストファイルに記述しておき、そのファイル名に『@』を付け て『@filename』形で指定すると、textpackは、それがコマンドライ ンから指定されたのと同じように解釈実行します。これをresponseファ イルと呼びます。 + responseファイルの中に指定するファイル名やオプションは、1行に1 つずつ書いてください。 + もし『@』で始まるファイルをresponseファイルとしてではなく、 textpackの処理対象のファイルとして指定したい場合には、それを 『"(引用符)』で括れば、responseファイルとして解釈されることは ありません。また『@filename』が指定された時、filenameが見つか らなければ、textpackは、それをresponseファイルとは解釈せず、 @filenameを処理対象として扱います。 _________________________________________________________________ ○ オプション 同一カテゴリのオプションが複数 指定された場合は、後(forward)の指定を 優先します。 -h ヘルプメッセージを表示します。 -V バージョン番号を表示して終了します。 -v ファイル毎に、それを処理するのに適用したオプションを表示しま す。 -- それより後(forward)に指定された『-』で始まるパラメタをオプショ ンとしてではなく、ファイル名として解釈します。 -s4 -s8 元のテキストのタブサイズ(4 or 8)を指定します。 ディフォルトは -s8です。 -t4 -t8 処理後のテキストのタブサイズ(4 or 8)を指定します。 ディフォルトは -t8です。 -t0 タブコードを全て空白文字に置換します。 -q- 引用符に挟まれた空白文字をタブへ置換しません。引用符に囲まれ た文字列中のタブは、-t指定の如何に拘らず、常に空白文字に置換 されます。 -q -q+ 引用符に挟まれた文字列も、タブ文字へ置換します。 -p-
に挟まれた空白文字をタブへ置換しません。引用符 に囲まれた文字列中のタブは、-t指定の如何に拘らず、常に空白文 字に置換されます。 -p -p+
に挟まれた文字列も、タブ文字へ置換します。 -d -d+ 処理前のファイル日時を維持します。 -d- 処理後にファイル日時を更新します。 -r+ 全ての行をCR、LFで終端します。 -r 空行はLFのみとし、それ以外の行はCR LFで終端します。 -r- 全ての行をCR無しでLFのみ終端します。 -e 処理後にOS/2拡張属性を保存します。これを指定しないと拡張属性 は失われます。このスイッチはOS/2版かDOS版をOS/2環境で実行す る場合にのみ有効で、eautil.exeのある \OS2ディレクトリにPATH が通っている時にのみ機能します。 CR (0Dh)は、本来、『カーソルを行頭に移す』という意味の制御コードで、 『カーソルを1行下に送る』LF (0Ah)とともにペアで使われて初めて『カーソル を次の行の行頭に移す』ことを意味するのですが、unix環境や、その上で発展し て来たHTMLには無意味なコードです。これの除去によってテキストファイルを読 める形のままでファイルサイズを小さくすることができます。逆にDOSのCOMMAND. COMやOS/2 WARPのCMD.EXEが解釈するバッチファイルや内部コマンド、REXX、一 部の言語環境は行末をCRで認識していますので、最終行を除き、行末は必ずCRと LFで終わらねばなりません。 CRの処理に関するディフォルトは、上記のようなことを配慮して設計してあり ます。 _________________________________________________________________ ○ ディフォルト ┏━━━━━━━━━━━━━━┳━━━━━━━━━┯━━┯━━━┓ ┃ ┃OS/2 DOS │OS/2│ ┃ ┃ 拡張子┃ & Linux 共通│DOS │Linux ┃ ┣━━━━━━━━━━━━━━╋━━┯━━━━━━┿━━┿━━━┫ ┃*.htm *.html *.htmls *.shtml┃ │-d- -q -p │-r- │ ┃ ┠──────────────┨ ├──────┼──┤ ┃ ┃ *.txt *.doc *.lst *.list┃ │-d -q -p- │-r │ ┃ ┠──────────────┨-s8 ├──────┼──┤ ┃ ┃ -pが指定された場合┃ │-d- -q │-r- │ -r- ┃ ┠──────────────┨-t8 ├──────┼──┤ ┃ ┃ *.bat *.cmd┃ │ │-r+ │ ┃ ┠──────────────┨ │-d -q- -p- ├──┤ ┃ ┃ その他┃ │ │-r │ ┃ ┗━━━━━━━━━━━━━━┻━━┷━━━━━━┷━━┷━━━┛ -d (keep date)オプションは、HTML以外のファイルに対しては、ファイル日時 を維持するよう-d+をディフォルトと決めています。これは、ソースコードその ものには変更がなく単にタブや空白文字の置換を行っただけなのに、日時が更新 されてしまうと、makeをかけた時に再compile、再 assembleされるのが疎ましい からです。そうならないように配慮しています。 逆に、Webで公開するテキストは、ファイル日時を更新しておかないと、proxy serverやbrowser自身のcache機能によって、最新のファイルを読み込んで貰えな いことがあります。HTMLには、ファイル日時を更新する-d-をディフォルトとし ています。 オプション指定のディフォルトを変更したい場合には、ソースを適当に書換え てください。 _________________________________________________________________ ○ 2バイト空白文字の置換 (DOS版とOS/2 WARP版のみの機能) WWWで全世界に情報を発信するゾと英語で書かれたWeb Pageに、全角の空白文 字が紛れ込んでしまっているのをたまに見かけます。全角文字はISO Latin1では 文字化けしてしまいます。書いた当人は、もちろんWeb Browserで読めることを 確認しているのでしょうが、日本語のWeb Browsing環境では、ちゃんと全角空白 が空白として表示できてしまうので、それが文字化けしてしまうであろうことす ら気付かない場合が多いようです。 textpackは、無条件に全角空白文字を、ふたつの半角空白に置換し、このよう な状況を防止します。 この機能は、textpackが日本語環境で起動された場合にのみ働きます。 _________________________________________________________________ ○ /? ヘルプメッセージは、オプション『--help』や『-h』の指定で表示できます。 『textpack /?』という指定は、ヘルプとは解釈されないので注意してください。 「ルート・ディレクトリ『/』の長さ1文字の全てのファイル『?』を処理せよ」 という指示と解釈します。 ただし、DOS環境では『/?』ヘルプ・メッセージ要求とするのが一般的なので、 そう解釈するようにしてあります。 _________________________________________________________________ ○ 最後に このソフトウェアは、作者のAltair☆自身が利用するために作成したものを公 開しています。万が一、このソフトウェアの利用によりAltair☆以外の者が何ら かの被害にあったとしても、Altair☆は一切の責を負いかねます。あらかじめご 了承ください。 Copyright (c) 1990-1999, Altair☆. textpack is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. textpack is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with textpack; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See COPYING for details. Altair☆ (NBG01720@nifty.ne.jp) http://www.vector.co.jp/authors/VA000199/