連載 /UNIX Communication N0tes—O 図 3 テンプレート・ファイルの faxaddmodem かイ吏用する行 (a) ROCK 、 VELL 製モデムのテンプレート config ・ rockwell # CONFIG : CLASS2 : ROCKWELL* (b) U. S. Robotics 製 Sportster のテンプレート config ・ usr-sportster # CONFIG : CLASSI : 1444 : Manufacturer=USRobotics Mode1=Sportster faxaddmodem は、 /var/spool/flexfax/etc/con g. * をテンプレート・ファイルとして使います。 faxad- dmodem が簡単に〕尺できるように、このファイルには ちょっとした仕掛けか施されています。各テンプレートの 地頁付近に、 # CONFIG : から始まる行があります。この部分に、そのテンプレート がどの機種に対応したものかカ当されているのです。た とえば、 Class 2 の ROCKWELL 製モデムのテンプレー ト config. て oc e11 は図 3 ー a のようになっていますし、 U. S. Robotics の Sportster 用のテンプレート config ・ usr-sportster は図 3-b のように言されています。 faxaddmodem は、用意されているテンプレートから 取り出したこの行を : ( コロン ) で区切られたレコードと ・ Class 2 モデムの場合は、製造元ーモデル " ・ Class 1 モデムの場合はプロダクトコード 考えます。そして、第 3 フィールドを対象に、 UNIX MAGAZINE 1994.3 に対応するように変更するガ去を紹介します。 次に、コンフィギュレーション・ファイルを各モデム コンフィキュレーション・ファイルの記述 というメッセージて示します。 Using prototype configuration file config. XXX がどれであるかを、 faxaddmodem では、実行時に使用するテンプレート という汎用的なテンプレートを使用します。 ・ CIass 2 FAX モデムでは co Ⅱ fig. c1ass2 ・ CI s 1 FAX モデムでは co Ⅱ f 土 g. classl トを使用します。該当するファイルがない場合は、 をそれぞれキーワードとして検索し、合致したテンプレー 書式 コンフィギュレーション・ファイルは、通常のテキス トファイルです。したがって、 Emacs やⅵなどのテキ ストエデイタて編集できます。 ファイルの各行では、タグ (tag) とタグで指定された 項目についての設定を言己していきます。各行の書式は、 タグ : 設定値 です。コロンと設定値のあいだにはタブか空白文字を挿入 します。また、 # から行末まではコメントとして扱われま す。 各行の設定値には、タグの不頁に応して以下の 4 つのい すれかを指定します。 文字列 (string) 設定値にタブや空白文字が含まれていなければ、指定し たい文字列を言当するだけです。タブや空白文字を含む 文字列を指定したいときは、文字列本を " ( ダブルク ォート ) て括ります。 ・論理イ直 (boolean yes またはⅡ。を指定します。 整数 (integer) C 言語などでの整数ク旨定ガ去とまったく同しです。た とえは、モデムとのインターフェイスとなる RS232C の速度設定は、キーワード ModemRate の行で 19200 のように指定します。 ・ 8 進数 (octal) C 言語での 8 進数の指定と同しように、最初に 0 を付 けて設定値が 8 進数であることを明示します。 8 進数に よる指定が必要なキーワードには、受信したファイル に設定されるモードを記述するためのエントリ Recv- FileMode などがあります。これは、 0600 のように値 を指定します。 コンフィギュレーション・ファイルでは、多不鶤頁のタ グカ己できます。末尾の表 2 に使用できるタグの一覧を 23
連載 /UNIX Communication Notes—・ 図 2 U. S. Robotics Sportster のパージョンを調へる OK AT + FCLASS=? OK ATIO 1444 OK ←ノヾージョンの表小 AT13 Sportster 14 , 400/Fax V4.1 OK 図 1 BOCAMODEM のパージョンを調べる AT OK AT + FCLASS=? 0 , 1 , 2 OK AT + FMFR? ROCKWELL OK AT + FMDL? RC32ACL OK AT + FREV? VI .298 ー DS29 OK ←サポートするクラスの表示 ←製造元の表示 ←モデルの表示 ←サポートするクラスの表示 ←プロダクトコードの表示 ←ノヾージョンの表小 サポートするクラスは、 Class 2 モデムと同様にしてチ ェックできます。しかし製造元、モデル、バージョンな モテムの調べ方 どを得るコマンドは用意されていません。その代わりに ATI コマンドでプロダクトコードなどの情報を調べるこ 竹業を始める前に、使用するモデムについて調べましょ とかできます。 ーで必喫な 1 辭長は、 図 2 を見てください。これは、 U. S. Robotics か版売 サポートする FAX コマンドのクラス している Sportster という CIass 1 モデムを調べたとき の様子です。最初のコマンドで、サポートするクラスが分 かります。さらに、 AT 工 0 コマンドでプロダクトコードが、 モテフレ AT13 コマンドで製品のバージョン↑帯長か彳等られます。 ファームウェアのノヾージョン れらの情報から、このモデムは、 などです。これらをチェックするには、 tip コマンドや ・サポートする FAX のクラスは、 0 、 1 DOS 環境の hterm などを使ってモデムにアクセスし、 プロダクトコードは 1444 モデムコマンドを実行します。 ・ノヾージョンは Sportster 14 , 400 / Fax V4.1 Class 2 モテム であることが分かります。 BOCAMODEM は FAX CIass 2 コマンドをサポー faxaddmodem によるモテムの動リの推定 トしているので、これを使って簡単に調べることかできま す ( 図 1 ) 。 faxaddmodem はシェル・スクリプトです。ちょっと長 CIass 2 コマンドでは、モデムの製造兀、モテフレ、バー いプログラムですが、丹念に見ていくと前節で述べたガ去 ジョン情報などか彳昇られます。この BOCAMODEM の を用いてモデムの機種を推測しているのが分かります。基 場合は、次のようになっています。 本的な処理の手順は、次のとおりです。 1. 最初に AT + FCLASS=? コマンドを使って、モデムがサポ ・サポートする FAX のクラスは、 0 、 1 、 2 ートしている FAX 機能についてのクラスを調べる。 製造元は ROCKWELL 2. Class 2 の場合は、 AT + FMFR? コマンドで製造元を調べ、 ・モデルは RC32ACL AT + FMDL? コマンドでモデルを調べる。この情報から、 ・ノヾージョンは VI. 29 & DS29 適切と思われるテンプレートお尺する。 Class 1 モデム 3. Class 1 の場合は、 ATIO コマンドでプロダクトコード Class 1 モデムの場合は、 Class 2 モデムと上交して得 を調べる。この情報にもとづいて、適切と思われるテン られる情幸師ゞ少なくなります。 プレートお尺する。 22 UNIX MAGAZINE 1994.3
連載 UNIX Communication Notes— モデム←ホスト間の速度 受信した FAX のビットオーダー モデムをリセットした場合、追加して実行させるコマンド モデムリセット後の待ち日判爿 (ms) リサルトコードを表示させるコマンド モテ・ムのファームウェア・ノヾージョンの問・合、せ。コマンド 送信する FAX のピットオーダー モデムスピーカーの音量設定コマンド 第勺 ) 芯答 (adaptive answer) 正コマンド データキャリア検出 (DCD) 設定コマンド データ端末レディ (DTR) 設定コマンド ソフトリセット・コマンド モデムの不頁 リサルトコードを英語で表示させるコマンド 受イこ強制的にリサルトコード CONNECT を待つよ うにする 発イ相手側モデムのキャリア待ち言午罕寺措」の設定 integer 19200 LSB2MSB string string integer 2600 Q0 string st ring LSB2MSB string string string string string string string VI string No boolean S 7 = 30 ModemRate ModemRecvFillOrder ModemResetCmds ModemResetDelay ModemResultCodesCmd ModemRevQueryCmd ModemSendFillOrder ModemSetVolumeCmd ModemSetupAACmd ModemSetupDCDCmd ModemSetupDTRCmd ModemSoftResetCmd ModemType ModemVerboseResultsCmd ModemWaitForConnect ModemWaitTimeCmd (c) FAX モデムのための言聢 FaxT 1 T imer FaxT2Timer FaxT4Timer Class1Cmd Class1FrameOverhead Class1RecvAbortOK Class1RecvIdentTimer Class1TCFResponseDelay CIass1SendPPMDeIay CIass1SendTCFDeIay Class1TrainingRecovery Class2Cmd Class2AbortCmd Class2BORCmd Class2CQCmd Class2 RELC md Class2RecvDataT1 、 igger Class2XmitWaitForXON st ring 既定値 CCITT T. 30 TI タイマ 35000 CCITT T. 30 T2 タイマ 7000 CCITT T. 30 T4 タイマ 3100 Class 1 : Class 1 モードへの移彳丁コマンド 十 FCLASS=I st ring Class 1 : 受信した HDLC フレーム中の余分なバイト数 integer 4 受信中断後、 OK を得るまでの最大待ち時間 Class 1 : integer 100 Class 1 : FAX 受イ訓の最初の DCS を得るまでの最大 許罕判り (ms) TCF と ack/nak のあいだの遅々間 (ms) Class 1 : 75 post- page message 送イ言ⅱⅱの〕星々凾ー ( ms ) Class 1 : 75 ・ DCS-TCF 間の遅延翩田 (ms) Class 1. 75 failed training session 後の遅々喞寺措」 (ms) Class 1 : 1500 Class 2 : Class 2 モードへの移彳丁コマンド 十 FCLASS=2 string Class 2 : 現在のセッションを中断するコマンド string ピットオーダーのセットアップ・コマンド BOR=O Class 2 : string CQ (copy quality) ノヾラメータの成疋 Class 2 : st ring byte-aligned EOL codes を有効にするため Class 2 : string のコマンド Class 2 : モデムからのデータ中幻医を起動するために送ら れる文字ク旨定 Class 2 : FAX データ送信前に XON を待つかどうか 明 型 integer integer integer 35000 integer int eger integer integer integer string boolean No 35 UNIX MAGAZINE 1994.3
連載続ウインドウ・システムについて一朝 図 1 CoreCIassPart 橢制本の定義 typedef struct -CoreCIassPart { WidgetC1ass String Cardina1 XtProc XtWidgetC1assProc XtEnum XtInitProc XtArgsProc XtRea1izeProc XtActionList Cardina1 XtResourceList Cardina1 XrmC1ass B001ean XtEnum B001ean B001ean XtWidgetProc XtWidgetProc XtExposeProc XtSetVa1uesFunc XtArgsFunc XtA1mostProc XtArgsProc XtAcceptFocusProc XtVersionType XtPointer String XtGeometryHand1er XtStringProc XtPointer } CoreCIassPart ; superclass ; C 1 as S —name ; widget-size; class—initialize; class-part-initialize ; class-inited; initialize-hook; realize; actions ; mm—aCti011S ; resources; num—resources ; xrm—class ; compress—motion ; compress—exposure ; compress—enterleave ; visible-interest ; destroy ; reSIZe; expose ; set—values ; set-values-hook ; set-values-almost ; get-values-hook ; accept-focus ; verSIOn; callback-private ; tm-table ; query-geometry ; display-accelerator ; extenslon ; 期化メソッド。通常、当該クラスが必要とするリソー 型コンバータの登録などに利用される。 ・ class-part-initialize ス 当該クラスのクラス部う冓造体を初期化するためのクラ ス部分初ヒメソッド。クラス部う廾冓造体のフィールド のうち、静的に初期化できないものを処理するために利 用される。 ・ class—inited クラス構逼本がクラスネ月化メソッドおよびクラス部分 初期化メソッドによって初期化されているかどうかを示 すフラ久値 FaIse に静的に硼化されていなければな UNIX MAGAZINE 1994.3 pointer tO superclass C1assRec * / widget resource CIass name * / size in bytes 0f widget record * / Class initialization proc * / dynamic initialization * / has class been initialized? * / initialize subclass fields * / notify that initialize called * / XCreateWindow for widget * / widget semantics name tO proc map * / number Of entries in actions * / resources for subclass fields * / number Of entries in resources * / resource class quarkified * / compress M0tionN0tify for widget * / compress Expose events for widget * / compress enter and leave events * / select for VisibiIityNotify * / free data for subclass pointers * / geom manager changed widget size * / / * rediplay window * / set subclass resource values * / / * notify that set-values called * / set-values got "A1most" geo reply * / / * notify that get-values called * / assign xnput focus tO widget * / versxon Of intrinsxcs used * / list of callback offsets * / state machine * / return preferred geometry * / display your accelerator * / pointer tO extension record * / このメソッドでは、ウィジェットのウインドウが作成 イズされた場合に呼び出されるリアライズ・メソッド。 XtRealizeWidget() によって、インスタンスがリアラ び非リソースデータを適切に期化する。 ンスタンスの部分構造体に含まれるリソースデータおよ 体を期化するためのインスタンス初ヒメソッド。イ 当該クラスのインスタンス生成時に、インスタンス構造 ・ initialize らない。 される。 101
連載 /UNIX Communication Notes—O ている場合、そのカンマで次のダイアリングまで犲少待 応してコンフィギュレーション・ファイルを変更します。 っか ( ポーズ ) か設定できます。既定値では S8 = 2 、す イ吏用している舌回線はトーン回線か なわち 2 秒間のポーズをダイアリング中に挿入します。 しかし、構内交換機によっては、タ泉に接続するのに 2 FIexFAX では、トーン回線を前提にしたコンフィギュ 秒間のポーズでは足りないこともあります。そのような レーション・ファイルが作られます。パルス回線の場合 は、さきほど説明したように ModemDialCmd の DT を ときは、この値を変更してみましよう。 DP にしなけれはなりません。 Modem 、 VaitTimeCmd 構内回線に接続されているか この項目では、レジスタ S7 ( キャリアを待っ時間 ) の 一般に、構内回線はダイアルトーンが通常の回線とは 値を設定します。モデムカ購内回線に接続されているため 異なります。この場合、発イ訓にモデムが NO DIAL- に、 FAX の送受信がうまくいかなかったとします。その TONE を返してしまい、うまく発信できないことがあり ようなときは、 ModemRate の変更に加え、このレジス ます。このようなときは、モデムがダイアルトーンを検出 タの値を大きめに指定して、キャリアを受け取れない状態 せすにダイアルするように、設定を変更しなければなりま を回避します。 せん。これは、次の手順でおこないます。 Class1/CIass2 FAX モデムのための設定 ・モデム側でダイアルトーンを検出しないように、モデム 表 2-c に示した項目か指定できます。通常、これらの の起重丿ワ。ロファイルに設定する。 項目ははとんど変更する必要はありません。しかし、一に モデム側で設定するだけでよく、コンフィギュレーショ のモデムでは変更しなけれはならないことがあります。ト ン・ファイルに手を加える必要はありません。 レース情報を調 , ヾ、 faxd がモデムに送った Class 1 ある ・コンフィギュレーション・ファイノレの ModemDiaI ー いは Class 2 FAX コマンドがモデム側で拒否されている Cmd に XI を追加する。 場合などは、関連する項目を変更してください。 たとえば、 ModemDialCmd が、 コンフィギュレーション・ファイルの記述手順 DTO , %s@ コンフィギュレーション・ファイルは、以下の手順で になっている場合は、 これを、 するとよいでしよう。 XIDTO.%s@ 1. faxaddmodem コマンドを利用して、コンフィギュレ に変更します。 ーション・ファイルを作成する。 2. 実際に FAX を送受信してみる。成功したら、 faxad- モテム←ホスト間のシリアルライン ~ は正しいか dmodem で作成したコンフィギュレーション・ファイ コンフィギュレーション・ファイノレの ModemRate に ルを利用する。 設定されている値が正しいかどうかをチェックします。間 3. 送受信はうまくいったが、作成されたコンフィギュレー 違っていたら、正しい値に変更します。値が正しいにもか ション・ファイルに電話番号などの電話回辛 ) 指定に関 かわらす送受信に失敗するような場合は、設定されている する誤りがあれば、ファイルを茁妾変更して faxd を再 速度よりも遅い速度に変更して実験してみましよう。 起動ける。 4. 送受信に失敗したときは、使用しているモデムに合わせ フローコントロールの言聢は正しいか てコンフィギュレーション・ファイルを書き換え、送 フローコントロールを RTSCTS に設定していて送受 受信ができるようにする。 信に失敗するときは、 XONXOFF に変更して実験してみ ましよう。この場合、かならす ModemFlowControl と 送受信に失敗した場合は以下の点をチェックし、必要に ModemFlowControICmd の両方を変更してください。 1 三ロ 28 UNIX MAGAZINE 1994.3
連載続ウインドウ・システムについて一朝 図 2 XtResource 構ミ制本の定義 typedef struct -XtResource String String String Cardina1 Cardina1 String XtPointer resource-name; resource—class ; resource—type, resource—SIze; resource—offset ; default-type ; default-addr ; } XtResource, *XtResourceList ; から当該クラスのリソースについての言当を抜き出し、イ ンスタンス構造体のリソースデータに設定する。 XtResource 構造体は、アプリケーションか独自のリソ ースを角早釈するために、 XtGetApplicationResource( を呼び出す際に使用するものと同しである。以下に XtResource 構造体の各フィールドの意味を簡単に示す が、詳細についてはアプリケーション開発用のプログラミ ング・マニュアルなどを参照してほしい。 ・ S C ーⅡ a m リソースの名前を表す文字列を指定する。通常、リソー スの名前はノウ。リックへッダのなかで、、 XtN " て始まる シンポルとして定義される。なお、よく使われるオ剽勺 なリソースについての定義が StringDefs. れに含まれ ており、これを利用することも多い。 ・ reS01ECe—CIaSS リソースのクラスを表す文字列を指定する。リソースの 名前と同様、ハフ。リックへッダまたは StringDefs. h のなかで、、 XtC " て始まるシンポルとして定義される。 または StringDefs. h のなかで、、、 XtR " て始まるシ スの名前、リソースのクラスと同様、ハフ・リックへッダ リソース値の型を表す文字列を指定する。これもリソー ・ resource—type Resource * / Resource class * / Representation type desired * / Size in bytes Of representation * / Offset from base tO put resource va1ue * / representation type 0f specified default * / / * Address of default resource * / に、インスタンス部分構造体のフィールドに初期値と スについての指定がまったく含まれていなかった場合 X ツールキットか読み取るリソース指定に、当該リソー ・ default-type して設定されるデフォルト値の型を指定する。 ・ default-addr デフォルト値の含まれるメモリ ( 変数や構造ーの、 ドレスを指定する。 リソース値の読込み ア ンポルとして定義される。 ・ resource—SIze 当該リソースを収めるべきフィ さを指定する。 ・ resource—offset 当該リソースを収めるべきフィ ーノレドの、 ーノレドの、 データの大き インスタンス 部研冓造体の地頁からのオフセット値を指定する。 104 リソース指定文字列からインスタンスのリソース・フィ ールドへの言ムみは、次のようなステッフで実行される。 1. resource—name と resource—class をもと 0 こ ソース指定文字列から必要なリソース指定部分を抜き 出す。 2. 抜き出した文字列を resource-type で示される型に 変換する。 3. 変換した結果を、インスタンス部分構造体の先頭から resource-offset にイ立置するメモリに resource- size の大きさで書き込む。 この一漣の処理は、インスタンスの生成時に X ツール 造体か初期化された点ではかならす値をもっことが一焉正 に言当されていないリソースであっても、インスタンス構 フォルト値が含まれる。したがって、リソース指定文字列 また、 XtResource 構造体には各リソースに対するデ う必要はない。 るだけで、これらの実際の変換処理などを明示的におこな ェット・クラスの実装コードは、リソースリストを用意す キットによって自重加勺に、、 1 度だけ " 実行される。ウィジ されている。 UNIX MAGAZINE 1994.3
連載 . / 凵 Language リスト 3 モデル / 従属フレームワークの定義 (md. class # モデル / 従属フレームワーク # M0de1—Dependent Framework # モデルが更新されると、その従属した 旧いタイプの MVC モデルに似ている。 # するかは、それぞれのオプジェクトに任されている # 従属オプジェクトが実際にどのような更新作業を # オプジェクトにプロードキャストする。 # オプジェクトに対して、変更がおこなわれた旨を return $name # 名前を変える method name : { Ⅱ } { set name $n $this update # Dependent のリスト protected dependents # 名前を保持するインスタンス変数 # モデノレクラス itcl—class Mode1 { # Dependent を登録 method addDependent : 1 append dependent s # Dependent を抹消 method de1Dependent : {who} { $ 3h0 protected name # モデル従属クラス {aMode1} set i [lsearch $dependents $who] if ${i} ! = ー 1 then { set dependents \ [lreplace $dependents ${i} ${i}] # モデルの更新時に呼び出され、 # すべての Depe Ⅱ de れ t にそれら自身の更新の # きっかけを与える method update { } { foreach d $dependents { method name { } # 名前を答える $ d changed リスト 4 TcI 自動ロード用ファイル (tcllndex) itcl-class Dependent { # 作成時にモデルを指定 constructor {m} { set model $m $mode 1 addD ep endent : $this —setup $this changed $this # インスタンスの初期化をするための抽象メソッド protected model { } # モデルを保持するインスタンス変数 # abstract method changed method changed { } { # モデルの更新を反映するための抽象メソッド # abstract method _setup method —setup { } { # Tc1 autoload index file : each line identifies a Tc1 procedure or 112 FSMTextua1Monitor fsmViews . class FSMInputView fsmViews . class FSMGraphView fsmViews . class FSMGenera1View fsmViews . class FiniteStateMachine fsm . class Dependent md. class Mode1 md . class # Generated by the "auto mkindex" command. # an [incr tcl] class and the file where that entity is defined. UNIX MAGAZINE 1994.3
連載 /UNIX Communication N0tes—O 図 5 BOCAMODEM がうまく乍したときのコンフィギュレーション・ファイル + FCLASS=O ; + FAA=I# enable in class 0 # JP # Configuration for a Rockwell RC32ACL—based Class 2 modem. # $Header: /usr/peop1e/sam/fax/etc/RCS/config. rc32ac1,v 1.6 93 / 09 / 27 11 : 12 : 00 sam Rel $ Boca M1440E SupraFAX v. 32bis (and others) firmware VI .000 firmware VI .000 # This configuration file sets up the modem tO run at 38.4 for # sending and for receiving. RTS/CTS is used for flow control which a1SO works for data connections. Adaptive answer support is reliable , but tO use it you must a1SO enable ModemWaitForConnect tO force the server tO skip intermediate status messages and # wait for the "CONNECT" message ・ CountryCode : LongDistancePrefix : Internationa1Prefix : AreaCode : DiaIStringRuIes : FAXNumber : ServerTracing : SessionTracing. RecvFi1eMode : LogFiIeM0de : DeviceMode : SpeakerV01ume . RingsBeforeAnswer : M0demType : ModemRate : ModemWaitForConnect : #ModemResetCmds : # NB : enable this 0 Ⅱ 1y #GettyArgs : #GettyArgs : ModemF10wControI : ModemF10wControICmd : M0demS etupDTRCmd : M0demSetupDCDCmd : ModemSetupAACmd : ModemSendFi110rder . ModemRecvFi110rder : ModemD i a1Cmd : 81 0 001 3 + 81.3.5351 . xxxx etc/dialrules "—h % 1 dx %s" if you're setup &F2 19200 C1ass2 1 medium 0600 0600 0600 11 1 + FCLASS=2DT%s MSB2LSB LSB2MSB &CI &D2 &K3 rtscts "std. %s # private 10g files # device is accessible only tO uucp/fax answer on f irst ring use CIass 2 interface # wait for CONNECT 0 Ⅱ answer # what you want f0 て a Supra fo て dialins locked at receive rate (for SunOS) locked at receive rate (for SGI) # T for tone dialing opposite Of what makes sense as expected # DCD f0110WS carrier # DTR off causes modem to reset # hardware flow control ます問題となったのは、ホスト←モデム間のフローコ ントロールです。多くのモデムでは AT&Kn となっていま すが、このモデムでは AT\Qn というコマンドを使ってい ます。たとえば、 XONXOFF を使用するには、 AT\QI と いうコマンドをモデムに送ります。コンフィギュレーショ ン・ファイルでは、 \ ( 逆スラッシュ ) は文字コードで文 字をするときのエスケープ・シーケンスとして使用さ れているようです。そこで、、、逆スラッシュを 2 っ書け 30 ばええやろ " と考え、 ModemF10wContr01Cmd : と言己しました。 モデムのスピーカーの日里双疋は、 こ′匚 - 目 . ル′亠・ オン / オフの設定し かできないようなので、 ModemSetV01umeCmd : と言当しました。 ノート 6 "MO MI MI MI MI" M0demSetV01umeCmd では、スピーカーの音 : 量設定に UNIX MAGAZINE 1994.3
連載 / 続ウインドウ・システムについて一朝 ただし、この場合でもスーパークラスの描画内容にほん のすこしオーバーライドしたいだけであれば、ェクスポー ズ・メソッドのなかから直接的にスーパークラスのェクス ポーズ・メソッドを呼び出してしまうことで、コーディン グ量を大幅に減らすことかできる。 クラスの初期化 クラス構造体のほとんどのフィールドは、コンパイル 時に静的に初期化される。しかし、 C 言語には広域デー タ構造体の第勺初期化の機能がないため、 tm-table のよ うな静的に初期化できないフィールドや、クラス特有のリ ソース型コンバータの登録などを初期化する仕組みが必要 になる。 X ツールキットでは、あるクラスのインスタンスか最 初に生成された時点で、当該クラスから Core クラスに 至るすべてのクラスの初期化処理をおこなうようになって いる。つまり、最初に生成されるインスタンスのクラスか ら、順にスーパークラスをさかのばり、 Core クラスまで 到達した点 5 で、それまでたどってきたパスを逆に戻り ながら 6 、各クラスの class-initialize メソッドを下向き にたどって順に呼び出す。このレベルのネ川月化は、各クラ スについて 1 度だけ実行されるもので、そのクラスで必要 とするリソース型コンバータの登録などをおこなう。 この処理は一見下向きスーパークラス連鎖型にみえる が、表 2 に示したように class-initialize メソッドは豸虫立 型であり、完全な下向きスーパークラス連鎖とは異なる。 なぜなら、 class-initialize メソッドにおいてスーノヾーク ラスをさかのばってゆくのは、たんに初期化処理を起重丿け るタイミングを見出しているだけであり、単一のクラス構 造体を各クラスのメソッドに処理させるようなものではな いからである。アプリケーション内で 2 つ目に生成される インスタンスから始動されるクラス匆琪月化処理では、それ までにすくなくとも Core クラスは匆期イ劭鮗っており、 スーパークラスの些を Core クラスまでさかのばらない ところから初期化処理か開始されることになる。 これに対して、クラス構造体そのものを初期化する class-part-initialize メソッドは、単一のクラス構造体 5 Core クラスの superclass ( よ NULL に衫琪号化されているのて簡単 に識別できる。 6 実際には、関数の再平出しで処理されている。 108 をそのスーノヾークラスの class-part-initialize メソッ ドに順に処理させることが目的であり、完全な下向き スーパークラス連鎖型である。これらのことから、リ ソース型コンノヾータの登録は class-initialize メソッド で処理すべき内容であり、一方、 tm-table の初期化は class-part-initialize メソッドて汐理すべき内容であるこ とが分かる。 おわりに 今回は、すべてのウィジェットの基礎となる Core クラ スのクラス部う冓造体の内容について、ひととおり説明し たところで誌面が尽きた。次回は、今回の説明に含められ なかった多くのメソッドについておこなうべき処理内容、 呼び出されるタイミン久呼出し形式などを説明する予定 である。 ( えんどう・ともひろ儚 ) [ 赭文献 ] [ 1 ] Jim Gettys 、 Robert を Scheifler 、 Ron New- man 、創夢翻帰 ( 「 Xlib ・一 C 言語インタフェース」 『 X11R5 テクニカル・ドキュメント Vol.1 』 1992 年 [ 2 ] Joel McCormack 、 PauI Asente 、 Ralph R. Swick 、倉儚翻訳「 X ツールキット・イントリンシ クスーー C 言語インタフェース」『 X11R5 テクニカル・ ドキュメント V 。 1.2 』 1992 年 [ 3 ] Chris D. Peterson 、 RaIph R. Swick 、創夢翻 訳「アテナ・ウィジット・セット—C 言語インタフ ェース」『 X11R5 テクニカル・ドキュメント Vol. 3 』 1992 年 [ 4 ] Douglas A. Young 、川手市訳『 X Toolkit プロ グラミング』トッパン、 1990 年 [ 5 ] Adrian Nye,Tim O'Reilly, X TooI んん s s Programming イ佖れ社 for 佐れノノ , O'Reilly & Associates, lnc. 1990 UNIX MAGAZINE 1994.3
図 1 世界における各 NIC (InterNIC) G10baI Regstry National Registry Regional Registry (APNIC) Registry RegistO' Regional Registry (RIPE NCC) National Registry Registry 6 月と定め、実験プロジェクトに関する報告を同会議でお こなうことカ蔀忍されています。 NIC 機構のなかでのイ立置づけ APNIC は、世界の NIC 樹冓のなかでどのように位置 づけられるのでしようか ? 図 1 に、 APNIC 文書 apnic ー 001. txt ( 表 2 参照 ) より引用した NIC の階層構造を示 します。 現在、インターネットでは、世界を北ヨーロッパ、 アジア・太 : 判、 lil を中心とする 3 つの或に分け、それぞ れを代表する或 NIC (RegionaI Registry) を設ける 方向で言劬ゞ進められています。 この構想にもとづいて APNIC が正式に発足すれば、 日本の国内 NIC ( 図 1 では National Registry) であ る JPNIC は、 APNIC の下て相互に協力や支援をおこ ないながら機能していくことになります。そこで、 JP- NIC では、 APNIC 実験プロジェクトに対し JPNIC 運 営資金の 10 % を上限として資金 / 資源を供学することと し、 APNIC の発足に可能なかぎり協力する旨、合意し 目的 ました。 とにあります。そのための題として、次のような項目 或におけるネットワーク協調に向けた叩き台を作るこ APNIC 実験プロジェクトの目的は、アジア・太消 130 カ挙げられます。 表 1 (apnic-004. txt より ) 12. Statistics collection and repository 11. Cert ification of National NICs 10. Routing Registry 9. Languages 8. lnformation D istribution 7. Common NIC Contact Point 6. Common NIC Domain Name Format 5. WHOIS Database Software 4. Class C Network Allocations 3. CIass B Network Allocations 2. Definition of the Asia Pacific Region 1. Functions of the APNIC APNIC プロジェクト項目 対するサポート体制の整侃 各種データ形式の整備。また、 NIC をもたない或に NIC 機関のあいだで連絡や青報交換をおこなうための APNIC と InterNIC 、 RIPE NCC 、さらに各国の 3. ・也也域の NIC との協調 f リの整備 と管理に関する検討。 的な訝題として、 CIDR のためのデータベースの作成 経路情報を管理するためのデータベースの作成。将来 2. 経路情報の登録業務に関する検討 てガ去の決定。 けるアジア・太、ト地域プロックの各国に対する割当 事項に関する検討。緊急訝題として、 CIDR 方式にお アドレスの登録に関連するデータベースの作成などの 式に一貫性をもたせるためのガイドラインの策定。 IP アジア・太 : 判津し或において、 IP アドレスの割当て方 1. IP アドレスの当求業務に関する本気寸 UNIX MAGAZINE 1994.3 の 1 つである APNIC WG のメンバーを中心に、韓国、 APNIC 実験プロジェクトでは、 JPNIC の喋部会 活動状況 項目カ甘是案さその検討作業が進められています。 トの目的になっています。具イ勺には、表 1 に示す 12 の きさまざまな問題点を見極めることも、実験プロジェク そのはかに、 APNIC が活動していくうえて早決すべ 人的・ハードウェア的なサポートの見積りなどの検討 APNIC の活動を支えるための財政基盤モデルの作成。 4. APNIC の組織体制に関する検討