string - みる会図書館


検索対象: UNIX MAGAZINE 1994年3月号
12件見つかりました。

1. UNIX MAGAZINE 1994年3月号

連載 / / Li Language— リスト 1 FSM の定義 (fsm. class) constructor { { Ⅱ fsm}} { inherit Mode1 # Mode1 のサプクラスとして宣言 itcl—class FiniteStateMachine # 有限状態機械クラス unset initAttributes(dummy) set initAttributes(dummy) 0 \ unset attributes (dummy) set attributes(dummy) 0 \ triggers actions guards unset attributes initAttributes unset guards (dummy) set guards (dummy) 0 \ unset actions (dummy) set actions (dummy) 0 \ unset triggers(dummy) set triggers (dummy) 0 \ # 初期状態の定義 lappend states $state method defState : {state} # 状態機械がとりうる状態の宣言 $this name : $ Ⅱ method defInitState: {state} { if [lsearch $states $state] > set initState $state } else { puts stderr "NO such state : # 遷移の定義 method defTransition : \ $state" {fromstate trigger tostate action guard} { if [lsearch $states $fromstate] > = 0 { if [lsearch $states $tostate] > = 0 { set triggers(${fromstate} - く $trigger>—>${tostate}) $trigger set actions (${fromstate} - く $trigger>—>${tostate}) $action set guards(${fromstate} く $trigger>—>${tostate}) $guard } else { puts stderr \ "NO such tO } else { puts stderr \ such from state : state : $tostate" $fromstate" # トリガーの投入 UNIX MAGAZINE 1994.3 ( 誌面の都合上、立置て哘を折り返している ) method trigger : {trigger} { foreach t [array names triggers] { if Cstring first \ "${currentState} く ${trigger}>—>" \ if [expr $guards($t)] { set 1astState $currentState set currentState \ [string range $t [expr \ set currentState $initState method reset { } { # 有限状態機械のリセット return $this update set 1astTrigger $trigger set 1astTransition set 1astAction $actions($t) catch {eval $actions($t)} [string first set 1astState set 1astTransition { } foreach ia \ set 1astAction set IastTrigger "${currentState} く $triggers($t)>->"\ if Cstring first \ foreach t [array names triggers] { set ret { } method va1idTriggers { } { # トリガーのリストを返す # 現在の状態で、事前条件の満たされている return $states method getStates { } { # 定義済み「状態」のリストを得る # 各種情報の問合せ / 操作メソッド $this update $initAttributes($ia) set attributes($ia) \ [array names initAttributes] { 115 method vi01atedTriggers { } { # トリガーのリストを返す # 現在の状態で、事前条件が満たされていない return $ret lappend ret $triggers ($t) if [expr $guards($t)] {

2. UNIX MAGAZINE 1994年3月号

連載 AreaCode UNIX Communication Notes— CountryCode D eviceMode D iaIStringRules FAXNumber G ettyArgs InternationalPrefix LogFiIeMode LongDist ancePrefix NoCarrierRetrys Q uali fyT S I RecvFileMode RingsBeforeAnswer ServerTracing SessionTracing S peakerVolume (b) モデムー胸にイ吏用するコマンドの言聢 34 ModemPageStartTimeout ModemPageDoneTimeout ModemOnHookCmd ModemNoAutoAnswerCmd ModemModelQueryCmd ModemMfrQueryCmd ModemMaxPacketSize ModemInterPacketDelay ModemHostFillOrder ModemFrameFillOrder ModemFlowControlCmd ModemFlowControl ModemEchoOffCmd ModemDiaIResponseTimeout ModemDialCmd ModemCommaPauseTimeCmd ModemBaudRateDelay ModemAnswerVoiceCmd ModemAnswerVoiceBeginCmd ModemAnswerRespon seTimeout ModemAnswerFaxCmd ModemAnswerFaxBeginCmd ModemAnswerDataCmd ModemAnswerDataBeginCmd ModemAnswerCmd string string octal string string st ring st ring octal string integer string octal integer int eger integer st ring string st ring st ring integer integer st ring string string string i nt eger i nt eger string string string string st ring integer string string integer string string string 型 integer string 0600 0600 1 0600 0 0 0 Quiet 既定値 0 S8 = 2 DT%s@ 180000 EO XO NXOFF LSB2MSB MSB2LSB 0 16384 SO = 0 HO 180000 180000 180000 ェリアコード 国番号 モデムカ甘妾続されているテンヾイスのモード ダイアリング・ルール言当ファイルク月旨定 モデムカ材妾続されている電話回辛 ) 電話番号 getty に対する引数 国第凾諡旨定番号 ログファイルのモード 巨離電言耐旨定番号 レスポンスとして NO CARRIER を得たときのリトラ イ回数の指定 受イれこ送信者を制限するための TSI のパターンを したファイルク旨定 受信した FAX を保存するファイルのモード モデムによる受信を開始するまでの呼出し回数 サーバートレースク旨定 送信 / 受信セッションのトレースク旨定 モデム内蔵スピーカーの音量 説明 アンサーコマンド データ通イ訓芋、コネクション確立後に実行されるコマンド 窈旨定 データ通信のアンサーコマンド FAX 通イ訓叔コネクション確立後に実行されるコマンド 日ノ丘、 FAX 通信のアンサーコマンド アンサーコマンド実行後、レスポンスカ等られるまでの最 大許容嗤 (ms) 音声通信時のコネクション確立後、実行されるコマンドの 日冫こ 音声通信のアンサーコマンド モデム→ホスト間の速度設定後の待ち日判 (ms) , コマンドによるポース判りの設定コマンド ダイアルコマンド ()s は相手先電話番号 ) ダイアルコマンド実行後、レスポンスカ碍られるまでの最 大許幇町 ms ) コマンドエコーを打阯するコマンド モデム→ホスト間のフローコントロールク月旨定 モデム→ホスト間のフローコントロールク月旨定コマンド HDLC フレームでのピットオーダー ホストでのピットオーダー モデムへの書込みのあいだに挿入される遅々間 (ms) モデムに対する 1 回の書込みの最大バイト数 モデムの製造者の問合迂コマンド モデムの型番の問合迂コマンド 自動応答を打阯するコマンド 電話回辛 ) 切断 ( オンフック ) コマンド ページ送信後の最大待ち時間 (ms) ページ送信前の最大待ち時間 (ms) UNIX MAGAZINE 1994.3

