イ リスト A static 〃スクリプト # ! /bin/sh localnetworks=/etc/localnetworks # script tO generate localhosts file from nameserver database infomation # usage ー static # input is from stdin, output tO stdout # startofdata IS a fake entry used tO delimit /etc/networks and host data # in the final awk. lt is a11 zeros SO that the sort will put it first startofdata="(). 0.0.0 startofdata" # make sure everything is in lowercase and convert tabs t0 bla-nks tr ) 11 CA—Z] ' , # ' % ' to denote the Iast domain name seen on a previous line # put file in a suitable fO ェ for parsing by replacing leading bla-nks with an # lntemediate file has records with the fomat: # awk # 1 ー generate 田 1 intemediate file for sorting ンタ ネ ッ く fullhostn 旧 > a く IPaddress> く fullhostnarne> c く fullalias> く fullhostname> h く hi 瓩 0 > く fullhostname> X く comments> # address record # canonical name record # host infomation record # additional commentary # 皿 ie "full" prefixes above mean that these fields are fully qualified. # I 10W that in the lingo, this is actually ca11ed a "domain" , but I # 1ike 'thostname't better. awk ' # skip unmteresting lines at the top 0f the named file " ) next if ( $ 1 if ( $ 3 = = "soa") next if ( $ 3 = = "ns") next # parse pseudo—commands "$include") next if ( $ 1 ・ $origin") { if ( $ 1 # skip comments # skip SOA record # skip NS records LASTDOMAIN = substr($2, 1 , len 戚 h ( $ 2 ) ー 1 ) DEFAULT. _DOMAIN = LASDOMAIN next # generate intemediate file from interestlng lines # detemine domain name for this record if ( $ 1 else if ( $ 1 else if ( $ 1 else { DOMAIN = LASDOMAIN DOMAIN = DEFAULT_DOMAIN DOMAIN = $ 1 DOMAIN = DOMAIN = DOMAIN " . " DEFAULT—DOMAIN if (substr(DOMAIN, le h ( 開 IN ) , 1 ) ! = はつ 0 IN = DOMAIN # address record if ( $ 3 HOSTNAME = DOMAIN printf ("%s a %s0" , HOSTNAME, $ 4 ) rest = 5 # cname name else if ( $ 3 = = "cname"){ UNIX MAGAZINE 1991.6 else NAME = substr($4, 1 , le れ戚 h ( $ 4 ) ー 1 ) if (substr($4, 1ength($4) , 1 ) # fully qualified names end in a period トへの接続■ 79
応援します あなたのネットワキ ' ・ NCDware のシリアル・ポート支援 NCD ネットワーク・ディスプレイ・ステーシ ョン ( X 端末 ) にはシリアル・ポートが標準 で装備されています。このポートは、通常の ターミナル・ポートとして使用できるだけで なく、広範な接続オプションによって、 TC / IP または DECnet によるネットワーク上のホス トからアクセスできる入出力ポートとして使 用できます。 この使用例として、下図にあるように NCD の X 端末に直接ローカル・プリンタを接続する ことができます。 NCD ネットワーク ディスプレイステーション への記入が必要である。関連するファイルには、以下のも のがある。 ・ NETINF 〇 :INTERNET- NUMBER-TEM PLATE. TXT ()P ネットワーク番号の登録方法についての解説 ) ・ NETINFO:DOMAIN-TEMPLATE. TXT (forward ドメインの登録方法についての解説 ) ・ NETINF 〇 :IN-ADDR-TEMPLATE. TXT ( 逆ドメインの登録方法についての解説 ) ネットワーク経由での入手が難しい場合は、以下の住所 に連絡すること ( 日本からの参加については、 85 ページの 「日本からの lnternet への参加について」を参照 ) 。 SRI lnternational DDN Network lnformation Center 333 Ravenswood Ave. EJ210 MenIo Park , CA 94025 USA ( 800 ) 235 ー 3155 以上の情報が正しく登録されたら、次のステップに進む 準備が整ったことになる。 ネームサーパーのセットアップ DNS (Domain Name Server) は、 lnternet に正しく 接続するために不可欠なサービスである。 Sun では BIND (Berkeley lnternet Name Daemon) が使われる。この プログラムの比較的新しいコピーは、 SunOS に含まれて いる (/user/etc/in. named)o BIND を使用する前に、ま ずネームサーバー用のホスト・データベースを作成しなけ れは・ならない。このデータベースの設定の基本的な手順は、 SunOS のインストレーション・マニュアルに記載されて いる。 DNS を使用する場合、ホストから IP へのアドレス・マ ッピングがスタティック・ホストテープル (/etc/hosts) ま たは NIS を用いておこなわれるのとはかなり異なる方法 をとる。 SunOS4.0.3 のリリース時点では、 Sun は DNS を NIS の機構にマッチさせるような柔軟な方法は提供し ていない。障害は、ホスト名とアドレスを参照するために 使われる 2 つのライプラリ・ルーチン gethostbyname() プリンタ シリアル接続 ィーサネット ( t 加 ck 0 「 tmn) TCP/IP プリンタ ドライバ ライプラリ アプリケーション ホスト NCDware (NCD X サーバーソフトウェア ) は、ローカル・プリンタを接続するための機 能拡張が行なわれています。これによって、 これまでホスト・マシンの近くにあったロー カル・プリンタが手元にある NCD X 端末の そばに設置することができます。 NCD 株式会社日本 NC D 〒 102 東京都千代田区平河町 1 ー 1 ー 1 TEL 03-5276 ー 1756 FAX 03 ー 3237 ー 9456 資料請求 NoOOA 74 UNIX MAGAZINE 1991.6
・リスト 2 daily の例 # ! /bin/sh # daily run sample. PAff=/usr/ucb : /bin : /usr/bin : /etc ech0 "Subject : dally run output" echo "Removing scratch and Junk files ー 0 cd /tmp; find cd /tmp; find f ind /usr/preserve/ find / find / msgs —C echO -type s \ -exec rm -f { } \ ; \ —name lOSt + found ! ーⅡ旧 . X11 ー山ⅱ x \ ー 0 —fstype nf s —mtime 十 7 ー 0 —fstype nf s —type d —mt ime ! —narne ー 0 -fstype nf s —prune —atime 十 3 ! —type d ! -pnme -prune + 1 -exec mdir { } \ ; \ \ ( —name ) [ # ] * ' ー 0 —name ' . # * ) ー 0 —name a. out —name ' . nfS* ' \ ー 0 —fstype nfs —prune —a —atime 十 3 —exec —f { } \ ; \ —mt ime + 7 ー 0 —fstype nfs —prune ー 0 —name —name echO "Purging accounting records : " /etc/sa —s > /dev/null echO い ech0 "Running calendar: calendar echO " ech0 "R0tating mall syslog: cd /usr/spool/mqueue rm syslog. 7 mv syslog. 6 mv syslog ・ 5 mv syslog. 4 mv syslog ・ 3 mv syslog. 2 mv syslog ・ 1 mv syslog ・ 0 mv syslog cp /dev/null syslog syslog syslog sys 10g syslog syslog syslog syslog syslog syslog . 7 . 6 . 5 .4 .3 . 2 . 1 . 0 chmod 644 ki11 ー 1 ( cat cd / /etc/syslog ・ pid' echO "Checking f ilesystems : sync /etc/fsck ーれ一 grep -v 冖 \ * \ * Phase ' ech0 "Checking subsystem status echO " " echo " di sks : df echO echO : mailq 52 UNIX MAGAZINE 1991.6
です。変数を参照するとき、修飾子をつけて変数の値をす こし変える機能を利用すればよいのです。 この修飾子にはいろいろなものが存在しますが、ここで は :t を用います。これは basename コマンドと同様に、指 set cmd_name=$O 、ゝ定された変数の内容をパス名とみなして、最後の部分だけ を返すものです。しかし、この機能は $ 0 に対しては使用で きません。そこで、いったん別な変数に代入しておいて、 出力のときに修飾子で変更することにしましよう。 echo "Usage : ${cmd-name : t} C-ab] string" > /dev/tty こでは /dev/tty へのリダイレクトの方法を用いてい ます。 stderr コマンドのように標準工ラー出力に出力でき るのなら、そちらを使ってください。 次は C 言語での場合です。こちらはシェルのときほど簡 単にはいきません。ます、コマンド名として与えられた文 字列の末尾から先頭に向かって / という文字を捜し、最初に いきあたった / の直後から末尾までをコマンド名として取 り出すのです。 / という文字がない場合には、与えられた文 字列本がコマンド名となります。文字列の最後から特定 の文字を捜すには、 rindex や strrchr 関数を用います。 rindex 関数は BSD の環境で、 strrchr は SystemV の環 境で使用できます。どちらも使用方法はそれほど変わりが こでは rindex を用いて説明しましよう。 ないので、 関数 rindex は文字列 ( 文字へのポインタ ) と文字を引数 としてとり、指定された文字列の最後に現れる指定された 文字へのポインタを返します。もし指定された文字が文字 列のなかに存在しない場合は、存在しないことを示す 0 を 返します。実際のコードでは、 rindex に対してコマンド名 として指定された文字列と / という文字を渡し、戻ってきた 値が 0 ならばコマンド名自身を、 0 でなけれは返された値 の次の文字以降を本当のコマンド名とみなします。 if (.com/name = rindex(*argv, ) た ) ) com_name = * argv ; else com_name十十 ; ます com-name という変数の値が、 rindex 関数の返す 値を示すようにします。この段階で com-name という変 数の値は、本当のコマンド名の前の / 以降を指しているか、 0 となっています。この値が 0 だった場合は、指定した文 字列のなかに / という文字が入っていなかった場合ですか ら文字列全体をコマンド名として処理すればよく、 com- name には * argv を代入しています。 com-name の値が = の 134 0 でなかった場合、 com-name の値は必要なコマンド名 の 1 つ前の文字 / を指しているはすですから、 com-name の値を 1 つ進めて必要な文字列を指すようにします。 exit 関数 さきほどの例題プログラムでは exit 関数を用いていま した。この exit は特別な関数で、この関数から戻ることは ありません。この関数を実行すると、コマンドの実行自体 が終了してしまいます。それではこの exit 関数に対する引 数はどのように使われるのでしようか。この exit 関数に対 する引数はコマンドの終了ステータスとして使用されます。 この終了ステータスは、コマンドが正常終了した場合には 0 を、異常終了した場合にはそれ以外の値を返すことにな っています。この場合には、コマンドは目的の処理をおこ なえすに終了していますので、異常終了を示すために引数 として 1 を指定しています。 この終了ステータスの値にはしめて気づいた人もいるで しよう。しつは、この連載でもすこしだけとりあげたこと があります。 sh で while ループを書いたときのことです。 sh の while ループは、条件として指定されたコマンドが 真を返すあいだ、本体を実行するものでした。この真を返 すというのは、 exit の引数として 0 を与えるという意味な のです。終了ステータスとして 0 を与えると、コマンドは 正常終了つまり真と判断されます。コマンドの終了ステー タスは、これ以外にもさまざまなところで用いられますか ら、正しい値を返すようにしてください。 exit 関数を使わすに正しく終了ステータスを設定する ことも可能です。 main 関数を終了するとどうなるのでし よう。 main 関数を終了するとコマンドの実行も終了しま す。 exit 関数と似ていますね。しつは main 関数の戻り値 (return の引数 ) も、 exit 関数に対する引数と同様に終了 UNIX MAGAZINE 1991.6
連載 / てくてぐ 1 び いても実行できます。 26 これを実行すると、次のように表示されます。 This is TeX, C Version 2.99 ー jl .6e (/usr/lib/tex/macros/lablst . tex LaTeX Version 2.09 く 26 Apr 1988 > LABLST version of 24 November 1984 * Enter lnput fiIe name. * \filename= \filename= に対して、そのディレクトリで実行し たことのある T の入力ファイル名をタイフ。してく ださい。ただし、拡張子の tex は必要ありません。 すると、次のようになります。 \filename=kame *Enter document style used 土Ⅱ file kame , * * 土 t no options . \refstepcounter というコマンドで変更されていき 照値 (\ref value) とも呼ばれています。参照値は、 \label コマンドに割り当てられる参照番号は、参 相互参照のしくみ 語訳 ) のラベルリストの 1 ページ目です。 覧表になっています。なお、この例は「い T: ( 日本 入力ファイルのセクション付けコマンドやラベルの一 みてください。次のページに示したように、指定した す。このファイルをフ。リントするか、フ。レビューして これで lablst . dvi というファイルができあがりま \docsty=jreport ドキュメント・スタイルを指定します。 こには、次のように入力ファイルで使用している \docsty= 142 ます。 こ矛 u よ、以前に紹介した \stepcounter コマンドと 同こ、引数に指定されたカウンタの値を 1 っ増 - 茆コ マンドて一す。セクション付けコマンドや \caption コ マンド、 enumerate 環境の \item コマンドでは、カ ウンタの値を 1 、つ増 - やすのに \refstepcounter コマ ンドを使用し、参照値を変更しています。 figure 環境の \caption コマンドの前で \label コマンドを使用すると、そのラベルに割り当てられる番 号はおそらくセクション番号になってしまうはずです。 \caption コマンドのな力、で \refstepcounter を使 用して figure カウンタの値を増やすと、そのときに 現在の参照値も図番号になります。ただし、 figure 環 境カ鮗了すると、もとの参照値に戻ります。 次の {\tt fi re } 環境てラベルの変化を \label{beforefigure} 見てみます。 \begin{figure} [h] \label{infigure} \vspace{lcm} \ captio Ⅱ { ラベルのテスト }\label{aftercaption} \end{figure} \label{afterfigure}% {\tt figu て e } 環境の前ては、参照値は \ref{beforefigure} になっていました。 {\tt figure } 環境のなかても \ref{infigure}Z' 、 \verbl\captionl コマンドの後ろて \ref{aftercaption} になリます。 {\tt fig e } 環境が終了すると、 \ref{afterfigure} に戻ります。 次の f 土 gu て e 環境でラベルの変化を見てみます。 図 1.1 : ラベルのテスト f 土て e 環境の前では、参照値は 1.3 になっていま した。 f 土 re 環境のなかでも 1.3 で、 \caption コ マンドの後ろで 1.1 になります。 fi て e 環境が終了 すると、 1.3 に戻ります。 亀之助くんは「相互参照なんて使いそうにない」と興 味なさそうてすが、とっても便利な機能であることは分 かってくれたようなので、今月はこのへんでおしまい。 ( ふじうら・はるみアスキー ) UNIX MAGAZINE 1991.6
い。順を追って見ていくと、 l)cd で /tmp に移り、 2 ) find でカレントディレクトリ ( / tmp ) を起点 0 3 ) それらをすべて rm で削除 からも ) すべて検出し、 ・ quotas ではない ・ lost 十 found ではない . ではない 度と使われませんから、単なるゴミのような存在です。そ こで UNIX では、システムの立ち上げ時に実行されるシ ェルスクリプト / etc / rc で、 / tmp 中のファイルをすべて % grep /tmp /etc/rc ()d /tmp ; /usr/Iib/ex3.7preserve —a) echo clearing /tmp というファイルを再帰的に ( / tmp 以下のディレクトリ IJN Ⅸへの招待① 、ゝ削除するようにしています。つまり、立ち上げるときにお >/dev/console 2 > & 1 その様子を見てみましよう。 掃除をするわけです。 ()d /tmp ; find . ! -name ! —name lost 十 found ! —name quotas —exec rm —r { } \ ; ) grep の実行結果のうち、最後の 1 行に注目してくださ こし、 名前 単に、、 rm -f /tmp" として / tmp ディレクトリに存在し ているファイルだけを消しています ) 。 lost 十 found や quotas を消していない理由については、彳あします。 余談になりますが、 /etc/rc では、、 cd /tmp;/usr/lib /ex3.7preserve -a" というコマンドが実行されています ( 上例を参照 ) 。これはⅵが異常終了した場合、ⅵで編集し ていたファイルの内容を回復するための処理です。ⅵが異 常終了しても、 / tmp には Ex や Rx などの一時ファイル が残ります。 ex3.7preserve では、 /tmp に残ったⅵの一 時ファイルをもとに / usr / tmp にファイルを回復するため ます。 してユーザーにファイルが回復できる旨をメールで知らせ のファイルを作成し、 / tmp に残った一時ファイルを削除 していますにの例は 4.3BSD での例です。 SunOS では、 lost 十 found 次に、ルートに存在する lost 十 found ディレクトリを紹 % ls —a /tmp/lost + found おや、ファイルは何もありません。念のため total 0 % ls ー 1 /tmp/lost + found 介しましよう。 UNIX MAGAZINE 1991.6 found といいますね。遊園地などに行くと、かならす lost 、、遺失物取扱所〃とか、、遺失物取扱備のことを lost and ます、その名前の由来から調べてみましよう。英語では、 レクトリなのでしようか。 やはり何もありません。いったい、どのような役割のディ and found というコーナーがあります。 lost 十 found とい 161 ます、ディレクトリには i ノード番号とファイル名が格 す。概略をかいつまんで説明しましよう。 レクトリが格納されていますが、その仕組みはやや複雑で 触れた UNIX のファイルシステムには、ファイルやディ ようか ? ちょっと考えてみましよう。前号ですこしは・かり リです。でも、なぜ UNIX に遺失物取扱所が必要なのでし found とは遺失物取扱所と同し役割を果たすディレクト こまでの説明でお分かりだと思いますが、 lost 十 lost 十 found という名前に落ち着いたそうです。 のメタキャラクタですから、かわりに、、十〃が使われて 前にでもすればよかったわけです。しかし、、、 & 〃はシェル んが、 lost and found ですから、、 lost&found" という名 人づてに聞いた話なので本当かどうかは定かではありませ う名前は、この lost and found からとられたそうです。
2 5 6 7 8 10 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 } 43 44 132 9 char VOid VOid れた引数がどんなオプションなのかを判断する際に、認識 できないオプションは Usage 出力をおこない、コマンド の実行を停止してしまえはよいのです。コマンドによって こでの出力はオプションが間違っているという意味 は、 のメッセージを出力することもあります。 コマンドに対して必要な引数が与えられなかったときの 処理方法は、通常はオプションの解析を終えたあとに残っ ている引数を解析し、必要な数の引数が残っていれは正し いと判定します。 Usage 出力とはあまり関係ありませんが、引数として入 14 { flag-a, flag-b) ; % cat ーれ usage. c 4 #define TRUE ( ! FALSE) 3 #define FALSE ( 0 ) 1 #include く stdio . h> usage() ; process-job() ; .com/name ; 11 main(argc , 矼空 ) int char int char argc ; flag—a = FALSE, flag-b カファイルや出力ファイルが必要な場合、その値が指定さ れなかったときにはできるだけ標準入力や標準出力を用い るようにしてください。以前にも述べましたが、 UNIX の コマンドはデータの入出力先として標準入出力を使います。 プログラムを作成する場合には、できるだけ標準入出力も 扱えるようにしてください。 話が少しすれてしまいましたが、実際に Usage 出力を おこなう例を C 言語を用いて示してみましよう。この例は オプションとして a と b をとり、引数として文字列が 1 っ 必要なものです。 = FALSE ・ C om_name = * argv , while (--argc > の { while ( * + + p ) { default : break ; f1ag-b=1RUE; break ; f1ag-a=TRUE; case ) a switch (*p) { usage() ; } else { bre ; exit ( の ; process-job(*argv , usage() ; if (argc ! = VOid 45 usage ( ) UNIX MAGAZINE 1991.6
ンタ # if a cname else if ( $ 2 e1se if( $ 2 # additional commentary e1se if( $ 2 nID { printf ("%s. %s0" , ADDRESS[i] , 0 町 P ) # if nickname is lowd , add it tO the 1ist ; イ # but those are silly names , anyhow # disallowed れ e (like 10g , mail, etc. ) # fail for any name which is a substring 0f a # this is 田一 xmprecise but fast check; it 3i11 if( ! index(BADNICKNAME, nickarray[l] ) ) { 0 ( 以 ? ( = ourptrr " " $ 3 # append i HOSTNAME) { record, append i t0 output line NICKNAMES[ + + NICKS] = nickarray [ 1 ] ネ ッ トへの接続■ # add shortened alias t0 nickname array if not already there; # we ould 1ike t0 use index() for this function, since it is # much faster than this 100P , but it would fail for cases like Ⅱ = sp1it($3,nickarray,". ") for(i = 1 ; ! (i > NICKS) ; i + + ) { if (NICKNAMFS[i] if (i > NICKS) { nickarray[l] ) break # if nickname is allowed, add it t0 the 1ist if( ! index(BADNICKNAME, nickarray[l] ) ) { NICKNAMES[ + + NICKS] # if a hinfO record, save the CO ents for output = nickarray[l] $i ー HOSTNAME) { ー HOSTNAME){ for (i = 3 ; for (i = 3 ; "h" 誠 $ 1 # output 1ast hOSt line sed ' s た 10. / 255. / ' は # a small hack tO put ARPANET hosts entries last in the output print(" ' "$startofdata't ' " ) # append delimiter which is a later removed for (i 1 ; i く = naddr; i + + ) # its used in the next stage Of the script # note the " . inserted after the IP address # print complete output record # print actual output 1 ine COPMENTS Ot.rrPtJT = OU Ⅳ ( " # " COFTENTS if(C(]•ffENTS ! = # put on comments OIJI?I-rr = 0 び rp ー " " NICKN. 鮎僞[i] for( i # add the shortened nicknames tO the record = CO 側 S CO ト旧「 rs " # sort # 2 ー SO れ the file int0 IP address order for fina1 output fomatting sort ー -t. + 0 ー 1 + 1 ー 2 + 2 ー 3 + 3 ー 4 憘 # sed # 1 ー strxp out the extra ". " after the IP address and replace with tab UNIX MAGAZINE 1991.6 81
連載 / てくてぐ 1 び 26 マンドで参照するのにも、引数にラベル名となる文字列 を指定します。つまり、 \label コマンドで引数に指定 したラベル名と番号とを対応づ・ナ、 \ref コマンドで引 数に指定したラベル名に対応する番号を出力するよう になっています。 まず、指定するラベル名を決めなけれよなりません。 ラベル名は、次の文字を組み合わせて作成してくださ ・英文字ー - A—Z 、 a—z 大文字と小文字は区別されます。 ・数字ーー 0 ~ 9 己号文字 ノくックスラッシュ・やブレース ( { } ) は使えませ ん。 あまり長いラベル名をつけると、 ファイルが読みに くくなってしまいます。「洫 tr 。」「はじめに」「 fig: 亀之助」など、内容を簡潔に表すような名前にしてお くとよいでしよう。また、英字の大文字と小文字は区 別されますから、「 k e 」と「 KAME 」とは異なるラベ ルになります。 \label コマンド あるセクション単位に対してラベルをつけるときは、 セクション付けコマンドの引数のなかに \label コマ ンドを指定します。 下の例では、ある節に対して「 nothing 」というラ ベルをつけています。 \section{ 何も思いつかない日 \label{nothing}} \section{ 何も思いつかない日 \label{nothing}} 今日は何も思いつかない日。 空は青いし、気温も暑すぎず、寒すぎず。 こはどこ ? こは \ref{nothing} 節だよ」誰かが答えた。 出力ファイルの作成 さて、入力ファイルを kame. tex として、 IATEX を 実行してみます。 kame% j latex kame This is TeX, C Version 2 .99 (kame . tex j 1 .6e ニ一一口 No file kame . aux . Chapter 1 . [ 1 ] Chapter 2 . LaTeX Warning: Reference 'nothing ' 0 Ⅱ・ [ 2 ] (kame . aux) LaTeX Warning: Labe1 (s) may have chan . Output written on kame. dvi ( 2 pages, Transcript written 0 Ⅱ kame. 10g. kame % "LaTex Warning ”で始まるメッセージが 2 つ表示 されています。これらは、 TbX の実行カ阯まってしま ったり、 I*TEX として困ったことがあった才イナではな いけれど、「もしかすると出力結果におかしなところが あるかもしれない」という警告メッセージです。 1 つ目の警告メッセージ "LaTeX Warning : Ref- erence 'nothing' ' は、実際にはその後ろに“ 0 Ⅱ page 2 undefined. ”という文が続きます。これは、 「第 2 ページに 'nothing というラベル名で参照して いるところがあるけど、この参照ラベルは知らないよ」 と注意しているのです。 第 2 ページの結果を見てみると、次のようになって います。 2.3 何も思いつかない日 今日は何も思いつかない日。空は青いし、気温も 暑すぎず、寒すぎず。 こはどこ ? 「ここは ? ? 節たよ」誰かが答えた。 \ref コマンド ラベルをつけたからといって、かならずしも参照し なければならなしツメナではありませんが、 こは練習、 練習。 \ref コマンドを使って、ラベルをすたセクション 単位の番号を出力しましよう。 \ref コマンドの引数に は、セクション単位にラベルをつけたときに使用した ラベル名を指定してください。 137 UNIX MAGAZINE 1991.6
OSF, / Motif のすべて一⑨ A1amWindow FontsWindow VersionWindov = NULL; ー = am _sw = FALSE ; hou.r = minute = second = 0 ; 159 C10ck Widget の作成 160 161 static Widget CreateC10ck(w, 162 , arglist, argc) name 163 Widget 164 String name ; 165 ArgList arglist; 166 Cardina1 argc ; 167 return ( XtCreateWidget (name , c10ckWidgetCIass , 168 169 町 arglist, argc) ) ; 170 リスト 2 1 66 コールノくック・ルーチン》 2 67 ファイル名 : callbacks. c 3 68 4 Copyright 1991 Sony Corporation, T0kyo, Japan. 69 5 A11 R1ghts Reserved 70 アラームのセット 6 71 7 #include く Xm/Xm. h> 72 void alarm set_proc ( widget , tag , callback_data ) 8 73 Widget widget : 74 char ・ *tag, ウインドウの初期化 10 75 XmAnyCa11backStruct *callback_data ; 11 76 12 void create—cb (w , id , reason) 77 13 Widget w; 14 int *id; 79 15 unsigned long *reason; デジタルクロックのフォント変更ウインドウの表示 80 16 81 17 82 void font—proc( widget, tag, ぐ al lback_data ) 18 83 Widget vidget; 19 84 char *tag; アナログ / デジタル 切替え 20 85 XmAnyCa11backStruct *callback_data ; 86 21 22 VOid change—ad—da( Widget, tag , callback-data ) 87 23 Widget widget; 24 char 89 *tag ; 25 XmAnyCa11backStruct *callback-data ; デジタルクロックのフォント変更処理 90 26 91 27 92 void font-selected ( vidget , tag , callback_data ) 28 93 Widget widget; 29 94 char *tag ; ウインドウの表示 30 アラームセノト 95 XmAnyCa11backStruct *callback_data ; 31 32 void CO れ t て 01 ー proc ( widget, tag, callback—data ) 97 33 Widget widget; 98 34 char 99 *tag : 35 XmAnyCa11backStruct *callback—data : パージョン・ウインドウの表示 100 36 101 37 102 void version-proc( widget, tag, callback_data ) 38 103 Widget widget; 39 104 char *tag ; アラーム 0 N / 0 F F 40 105 XmAnyCa11backStruct *callback_data ; 41 106 42 void toggle—proc(), tag, to le ) 107 43 Widget w; 108 44 int *tag , 109 45 * tO 1e ; 110 キャンセル・ ボタン 46 111 47 void cancel—proc(w, 112 tag , reason) 48 113 Widget 町 49 int 114 *tag ; 午前 / 午後切替え 50 115 uns 土 red. 10 取 g *reason; 51 116 52 void activate—proc(), id, reason) 117 53 Widget ; 118 54 int *id; 119 55 u.nsigned 10 Ⅱ g *reason; 終了処理 120 56 121 57 122 void qmt-proc(), tag, reason) 58 123 Widget ; 59 124 int *tag ; 時・分・秒 取得 60 125 unsigned long *reason; 61 126 62 void scale-proc (w , if (tag ! = NULL) id , scale) 127 63 Widget w; printf ( 'tC10ck ー %s\n" 128 , tag) ; 64 int *id; exit( の ; 129 130 65 XmSca1eCa11backStruct *scale ; 92 UNIX MAGAZINE 1991.6