『Cプログラミング診断室』目次次(第6章 不慣れ 類似パターン)

第6章 不慣れ

1行80字


リスト6−9は、ふつうなら改行しない個所でいっぱい改行しています。これは、1行を80字以 内に収めようと精いっぱい努力した結果だと思いますが、非常に読みづらく、嫌になってきます。 どうしても、80文字以内に収めたいなら、字下げは小さめに4文字分にしてもよいでしょう。画 面のサイズが80文字でも横スクロールがちゃんとできるエディタを使用しているなら、より字下げ の対応が一目で分かるように、タブ1個8文字にした方がよいでしょう。

 
リスト6−9 1行80文字以内

     1	private void
     2	panel_set_item_attributes( item, modified_flag )
     3	myPanel_Item    *item;
     4	unsigned long   *modified_flag;
     5	{
     6	        int                     dummy;
     7	        Widget                  dummys[5], *w_pntr;
     8	        myPanel_Item_Choice     *pointer;
     9	        myPanel_Item_Text       *pointer1;
    10	        Arg                     wargs[2];
    11	        XmFontList              fontlist;
    12	        myPanel                 *panel;
    13	        
    14	        panel = (myPanel*) item->parent;
    15	        if( isPANEL_SHOW_ITEM_modified( *modified_flag ) ) {
    16	                if( item->panel_show_item == TRUE ) {
    17	                        if( (panel->win_show == TRUE) &&
    18	                            (item->status == WIDGET_NONE ) &&
    19	                            (panel->status != WIDGET_NONE ) ) {
    20	                                dummy = 0; w_pntr = &(dummys[0]);
    21	                                panel_show_a_panel_item( item, &dummy,
    22	                                                        &w_pntr );
    23	                                XtManageChildren( dummys, dummy );
    24	                        }
    25	                        else if ( panel->parent->status == 
    26	                                                         WIDGET_REALIZED ) {
    27	                                if( item->is_mapped == FALSE 
    28	                                       && item->status != WIDGET_NONE )
    29	                                {
    30	                                        XtMapWidget( item->mywidgetid );
    31	                                        item->is_mapped = TRUE;
    32	                                        if( item->win_type == 
    33	                                                MY_PANEL_CHOICE ){
    34	                                                pointer = 
    35	                                                (myPanel_Item_Choice*)
    36	                                                        item->attr;
    37	                                                if( pointer->
    38	                                                panel_choose_one ==
    39	                                                                TRUE )
    40	                                                        XtMapWidget(
    41	                                                        pointer->
    42	                                                        option_menu );
    43	                                        }
    44	                                        else if( item->win_type ==
    45	                                                        MY_PANEL_TEXT) {
    46	                                                pointer1= 
    47	                                                  (myPanel_Item_Text*)
    48	                                                        item->attr;
    49	                                                if( pointer1->
    50	                                                   label_widget !=
    51	                                                                NULL )
    52	                                                        XtMapWidget(
    53	                                                        pointer1->
    54	                                                        label_widget);
    55	                                        }
    56	                                }
    57	                        }
    58	                }
    59	                else if ( item->panel_show_item == FALSE ) {
    60	                        if( panel->parent->status == WIDGET_REALIZED ) {
    61	                                 if( item->status != WIDGET_NONE ) 
    62	                                     panel_unmap_a_panel_item( item );
    63	                        }
    64	                }
    65	        }
    66	        if( isPANEL_LABEL_IMAGE_modified( *modified_flag ) ) {
    67	                XtSetArg( wargs[0], XmNlabelPixmap, get_screen_depth_pixmap(
    68	                        item->panel_label_image, root_shell, 0, ~0 ) );
    69	                XtSetValues( item->mywidgetid, wargs, 1 );
    70	        }
    71	        if( isPANEL_LABEL_BOLD_modified( *modified_flag ) ) {
    72	                if( item->panel_label_bold ) {
    73	                        fontlist = XmFontListCreate( 
    74	                                item->panel_label_font->fontstruct_bold,
    75	                                XmSTRING_DEFAULT_CHARSET );
    76	                }
    77	                else {
    78	                        fontlist = XmFontListCreate( 
    79	                                item->panel_label_font->fontstruct,
    80	                                XmSTRING_DEFAULT_CHARSET );
    81	                }
    82	                XtSetArg( wargs[0], XmNfontList, fontlist );
    83	                XtSetValues( item->mywidgetid, wargs, 1 );
    84	                        
    85	        }
    86	}

