OSDN Git Service

Added IPC Relationship Visualization Tool Example.
[kozos-expbrd/kozos_expbrd.git] / firm / ipcrvt / ipcrvt.sh
1 #!/bin/sh
2
3 #
4 # KOZOS IPC Relationship Visualization Tool (Version 0.0.1)
5 # Copyright(C) 2012 Shinichiro Nakamura (CuBeatSystems)
6 #
7
8 #
9 # 処理を実際に行うタスクはtask_xxx.c行う
10 # タスクはMSGBOX経由で仕事の依頼を受ける
11 # MSGBOXへの仕事依頼はipc_xxx.cが行う(task_xxx.cのフロントエンドとして機能)
12 # 仕事の依頼はtask_xxx.cがipc_xxx.cのインターフェースを使って行う
13 #
14
15 #
16 # 定義
17 #
18 TARGET_SENDTASK="*.c"
19 TARGET_RECVTASK="*.c"
20 KXSEND_TEMPFILE=`mktemp kxsend.XXX`
21 KZSEND_TEMPFILE=`mktemp kzsend.XXX`
22 KZRECV_TEMPFILE=`mktemp kzrecv.XXX`
23 DOTFILE="ipcmap.dot"
24 IMGFILE="ipcmap.png"
25
26 #
27 # Init
28 #
29 echo "" > $DOTFILE
30
31 #
32 # kx_sendとkz_sendとkz_recvの情報を一時ファイルに格納する
33 #
34 grep kx_send $TARGET_SENDTASK | \
35   sed "s/kx_send(//" | sed "s/[\:,]//g" | sed "s/\.c//g" | \
36   awk '{ print "\"" $1 "\"" " -> " "\"" $2 "\"" }' > $KXSEND_TEMPFILE
37 grep kz_send $TARGET_SENDTASK | \
38   sed "s/kz_send(//" | sed "s/[\:,]//g" | sed "s/\.c//g" | \
39   awk '{ print "\"" $1 "\"" " -> " "\"" $2 "\"" }' > $KZSEND_TEMPFILE
40 grep kz_recv $TARGET_RECVTASK | \
41   sed "s/kz_recv(//" | sed "s/[\:,]//g" | sed "s/\.c//g" | \
42   awk '{ print "\"" $2 "\"" " -> " "\"" $1 "\"" }' > $KZRECV_TEMPFILE
43
44 #
45 # バナー
46 #
47 echo "// Generated by KOZOS IPC Relationship Visualization Tool" >> $DOTFILE
48 echo "// Copyright(C) 2012 Shinichiro Nakamura (CuBeatSystems) " >> $DOTFILE
49 echo "" >> $DOTFILE
50
51 #
52 # ヘッダ
53 #
54 echo "digraph relationship {" >> $DOTFILE
55 echo "" >> $DOTFILE
56 echo "  // Global configurations" >> $DOTFILE
57 echo "  graph [size = \"16.0, 16.0\", label = \"KOZOS IPC Relationship Visualization\", labelloc = t, rankdir = LR];" >> $DOTFILE
58 echo "" >> $DOTFILE
59
60 #
61 # kx_sendとメッセージボックスの関係を記す
62 #
63 echo "  // kx_send" >> $DOTFILE
64 while read LINE
65 do
66   #
67   # kx_sendを使ってMSGBOXに送信している箇所を抽出する
68   #
69   EVTSND=`echo $LINE | sed "s/\.c//g" | awk '{ print $1 }'`
70   MSGBOX=`echo $LINE | awk '{ print $3 }'`
71   echo "  "$EVTSND" [style = dashed];" >> $DOTFILE
72   echo "  "$MSGBOX" [shape = box];" >> $DOTFILE
73   echo "  "$LINE";" >> $DOTFILE
74 done < $KXSEND_TEMPFILE
75 echo "" >> $DOTFILE
76
77 #
78 # kz_sendとメッセージボックスの関係を記す
79 #
80 echo "  // kz_send" >> $DOTFILE
81 while read LINE
82 do
83   #
84   # kz_sendを使ってMSGBOXに送信している箇所を抽出する
85   #
86   EVTSND=`echo $LINE | sed "s/\.c//g" | awk '{ print $1 }'`
87   MSGBOX=`echo $LINE | awk '{ print $3 }'`
88   echo "  "$EVTSND" [style = solid];" >> $DOTFILE
89   echo "  "$MSGBOX" [shape = box];" >> $DOTFILE
90   echo "  "$LINE";" >> $DOTFILE
91 done < $KZSEND_TEMPFILE
92 echo "" >> $DOTFILE
93
94 #
95 # kz_recvとメッセージボックスの関係を記す
96 #
97 echo "  // kz_recv" >> $DOTFILE
98 while read LINE
99 do
100   #
101   # kz_recvを使ってMSGBOXから受信している箇所を抽出する
102   #
103   MSGBOX=`echo $LINE | awk '{ print $1 }'`
104   EVTRCV=`echo $LINE | sed "s/\.c//g" | awk '{ print $1 }'`
105   echo "  "$MSGBOX" [shape = box];" >> $DOTFILE
106   echo "  "$EVTRCV" [style = solid];" >> $DOTFILE
107   echo "  "$LINE";" >> $DOTFILE
108 done < $KZRECV_TEMPFILE
109 echo "" >> $DOTFILE
110
111 #
112 # テイラー
113 #
114 echo "}" >> $DOTFILE
115 echo "" >> $DOTFILE
116
117 #
118 # 一時ファイルを削除する
119 #
120 rm $KXSEND_TEMPFILE
121 rm $KZSEND_TEMPFILE
122 rm $KZRECV_TEMPFILE
123
124 #
125 # Graphviz/dotでグラフを描画する
126 #
127 dot -T png $DOTFILE -o $IMGFILE
128