3. 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

4. UNIX MAGAZINE 1994年3月号

連載 , / Li 眈 Language set ret { } "${currentState} く $triggers($t)>—>" \ if [string first \ foreach t [array names triggers] { set fs [string range $t 0 \ foreach t [array names triggers] set ret { } method getTransitions { } { # 全遷移のリストを返す return $ret lappend ret $triggers ($t) foreach t [array names triggers] set ret { } method getTriggers { } { # 全トリガーのリストを返す return $ret lappend ret $triggers ($t) if ! [expr $guards ($t)] { if [infO exists initAttributes ($attr)] method resetAttribute : {attr} { # 属性を初期値にリセット set attributes($attr) $value if [info exists initAttributes($attr)] method setAttribute : {attr value} { # 属性値を変更 set initAttributes($attr) $value method defAttribute : {attr value} { # 属性とその初期値を定義 return $ret $ts $actions ($t) $guards ($t) ] lappend ret [list $fs $triggers($t) end] [expr [string first set ts [string range $t \ [expr [string first " く " $t] ー 1 ] ] 116 # 全属性名を得る $initAttributes ($ia) set attributes ($ia) \ [array names initAttributes] foreach ia \ method resetAttributes { } { # 全属性を初期値にリセット $initAttributes($attr) set attributes($attr) \ method getAttributeNames { } { return [array names initAttributes] # 属性の現在値を得る method getAttribute : {attr} { if [info exists initAttributes($attr)] { return $attributes($attr) } else { return { } # 「初期状態」を得る method initState { } { return $initState # 「現在状態」を得る method currentState { } { return $currentState # 直前におこなわれた遷移を得る method IastTransition { } { return $IastTransition # 直前にいた状態を得る method 1astState { } { return $IastState # 直前に入力されたトリガーを得る method 1astTrigger { } { return $1astTrigger # 直前に実行されたアクションを得る method 1astAction { } { return $1astAction # デパッグ用ダンプメソッド method dump { } { foreach t [array names triggers] { puts stdout " $t " action: $actions($t) " puts stdout # 各種インスタンス変数 protected protected protected protected protected protected protected protected protected protected triggers protected protected initAttributes { } attributes states guards actions currentState { } initState 1astState 1astTransition { } 1astTrigger { } 1astAction UNIX MAGAZINE 1994.3

5. 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

6. 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

7. UNIX MAGAZINE 1994年3月号

. 0 86 リソース型コンバータ リソース値の文字列での表現からインスタンス構造体の フィールドの型への変換は、リソース型コンバータによっ ておこなわれる。 X ツールキットでよく使用される代表 的な型 (String 、 lnt 、 Dimension 、 Cardinal など ) へ データを変換する型コンバータは、 X ツールキット内部に オ剽勺に用意されており、とくに指定しなくても自重加勺に 呼び出される。 しかし、牛未なリソース型を必要とするクラスでは、リ ソースリストに正しい孑ミを言当しても、そク寺殊なリソ ース型に変換できる型コンバータか存在しないかぎり、正 0 しいリソース値を得ることはできない。 XtGetApplicationResource() によるアプリケーショ ン独自のリソースの取得においては、アプリケーションが XtGetApplicationResource() を呼び出す前に XtSet- TypeConverter() を呼び出して、独自のリソース型コン ータをる当求することができる。ところが、ウィジェット の実装においては、リソースの言も囚みとインスタンスへの 設定はあらかじめ X ツールキットが内部的におこなうの で、その直前にリソース型コンバータを登録できない。 ウィジェット・クラスの実装では、この間題に対処する ためクラス初期イ (class-initialize メソッドカ平び出 されるとき ) に当該クラスで参照するリソース型コンバー タを当求しておかなければならない。 リソースリストの連鎖 あるクラスのインスタンスは、当該クラスのインスタ ンス部う冓造体のみならす、そのスーパークラスのインス タンス部う冓造体をも含んでいる。すなわち、あるクラス のインスタンスには、当該クラスで定義した独自のリソー ス、、以外の " リソースも存在することになる。これはたと えば、どのようなクラスであってもかならす Core クラ 〇 スのサプクラスであり、 Core クラスのインスタンス部分 構造体内にある x 、 y 、 width 、 height などの基第勺なリ ソースをもっということである。 0 しかしながら、クラス部分構造体のリソースリストー resources フィーノレドには、当該クラスで実装している リソースに対する記述しか含まれない。 X ツールキット は、インスタンスの初期イは寺にスーパークラスからサプク ラスへという順で、すべてのスーパークラスのリソースリ 連載続ウインドウ・システムについて一朝 資料請求 N 。 .00 A 105 UNIX MAGAZINE 1994.3

8. UNIX MAGAZINE 1994年3月号

IJN Ⅸへの招待⑩ コマンドの使用形式は、次のとおりです。 case 文字歹リ in パターン 1 ) 図 5 break 窈吏用例 % cat ーⅡ example コマンド 0 ・ 1 0 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 case $ 1 工Ⅱ パターン 2 ) コマンド shift filename=$l shift パターンⅡ ) コマンド prog= ) $ 1 shift esac shift string=$l bre ak case では、文字列に一致するパターンがあると、次彳丁 から、、 ; ; " のあいだに記述されたコマンドを実行します。 パターンはいくつ並べてもかまいません。また、パターン の部分では、シェルのファイル名と同じメタキャラクタ を同し意味で使用できます。つまり、任意の文字列を * 、 任意の 1 文字を ? 、文字の範囲を [ ] を使って表せるわ リ Back に移動します ( 11 行目 ) 。このように continue けです。さらに、一を使い 2 つのパターンのいすれかであ る ( 論理和 ) という指定がおこなえます。簡単な例を図 6 は、区しの途中て次の区しの地頁に移りたいときに利 用します。 に示します。 図 5 は、あるシェル・プログラムの一部で、 getopt を使 コマンド終了ステータスによる里の変更 ってオプション角斤をしているところです。 while—done 最後に、 if—fi コマンドを紹介します。これもすでに何 コマンドを使った縄区しで getopt カした結果を順次 度も登場していますが、あるコマンドの終了ステータスが 処理し、 while のなかでは case を使ってそれぞれのオプ 0 か 0 以外かによって、異なった処理をします。 if は、次 ションを判定しています。 38 行目では、それ以 - ヒ while の形式で使用します。ただしこのうち else とコマンド群 のお区しを続ける未がないので、 break コマンドを使っ B は、省略してもかまいません。 て途中で終了しています。 getopt では、角財斤したオプシ ョンをすべて羅列したあとで一一を出力します。つまり、 ーというパターンであれは ( 35 行目 ) 、そオ・ IJ リ、上オプショ ンの角斤を続ける必要がないわけです。 パターンによる里の変更 次は、文字列のパターンによって処理を変えられるコ マンド、 case—esac です。このコマンドは、前回紹介し た getopt の実彳列て軻度も登場したのでよく檍えている 方も多いでしよう。 if コマンド then コマンド群 A コマンド群 B else シェルは、コマンドを実行し、その終了ステータスが 0 であれば then—else までのコマンド群 A を、 0 以外 であオしば else ~ までのコマンド群 B を実行します。 171 UNIX MAGAZINE 1994.3

