以下は、Makefile 中の CFLAGS マクロのフラグについて記述します。 ディレクトリの読み込み。 もし、opendir(), readdir(), closedr() が標準ライブラリにあり、そ れが direct 構造体を使用しているならばなにもいらない。 direct 構造体を使用していなければ、-DSYSV_SYSTEM_DIR を CFLAGS マ クロに追加。 もし、標準ライブラリになければ、 lhdir.o を Makefile の OBJS マク ロに追加して、-DNONSYSTEM_DIR_LIBRARY を CFLAGS マクロに追加。 これは、デリレクトリを直接 open/read/write して opendir などをエ ミュレートする。 それでもだめならあきらめて -DNODIRECTORY を CFLAGS マクロに追加。 これを指定した場合、ディレクトリを指定してのアーカイブができなく なる。 メモリー比較、コピー、ゼロフィル関係。 bcmp、bcopy、bzero のライブラリがないマシン(多くの System-V マシ ン)は、-DNOBSTRING を CFLAGS マクロに追加。これによって memcmp、memcpy、memset を使うようになる。それもなければ、以下と 等価なものを書きなさい。 int bcmp (a, b, n) char *a, *b; int n; { while (n--) if (*a++ != *b++) return (a[-1] & 0xff) - (b[-1] & 0xff); return 0; } void bcopy (s, d, n) char *s, *d; int n; { while (n--) *d++ = *s++; } void bzero (d, n) char *d; int n; { while (n--) *d++ = 0; } 時刻を扱う構造体 sys/time.h で struct tm を定義していなければ(time.h に定義してあるならば)、-DSYSTIME_HAS_NO_TM を CFLAGS マクロに追加。 ファイル I/O (多くの System-V で)ftruncate システムコールがなければ、 -DNOFTRUNCATE を CFLAGS マクロに追加。 # これをつけることにより、テンポラリファイルからコピーするときに # rename システムコールを使わなくなるだけ。 ファイルモード もし、(まだ見たことないが運わるく)stat で得られるファイルモード の意味が以下のものと違うならば、-DNOT_COMPATIBLE_MODE を CFLAGS マクロに追加し、ソースをそれなりに書き直す。 #define UNIX_FILE_TYPEMASK 0170000 #define UNIX_FILE_REGULAR 0100000 #define UNIX_FILE_DIRECTORY 0040000 #define UNIX_SETUID 0004000 #define UNIX_SETGID 0002000 #define UNIX_STYCKYBIT 0001000 #define UNIX_OWNER_READ_PERM 0000400 #define UNIX_OWNER_WRITE_PERM 0000200 #define UNIX_OWNER_EXEC_PERM 0000100 #define UNIX_GROUP_READ_PERM 0000040 #define UNIX_GROUP_WRITE_PERM 0000020 #define UNIX_GROUP_EXEC_PERM 0000010 #define UNIX_OTHER_READ_PERM 0000004 #define UNIX_OTHER_WRITE_PERM 0000002 #define UNIX_OTHER_EXEC_PERM 0000001 #define UNIX_RW_RW_RW 0000666 これ以上は各自にまかせる。以上。健闘を祈る。 1989.09.18 Y.Tagawa