開発者のための情報

サンプルサイズ情報5追加への対応

64bit

共有ライブラリのバージョン管理の方法

宣言や変数の統一

src/winlib.h

#define SWAP32(a) SWAPL(a)

SWAPL を SWAP32 に変更。 wintosac.c はそのままSWAPL(a)を使う。

  • pmon.c
  • ras2lips.c
  • ras2rpdl.c
  • wadd.c
  • wch.c read_data() 置換に伴い該当しなくなった。
  • wchch.c read_data() 置換に伴い該当しなくなった。
  • wtime.c read_data() 置換に伴い該当しなくなった。

#define SWAP16(a) SWAPS(a)

SWAPS を SWAP16 に変更。

  • pmon.c
  • recvt.c --> MKSWAP16(a) MKSWAPS(a)

#define SWAPF(a)

wintosac.c はそのまま。

  • final2finalb.c
  • finalb2final.c
  • finalb2seis.c
  • pick2finalb.c

#define LongFromBigEndian?(a)

  • wck.c
  • wck_wdisk.c

struct Shm{};

共有メモリの構造体。64 bit 環境OK.

/* structure of shared memory */
struct Shm {
  unsigned long  p;    /* write point */
  unsigned long  pl;   /* write limit */
  unsigned long  r;    /* latest */
  unsigned long  c;    /* counter */
  unsigned char  d[1]; /* data buffer */
};

/* structure of shared memory */
struct Shm {
  size_t  p;         /* write point */
  size_t  pl;        /* write limit */
  size_t  r;         /* latest */
  unsigned long  c;  /* counter */
  uint8_w  d[1];     /* data buffer */
};

に変更。

  • cormeisei.c
  • ecore2.c
  • extraw.c
  • ls8tel16_raw.c
  • order.c
  • raw_100.c
  • raw_ch.c
  • raw_mon.c
  • raw_raw.c
  • raw_shift.c
  • raw_time.c
  • recvnmx.c
  • recvs.c
  • recvt.c
  • recvt_LS7000.c
  • recvts.c
  • send_raw.c
  • send_raw_old.c
  • sends.c
  • shmdump.c
  • wdisk.c
  • wdiskts.c
  • wintowin.c

struct FinalB{}

バイナリ震源データの構造体。アライメントのために将来的にこれで動作するかどうかは確認していく必要がある。アライメントの問題があるので、この構造体への読み書きは FinalB_read()、FinalB_write() を使う事。

/* structure of binary hypo file (28 bytes / event) */
struct FinalB {
  int8_w time[8];  /* Y,M,D,h,m,s,s10,mag10 (in binary, not in BCD) */
  float  alat;     /* latitude */
  float  along;    /* longitude */
  float  dep;      /* depth */
  char   diag[4];  /* label */
  char   owner[4]; /* picker name */
};
  • final2finalb.c
  • finalb2final.c
  • finalb2seis.c
  • pick2finalb.c
  • win.c

static int b2d[];

64 bit 環境OK.

  • order.c
  • raw_time.c
  • recvt.c
  • recvts.c
  • send_raw.c
  • shmdump.c
  • winlib.c
  • winrawsrv.c
  • wtime.c

static unsigned char d2b[]; --> static uint8_w d2b[];

64 bit 環境OK.

  • order.c
  • raw_time.c
  • recvnmx.c
  • send_raw.c
  • winlib.c
  • wtime.c

static int e_ch[241] (static uint16_w ?)

for old format (data before May, 1990)

  • fromtape.c ---> defined, but not used.
  • rtape.c
  • win.c

共通関数のライブラリ化

win system のコマンドの中には共通で使っている関数が数多くある。また、winform() のように、自作のプログラムからでも呼びたいような関数もあることから、これらの関数をライブラリ化することにした。共有ライブラリを作るのは色々と面倒そうなので、static ライブラリのみである。libtool を使うと簡単に共有ライブラリが作成出来たので、2010/04/01 以降では共有ライブラリも作ることが出来る (configure のオプションで細かな制御が可能)。ライブラリは ${prefix}/lib/ の下にインストールされる。下記のいくつかのファイルに分かれており、それぞれに関数が記述されている。

2010年9月17日現在ライブラリ化されているのは、下記の関数である。

src/winlib.c

mklong() --> mkuint4()

64 bit 環境対応のため名前の変更。