9. UNIX MAGAZINE 1994年3月号

連載 / Li Language —arrow last \ —fi11 black . w$this . c create line $ { X02 } \ while {$i} { set i ${yn} wm geometry . w$this \ lncr [list ${fs}. ${tg} transition] —anchor e —text $tg ¯tags \ . w$this . c create text\ -tags [list ${fs}. ${tg} transition] ー f 土 11 black . w$this . c itemconfigure text—${cs} set cs [$model currentState] -fill grey . w$this . c itemconfigure state—text —fill grey . w$this . c itemconfigure transition incr i ー 1 update $ { ls }. ${lt} -fill grey . w$this . c itemconfigure \ update $ { ls }. ${lt} -fill green . w$this . c itemconfigure \ while {$i} { set 土 3 if [string compare \ set lt [$model 1astTrigger] set Is [$model 1astState] method changed { } { # モデルの更新を反映 lncr i ー 1 . w$this . c 10 er grid —fiII yellow —tags grid foreach t . w$this foreach t —fi11 C$mode1 va1idTriggers] { . c itemconfigure ${cs}. ${t} \ [$model vi01atedTriggers] { . w$this . c itemconfigure ${cs}. ${t} \ red 118 inherit Dependent # Dependent のサプクラスとして定義 itcl—class FSMInputView { # 有限状態機械モデル入力パネル # インスタンスの初期化 method —setup { } { toplevel . w$this wm title . w$this [$model name] label . w$this . title \ —text {Va1id Triggers} pack append . w$this \ . w$this. title {top fillx} set vt [$model va1idTriggers] foreach t [$model getTriggers] { if ! [winfo exists . w$this . ${t}] { button . w$this . ${t} -text "$t" \ —command " $model trigger : $t " pack append . w$this . w$this . ${t} \ {top fillx} # モデルの更新を反映 method changed { } { set vt [$model vaIidTriggers] foreach t C$mode1 getTriggers] { if [lsearch $vt $t] > = 0 { . w$this . ${t} configure —state normal } else { . w$this . ${t} configure \ —state disabled # 文字端末のためのモデルモニター・クラス itcl—class FSMTextua1Monitor { # Dependent のサプクラスとして定義 inherit Dependent # インスタンスの初期化はとくにいらない . # モデルの更新を表示 method changed { } { puts stdout \ model : [$model name] puts stdout \ "currentState= [$model currentState] " puts stdout \ "vaIidTriggers= [$model vaIidTriggers] " put s st dout \ "1astTrigger= [$model 1astTrigger] put s st dout \ "IastTransition=[$mode1 1astTransition] " "1astAction= C$mode1 1astAction] " puts stdout \ put s st dout UNIX MAGAZINE 1994.3

10. UNIX MAGAZINE 1994年3月号

連載 /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