連載 / ' 凵社 Language—O の最後の引数変数にリストの形式で格納されます 3 。 期待するよりも少ない引数が手続きに渡された場合、実 体が不足することになる引数変数には & nu Ⅱが自動的に 補われます。 手続き suffix は、第 2 引数が与えられた場合、それを拡 張子のセパレータとして利用します。引数が 1 つだけのと きはドット (. ) を拡張子のセパレータとみなします。 find(separator , s) every 1 これは、パスに含まれるドットのうち最後のものの文字 位置を捜しています。直前にある代入文は、バスにドット がまったく含まれない場合に備えるためのものです ( その ときは、変数 i への代入はおこなわれないはすですから ) 。 パスを分割して要素数 2 のリストを作成する作業は、 1 行で簡潔に表現されています。表記、、 [ , ] 〃はリストの生成 を意味しています。第 2 要素はかなりややこしいですね。 s[()s > = i) + 1 : 0 ] 一面 u11 この alternation は、以下に示す Pascal ふうの分かり やすいがくどい表現と面です。 if *s > = i then s [ i + 1 : 0 ] else &null i はドットの文字位置ですが、もしパスにドットが含ま れていなけれは則述の、、備え〃によって * s 十 1 という値 になっているはすです。結果として、この alternation は 比較 ( * s > = i ) の成功 / 失敗に依存して、パスにドットが含 まれていればそれより後ろにある部分文字列を、そうでな けれは値 & nu Ⅱを拡張子として返すというわけなのです。 手続き tail の解釈は、読者への課題としておきましよう。 lcon プログラムの裏技 今月のおまけとして、 lcon に備わっている翻釜な ( ! ? ) 機 能にすこし触れておきましよう。 lc 。 n では、以下のように手続き名や関数名を値として取 り扱うことができます。 [ upto , any, many ] plist 3 これと似た例に シェルの read 構文があります。 UNIX MAGAZINE 1991.4 変数 plist は lcon 関数 upto 、 any 、 many からなるリス トであり、以下のように利用することができます。 plist [ 2 ] (), s) これは、関数 any(), s) と面に振舞います。 さらに、 lc 。 n には文字列を手続き名あるいは演算名 / 関 数名とみなして式詔面するという機能があります。 関数形式のこの式を詔襾すると、 2 つの数の和が得られ ます。 もし、 stdio という名前の手続きを lcon プログラムで定 義しているとすれば、 "stdio" (x) の詔面は、手続き stdio(x) を呼び出すことと等価です。 前述の plist の例と同様に、手続きや演算の名前を表す 文字列は変数の値であってもかまいません。変数 opr の値 が文字列、、十〃であるなら、さきの 2 数の和は、 opr(), 2 ) と表記することもできます。 lcon のこれらの機能は、 C における関数へのポインタに 似ていないこともありません。しかし、 lcon では手続きあ るいは演算 / 関数を表す文字列を lc 。 n プログラム内部で 動的に生成 / 改変することができるのですから、実行時に式 を生成してそれを評価するような Lisp 的な高等 ( ? ) プロ グラミング手法を応用することだってできるはすです。 さらに、この欄ではまだ触れていませんが、 lcon プログ ラムには手続き main をルートとするような木構造では ない呼出し形態も備わっています。したがって、 lcon では 実行制御が複数の手続きのいろいろな場所にピョンピョン と移っていく奇妙なプログラムを作成することもできるは すです。ここでとりあけた lcon 特有の機能については、い すれ紹介するチャンスがあるでしよう。 さて、 lcon 入門 ( 4 ) は前回からの持ち越しとなっている lcon 版拡張 unifdef 、すなわち # if/# elif 孑ミ文が含まれ た C ソースコードを正しく処理できる unifdef をとりあ げることにしましよう。では Happy hacking ! 111
ッ / > 不乍 ちⅨ端 手 ようなプログラムを作ります。 # ! /bin/sh while [ $ # ー戚 0 ] do case $ 1 in ls—opt="$ls-opt $ 1 " 各社 AX パソコン対応 PC ー 980 ー対応 PC ー 286 , PC ー 386 対応 J ー 3 ー 00 対応 ☆各種字コートに対応 漢字コードは、シフト旧・旧 J ・新 J 旧・ NEC 漢字・ EUC ・ DEC (VMS) 漢字をサポート。 ☆高速ファイル転送 ファイル転送は、チェックサムを利用し高速でかっ安定 した方法を使用しており、 UNIX ・ VMS 間でアスキー 転送・パイナリ転送共に可能 75bps から一 9200bPS までサホート。 ☆オートロクイン機能 工ミュレータ自体をコントロール可能なプロクラム作成 可能な構造でオートロクイン等の定形処理を実現 定価¥ 59 , 800 ( 消費税別途 ) プ 0 クラ設計書を 自動作成 / / プ 0 ク改修作業 0 ルとしてイ cat-opt="$cat—opt $ 1 " break esac shift done echo 1s option : $ls_opt echO cat option : $cat_opt ech0 p 矼田 : $@ 各コマンドに対するオプションをまとめて覚えておき、 コマンドを使うときにはその変数本をオプションとして コマンドに渡します。こうすれは・オプションをまとめて解 析できますし、記述も簡単になります。コマンドに対して このオプションを指定するときは、 ls $ls—opt cat $cat_opt などとします。 おわりに 今回は、コマンドに対して与・えられたオプションを解釈 する手法について、 B シェルと C シェルを例にとって説明 しました。 次回は、コマンドに莎えられたオプションの解釈方法に ついて C 言語を例にとって詳しく解説します。また、 getopt に対応する C 言語の getopt ライプラリの使用方 法、 get 叩 t コマンドがないときにこのコマンドを自作する 方法などについてお話しする予定です。 ( いまいすみ・たかし東京工業大学 ) ◆サンプル版無料貸出中 IJN Ⅸマシン対応 ☆モシュールツリー 各関数の呼び出し関係をモジュールツリーにして出力 ☆逆モシュールツリー 各関数の呼び出され関数を逆モジュールツリー 出力 ☆関数のクロスリファレンス 各関数の呼び呼ばれ関係を表にして出力 ☆変数のクロスリファレンス 広域変数の定義・代入・参照の関係を表にして出力 ☆統計情報 予約語・コメント・標準入力関係の出現回数を統計情報 として出力 定価 \ 400 , 000 ( 消費税別途 ) 株式会社工リック営業部 〒 103 東京都中央区日本橋茅場町 2 ー 7 ー 10 TEL : 03 ー 3668 ー 8866 ( 代 ) FAX . 03 ー 3668 ー 8874 129 UNIX MAGAZINE 1991.4
Daemons and Dragons これを実行すると、次のような結果が返ってくる。 3628800 これが正しいことは一目瞭然である。 現時点では、 perl のもつ多くの機能を用いた例としては サブツリー内のファイルをリストするプログラムが適当で あろう。 以下の例について考えてみよう。 sub list { chdir $start ; foreach $i ( く * > ) { print "$i" print " / \ " ・ do list('t$start/$i") ; chdir $start ; else { printf " \ Ⅱ " ルーチン内に return 命令が含まれていると、それはサ ーチンではなく関数になる。関数も d 。 c 。 m 命令を用 プル いて実行することはできるが、 perl では関数の返す値を得 るために & を用いたほうがよい。 sub f { return 23 ; } print ( ) & はあとからプログラム中で使える値を式がもっことを 意味しており、この点を除けは & と docom はどちらでも 1 使うことができる。 2 多くの人びとは、パラメータがサフプログラムをよりい 3 4 っそう便利なものにしていると感しているだろう。パラメ 5 ータは、サププログラムのなかで大域的な配列@ーの要素 6 7 として現れる。次に示すプログラムは、この種の引数の受 8 9 渡しの例である。 10 11 sub add { return $ ー [ 0 ] + $ ー [ 1 ] ; } 12 print &add(4 , 9 ) 13 14 do list("/tmp") ; この実行結果はお分かりであろう。 listcom サプルーチンは、再帰的にリストされるディレ クトリだけを引数として呼び出される。 2 行目では、 ( 再帰 する必要があるので ) リストされるディレクトリとループ ところで、配列@ ーへのアクセスは $ ー [ か ] を用いる 変数はともに局所的であることを宣言している。そして対 ことに注意してほしい。スカラ変数とべクトル変数の名前 象となるディレクトリに移ってファイル名を展開したあと、 空間は分かれているので、一般に使われるスカラ変数 $ - と メインループに入る ( 4 行目 ) 。 は別のものである ( そして、この値も保持されている ) 。 5 行目でファイル名あるいはディレクトリ名を出力する しかし、サププログラムで使われる引数の受渡しのため と、それがディレクトリかどうかをチェックする。もしそ の変数@ ーが大域的であることは再帰的なプログラムでは れがディレクトリなら、 / を出力してリストすべき新たなデ 問題となり、また、あるサププログラムから別のサププロ ィレクトリ名を引数として listcom サプルーチンを再帰 グラムを呼び出すときにも間題となる。 perl では、これを 的に呼び出す。処理が終る前に、次におこなわれる chdir 、、局所〃変数化することによって解決している。具体的に がうまく動くよう、対象となるディレクトリに戻っておか は、 10Ca1 関数を用いてそこで指定したリスト中の変数を なけれは・ならない。また、もしそのファイルが通常のファ すべて局所化する。また、オフションとして宣言中で変数 イルなら ( 11 行目 ) 改行して処理を続ける。 への値の代入 ( シーケンシャル・リストの代入のように ) も 残念ながら、 perl が用いるファイル名の展開の方法が災 おこなうことができる。 いして、 ( マニュアルによると ) ファイル名の展開をおこな っているあいだは再帰的なサプルーチンの呼出しができな い。しかし、こは頑張って ( 上司も大目に見てくれること だろう ) この問題を乗り越えてみよう。 とりあえすこの欠陥品のプログラムリストはセープして おき、別の解決法を試してみる。 local($start , (i) = $ ー [ 0 ] ; 13 sub factorial { if ()n く 2 ) { return 1 ; } return $n * &factorial ($n print &factorial ( 10 ) . "\n" ・ 100 UNIX MAGAZINE 1991.4
連載 / Li Language—O い知らされました。同業で同世代人であっても、話がちっ とも通しないのです。つまり、彼ないし彼女は子どものと きにそのようなおもちやでは遊ばなかったと主張するので す。たとえは某氏いわく、お気に入りは、、人生ゲームクだ ったと・・ 少年期にどのようなものに興床を示すかは、ひょっとす るとその人の将来を雄弁に預言しているのではないかと、 最近はしみしみそう思っています。 忘れ易きは人の常 さて、今月の LittIe Language ではふたたび lcon をと りあげます。前回の lcon 入門からいくらも日が経ってい ませんが、 UNIX ューサーが毎日のように利用する C や AWK とは異なり、日ごろ馴染みの薄い lcon プログラミ ングは、、 3 日間ですっかり忘れてしまう ( 某優秀プログラマ ーの弁 ) 〃傾向にあるのも事実です。かく申す srekcah も、正直なところ自分で作った lcon プログラムがすでに 読めなくなっているありさま : ー ) そんな具合ですから、キ ーポードのかたわらには、、 lcon 本クを常備しておくことに しましよう ( 、、 K&R 本〃をどこかでなくしてしまって久し いウッケ者の srekcah としては、なんとも殊勝な心掛け です ) 。本誌の 1991 年 1 月号が読者の手元にあるのなら、 「 lcon 入門 ( 2 ) 」のページを開いて復習を兼ねて参照してく ださい。 それでは、始めましよう。 lcon プログラムの基本構造 則回っつこんで述べなかったことの 1 つに、 lcon プログ ラムの基本構造があります。例によって、ほかのプログラ ミング言語 C と Pascal とを引合いにだしながら特徴を解 説していきましよう。 lcon にはユーサー定義可能な手続きがあり、その手続き は引数をつけて呼び出すことができます。手続きの定義空 間はフラットで、手続きをネストして定義できるわけでは ありません ( C に似ており、 PascaI とは異なっている ) 。な お、 lcon の手続きは再帰呼出しができます。 lcon には、手続き (procedure) と関数 (function) の区 別があります。 lcon における手続きとはユーザーが自由に 定義できるものであり、関数とは言言士様の一部としてす 108 でに定義されている ( 組み込まれている ) ものです 1 。この 点、両者を、、値を返す / 返さないクで区別する PascaI とは 異なりますから注意してください。 lcon では、変数に大域 / 局所 ( gl 。 ba い。 cal) の区別があ ります。手続きの外部で宣言された変数は大域に、手続き 内部で宣言された変数はその手続き内部に局所になります。 局所変数の宣言は省略することもできます。しかし、分か りやすく誤りのない lcon プログラムを作るために手続き の先頭で明示的に局所変数を宣言したほうがよいでしよう。 lcon における変数名の参照には、同し変数名が複数存在 するときにはネストの内側にあるものが優先されるという 簡単なスコーフ。規則があります。 lcon では、 C のようにネ ストしたプロック内部に局所的な変数を宣言することはで きません。局所変数の宣言ができるのは、手続きの先頭だ けです。また、変数の記憶クラスとして動的 / 静的 (dynamic/static) の区別がありますが、こちらの意味は C と同しです。 C といくらか違うところといえは、 lcon では変数を明示 的に初期化する構文 ( initial) を備えていることでしよう。 初期化構文を使うと、手続きか初めて実行されたときに 1 回だけ変数の内容を明示的に初期化することができます。 制御構造としての縦棒 ( D lcon は近代的な制御構造をひととおり備えていて、それ らの表記は直観的で分かりやすくなっています。ただし、 前回で詳しく述べたように lcon プログラムの実行制御は 論理の真偽ではなく、式評価の成功 / 失敗をベースにおこな われます。すこし風変わりな lcon における実行制御の解 釈について、 ここでもういちど触れてみましよう。 たとえは、前回とりあげた lcon 版 unifdef プログラム では次のような表現を説明抜きで使いました。 if nest[l] ("t" い " ) then write(text) さて、これの意味は ? そのとおり。、、 nest [ 1 ] の内容が t あるいは T ならは、 text の内容を出力する〃です。でも、早合点しないでちょ っと待ってください。 lcon では、縦棒い ) は論理和ではな く、 alternation という演算の 1 種なのです。 1 つまリ、 lcon における関数とは表記法が関数形式、、 f ( pl , p2, 算子ともいえます。 .. 尸である演 UNIX MAGAZINE 1991.4
DAEM 〇 NS & DRAG 〇 NS ⑩ スーノヾ一言語 PerI 2 ■ Rob Kolstad 前回からこの欄で紹介している PerI という言語の名前 は、、、 Practical Extraction and Report Language" の 頭文字をとったものである。 perl は、 C 言語や sed 、 awk 、シェルプログラミング、データベース・アクセス、 テキスト操作などの優れた機能をなんでもこなせる巨大な にまとめあげたようなものといえよう。 厂 1 ロロ 今月は簡単に前回のまとめをしたあと、正規表現やディ レクトリのアクセス、サプルーチンなどに触れていくこと にする。さらに次号では、組込み関数やシステムコール、 dbm データベースなどについて例を挙げながら紹介する 予定である。 前号では、 perl がもつ 3 つの基本的なスカラ値をとるデ ータ型ーー数値型、論理型、文字列型について述べた。 perl では、スカラ変数の参照はすべて $ 〃 4 襯 e で表す朝のは 変数名 ) 。変数の型の扱いは awk とよく似ており、直前に おこなわれた代入値の型に従い、しかもあらかじめ宣言し ておく必要はない。出力のためには、 print 命令や printf 命令を用いる。 また、配列変数も扱うことができる。べクトル型は 1 次 の配列で、 ( デフォルトで ) 0 で始まるインデックス番号を [ ] で囲む。 1 つの値しかもたない変数 ( スカラ変数や要素 が 1 つのべクトル変数 ) は、変数名の前に $ をつけることで アクセスできる。配列全体を参照する場合は、 $ ではなく @ をつければよい。 perl は、連想配列もサポートしている。これはインデッ クスとして、スカラ値をとるデータ型のリスト ( 要素が 1 つ の場合もある ) を用いる。連想配列の参照は、インデックス 前回の復習 UNIX MAGAZINE 1991.4 from UNIX REVIEW を [ ] ではなく { } で囲むことによっておこなわれる。 その他、 perl ではさまざまな変数があらかしめ定義され ている ( 現在のプロセス ID や引数を格納するべクトル変 数など ) 。 perl では、型の変換とアドレス演算子 ( & と * ) を除き、 C 言語の演算子とまったく同しものを用いる。さらに、べ き乗 ( * * 、 * * = ) 、範囲の指定 (). ) 、文字列の連結 (. 、 . = ) 、文字列の反復 ( x 、 (=) 、 ( UNIX のシェルで用いるよ うな ) ファイルのテストをおこなう演算子も備えている。 その制御構造は C 言語や awk とよく似ている ( 唯一 case 文だけはサポートされていない ) 。ただし、 C 言語とは 異なり、 perl の制御構造はつねに括弧で括る必要がある。 また、 C 言語の continue と break の代わりに perl では next と last を用いる。 perl はファイルをオープンし、 read 、 write 、 append な どの操作をおこなうことができる。さらに perl ではパイプ をオープンして、そこからの読込みやそこへの書込みをお こなうこともできる。また、 printf 命令のような C 言語で 標準的に使われる命令に加えて、く〉などの単純な入力命 令、 print などの単純な出力命令もある。 perl では、デフォルト変数として $ ーがよく使われる。た とえは、入力操作の結果について何も書かれていなければ、 入力は $ ーに代入される。引数が省略された関数では、操作 は $ ーでおこなわれることが多い。たとえは・、文字列の最後 のキャラクタを取り除く ch 叩関数は $ ーの上で操作をお こよっ。 正規表現 perl の正規表現は、 egrep のものとよく似ている (grep 97
連載 / LittIe Language alternation は、 lcon 版 unifdef プログラムでは以下の 3 x 2 = 6 とおりの比較を列挙しなくてはなりません。 ています。同しことを PascaI や C を使って表現するには、 する〃という式を alternation を使ってコンパクトに表し は、、 i 、 j 、 k のうちどれか 1 つ以上が値 0 または 1 なら成功 (i ー j ー k) = ( 0 ー 1 ) 表現、 は制御構造の 1 つであると位置づけられています。以下の して論理和演算のように振舞うこともありますが、 lcon で lcon の alternationl は論理和ではありません。結果と ているわけです 2 。 論理和Ⅱ ( あるいは論理積 & & ) は一種の制御構造になっ が論理和式全体の値となります。したがって、 C における 辺の言平価結果が偽であれは右辺が評価され、その評価結果 ば論理和式全体の値は真となり、右辺は評価しません。左 論理和では、左辺をます語面し、その詔曲結果が真であれ これに対し、 C における論理和Ⅱは、、動的〃です。 C の を連想させないからでしよう。 て結果が一 -- ・意に決まってしまうため、、、式評価という行為〃 となく、、静的〃な感しです。論理式と真偽表の 2 つによっ ってしまいますが、ほかの演算と比べると論理演算はなん 似ているかもしれません。曖昧でひどく感覚的な表現にな lcon の alternation は、 C における論理和Ⅱとすこし やこしいですか ? したら text の内容を出力する〃となります。ちょっと、や と nestC1] = = " T " をそれぞれ式評価し、どちらかが成功 、、 alternation によって導かれる 2 つの式 nest[l) -="t" を lcon 処理系の処理手順にのっとって厳密に解釈すると ("t" い叮 " ) then write(text) if nest [ 1 ] がって、前回のプログラムにあった以下の表現、 て、 2 つの文字列 t と T を生成する〃と解釈します。した lcon では、この表現を、、 alternation の評価結果とし UNIX MAGAZINE 1991.4 case 構文を用いたこの判定は論理和のようにしかみえ " ifdef" ー "ifndef" case control = tab(many (&lcase) ) of { ようにも使われています。 ませんが、 lcon では奥深い背景があることを心にとめてお いてください。 lcon ライプラリ 109 ことを思い出しましよう。 2 C とまったく同し表記のシェルの論理和 / 論理積も、このように機能している * 演算を施すことによって、変数が文字列の場合は文字列 単項演算子、、 * 〃は、変数の要素数を返します。変数に れているので、それを中心に解説していきましよう。 入門」シリーズではまだ紹介していない演算や機能か使わ すが、しつくり眺めるとそうでもありません。この「 lcon 一見するとプログラムは込み入っているようにも思えま する。結果は要素 2 のリスト Chead,taiI] で返す。 UNIX パスをディレクトリバスとファイル名とに分解 tail (path) 結果は要素 2 のリスト Cprefix, suffix] で返す。 UNIX パスをパス付きファイル名と拡張子に分解する。 suffix (path) したものです。手続きの仕様は次のとおりです。 filename. icn から 2 つの手続き suffix と tail を抜き出 リスト 2 は、 UNIX パスを解析する lcon ライプラリ しましよう。 に挙げた lcon ライプラリから実例をいくつか選ぶことに ムのサンプルとしての性格もあります。そこで、リスト 1 lcon ライプラリは、コンパクトで実用的な lcon プログラ lcon の標準ディストリビューションに付属している プラリの一覧です。なかなか面白そうでしよう ? ディストリビューションに標準で含まれている lcon ライ たくさん用意されています。リスト 1 は、 version8 lcon ライプラリというかたちで便利なユーティリティ手続きが lcon では、処理系に組込みになっている関数群のほかに 実行可能な lcon オプジェクトができあがります。 より、大域変数と手続きの参照関係が解決されると 1 つの に分けて作成することができます。 icont のリンク処理に C プログラムと同様、 lcon プログラムは複数のファイル
A S T E C C 汀語のソオウェア嬲発を効率化する References To>do—in.rnce ・ <References Frorn クロスリファレンス・プラウサ 関数呼び出しのツリー構造や関数や 変数の参照関係を表示します い既キ奥 ] S ョい r ーじ : cross Referenee Browser ISP ay ismrss Eva1: D SS データ・プラウサ リスト構造やツリー構造を持っデータ の表示、修正を行なえます、 ☆ 1i3 弋 - h 色 ad s 土 ru ( そ 0 れそ ry 第 0 1 ist -head T ) 下・ 3 を r 取 0 弋 entry 0X111S 仙 hort 001 ー table [ 500 ] hort row—table[SOO] id do—wait() oid drav( ) int 0Y01 ・ - u れ 0 ・ ( ) int main() int test—bounce( ) 0- ト ) u れ 0 ・ int 1 ”・ 8 struct entry ☆れ ex を第 0X111930 [ 変〕おいいゞ /am/tamtam/disk/sd12e/sho/saber t u t or i ョー _d i r い 5 : 0 3 、 0 Na 第 0 ・ 1i3 弋 - h ・ ad - > れ・ xt T 、 1 ・ 5 弋 r を entry 0 ー 1 れ a on 0 Ⅱ 0 Ⅱ eC 0- 0 ・よっ、 0 は・ 00 -0 っ ~ 8 int count int old—count ノ☆玉を弾ませる☆ / for ( 00 載Ⅱ t - 0 ; eount くし掩 T 町 puts()—回分 "第 draw(col—tablet INDEX( count ) + INDEX—DECRDIDIT ] , row—table[ INDEX( eount ) - INDEX—DECRDIQ•IT StOP ac い 0 れ ace int 平・ lue ・ 84 : 3 弋「 t entry 画れ ex を・ status d e 1 e t e ソース・ / くネノレ ソース・コードを表示し、編集を 行なえます オプション・パネル ソース・ / 、ネルのファイルの名前と状態を 表示しますそれに加えて、頻繁に使用さ れるコマンドのボタンが用意されています ェラー・プラウジンク・パネル 工ラーが生じた箇所とエラー・メッセージ が表示されます インタラクティフ・ワークスへース Saber C に対するコマンドの入力を 行なえます ラン・ウインドウ アプリケーションの入出力を 取り扱えます プロジェクト・プラウサ 関発に関連するファイルの一覧と、 個々のファイルの内容を表示します Fi1e: *. 0 State: break (next) Funct ion: main run に , 0 Errors 2 Warnings 鬮ト ) unc ・ . 0 一朝し in ・ 30 , W # 591 , Automatie variable ′ 01d -00u れ t &Line 47 , W # 594 , Automatic varia>le ans' was s up pr 1 nt where - ・ヨいい・じト、い : リ e ゞ t SOurce hunc ・ . 0 Üob3eet su れ .0 Source table. e SOuree &wait. ぐ ロ ob et souree li い y ロ 1 ibrary 11 い y ロ 1 ibrary a. (break 1 ) 45 - 〉 n ー list ( 4 (break 1 ) 46 - 〉 display list—head isplay ( 2 ) set on expression 、 list—head (break 1 ) 47 - 〉 (break 1 ) 48 next ( break 1 ) 49 next (break 1 ) 50 - 〉ロ saber workspace / lib / li い /iib/libsuntool. & /iib/lil•.mwindow. & /lib/libpixreet . & ス わ分△ム〃分ン 下 = 三回回回ウ プログラム開発ツールとしては、初めてのインタブリタ機能を備えております。この機能により、既存のプログラム開発 ツールでは不可能であったことを実現し、 C 言語ソフトウェアの品質向上と開発の効率化を行ないます。 内蔵インタブリタ ソースレベル・テパッガ ・株式会社アステックは、日本における・代 ware c. の総販売代理店です。 インタフ。リタの機能によりプロトタイプ作成が可能てす。 Saber - C のソースレベル・デバッガは高機能て拡張性 ・ Sabe 「・ C は、 Saber Software ヨ nc. の商標登録で魂 に優れています。インタブリタの機能により、ソース・コード、 日本語対応 ・ UN Ⅸは、 AT & TBeII 研究所が開発したオペレーティ オプジェクト・コードを混在してテッヾッグすることがてきます。 ング・システムです。 日本語をデータとして扱うプログラムや、コメントや文字列、 静的ェラー、実行時ェラーの検出。 ・ X ・ Window システムは、米国マサチューセッツ工科大 文字定数に日本語を含んたラ。ログラムて、も、 Saber-C の 学の商標で魂 ・プレイクポイントやウォッチボインドて、の停止条件、およ すべての機能を利用て、きます。 ・その他、会社名、製品名などは製造会社及び販売会 び停止時の動作を、 C 言語て、記述可能。 対応機種 社の商標もしくは登録商標です。 ・例 8 - > ・ 0 セま 0 れセ " セ・・セ .0 " : 8 S ・た ting action at ” 0 ・ 3 セ .0 ” : 8 ′ f00 ( ) . ・ Sun3 、 SPARC シリーズの SunOS4.0.1 、 JLEI. 0.1 製品の名称、仕様は予告なく変更する場合がありますの Enter bOdy Of a00i0 れ . Us ・ b 【 ac ・ 3 wh ・れ・ n ・【 ing rm 」 1 こ ipl ・ 3tat ・・ nt 当 . 以降の OS で、あらかじめご了承ください。 action - 》 ( action + 》 p ェ土 n セ′ ( ”ま - 、 d \ れ” . ま ) ・ DECstation actxon + > まー 0 ) ・・ b ・・セ op ( “” ) : action +> ) ・キャラクタ端末、 SunView 、 X ウインドウ、 DEC ウイン action ( 1 ) 5 ・ t . ドウなどのウインドウシステムて、使用可能。 ・マクロやストラクチャの定義などを調べることが可能。 動作環境 ・ SunView 、 X ウインドウのアフ 1 ケーションをデバッグ可育 ・最低 8M バイトのメモリ。 ・ fork ( ) などを行ない、複数のプロセスを発生するアプリ ケーションをデバッグ可能。 C 言語仕様 ・ Kernighan & Ritchie 仕様、または ANSI-C0 インクリメンタル・リンカ その他 インクリメンタル・リンカを使用すると、大規模なプログラムの ・ネットワーク上て、複数のユーザカライセンスを共有てき コードの修正一テストサイクルを短縮することがて、きます。 るネットワーク・ライセンス・サーバの適用。 ・編集したファイルの再ロードのみて、プログラムを再実行 付マニュアル 可能。故に、プログラム全体をリンクし直す必要がない。 オンライン・マニュアルを含む全てのマニュアルは、日本語 ・単体の関数や開発途中の関数て、もロード実行可能。 化されています。 ・ソースとオプジェクトを任意の組合せてロード可能。 * ウォッチボイントは、動的に割り付けたデータを含む任意のデータ・アドレスに対しデータが変更された時点でプログラムを停止させる機能。 ※こ・希望の方には、無料で Sabe 「 - C の Auto demo をお送り 致します。 お問い合わせ先 株式会社アステック 〒 162 東京都新宿区南町 6 番地 BR 市ヶ谷 1 TEL. ( 03 ) 526 ト 5971 ( 代表 )
連載 UNIX Communicat10n Notes— 表 3 amd て利用可能なセレクタ セレクタ arch autodir cluster byt e domaxn host hostd karch OS key map path 意味 その計算機のアーキテクチャを表し、 a md をコンパイルするときに決めら れる。この値は表 1 のいずれかになる。各計算機でどのような値がセット されているかは、 amd ー v を実行することで確認できる。 amd のマウントディレクトリを指す。オートマウント・ポイントではない ことに注意。これは、 amd 起動時のコマンドライン・オフ。ション -a で与え られる。 その計算機のバイトオーダーを表す。ノくイトオーダーが little-endian の場 合は little を、 big-endian の場合は big を値としてもつ。 ファイルサー , くのグルーフ。を表すために用意されているセレクタ。クラス タは、 amd 起動時のコマンドライン・オプション -C で与えられる。コマン ドライン・オフ。ションで指定しない場合、 $ { d 。 ma 洫 } がその値として用い られる。 ローカルのドメイン名を表す。 amd 起動時のコマンドライン・オフ。ション -d で与えることができる。 ローカルのホスト名を表し、関数 gethost Ⅱ ame を用いて得られた値を使 コマンドライン・オフ。ション -d でドメイン名が与えられておらす、か つホスト名にビリオド (. ) が含まれている場合には、最初のビリオドから前 を ost に、残りの部分を domai Ⅱにセットする。たとえば、 gethostname で得られたホスト名が t 土 t . ics. osaka ーⅡ・ ac. jp たとすると、 host に は t 土 tan が、 domain には ics. osaka-u. ac ・ jp カ ; それそれセットされる。 また、 gethostname で得られた名前が t 土 t たけの場合には、 domain に は何もセットされない。 ${host}. ${domain} がセットされる。ただし、 domain の値が空 (empty) の場合は $ 価 ost } と同じ値がセットされる。 カーネル・アーキテクチャを得るためのセレクタ。通常は ${arch} の値が セットされているが、コマンドライン・オフ。ション一 k でその値を設定する こともできる。 その計算機の OS を表す。 arch と同様、 amd のコンパイル時に決定され る。値は表 2 のいずれかをとる。 マウントマップを検索するときのキーを表す。たとえば、 /home がオート マウント・ポイントの場合、 / home / jup れ e てがアクセスされたときに発生 するマウントマッフ。の検索では ${key} は jupiter になる。 pref オプション に文字列が設定されている場合は、それを前につける。さきの例で、 pref に rem 。 te / が設定されていた場合は、 ${key} は remote/jupiter になる。 マウントマップの名前を表す。 マウントマッフ。の検索を発生させたアクセスのフルバスを表す。さきの例 では /home/jupiter になる。 ① amd でロケーションを評価する場合、ます最初に変数 への参照が展開され、次に全体の評価がおこなわれます。 したがって、 1 つのロケーションにオプションの設定と 参照が含まれているようなときには注意が必要です。た とえば、 target オプションに tex がセットされている状 態でロケーションに target : =emacs ; fs : =/usr/local/${target} などの記述が含まれていたとします。この場合、 fs には /usr/local/tex がセットされ、 /usr/local/emacs には なりません。 UNIX MAGAZINE 1991.4 セレクタ セレクタは、ポリュームのロケーションを利用するかど うかの条件設定に使われます。セレクション ( セレクタを 用いた条件式 ) は左から右に評価され、その段階で偽のも のがあれはそのロケーションは使われません。たとえば、 arCh==SU113 ; os==sos4 という言当丕があった場合には、そのロケーションはアーキ テクチャが sun3 、 OS が SunOS4. x の場合だけ使われま す。 amd で利用可能なセレクタを表 3 に示します。 セレクションでは、同値条件 ( = = ) と否定条件 ( ! = ) が使え 81
AVG() LSQ() MAX( ) 検索テータが出力されるセルの形式を、自 テータベース固有の SQL 文を入力して、 統計関数 MIN() RAND() 動的にデータベース内に定義してあるデー リクエスト文を作成しま魂 STD( ) タ形式に合わせることができま魂 ERR() 旧 ( ) 論理関数 NA() 操作方法がわからなくなった場合には : 本体 SEL() SORT() AT() テータベース内に定義してあるフィールド名 部分と同様に充実したオンライン・ヘルプ機 BLANK( ) CELLINFO( ) を、ワークシートのフィールド見出しとして出 能が、適切に説明を与えてくれま魂 CELLPOINTER( ) COL( ) 力することができま魂 COLS( ) COUNT( ) ERR( ) HLOOKUP( ) ICELL()INDEX() ORACLE Ve 「 . 5.1.17 以上 旧 ANGE( ) LABEL( ) LOOKUP( ) 作成した検索リクエストを確かめるために、 SYbase Ve 「 . 3.0 以上 NA() NUMOF() ROW() テータを絞ってリクエストを試行することが オプション / SUN 対応版のみ ROWS() STROF( ) VLOOKUP( ) できま魂 「アシストカルク十テータベース・コネク 日付関数 DATE() DAY() DAYS() ション」では、日 DBMS の 0 日 ACLE DAYSYMD() HOUR( ) MINUTE( ) 作成した検索リクエストは、ワークシート・ および Sybase に格納されているテー MON() MONTH() NOW() テータ内または、外部マクロファイルとして タをアシストカルクから直接検索すること 保存することができるため、後で呼び出して SECOND( )TIME( )TIMEVALUE() ができま魂 変更したり実行したりすることができま魂 TODAY( ) YEAR( ) テータベース固有の検索言語 ( SQ L) を 習得しなくても、メニュー選択方式で検索 リクエストを作成し、実行することによって、 情報を戦略的に活用できる テータベース内のデータをワークシートに メニュー選択方式で、検索フィールド、選択 テータベース・コネクション機能。 展開することができま魂また、テータベー 条件、ソート条件などを指定し、テータベー スの検索言語に精通されている方は、 簡単なテータ検索 ス内の個々のレコードを検索しま魂 SQL 文を直接入力して、テータを検索 テータベース・コネクションの操作は、すべ することもできます。 てメニュー選択方式ですので、テータベース 詳細リクエストと同様、メニュー選択方式必 テータベース・コネクションで作成した検 要項目を指定しますが、検索テータを指定 に関する知識がなくても、メニューに従って 索リクエストは、ワークシート・テータ内ま したグレープことにまとめて出力することが たは、外部マクロファイルとして保存する 操作すれば、簡単にテータベースのデータ ことができるため、定常業務として使用す できま魂 を検索することができま魂 ることもできま魂 オンライン・ヘルプ機能 フィールド見出機能 接続可能 DBMS 検索の試行 リクエストの保存 3 タイプの検索リクエスト 詳細リクエスト 集計リクエスト エキスノヾート・リクエスト 自動フォーマット機能 必要なハードウェアとノヾッケージ構成 アシストカルク N EWS シリーズ対応 アシストカルク S IJ N シリーズ対応 SLJN シリーズ (SLJN3 、 SIJN4 、 SPARC-Station) ※ POPNEWS を除きます。 ただし、 GX および、 GXP モテルを除きます。 C ー SC マシンと日一 SC マシンのどちらでもこ使用になれます。 ※ SIJN シリーズと完全互換である、東芝 AS シリーズ、新日本製鐵 ( インストールプログラムでマシンを判別しま ) NSSIJN シリーズ、富士通 S シリーズでもご使用になれま魂 SIJN-W ー NDOW が使用可能なティスプレイをご使用ください。 X-W ー NDOW が使用可能なティスプレイをこ使用ください。 ※グラフィック表示には、 suNCG ーを使用しています。 キヤノンレーザーショット ( L ー PS Ⅱ、Ⅲに対応 ) ※ L ー PS Ⅲの動作および、 L ー PS Ⅱでのグラフ・飾り罫線の印刷には、拡張日 AM ホードまたは 拡張日 OM ボードが必要となりま魂詳しくは、プリンタの操作説明書を参照してください。 SUN-OS Ve 「 . 4. O(JLE 環境 ) NEWS-OS Ve 「 .3 0 以上 マニュアル 2 冊 / フロッピーティスク 3 枚 / ユーサー登録カード 1 枚マニュアル 2 冊 / カートリッジテープ 1 本 / ユーサー登録カード 1 枚 ※ CJNIX 、 0 日 ACLE 、 SYbase 、 SCJN 、 20/20 およびその アシストカルク十テータベースコネクション他の会社、機械、 os の名称は、 87 , 300 円 ( 税込価格 89 , 919 円 ) ※ SUN シリーズ米国 AT & T 社、ソニー株式会社、米国 0 日 ACLE 社、 137 , 300 円 ( 税込価格 141 , 419 円 ) 対応のみ 米国 Sybase 社、米国サンマイクロシステムズ社、米国アクセス テクノロジー社、その他各社の商標、登録商標または商品です。 株式会社ア勦コト バーソナルソフトウェア営業部 〒 215 神奈川県川崎市麻生区万福寺 1 -1-1 新百合ヶ丘シティビルディング テクニカルサホートセンター TE L. ( 044 ) 951-5678 / FAX. ( 044 ) 951-5679 体 本 ティスプレイ プリンタ 実行可能 OS ノヾッケージ構成 PS 犲をん 0 怩パソコン
NO 鼎 ON SALE スプレッドシート lnter-cale lnter-calc lnter-cal te ト 021 , ca ー 0 , nter-calc nter-cal 1 3 役立つ機能をフル装備 ! 操作性 ・メニュー方式・オンラインヘルプ機能・強力なマク ロ機能・上下 , 左右の 4 画面のウインドウ分割・フィル ター機能 8 , 192 行 x 256 列の広大なワークシート領域 「 Lotus 1 ー 2 ー 3 」ファイルとの互換性 x ウインドウ対応 ・マウス対応・ 7 種類の罫線をサポート・ポップアップ ーメニュー 関数 ・算術関数、論理関数、財務関数、統計関数、特殊関数、 日付関数、文字列関数、データベース統計関数の計 117 種類およびューザ定義関数 ( 予定 ) をサポート グラフ ・棒グラフ、対比線付棒グラフ、積重ね棒グラフ、折れ線グ ラフ、株価グラフ、円グラフ、 XY グラフ、面積グラフ、レー ダーグラフをサポート 外部データベース日本語 UNIFY(RDBMS) とのインターフ = ースを装備 ~ オプション : 3 次元グラフ機能 * リアルタイム処理機能 ( 予定 ) 移植予定機種、 OS 名一覧ー * 移植済 オムロン Luna ー UniOS-U * 東芝 日本語 UX / 386 * J ー 3300 三菱電機 ME ME OS * RS / 6000 旧 M AIX EWS-UX/V 日本電気 EWS 4800 H ト UX/W 2050 / 32 E 日立製作所 サン・マイクロシステムズ SPARC station Sun OS X-Window11R3 以上 ( 3 次元クラフは R4 以上が必要 ) 以下順次移植準備中 ※オムロン Luna UniOS-U は、 3 次元グラフ機能移植済 い te 「一 ca に標準価格表 ューサ数本体標準価格 リアルタイム版 256 , 000 円 128 , 000 円 384 , 000 円 192 , 000 円 576 , 000 円 288 , 000 円 800 , 000 円 400 , 000 円 一律 70 , 000 円 コ物盟引第 第い第す「】心 nter-cal - c 6 élnter-caich te ト C21 ・リいき「の第 文すを一第の萼、をのす第つ気に・ . をて、胤キ第にを ※任意の大きさの画面が何枚でも開けます。※カーソル移動はすべてマウスで行なえます。 ※キー操作はパソコンとほとんど同じです。 新世代スプレッドシート on UNIX lnter-calc MULTI FUNCTION SPREADSHEET on UNIX 新 Q-ca1c 新登場 これが“使える” IJN Ⅸ版統合表計算ソフトウェア「日本語 Q - ca に」か機能と操作性を大幅にアップ、新世代 の日 nte 「 - c 引 c 」として生まれ変わりました。 te 「 - ca にでは、最大 8 , 192 行 X256 列のワー クシート領域はそのままに、関数機能やグラフ 機能を大幅に強化、外部テータベースや L0tus ファイルテータの直接アクセスか可能となり、更 に 3 次元グラフ機能のオプション装備やリアル タイム処理機能 ( 予定 ) 等、実践的機能を大い に向上させていま魂 ビジネスから学術研究までのあらゆる分野で、 抜群の威力を発揮しま魂 開発・販売元 株式会社工アー COMPANY LIMITED く本社〉 〒 541 大阪市中央区北浜 1 ー 3 ー 14 西川三井ビル Phone ( 06 ) 201 ー 4308 Fax ( 06 ) 201 ー 2106 Jnter-C 1 2 ~ ~ オプション 3 次元グラフ機能 ※任意の大きさでグラフ画面が開けます。 ※色の指定ができます。 爿 / 尺 ※ UNIX は AT&T B 研究所で開発された OS です。 ※ Lotus およびト 2-3 は Lotus Development CO 「 P. の登録商標です ※ Q-calc は Quality Software Corp. の登録商標です。 ※ te に ca には株式会社工アーより登録商標出願中です。 く六本木オフィス〉 〒 106 東京都港区六本木 3 ー 1 ー 30 ABZ ル Phone ( 03 ) 3587 ー 9221 Fax ( 03 ) 3587 ー 9238 くサポートセンター〉 大阪 . Phone ( 06 ) 201 ー 4309 六本木・ Phone ( 03 ) 3582 ー 0875