summaryrefslogtreecommitdiff
path: root/storage/ndb/src/common/debugger/signaldata/print.awk
blob: 3c289e59f6383095446a8b84525105ee2426e826 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Copyright (C) 2004 MySQL AB
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

BEGIN {
  m_curr="";
  m_count=0;
  m_level=0;
}
/^[ ]*class[ ]+.*{/ { 
  if(m_curr != ""){
    print;
    print "ERROR: " m_curr;
    exit;
  }
  m_curr = $2;
}
/{/ {
   m_level++;
} 
/bool print/{
  m_print=$3;
  i=index($3, "(");
  if(i > 0){
    m_print=substr($3, 0, i-1);
  }
}

/[ ]+Uint32[ ]+[^)]*;/ {
  if(m_level >= 0){
    m=$2;
    i=index($2, ";");
    if(i > 0){
      m=substr($2, 0, i-1);
    }
    m_members[m_count]=m;
    m_count++;
  }
}
/^[ ]*}[ ]*;/ {
  m_level--;
  if(m_level == 0){
    if(m_count > 0 && m_print != ""){
      print "bool";
      print m_print "(FILE * output, const Uint32 * theData, ";
      print "Uint32 len, Uint16 receiverBlockNo) {";
      print "const " m_curr " * const sig = (" m_curr " *)theData;";
      for(i = 0; i<m_count; i++){
	print "fprintf(output, \" " m_members[i] ": %x\\n\", sig->" m_members[i] ");"; 
      }
      print "return true;";
      print "}";
      print "";
    }
    m_curr="";
    m_print="";
    m_count=0;
  }
}