理学電機製IP(イメージングプレート)用プログラム
プログラムのコンパイルに際しての注意事項
- すべて、ANSI C 準拠のコンパイラを前提にしています。
- ただし、HP-UX 9.03 標準のコンパイラには ANSI C をサポートしていないため
(オプションで買わなければならない)、HP-UX 用に対策を考え、
プリプロセッサに _OLDHP を定義してやることで HP-UX 9.0x 標準の
C コンパイラでもコンパイルできるはずです。
ANSI C でない環境では、_OLDHP を明示的に指定しないと、コンパイルはできても
使えないはずです。
cc -D_OLDHP hogehoge.c ...
問題になるのは関数の宣言くらいだとは思いますが、計算が正しい結果を示さないのが
一番困るので、ANSI C のチェックをしています。
- 例外として、ANSI C 以外に、_HASUTIME を指定してコンパイルすると、
utime( ) ライブラリ関数と stat( ) システムコールが使えるものとします。
これらを用いることで、ファイル操作後の日付やモード(パーミッション)を
保存することなどを考えています。
Windows環境では gcc ではOKでした。lccではダメでした。
HP-UX 9.03 では、標準のcc、及び gcc 2.8.1 でOKでした。
FreeBSDでは3.3-RELEASE以降5.4-RELEASEまで確認した限りでは問題ありませんでした。
UNIX系のOSで(厳密でなくとも)POSIX準拠なら大丈夫なのだと思います。
ただし、gcc -ansi -D_HASUTIME ... 等とはできないと思いますので、utime( )等を
使う際には、gccでは -ansi はつけないことになります。
- 各型のサイズは、short が2バイト、long と float が4バイトであることを
前提にしています。大抵のシステムでは問題ないはずですが、IA64/AMD64などでは駄目かもしれません。
また、bmpheader.h と ipheader.h で定義された構造体には一部に
なお、一部のプログラムは、long long型(8バイト整数)を使用することができます。
なくても動きますが、処理系にあった場合には"_HAS_LONGLONG"を定義した方が
計算が速いコードになるでしょう。
- すべてのプログラムは、数値ライブラリを使ってます。
リンカオプションに忘れずに指定する必要があります。
また、すべて libm2.c にある関数を使っています。その他に、
R-AXISのファイルを扱うもの(すべてです^^;)では libip.c の関数を、
Bitmapファイルを扱うものは libbmp.c の関数を使いますので、
リンクを忘れないようにするか、必要な部分だけを本体に書き写す必要があります。
R-AXISとBitmapのファイルフォーマットはそれぞれ ipheader.h と bmpheader.h に
書かれていますので、コンパイル時にはソースファイルと同じディレクトリに
これらのヘッダファイルが必要です。
ITEXファイルについては、同様に itexheader.h 及び libitex.c が必要です。
PNGファイルは、libpng.c が必要です。
また、lib*.c等にはヘッダファイルlib*.h等も必要です。
その他に、PNGファイルを扱うためには、zlib ライブラリが必要です。
次をご覧ください。
- PNGファイルを扱う際には zlib が必要です。
zlib は、システムによっては既にインストールされている場合もあります。
Windows系では、zlib.LIB を静的リンクするべきでしょう。
ver1.0以降の zlib は、HP-UX 9.0系標準の cc では動作しないようです。
コンパイルは出来ますので、うまくすると使えるかもしれません。
ver0.95では、make test してもエラーはでませんが、実際には
正しく動作しないようです。よって、_OLDHP を定義してコンパイルしないと
いけないような環境では、PNG を扱うものは動作しないようにしました。
いずれのOSでも、静的にリンクしない場合は、ヘッダファイルとライブラリが
正しくインストールされているか、もしくはコンパイル時に場所を指定しないと
いけません。また、-lz 等でリンクすることもお忘れなく。
zlib 1.2.5 の download
zlib-1.2.5 コンパイル済みWin32スタティックリンクライブラリとヘッダ の download(VC++ 9.0)
zlib-1.2.3 コンパイル済みWin32スタティックリンクライブラリとヘッダ の download(BCC 5.51)
zlib-1.2.2 コンパイル済みHP-UX 9.03ライブラリとヘッダ の download
- libxray.c には原子散乱因子を計算するルーチンがありますが、
これは "International Tables for Crystallography" に記載されているものです。
また、一部別途入手したデータがありますが、これはlibxray.cの当該コードを
ご覧ください。このコードを利用した場合、実行時に著作権表示がされるはずです。
- 最近では tmpnam() の使用が推奨されず、代わりに mkstemp() の使用が推奨されています。
ANSI規格には含まれませんが、最近のシステムには付属していると思われますので、
_HAS_MKSTEMP を定義すれば使用できるようにしてあります。
一方、古いシステムでも安全にファイルを作成したいということもあり、
open() システムコールで確実にファイルの新規作成が出来る場合は、_HAS_OPEN を定義して
コンパイルしてください。
- rename() 関数がファイルの上書きを許さない場合、_HAS_STRANGE_RENAME を定義して
コンパイルすれば、「削除してから rename()」という動きをします。
- TIFFファイルを扱う際には tiff ライブラリが必要です。
tiff は、システムによっては既にインストールされている場合もあります。
Windows系では、libtiff.LIB を静的リンクするべきでしょう。
いずれのOSでも、静的にリンクしない場合は、ヘッダファイルとライブラリが
正しくインストールされているか、もしくはコンパイル時に場所を指定しないと
いけません。また、-ltiff 等でリンクすることもお忘れなく。
tiff-4.0.0beta6.tar.gz の download
tiff-4.0.0beta6 コンパイル済みWin32スタティックリンクライブラリとヘッダ の download(VC++ 9.0)
- その他、各ソースでのマクロ変数の意味は、以下のとおりです:
- PARANOID (ipf2rax.c)
- きちんと平均します(たぶん無意味)。
- WITH_PAUSE (ipinfo.c)
- 出力の後、停止します。Microsoft Windows(R)で、
ファイルをこのショートカットへドラッグしてファイル情報を表示する目的で
使用する際には便利でしょう。
- MAPFILE (ippeak.c)
- 計算で使用した楕円形を表示するR-AXISのファイルを生成する
オプションを作ります。
- OMMODE (ipprofile.c)
- ある矩形領域を計算対象外とするようなオプションを作ります。
ただし、実行時に時間がかかりますので、通常は"ipxprofile"という別の
プログラムとして作成するのがいいでしょう。
- USELINE (ipprofile.c)
- 内部的に使用するので変更しないでください。
- USE_IICCD (ipprofile.c)
- IICCDでの歪を補正して計算するオプションを作ります。
ただし、これが役立つのは、IIの中心とCCD画像の中心が一致している場合のみです。
通常は一致しませんので、あまり役立ちません。正確な補正には、ipiifix を
使用してください。
- RAXMODE (ipsub.c)
- R-AXISのメニューから計算を行わせるためのプログラムを
生成します。引数の指定方法などが通常とは異なります。
- _ENDIAN_L (libm2.c)
- リトルエンディアンだと決定します。
- _ENDIAN_B (libm2.c)
- ビッグエンディアンだと決定します。これらの2つのマクロは、
必ずしも必要ではありません。通常は、実行時にプログラムが適切に判断します。
もしもそれがおかしい場合は、いづれかを指定して再コンパイルしてください。
- USE_QSORT (libm2.c)
- クイックソートを有効にします。普通はシステム側で
持っているはずですので、要りません。
- USE_RANDOM (libm2.h)
- rand() のかわりに、random() を使用します。rand() は
乱数としてあまりよくないとされており、最近のシステムでは代わりに random() が
用意されていることが多いようです。プログラムごとに書き換えるのは面倒なので、
これを使うようにすれば関係する関数、定数を一度に切り替えることが出来ます。
つるたにの自己紹介へ戻る
つるたにのホームページへ戻る
turutani@scphys.kyoto-u.ac.jp