昔は$400だったcscope

tips for dog

とある小説を読んでいたら、獰猛な犬をてなずける方法が出て来てた。作者さんの創作? いや、そんな事は無いだろう。何かネタが有るはず。みんなに聞いてみたぞ。

犬にとっての、マタタビ的な植物はありますか?

猫にマタタビ、犬に犬万(いぬまん)

まあ、色々出てくるんで、事実なのだろう。

猛犬注意な所にも出掛ける必要がある、あの人達には常識だったりして。会社から 支給されてるのかな。後は、警察犬とか麻薬探知犬に立ち向かう、悪い人御用達かな。 いや、そんな事は無いだろう。ちゃんと訓練されるだろうに。

e

chatonで、,d を紹介頂いたけど使い道が解らず、Gauche本を読み直してみるかな。ちょっと悔しいので、e が、どのように実現されてるかソースの森に分け入ってみる。

まず見付たのがこれ。オイラーさんがソースの中に鎮座してるっぽい。 src/number.c

ScmObj Scm_MakeComplexPolar(double mag, double angle)
{
    double real = mag * cos(angle);
    double imag = mag * sin(angle);
    if (imag == 0.0) return Scm_MakeFlonum(real);
    else             return Scm_MakeCompnum(real, imag);
}

そして、こういう楽しいものも見付てしまった。犬も歩けばってやつですな。

static ScmObj scm_expt(ScmObj x, ScmObj y, int vmp)
     :
    } else if (dx < 0 && !Scm_IntegerP(y)) {
        /* x^y == exp(y * log(x)) = exp(y*log(|x|))*exp(y*arg(x)*i)
           if x is a negative real number, arg(x) == pi
        */
        double mag = exp(dy * log(-dx));
        return Scm_MakeComplex(mag * Scm_CosPi(dy), mag * Scm_SinPi(dy));

ここまででは、証明が完成していない、中途半端状態、更に脳汁を流して探索。 src/libnum.scm (libnum.c)

(define-cproc make-polar (r::<double> t::<double>) :constant
  Scm_MakeComplexPolar)

;; Now, handles complex numbers.
;;  Cf. Teiji Takagi: "Kaiseki Gairon" pp.193--198
(define-in-module scheme (exp z)
  (cond [(real? z) (%exp z)]
        [(complex? z) (make-polar (%exp (real-part z)) (imag-part z))]
        [else (error "number required, but got" z)]))

Q.E.D. と、一度書いてみたかったのよ。

ここまで、ArchLinuxのコンソールでgoshが正しく動かない問題から始まって、それがFreeBSDにも飛び火してしまって、迷宮入りになった事を書いてきたけど、軌道を戻します。

sortを調べていたんだ。その過程で、ソースを楽に読む方法も模索してた。以下は、その骨子に肉付けしてきます。

cflow

どこかのサイトで見付たもの。

cflowを使ってみる

Using cflow with GNU Emacs.

例によって、詳しくは、info cflow ですよ。8 Using ASCII Art to Produce Flow Graphs. そうか、ソースコードは芸術品なのか。

vbox$ cflow --tree --brief --cpp sort.c
+-main() <int main (int argc, char *argv[]) at sort.c:793>
  +-set_hw_params() <void set_hw_params (void) at sort.c:202>
  | +-sysctl()
  | +-getrlimit()
  | +-setrlimit()
  | \-warn() <void warn (const char *, ...) at /usr/include/err.h:55>
  +-pledge()
    :

$400

以前、vimをやってた時、対抗でnviを調べていたんだ。そしたら、 そこに付属してたFAQに面白い記述を発見。なお、OpenBSDのviは実体がnvi。

Q: Where can I get cscope?
A: Cscope is available on UNIXWare System V Release 4.0 variants such as
   Sun Solaris 2.x (/opt/SUNWspro/bin) and UNIXWare System V Release 4.1.

   You can buy version 13.3 source with an unrestricted license for $400
   from AT&T Software Solutions by calling +1-800-462-8146.  Binary
   redistribution of cscope is an additional $1500, one-time flat fee.

   For more information, see http://www.unipress.com/att/new/cscope.html.

どうやらcscopeというプロ仕様っぽい、ソースの解析ツールが有るっぽい。

cscopeを使おうと思ったら昔は400ドル出してアメリカの電電公社から購入するしかなかったのね。今は良い世の中だのう。有り難く、心して使えよ。

なお、このFAQは、@(#)FAQ 8.13 (Berkeley) 10/14/96 こういう古文書。FreeBSDの寄贈エリアにあるviにも、リナのnviのソースを辿っても見付からない。ちゃんと残してくれているOpenBSDは偉いなあ。と、おじさんモード全開ですよ。

doxygen with graphviz

ソースコード・ドキュメンテーション・ツール

Graphviz

Debianだと、doxygenを入れるだけで、グラフツールも自動でインストールされる。

後は、ソースのある所で、doxywizardを起動すれば、GUIなツールが立ち上がってくる。 そこで、ソースの場所、オプションでC言語の指定、グラフの有効化、LATEXは不必要等を設定。そして、generateして閲覧ボタンを押せばよい。ブラウザーが立ち上がって、後は呼出状況などを確認出来る。

Doxyfileと言う設定ファイルを残せるので、後で微調整出来るぞ。それからhtml/ と言うdirの中に、作成されたグラフとかが格納されてる。

Windows Time

前回からWindowsを止める時、sleepを使ってる。起動も速くて便利。 起動した時、ちゃんと現実の時刻になる(あたり前)んだけど、タスクマネージャのパフォーマンスを選んだ時、稼動時間ってのが出て来る。これが謎の時間を刻んでる。

今だと、18:07:05:23 ってなってた。最上位は日だろう。いつからの? 大体見当はつくけど、確認しる。rubyで時刻の引き算してみる。

irb(main):005:0> d = 86400*18 + 3600*7 + 60*5 + 23
=> 1580723
irb(main):006:0> Time.now - d
=> 2022-08-10 06:48:03.087408594 +0900

86400は1日の秒数ね。

8月10日は、第二水曜日だなあ。恒例のWindows Updateの日でした。 deep bootされて、そこからの経過時間なんだな。

Q.E.D.

ネットワークのWiFi使用量も、起動時にリセットされるんだな。


This year's Index

Home