リスト6−10が、1行80字にお別れして書き換えたリストです。リスト6−9と比較すると、 できるだけ意味のまとまりの切れ目で改行していることが分かるでしょう。

 
リスト6−10 1行80文字以上

     1	/*------------------------------------------------------------------------------*/
     2	/*      パネル要素の属性を設定                                                  */
     3	/*------------------------------------------------------------------------------*/
     4	private void
     5	panel_set_item_attributes( item, modified_flags )
     6	myPanel_Item    *item;
     7	item_attributes *modified_flags;
     8	{
     9	        int                     dummy;
    10	        Widget                  dummys[5], *w_pntr;
    11	        myPanel_Item_Choice     *choice_ptr;
    12	        myPanel_Item_Text       *text_ptr;
    13	        Arg                     wargs[2];
    14	        XmFontList              fontlist;
    15	        myPanel                 *panel;
    16	        
    17	        panel = (myPanel*) item->parent;
    18	        if( modified_flags->panel_show_item ) {
    19	                if( item->panel_show_item ) {   /* パネル要素の表示 */
    20	                        if(  panel->win_show  &&
    21	                            (item->status == WIDGET_NONE ) &&
    22	                            (panel->status != WIDGET_NONE ) ) {
    23	                                dummy = 0; w_pntr = dummys;
    24	                                panel_show_a_panel_item( item, &dummy, &w_pntr );
    25	                                XtManageChildren( dummys, dummy );
    26	                        }
    27	                        else if ( panel->parent->status == WIDGET_REALIZED ) {
    28	                                if( !item->is_mapped && item->status!=WIDGET_NONE ) {
    29	                                        XtMapWidget( item->mywidgetid );
    30	                                        item->is_mapped = TRUE;
    31	                                        if( item->win_type == MY_PANEL_CHOICE ){
    32	                                                choice_ptr = (myPanel_Item_Choice*)item->attr;
    33	                                                if( choice_ptr->panel_choose_one )
    34	                                                        XtMapWidget( choice_ptr->option_menu );
    35	                                        }
    36	                                        else if( item->win_type == MY_PANEL_TEXT ) {
    37	                                                text_ptr = (myPanel_Item_Text*)item->attr;
    38	                                                if( text_ptr->label_widget != NULL )
    39	                                                        XtMapWidget( text_ptr->label_widget );
    40	                                        }
    41	                                }
    42	                        }
    43	                } else {        /* パネル要素の消去 */
    44	                        if( panel->parent->status == WIDGET_REALIZED ) {
    45	                                 if( item->status != WIDGET_NONE ) 
    46	                                     panel_unmap_a_panel_item( item );
    47	                        }
    48	                }
    49	        }
    50	
    51	        if( modified_flags->panel_label_image ) {
    52	                /* パネル要素にイメージを張り付ける */
    53	                XtSetArg( wargs[0], XmNlabelPixmap,
    54	                          get_screen_depth_pixmap( item->panel_label_image, root_shell, 0, ~0 ) );
    55	                XtSetValues( item->mywidgetid, wargs, 1 );
    56	        }
    57	
    58	        if( modified_flags->panel_label_bold ) {
    59	                /* パネル要素にボールドの文字フォントを割り当てる */
    60	                fontlist = XmFontListCreate( item->panel_label_bold
    61	                                                ? item->panel_label_font->fontstruct_bold,
    62	                                                : item->panel_label_font->fontstruct,
    63	                                             XmSTRING_DEFAULT_CHARSET );
    64	                XtSetArg( wargs[0], XmNfontList, fontlist );
    65	                XtSetValues( item->mywidgetid, wargs, 1 );
    66	        }
    67	}

プリンタは、大昔のものはハード的に80文字固定などもありましたが、いまや自由に選べる時代 です。80文字なんて、もう知っている人も少ない「パンチカード時代の遺物」です。早くお別れし ましょう、「化石」と呼ばれないために!

もし、ちゃんとしたプリンタを使いながら、その機能を活かさず、1行80字で使っているのでし たら、今すぐにいろいろな文字サイズで印字できるプリントコマンドを作ってください。今のレー ザープリンタなら、A4の用紙なら、横にすればCのプログラムを左右2段に分けて出力すると便 利です。紙の節約、資源保護、地球保護になるし、ページ数も減るので扱いやすくなります。

■Xウィンド■

もちろん、UNIXでXウィンドを使っているのなら、ウィンドの横幅は自由になるので、もはや横 80文字にする意味はありませんね。

パソコンのソフトを開発するにも、ソースプログラムの編集、管理は全部UNIXにまかせ、コンパ イル、デバッグ、テストなどだけにパソコンを使うこともできます。つまり、クロス開発です。 UNIXマシンは高価と思いがちですが、ある程度の規模になり、開発メンバーが増えてくると、パソ コンでは管理が大変になってくるし、開発に使用する全マシンにかなりのハードディスクを別々に 持たせるので、本当はUNIXのときよりはるかに費用がかさみます。

UNIXでは、X端末さえあれば、横100文字、縦60行のウィンドが楽々使えるので、Cのプログラ ムが読みやすくなります。こんなことのできるX端末が20万円以下で手に入るのですから、UNIX上 のソフト開発にはもちろん、パソコンのソフト開発にもX端末を使わない手はないでしょう。


Copyright1996 Hirofumi Fujiwara. No reproduction or republication without written permission
『Cプログラミング診断室』目次次(第6章 不慣れ 類似パターン)