Babel 1.6 HowTo:分子構造記述ファイルコンバータの移植

Macライクにしよう(step 2)

 さて、「エラーメッセージをはじめその他のメッセージが何も表示されない」なら、正常に動くところまできた。今度は表示部分をちゃんとMacライクに出すようにする。そのためには、mac_main.cに

#include 

を追加した。さらに、InitToolBox()に、


/* for SIOUX */
	SIOUXSettings.standalone = FALSE;
	SIOUXSettings.setupmenus = FALSE;
	SIOUXSettings.initializeTB = FALSE;
	SIOUXSettings.autocloseonquit = FALSE;
	SIOUXSettings.asktosaveonclose = TRUE;
	SIOUXSettings.showstatusline = TRUE;
	SIOUXSettings.toppixel = 40;
	SIOUXSettings.leftpixel = 5;

を追加した。これで、エラーなどでprintfが呼ばれてコンソール画面が出ても表示が乱れなくなった。ただし、exit()するエラーの場合は、表示されるなりウィンドウが消えてしまう。terminateするようなエラーはダイアログを使うようにする。他にも、変換の途中の情報などが表示されることがありそうで、こちらは大量に表示が出るのでいちいちダイアログに出していたらOKボタンの連打をするはめになるので、そういうものはSIOUXで出す。utils.cのshow_warning、fatal_error、は、ダイアログで出す。

#ifdef __POWERPC__
#Include "mac_specific.h"
#endif

をまずutils.cに追加し、
show_warning

#ifdef __POWERPC__
	showcaution(CtoPstr(str), "\p", "\p", "\p");
#else
   	fprintf ( stderr, "%s\n", str );
#endif

fatal_error

#ifdef __POWERPC__
	showstop(CtoPstr(str), "\p", "\p", "\p");
#else
   	fprintf ( stderr, "%s\n", str );
#endif

のように書き換える。
 次に、ファイルが開けないとかメモリが確保できないとか、とにかくそれ以上処理ができない場合に出すメッセージの表示を、これらの関数を使うように書き換えた。書き換えたのは以下の通り。ファイル先頭では必ず#define __POEWERPC__を書くようにしている。
open_w_env() (fileutil.c)

#ifdef __POWERPC__
	 sprintf(message,"cannot open %s at open_w_env in fileutil.c \n", f_name);
	 fatal_error(message);
#else  

pen_write() (fileutil.c)

#ifdef __POWERPC
	  sprintf(wstr,"unable to open file %s as output\n",file_name);
	  fatal_error(wstr);
#else
      printf("unable to open file %s as output\n",file_name);
#endif

atnum2mass() (molwt.c)

 #ifdef __POWERPC__
	sprintf(wstr,"ERROR: Unknown atom number --> %d\n", atnum);
	show_warning(wstr);
#else
    fprintf(stderr, "ERROR: Unknown atom number --> %d\n", atnum);
#endif

read_element_file() (rdelmnt.c)

#ifdef __POWERPC__
	sprintf(wstr, "Could not open element file element.lis \n Please put into the application folder\n");
	show_warning(wstr);
	return(0);
#else /* __POWERPC__ */.....

print_torsions() (report.c)

print_torsions(,print_angles(ums_type *mol,FILE *file1)
#ifdef __POWERPC__
	sprintf(wstr, "Memory Allocation Error\n");
	fatal_error(wstr);
#else
    printf("Memory Allocation Error\n");
#endif

set_to_ums() (ringutil.c)

#ifdef __POWERPC__
	sprintf(wstr, "Unable to allocate memory for temporary ums\n");
	fatal_error(wstr);
#else
    fprintf(stderr,"Unable to allocate memory for temporary ums\n");
#endif

init_set_minbits() (sets.c)

#ifdef __POWERPC__
	sprintf(wstr, "Unable to allocate memory for temporary ums\n");
	fatal_error(wstr);
#else
    fprintf(stderr,"Unable to allocate memory for temporary ums\n");
#endif

smilesto.c

#ifdef __POWERPC __
	  sprintf(wstr, "No memory to convert SMILES string\n");
	  show_warning(wstr);
#else
      printf("No memory to convert SMILES string\n");
#endif

gettoken(), get_token() (tokenst.c)

#ifdef __POWERPC__
	sprintf(wstr, "UNABLE TO ALLOCATE MEMORY");
	fatal_error(wstr);
#else
    printf("UNABLE TO ALLOCATE MEMORY");
#endif

write_smiles() (wrsmiles.c)

#ifdef __POWERPC__
    sprintf(wstr, "Unable to create smiles string\n");
	show_warning(wstr);
#else	
    printf("Unable to create smiles string\n");
#endif

ums_to_smiles_ct

#ifdef __POWERPC__
    sprintf(wstr, "OUT OF MEMORY AT %s %s \n",__FILE__,__LINE__);
	fatal_error(wstr);
#else
    printf("OUT OF MEMORY AT %s %s \n",__FILE__,__LINE__);
#endif

print_torsion_list() (wrtorlst.c)

print_torsion_list()
#ifdef __POWERPC__
    sprintf(wstr,"Memory Allocation Error at %s %s \n",__FILE__,__LINE__);
	fatal_error(wstr);
#else
    printf("Memory Allocation Error at %s %s \n",__FILE__,__LINE__);
#endif

 utils.c中のメモリ関係のエラーは、同様の書き換えを行った。コンパイルすると、wstrが無いといわれたので、static char wstr[BUFF_SIZE];を各ファイルの先頭に追加した。

 これで、エラーが出ても、表示が乱れたりせずにちゃんとユーザに通知することができるようになった。


top pageへ戻る 
目次に戻る

Y.Amo /
当サーバ上のページに関する問い合わせや苦情のメールは公開することがあります。