BinHEX は、簡易的な圧縮と、Base64 のような符号化、簡単なヘッダ/フッタの挿入の3段階で処理されるので、
それぞれ
簡易的な圧縮/伸張
- BinHexdecompress
- BinHexcompress
Base64のような符号化処理
- BinHexdecode
- BinHexencode
データに対しての装飾処理
- BinHexdecorate
- BinHexencorate
のオプションで個別に実装した。
それぞれを netstream スキームの Proxy オブジェクトとして、指定すればよい
BinHex エンコード
binhexsource.txt を BinHEX 符号化し、binhexsource.binhexが結果ファイル
BinHexCUI.exe En binhexsource.txt | StreamRelay.NET.exe -LocalPort 0 -RemotePort 0 -RemoteProxy netstream:///?BinHexEnCorate -RemoteProxy netstream:///?BinHexEnCode -RemoteProxy netstream:///?BinHexCompress -RemoteOutputFile binhexsource.binhex
つまり、
- BinHexCUI.exe からbinhexsource.txtを読みつつBinHEXフォーマット(ファイル名とかファイルサイズとかをデータに埋め込む)へ変換して、「ローカル」と呼称されるストリームへ渡す
- 「ローカル」と呼称されるストリームから読み込まれる
- 「リモート」と呼称されるストリームへ書き込まれる前に、
- まずは、BinHEX圧縮を実施する
- 次は、base64のような BinHEX符号化を実施する
- 最後に BinHEX用のヘッダ/フッタ(「(This file must be converted with BinHex 4.0)」という文字列を先頭に付与して ":(コロン)" でデータを囲む)を挿入して・・・
- 「リモート」と呼称されるストリームへ書き込まれる
BinHex デコード
BinHex符号化されたbinhexsource.binhexをBinHexデコードを実施して、binhexsource.txt.outを作成する
StreamRelay.NET.exe -LocalinputFile binhexsource.binhex -LocalPort 0 -RemotePort 0 -LocalProxy netstream:///?BinHexDeCorate -LocalProxy netstream:///?BinHexDeCode -LocalProxy netstream:///?BinHexDeCompress | BinHexCUI.exe De binhexsource.txt.out
- BinHexCUI.exe からbinhexsource.txtを読みつつBinHEXフォーマットへ変換して、「ローカル」と呼称されるストリームへ渡す
- 「ローカル」と呼称されるストリームからBinHEX符号化されたbinhexsource.binhexを読み込む
- 「ローカル」と呼称されるストリーム上で、BinHEX用のヘッダ/フッタを排除する
- 「ローカル」と呼称されるストリーム上で、BinHEXデコードを実施する
- 「ローカル」と呼称されるストリーム上で、BinHEX伸張を実施する
- 「リモート」と呼称されるストリームへ書き込まれる
- BinHexCUI.exeへ渡されて、BinHEXフォーマットから 普通のファイルbinhexsource.txt.outが作成される
binhexsource.txt = binhexsource.txt.out
BinHexCUI.exe
StreamRelay.NET.exe に実装できなかった部分を支援するサポートプログラム
BinHex エンコードの詳細
-
BinHexCUI.exe en a.txt
ファイル名とかサイズとかそういう前処理を実施する -
BinHexCUI.exe En a.txt | StreamRelay.NET.exe -LocalPort 0 -RemotePort 0 -RemoteProxy netstream:///?BinHexCompress
前処理後にBinHex圧縮を実施するとこんな感じ -
BinHexCUI.exe En a.txt | StreamRelay.NET.exe -LocalPort 0 -RemotePort 0 -RemoteProxy netstream:///?BinHexEnCode -RemoteProxy netstream:///?BinHexCompress
前処理からBinHex圧縮→BinHex符号化まで実施 -
BinHexCUI.exe En a.txt | StreamRelay.NET.exe -LocalPort 0 -RemotePort 0 -RemoteProxy netstream:///?BinHexEnCorate -RemoteProxy netstream:///?BinHexEnCode -RemoteProxy netstream:///?BinHexCompress
前処理からBinHex圧縮→BinHex符号化→BinHexデコレートまで実施して完成。という感じ
BinHexデコードは、この逆の処理を実施している。
ちなみに、エンコード処理は、書き込み側のストリームに割り当てるのだけど、引数の順番通りにストリームに割り当てていくので、引数の順番と処理の順番が逆転しているよ。
符号化コマンドとしての StreamRelay.NET.exe
符号化コマンドとしての StreamRelay.NET.exe