unsigned long mklong(unsigned char *);
↓
uint32_w mkuint4(const uint8_w *);
  • cormeisei.c
  • dewin.c
  • ecore.c
  • ecore2.c
  • extraw.c
  • fromtape.c
  • insert_raw.c
  • insert_trg.c
  • ls8tel16_raw.c
  • order.c
  • pmon.c
  • raw2mon.c
  • raw_100.c
  • raw_ch.c
  • raw_mon.c
  • raw_raw.c
  • raw_shift.c
  • raw_time.c
  • recvnmx.c
  • recvs.c
  • recvt.c
  • recvts.c
  • rtape.c
  • send_raw.c
  • send_raw_old.c
  • sends.c
  • shmdump.c
  • wadd.c
  • wadd2.c
  • wch.c
  • wchch.c
  • wdisk.c
  • wdiskts.c
  • wed.c -----> byte-order-free でない関数であり、read_data() の中で適宜対応していたが、byte-order-free のmklong() が使えるように書き換えた。
  • win_system.c
  • winadd.c
  • winrawreq.c
  • wtape.c
  • wtime.c

mkshort() --> mkuint2()

64 bit 環境対応のため名前の変更。

unsigned short mkshort(unsigned char *);
↓
uint16_w mkuint2(const uint8_w *);
  • ecore.c
  • ecore2.c
  • recvnmx.c
  • recvt.c
  • send_raw.c
  • send_raw_old.c

winform()

64 bit 環境OK.

int winform(long *, unsigned char *, int, unsigned short);
↓
WIN_bs winform(int32_w *, uint8_w *, WIN_sr, WIN_ch);
  • cormeisei.c
  • ecore.c
  • ecore2.c
  • ls8tel16_raw.c
  • ls8tel16_win.c
  • raw_100.c
  • raw_shift.c
  • raw_time.c
  • recvnmx.c
  • wform.c
  • /*winform.c*/
  • wintowin.c
  • wtime.c

win2fix()

many imcompatible pointer type!!! int <==> long)

64 bit 環境OK.

int win2fix(unsigned char *, long *, long *, long *);
↓
uint32_w win2fix(uint8_w *, int32_w *, WIN_ch *, WIN_sr *);
  • cormeisei.c
  • dewin.c ----> another high sampling rate version
  • ecore2.c
  • fromtape.c
  • raw2mon.c
  • raw_100.c
  • raw_mon.c
  • raw_shift.c
  • raw_time.c
  • shmdump.c
  • wtime.c
  • win.c (added 2010/06/17)

bcd_dec()

64 bit 環境OK.

int bcd_dec(int [], unsigned char *);
↓
int bcd_dec(int [], uint8_w *);
  • dewin.c ---> different definition.
  • ecore.c ---> different definition.
  • fromtape.c
  • insert_raw.c
  • insert_trg.c
  • ls8tel16_win.c
  • order.c
  • recvt.c
  • recvts.c
  • rtape.c
  • shmdump.c ====> bcd_dec2
  • wadd.c ---> different definition.
  • wadd2.c ---> different definition.
  • wchasn.c
  • wck_wdisk.c
  • wdisk.c
  • wdiskts.c
  • wed.c ---> different definition.
  • win.c ---> different definition.
  • win2raw.c
  • winadd.c

dec_bcd()

64 bit 環境OK.

int dec_bcd(unsigned char *, unsigned int *);
↓
int dec_bcd(uint8_w *, int *);
  • wdiskts.c
  • win.c
  • winadd.c

adj_time_m()

  • adj_time_m.c
  • dewin.c
  • insert_raw.c
  • insert_trg.c

adj_time()

  • dewin.c
  • ecore.c
  • elist.c
  • events.c
  • final2finalb.c
  • fromtape.c
  • pick2finalb.c
  • pmon.c
  • rtape.c
  • wed.c
  • wtape.c ====> adj_time_wtape

adj_sec()

  • final2finalb.c
  • pick2finalb.c
  • win.c ===> adj_sec_win()

time_cmp()

  • dewin.c
  • ecore.c
  • elist.c
  • events.c
  • fromtape.c
  • insert_raw.c
  • insert_trg.c
  • rtape.c
  • wadd.c
  • wadd2.c
  • wdiskts.c
  • wed.c
  • win.c ====> time_cmp_win 70 --> 25
  • win2raw.c
  • winadd.c

get_time()

64 bit 環境OK.

win.c は get_time_win() と名前変更。

  • events.c
  • wdiskts.c
  • win_log.c

strncmp2()

  • events.c
  • find_picks.c
  • pmon.c
  • win.c
  • wtape.c

strcmp2()

  • events.c
  • fromtape.c
  • pmon.c
  • rtape.c
  • wdisk.c
  • wdiskts.c
  • wtape.c

read_onesec_win(FILE *, uint8_w *)

  • dewin.c <=== read_data() was replaced.
  • ls8tel16_win.c
  • wadd.c <=== read_data() was replaced.
  • wadd2.c <=== read_data() was replaced.
  • wchasn.c
  • wck.c <=== read_data() was replaced.
  • wck_wdisk.c <=== read_data() was replaced.
  • win2raw.c

read_onesec_win2(FILE *, uint8_w *, uint8_w *)

すべて、read_data() の置換。

  • wch.c <=== read_data() was replaced.
  • wchch.c <=== read_data() was replaced.
  • wed.c <=== read_data() was replaced.
  • wtime.c <=== read_data() was replaced.

Shm_init()

  • cormeisei.c
  • ecore2
  • extraw.c
  • ls8tel16_raw.c
  • order.c
  • raw_100.c
  • raw_ch.c
  • raw_mon.c
  • raw_raw.c
  • raw_shift.c
  • raw_time.c
  • recvnmx.c
  • recvs.c --> bug fixed?
  • recvt.c
  • recvt_LS7000.c
  • recvts.c --> buf fixed?
  • winrandsimu6.c
  • wintowin.c

Shm_read_offline()

  • shmdump.c

Shm_create_offline()

  • winrandsimu6.c
  • wintowin.c

win_chheader_info()

  • recvt.c
  • wck.c
  • shmdump.c
  • winlib.c (win2fix())

get_mon()

  • fromtape.c
  • raw2mon.c
  • raw_mon.c

compress_mon()

  • fromtape.c
  • raw2mon.c
  • raw_mon.c

make_mon()

  • fromtape.c
  • raw2mon.c

t_bcd()

  • order.c
  • wdiskts <=== time2bcd() was replaced.
  • winadd <=== time2bcd() was replaced.

bcd_t()

ローカル関数 mktime2() が必要。

  • order.c
  • wdiskts <=== bcd2time() was replaced.
  • winadd <=== bcd2time() was replaced.

time_cmpq()

qsort()用の比較関数

  • winadd.c
  • wdiskts.c

get_sysch()

  • win_system.c
  • wdiskts.c
  • wadd.c ===> get_syschnum()に名前変更

win_get_chhdr()

  • ls8tel16_raw.c
  • raw_time.c
  • wchasn.c

rmemo5()

  • insert_raw.c
  • insert_trg.c

rmemo6()

  • insert_trg.c

wmemo5()

  • insert_raw.c
  • insert_trg.c

i_matrix()

  • wck_wdisk.c

get_merge_data()

  • insert_raw.c
  • insert_trg.c

get_sysch_list()

  • insert_trg.c
  • wck_wdisk.c

get_chlist_chfile()

  • insert_trg.c

get_select_data()

  • insert_trg.c

WIN_time_hani()

  • insert_trg.c

read_channel_file()

  • wck_wdisk.c

mt_pos()

  • fromtape.c
  • rtape.c

read_exb1()

read_exb() の置き換え。ライブラリ化出来るように引数等の変更を行った。

  • fromtape.c
  • rtape.c

str2double()

  • elist.c
  • hypomhc.c ==> str2double_h に変更。
  • win.c

shift_sec()

  • raw_time.c
  • send_raw.c
  • wtime.c

read_param_line()

一部ソースでの read_param() の置換。

  • evdetect.c
  • events.c --- read_param() の中で、read_param_line() を呼んでいる。
  • pmon.c
  • setexb.c
  • wtape.c

insert_raw.c, insert_trg.c, relaym.c はインターフェースが異なるのでそのまま。

dir_check()

  • recvstatus3.c
  • recvstatus4.c

check_ts()

  • recvt.c
  • recvt_LS7000.c
  • recvts.c

src/filter.c

filter by M.SAITO

butlop(), buthip(), butpas(), tandem()

  • dewin.c
  • ecore.c
  • ecore2.c
  • shmdump.c
  • win.c

src/win_log.c

リアルタイム処理のプログラム関係のログ出力用関数。write_log() は卜部さん作成のコードと引数が異なるので注意。syslogd(8) に対応させたりとかで引数が多く必要になったので、これらをグローバル変数で定義することにした。write_log() 関数を使う時は、下記の変数をグローバル変数で定義する事。

char *progname;    /* program name */
char *logfile;     /* logfile name */
int  syslog_mode;  /* syslog mode flag */
int  exit_status;  /* exit status */

write_log()

  • cormeisei.c
  • ecore2.c
  • extraw.c
  • ls8tel16_raw.c
  • order.c
  • pmon.c
  • raw_100.c
  • raw_ch.c
  • raw_mon.c
  • raw_raw.c
  • raw_shift.c
  • raw_time.c
  • recvnmx.c
  • recvstatus.c
  • recvstatus3.c
  • recvs.c
  • recvt.c
  • recvts.c
  • relay.c
  • relaym.c
  • send_raw.c
  • send_raw_old.c
  • sends.c
  • tcp_connect.c
  • udp_accept.c
  • udp_dest.c
  • wdisk.c
  • wdiskts.c
  • winrawcli_test.c
  • winrawsrv.c

err_sys()

  • cormeisei.c
  • ecore2.c
  • extraw.c
  • ls8tel16_raw.c
  • order.c
  • raw_100.c
  • raw_ch.c
  • raw_mon.c
  • raw_raw.c
  • raw_shift.c
  • raw_time.c
  • recvnmx.c
  • recvstatus.c ==> close(sock) はは削除されたことになる。直後で exit() するので多分大丈夫だろう。
  • recvstatus2.c ==> close(sock) はは削除されたことになる。直後で exit() するので多分大丈夫だろう。
  • recvstatus3.c
  • recvs.c
  • recvt.c
  • recvts.c
  • relay.c
  • relaym.c
  • send_raw.c ==> close(sock) は削除されたことになる。直後で exit(0) するので多分大丈夫だろう。
  • send_raw_old.c
  • sends.c ==> close(sock) はは削除されたことになる。直後で exit() するので多分大丈夫だろう。
  • shmdump.c ==> err_sys_local() に変更。
  • wdisk.c
  • wdiskts.c
  • winrawcli_test.c
  • winrawsrv.c

end_program() (旧 ctrlc())

ctrlc() から end_program() に関数名を変更。

  • cormeisei.c
  • ecore2.c
  • extraw.c
  • ls8tel16_raw.c
  • order.c
  • raw_100.c
  • raw_ch.c
  • raw_mon.c
  • raw_raw.c
  • raw_shift.c
  • raw_time.c
  • recvnmx.c
  • recvstatus.c ==> close(sock) はは削除されたことになる。直後で exit() するので多分大丈夫だろう。
  • recvstatus2.c ==> close(sock) はは削除されたことになる。直後で exit() するので多分大丈夫だろう。
  • recvs.c
  • recvt.c
  • recvts.c
  • relay.c ==> close(sock_in) と close(sock_out) は削除されたことになる。直後で exit(0) するので多分大丈夫だろう。
  • relaym.c
  • send_raw.c ==> close(sock) は削除されたことになる。直後で exit(0) するので多分大丈夫だろう。
  • send_raw_old.c
  • sends.c ==> close(sock) はは削除されたことになる。直後で exit() するので多分大丈夫だろう。
  • wdisk.c
  • wdiskts.c

下記はオリジナルの ctrlc() をそのまま残す。

  • shmdump.c
  • wck.c
  • wtape.c

src/winlib_log.c

win_log.c の関数を呼び出す関数を納めたファイル。winlib.c と一緒にするとグローバル変数(win_externs.h)を宣言していないプログラムではリンク時にエラーが出る。

find_oldest()

  • wdisk.c
  • wdiskts.c
  • pmon.c ===> find_oldest_pmon() に変更

Shm_read()

既存の共有メモリを読み込みのために構造体に割り当て。

  • cormeisei.c
  • ecore2.c
  • extraw.c
  • ls8tel16_raw.c
  • order.c
  • raw_100.c
  • raw_ch.c
  • raw_mon.c
  • raw_raw.c
  • raw_shift.c
  • raw_time.c
  • send_raw.c
  • send_raw_old.c
  • sends.c
  • wdisk.c
  • wdiskts.c

Shm_create()

書き込みのための共有メモリの確保。

  • cormeisei.c
  • ecore2.c
  • extraw.c
  • ls8tel16_raw.c
  • order.c
  • raw_100.c
  • raw_ch.c
  • raw_mon.c
  • raw_raw.c
  • raw_shift.c
  • raw_time.c
  • recvnmx.c
  • recvs.c
  • recvt.c
  • recvt_LS7000.c
  • recvts.c

src/pltxy.c

pltxy()

  • hypomhc.c
  • select_bylatlon.c
  • select_stations.c
  • win.c

src/ulaw.c

オーディオフォーマット uLAW への変換関数。

ulaw()

  • dewin.c
  • win.c (new 2010/06/17)

memory leak error のデバッグ

特に長時間動作させるプロセスでは、メモリリークのバグがあると段々メモリを食い尽くしていってシステムの動作不具合の原因となる可能性がある。しかし、この手のバグを見つけるのはなかなか難しい。

そこで、WINシステムでは、Boehm GC を leak detector として使う手段を提供しているので、以下に述べていく。

続く.....


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-06-23 (火) 17:23:52