ffi-swig-generator 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/.hg/branch.cache +2 -0
  2. data/.hg/dirstate +0 -0
  3. data/.hg/store/00changelog.i +0 -0
  4. data/.hg/store/00manifest.i +0 -0
  5. data/.hg/store/data/.hgignore.i +0 -0
  6. data/.hg/store/data/.hgtags.i +0 -0
  7. data/.hg/store/data/_history.txt.i +0 -0
  8. data/.hg/store/data/_r_e_a_d_m_e.rdoc.i +0 -0
  9. data/.hg/store/data/_rakefile.i +0 -0
  10. data/.hg/store/data/cucumber.yml.i +0 -0
  11. data/.hg/store/data/examples/_rakefile.i +0 -0
  12. data/.hg/store/data/features/generate.feature.i +0 -0
  13. data/.hg/store/data/features/step__definitions/generate.rb.i +0 -0
  14. data/.hg/store/data/features/support/env.rb.i +0 -0
  15. data/.hg/store/data/features/support/results.rb.i +0 -0
  16. data/.hg/store/data/features/support/templates.rb.i +0 -0
  17. data/.hg/store/data/lib/ffi-swig-generator.rb.i +0 -0
  18. data/.hg/store/data/lib/generator/application.rb.i +0 -0
  19. data/.hg/store/data/lib/generator/constant.rb.i +0 -0
  20. data/.hg/store/data/lib/generator/enum.rb.i +0 -0
  21. data/.hg/store/data/lib/generator/function.rb.i +0 -0
  22. data/.hg/store/data/lib/generator/generator.rb.i +0 -0
  23. data/.hg/store/data/lib/generator/generatortask.rb.i +0 -0
  24. data/.hg/store/data/lib/generator/logger.rb.i +0 -0
  25. data/.hg/store/data/lib/generator/node.rb.i +0 -0
  26. data/.hg/store/data/lib/generator/parser.rb.i +0 -0
  27. data/.hg/store/data/lib/generator/struct.rb.i +0 -0
  28. data/.hg/store/data/lib/generator/type.rb.i +0 -0
  29. data/.hg/store/data/lib/generator/types.rb.i +0 -0
  30. data/.hg/store/data/spec/generator/constant__spec.rb.i +0 -0
  31. data/.hg/store/data/spec/generator/enum__spec.rb.i +0 -0
  32. data/.hg/store/data/spec/generator/function__spec.rb.i +0 -0
  33. data/.hg/store/data/spec/generator/generator__spec.rb.i +0 -0
  34. data/.hg/store/data/spec/generator/node__spec.rb.i +0 -0
  35. data/.hg/store/data/spec/generator/parser__spec.rb.i +0 -0
  36. data/.hg/store/data/spec/generator/struct__spec.rb.i +0 -0
  37. data/.hg/store/data/spec/generator/swig/constants.i.i +0 -0
  38. data/.hg/store/data/spec/generator/swig/functions.i.i +0 -0
  39. data/.hg/store/data/spec/generator/swig/testlib.i.i +0 -0
  40. data/.hg/store/data/spec/generator/swig/typedefs.i.i +0 -0
  41. data/.hg/store/data/spec/generator/swig/types.i.i +0 -0
  42. data/.hg/store/data/spec/generator/type__spec.rb.i +0 -0
  43. data/.hg/store/data/spec/spec__helper.rb.i +0 -0
  44. data/.hg/store/data/tasks/cucumber.rake.i +0 -0
  45. data/.hg/store/undo +0 -0
  46. data/.hg/undo.dirstate +0 -0
  47. data/.hgignore +3 -0
  48. data/.hgtags +1 -0
  49. data/History.txt +22 -2
  50. data/README.rdoc +26 -22
  51. data/Rakefile +2 -3
  52. data/cucumber.yml +1 -0
  53. data/examples/Rakefile +5 -3
  54. data/examples/generated/libc_wrap.rb +18 -0
  55. data/examples/generated/libc_wrap.xml +597 -0
  56. data/examples/generated/wiiuse_wrap.rb +322 -0
  57. data/examples/generated/wiiuse_wrap.xml +9025 -0
  58. data/features/generate.feature +45 -0
  59. data/features/step_definitions/generate.rb +32 -0
  60. data/features/support/env.rb +4 -0
  61. data/features/support/templates.rb +381 -0
  62. data/lib/ffi-swig-generator.rb +1 -1
  63. data/lib/generator/application.rb +1 -1
  64. data/lib/generator/constant.rb +24 -0
  65. data/lib/generator/enum.rb +38 -0
  66. data/lib/generator/function.rb +71 -0
  67. data/lib/generator/generatortask.rb +21 -9
  68. data/lib/generator/logger.rb +29 -0
  69. data/lib/generator/node.rb +19 -0
  70. data/lib/generator/parser.rb +168 -0
  71. data/lib/generator/struct.rb +76 -0
  72. data/lib/generator/type.rb +128 -0
  73. data/lib/generator/types.rb +36 -0
  74. data/spec/generator/constant_spec.rb +17 -0
  75. data/spec/generator/enum_spec.rb +29 -0
  76. data/spec/generator/function_spec.rb +66 -0
  77. data/spec/generator/parser_spec.rb +250 -0
  78. data/spec/generator/struct_spec.rb +77 -0
  79. data/spec/generator/swig/constants.i +5 -0
  80. data/spec/generator/swig/functions.i +8 -0
  81. data/spec/generator/swig/testlib.i +42 -0
  82. data/spec/generator/swig/typedefs.i +1 -0
  83. data/spec/generator/swig/types.i +1 -0
  84. data/spec/generator/type_spec.rb +38 -0
  85. data/spec/spec_helper.rb +6 -0
  86. data/tasks/cucumber.rake +8 -0
  87. metadata +58 -18
  88. data/lib/generator/generator.rb +0 -344
  89. data/spec/generator/generator_spec.rb +0 -248
data/.hg/branch.cache ADDED
@@ -0,0 +1,2 @@
1
+ 03dae0721eeb2b6370fa42793774359d2aee23e6 24
2
+ 03dae0721eeb2b6370fa42793774359d2aee23e6 default
data/.hg/dirstate CHANGED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/.hg/store/undo CHANGED
Binary file
data/.hg/undo.dirstate CHANGED
Binary file
data/.hgignore CHANGED
@@ -1,2 +1,5 @@
1
1
  pkg
2
+ announcement.txt
3
+ generated
4
+
2
5
 
data/.hgtags ADDED
@@ -0,0 +1 @@
1
+ 927f7115acbb93135c01c2c6dc03afea3b5070e3 0_2_1
data/History.txt CHANGED
@@ -1,14 +1,34 @@
1
+ == 0.3.0 / 2009-04-20
2
+
3
+ * Major enhancements
4
+ * Generate accessors methods for struct fields of type string and
5
+ callback.
6
+ * Add experimental support for nested structs and unions.
7
+ * Add initial support for configuration files.
8
+ * Minor enhancements
9
+ * Add support for variadic arguments.
10
+ * Add support for anonymous callbacks in function and struct
11
+ declaration.
12
+ * Add support for volatile types.
13
+ * Add support for U, L, UL constant qualifiers.
14
+ * Improve testing with cucumber.
15
+ * Now the rake task can be configured through a configuration block.
16
+ * Bug fixes
17
+ * Fix ruby 1.8.6/1.9.1 compatibility issues.
18
+ * Fix generated const char* return type.
19
+ * Fix a bug that prevented to manage struct name with a prepending
20
+ underscore.
21
+
1
22
  == 0.2.1 / 2009-03-06
2
23
 
3
24
  * 1 minor enhancement
4
25
  * Removed old lib/ffi-generator.rb file.
5
-
26
+
6
27
  == 0.2.0 / 2009-03-05
7
28
 
8
29
  * 1 major enhancement
9
30
  * Added support for callbacks.
10
31
  * Changed the package name from ffi-generator to ffi-swig-generator
11
-
12
32
  * 1 minor enhancement
13
33
  * C functions with one void argument are correctly generated as FFI
14
34
  functions with no arguments.
data/README.rdoc CHANGED
@@ -1,18 +1,17 @@
1
1
  ffi-swig-generator
2
2
  by Andrea Fazzi
3
- http://github.com/remogatto/ffi-swig-generator/tree/master
3
+ http://kenai.com/projects/ruby-ffi/sources/swig-generator/show
4
4
 
5
5
  == DESCRIPTION:
6
6
 
7
- ffi-swig-generator is a ruby-ffi wrapper code generator based on SWIG
8
- interface files.
7
+ ffi-swig-generator is a ruby-ffi wrapper code generator that produce
8
+ ruby-ffi glue code parsing C header files through SWIG.
9
9
 
10
- ffi-swig-generator is able to traverse a XML parse tree file generated
11
- by the +swig+ command and to produce a ruby-ffi interface file from
12
- it.
10
+ ffi-swig-generator is able to traverse an XML parse tree generated by
11
+ the +swig+ command and to produce a ruby-ffi code from it.
13
12
 
14
- ffi-swig-generator is shipped with a command line tool (ffi-gen) and a rake
15
- task that automates the code generation process.
13
+ ffi-swig-generator is shipped with a command line tool and a rake task
14
+ that automates the code generation process.
16
15
 
17
16
  ffi-swig-generator XML capabilities are provided by nokogiri.
18
17
 
@@ -35,7 +34,10 @@ From command line:
35
34
  From a Rakefile:
36
35
 
37
36
  require 'ffi-swig-generator'
38
- FFI::Generator::Task.new :input_fn => 'my_interface_dir/*.i' output_dir => 'my_output_dir'
37
+ FFI::Generator::Task.new do |task|
38
+ task.input_fn = 'my_interface_dir/*.i'
39
+ task.output_dir = 'my_output_dir'
40
+ end
39
41
 
40
42
  == REQUIREMENTS:
41
43
 
@@ -45,14 +47,13 @@ From a Rakefile:
45
47
 
46
48
  == DOWNLOAD/INSTALL:
47
49
 
48
- To download and install the gem from github:
50
+ Download and install from rubygems:
49
51
 
50
- [sudo] gem sources -a http://gems.github.com
51
- [sudo] gem install remogatto-ffi-swig-generator
52
+ [sudo] gem install ffi-swig-generator
52
53
 
53
- To download the develpment trunk:
54
+ or clone mercurial repository:
54
55
 
55
- git clone git://github.com/remogatto/ffi-swig-generator.git
56
+ hg clone http://kenai.com/hg/ruby-ffi~swig-generator
56
57
 
57
58
  == EXAMPLES:
58
59
 
@@ -60,24 +61,27 @@ See the examples in examples/ folder.
60
61
 
61
62
  libc.i is an interface file containing some excerpt of libc functions.
62
63
 
63
- wiiuse.i is a enough complex example of a C header file interface. It
64
+ wiiuse.i is a fairly complex example of a C header file interface. It
64
65
  reproduces the content of wiiuse.h, the header file of the wiiuse
65
66
  library. wiiuse is a C library that handles the connection with
66
67
  Nintendo Wiimote devices. The interface file is almost a mere
67
- copy/paste from the original header file.
68
+ copy/paste from the original header file. See [1] for an updated
69
+ revision of ffi-wiiuse library.
68
70
 
69
- == QUICK START:
71
+ == PROJECTS RELATED TO ffi-swig-generator
70
72
 
71
- git clone git://github.com/remogatto/ffi-swig-generator.git
72
- sudo apt-get install swig
73
- sudo gem install nokogiri rake
74
- cd ffi-swig-generator/examples && rake ffi:generate
73
+ The generator has been used to generate code for the projects
74
+ below. Take a look at them to see further usage examples.
75
+
76
+ 1. http://github.com/remogatto/ffi-wiiuse/tree/master
77
+ 2. http://github.com/remogatto/ffi-opengl/tree/master
78
+ 3. http://github.com/remogatto/ffi-spidermonkey/tree/master
75
79
 
76
80
  == LICENSE:
77
81
 
78
82
  (The MIT License)
79
83
 
80
- Copyright (c) 2008 Andrea Fazzi
84
+ Copyright (c) 2009 Andrea Fazzi
81
85
 
82
86
  Permission is hereby granted, free of charge, to any person obtaining
83
87
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  # Look in the tasks/setup.rb file for the various options that can be
3
2
  # configured in this Rakefile. The .rake files in the tasks directory
4
3
  # are where the options are used.
@@ -22,13 +21,13 @@ task :default => 'spec:run'
22
21
  PROJ.name = 'ffi-swig-generator'
23
22
  PROJ.authors = 'Andrea Fazzi'
24
23
  PROJ.email = 'andrea.fazzi@alcacoop.it'
25
- PROJ.url = 'http://kenai.com/projects/ruby-ffi'
24
+ PROJ.url = 'http://kenai.com/projects/ruby-ffi/sources/swig-generator/show'
26
25
  PROJ.version = FFI::Generator::VERSION
27
26
  PROJ.rubyforge.name = 'ffi-swig-gen'
28
27
 
29
28
  PROJ.readme_file = 'README.rdoc'
30
29
 
31
- PROJ.ann.paragraphs << 'FEATURES' << 'SYNOPSIS' << 'REQUIREMENTS' << 'DOWNLOAD' << 'EXAMPLES'
30
+ PROJ.ann.paragraphs << 'FEATURES' << 'SYNOPSIS' << 'REQUIREMENTS' << 'DOWNLOAD' << 'EXAMPLES' << 'PROJECTS RELATED TO ffi-swig-generator'
32
31
  PROJ.ann.email[:from] = 'andrea.fazzi@alcacoop.it'
33
32
  PROJ.ann.email[:to] << 'dev@ruby-ffi.kenai.com' << 'users@ruby-ffi.kenai.com'
34
33
  PROJ.ann.email[:server] = 'smtp.gmail.com'
data/cucumber.yml ADDED
@@ -0,0 +1 @@
1
+ autotest: --color features
data/examples/Rakefile CHANGED
@@ -1,4 +1,6 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib ffi-generator]))
2
-
3
- FFI::Generator::Task.new :input_fn => 'interfaces/*.i', :output_dir => 'generated'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib ffi-swig-generator]))
4
2
 
3
+ FFI::Generator::Task.new do |task|
4
+ task.input_fn = 'interfaces/*.i'
5
+ task.output_dir = 'generated'
6
+ end
@@ -0,0 +1,18 @@
1
+
2
+ require 'rubygems'
3
+ require 'ffi'
4
+
5
+ module LibC
6
+ extend FFI::Library
7
+ class Timeval < FFI::Struct
8
+ layout(
9
+ :tv_sec, :ulong,
10
+ :tv_usec, :ulong
11
+ )
12
+ end
13
+ attach_function :strlen, [ :string ], :uint
14
+ attach_function :strcat, [ :string, :string ], :string
15
+ attach_function :strcmp, [ :string, :string ], :int
16
+ attach_function :gettimeofday, [ :pointer, :pointer ], :int
17
+
18
+ end
@@ -0,0 +1,597 @@
1
+ <?xml version="1.0" ?>
2
+ <top id="1" addr="b7db19e8" >
3
+ <attributelist id="2" addr="b7db19e8" >
4
+ <attribute name="outfile" value="interfaces/libc_wrap.c" id="3" addr="b7dbaf38" />
5
+ <attribute name="name" value="libc" id="4" addr="b7dbaf38" />
6
+ <attribute name="module" value="libc" id="5" addr="b7db9c08" />
7
+ <attribute name="inputfile" value="interfaces/libc.i" id="6" addr="b7dbaf38" />
8
+ <attribute name="classes" value="b7dba138" id="7" addr="b7dba138" />
9
+ <attribute name="infile" value="interfaces/libc.i" id="8" addr="b7dbaf38" />
10
+ <attribute name="outfile_h" value="interfaces/libc_wrap.h" id="9" addr="b7dbaf38" />
11
+ </attributelist >
12
+
13
+ <include id="10" addr="b7db8aa8" >
14
+ <attributelist id="11" addr="b7db8aa8" >
15
+ <attribute name="name" value="/usr/local/share/swig/1.3.40//swig.swg" id="12" addr="b7dbaf38" />
16
+ </attributelist >
17
+
18
+ <include id="13" addr="b7db8ad8" >
19
+ <attributelist id="14" addr="b7db8ad8" >
20
+ <attribute name="name" value="/usr/local/share/swig/1.3.40//swigwarnings.swg" id="15" addr="b7dbaf38" />
21
+ </attributelist >
22
+
23
+ <include id="16" addr="b7db8b08" >
24
+ <attributelist id="17" addr="b7db8b08" >
25
+ <attribute name="name" value="/usr/local/share/swig/1.3.40//swigwarn.swg" id="18" addr="b7dbaf38" />
26
+ </attributelist >
27
+
28
+ </include >
29
+ </include >
30
+ <typemap id="19" addr="b7db8c78" >
31
+ <attributelist id="20" addr="b7db8c78" >
32
+ <attribute name="code" value="free($1);" id="21" addr="b7dbaf38" />
33
+ <attribute name="method" value="newfree" id="22" addr="b7dbaf38" />
34
+ </attributelist >
35
+
36
+ <typemapitem id="23" addr="b7db8be8" >
37
+ <attributelist id="24" addr="b7db8be8" >
38
+ <parmlist id="25" addr="b7db8c08" >
39
+ <parm id="26">
40
+ <attributelist id="27" addr="b7db8c08" >
41
+ <attribute name="type" value="p.char" id="28" addr="b7dbaf38" />
42
+ </attributelist >
43
+ </parm >
44
+ </parmlist >
45
+ </attributelist >
46
+
47
+ </typemapitem >
48
+ </typemap >
49
+ <typemap id="29" addr="b7db8d88" >
50
+ <attributelist id="30" addr="b7db8d88" >
51
+ <attribute name="code" value="{&#10; if ($1) free((char *)$1);&#10; if ($input) {&#10; $1 = ($1_type) malloc(strlen((const char *)$input)+1);&#10; strcpy((char *)$1, (const char *)$input);&#10; } else {&#10; $1 = 0;&#10; }&#10;}" id="31" addr="b7dbaf38" />
52
+ <attribute name="method" value="memberin" id="32" addr="b7dbaf38" />
53
+ </attributelist >
54
+
55
+ <typemapitem id="33" addr="b7db8d28" >
56
+ <attributelist id="34" addr="b7db8d28" >
57
+ <parmlist id="35" addr="b7db8d48" >
58
+ <parm id="36">
59
+ <attributelist id="37" addr="b7db8d48" >
60
+ <attribute name="type" value="p.char" id="38" addr="b7dbaf38" />
61
+ </attributelist >
62
+ </parm >
63
+ </parmlist >
64
+ </attributelist >
65
+
66
+ </typemapitem >
67
+ </typemap >
68
+ <typemap id="39" addr="b7db8eb8" >
69
+ <attributelist id="40" addr="b7db8eb8" >
70
+ <kwargs id="41" addr="b7db8db8" >
71
+ <attributelist id="42" addr="b7db8db8" >
72
+ <attribute name="name" value="warning" id="43" addr="b7dbaf38" />
73
+ <attribute name="value" value="451:Setting a const char * variable may leak memory." id="44" addr="b7dbaf38" />
74
+ </attributelist >
75
+ <kwargssitem id="45" addr="b7db8dc8" >
76
+ <attributelist id="46" addr="b7db8dc8" >
77
+ </attributelist >
78
+ </kwargssitem >
79
+ <kwargssitem id="47" addr="b7db8de8" >
80
+ <attributelist id="48" addr="b7db8de8" >
81
+ </attributelist >
82
+ </kwargssitem >
83
+ </kwargs >
84
+ <attribute name="code" value="{&#10; if ($input) {&#10; $1 = ($1_type) malloc(strlen((const char *)$input)+1);&#10; strcpy((char *)$1, (const char *)$input);&#10; } else {&#10; $1 = 0;&#10; }&#10;}" id="49" addr="b7dbaf38" />
85
+ <attribute name="method" value="memberin" id="50" addr="b7dbaf38" />
86
+ </attributelist >
87
+
88
+ <typemapitem id="51" addr="b7db8e58" >
89
+ <attributelist id="52" addr="b7db8e58" >
90
+ <parmlist id="53" addr="b7db8e78" >
91
+ <parm id="54">
92
+ <attributelist id="55" addr="b7db8e78" >
93
+ <attribute name="type" value="p.q(const).char" id="56" addr="b7dbaf38" />
94
+ </attributelist >
95
+ </parm >
96
+ </parmlist >
97
+ </attributelist >
98
+
99
+ </typemapitem >
100
+ </typemap >
101
+ <typemap id="57" addr="b7db8fa8" >
102
+ <attributelist id="58" addr="b7db8fa8" >
103
+ <attribute name="code" value="{&#10; if ($1) free((char *)$1);&#10; if ($input) {&#10; $1 = ($1_type) malloc(strlen((const char *)$input)+1);&#10; strcpy((char *)$1, (const char *)$input);&#10; } else {&#10; $1 = 0;&#10; }&#10;}" id="59" addr="b7dbaf38" />
104
+ <attribute name="method" value="globalin" id="60" addr="b7dbaf38" />
105
+ </attributelist >
106
+
107
+ <typemapitem id="61" addr="b7db8f48" >
108
+ <attributelist id="62" addr="b7db8f48" >
109
+ <parmlist id="63" addr="b7db8f68" >
110
+ <parm id="64">
111
+ <attributelist id="65" addr="b7db8f68" >
112
+ <attribute name="type" value="p.char" id="66" addr="b7dbaf38" />
113
+ </attributelist >
114
+ </parm >
115
+ </parmlist >
116
+ </attributelist >
117
+
118
+ </typemapitem >
119
+ </typemap >
120
+ <typemap id="67" addr="b7db90c8" >
121
+ <attributelist id="68" addr="b7db90c8" >
122
+ <kwargs id="69" addr="b7db8fd8" >
123
+ <attributelist id="70" addr="b7db8fd8" >
124
+ <attribute name="name" value="warning" id="71" addr="b7dbaf38" />
125
+ <attribute name="value" value="451:Setting a const char * variable may leak memory." id="72" addr="b7dbaf38" />
126
+ </attributelist >
127
+ <kwargssitem id="73" addr="b7db8fe8" >
128
+ <attributelist id="74" addr="b7db8fe8" >
129
+ </attributelist >
130
+ </kwargssitem >
131
+ <kwargssitem id="75" addr="b7db8ff8" >
132
+ <attributelist id="76" addr="b7db8ff8" >
133
+ </attributelist >
134
+ </kwargssitem >
135
+ </kwargs >
136
+ <attribute name="code" value="{&#10; if ($input) {&#10; $1 = ($1_type) malloc(strlen((const char *)$input)+1);&#10; strcpy((char *)$1, (const char *)$input);&#10; } else {&#10; $1 = 0;&#10; }&#10;}" id="77" addr="b7dbaf38" />
137
+ <attribute name="method" value="globalin" id="78" addr="b7dbaf38" />
138
+ </attributelist >
139
+
140
+ <typemapitem id="79" addr="b7db9068" >
141
+ <attributelist id="80" addr="b7db9068" >
142
+ <parmlist id="81" addr="b7db9088" >
143
+ <parm id="82">
144
+ <attributelist id="83" addr="b7db9088" >
145
+ <attribute name="type" value="p.q(const).char" id="84" addr="b7dbaf38" />
146
+ </attributelist >
147
+ </parm >
148
+ </parmlist >
149
+ </attributelist >
150
+
151
+ </typemapitem >
152
+ </typemap >
153
+ <typemap id="85" addr="b7db91d8" >
154
+ <attributelist id="86" addr="b7db91d8" >
155
+ <attribute name="code" value="{&#10; if($input) {&#10; strncpy((char*)$1, (const char *)$input, $1_dim0-1);&#10; $1[$1_dim0-1] = 0;&#10; } else {&#10; $1[0] = 0;&#10; }&#10;}" id="87" addr="b7dbaf38" />
156
+ <attribute name="method" value="memberin" id="88" addr="b7dbaf38" />
157
+ </attributelist >
158
+
159
+ <typemapitem id="89" addr="b7db9178" >
160
+ <attributelist id="90" addr="b7db9178" >
161
+ <parmlist id="91" addr="b7db9198" >
162
+ <parm id="92">
163
+ <attributelist id="93" addr="b7db9198" >
164
+ <attribute name="type" value="a(ANY).char" id="94" addr="b7dbaf38" />
165
+ </attributelist >
166
+ </parm >
167
+ </parmlist >
168
+ </attributelist >
169
+
170
+ </typemapitem >
171
+ </typemap >
172
+ <typemap id="95" addr="b7db92d8" >
173
+ <attributelist id="96" addr="b7db92d8" >
174
+ <attribute name="code" value="{&#10; if($input) {&#10; strncpy((char*)$1, (const char *)$input, $1_dim0-1);&#10; $1[$1_dim0-1] = 0;&#10; } else {&#10; $1[0] = 0;&#10; }&#10;}" id="97" addr="b7dbaf38" />
175
+ <attribute name="method" value="globalin" id="98" addr="b7dbaf38" />
176
+ </attributelist >
177
+
178
+ <typemapitem id="99" addr="b7db9278" >
179
+ <attributelist id="100" addr="b7db9278" >
180
+ <parmlist id="101" addr="b7db9298" >
181
+ <parm id="102">
182
+ <attributelist id="103" addr="b7db9298" >
183
+ <attribute name="type" value="a(ANY).char" id="104" addr="b7dbaf38" />
184
+ </attributelist >
185
+ </parm >
186
+ </parmlist >
187
+ </attributelist >
188
+
189
+ </typemapitem >
190
+ </typemap >
191
+ <typemap id="105" addr="b7db93b8" >
192
+ <attributelist id="106" addr="b7db93b8" >
193
+ <attribute name="code" value="{&#10; if ($input) strcpy((char *)$1, (const char *)$input);&#10; else $1[0] = 0;&#10;}" id="107" addr="b7dbaf38" />
194
+ <attribute name="method" value="memberin" id="108" addr="b7dbaf38" />
195
+ </attributelist >
196
+
197
+ <typemapitem id="109" addr="b7db9358" >
198
+ <attributelist id="110" addr="b7db9358" >
199
+ <parmlist id="111" addr="b7db9378" >
200
+ <parm id="112">
201
+ <attributelist id="113" addr="b7db9378" >
202
+ <attribute name="type" value="a().char" id="114" addr="b7dbaf38" />
203
+ </attributelist >
204
+ </parm >
205
+ </parmlist >
206
+ </attributelist >
207
+
208
+ </typemapitem >
209
+ </typemap >
210
+ <typemap id="115" addr="b7db9498" >
211
+ <attributelist id="116" addr="b7db9498" >
212
+ <attribute name="code" value="{&#10; if ($input) strcpy((char *)$1, (const char *)$input);&#10; else $1[0] = 0;&#10;}" id="117" addr="b7dbaf38" />
213
+ <attribute name="method" value="globalin" id="118" addr="b7dbaf38" />
214
+ </attributelist >
215
+
216
+ <typemapitem id="119" addr="b7db9438" >
217
+ <attributelist id="120" addr="b7db9438" >
218
+ <parmlist id="121" addr="b7db9458" >
219
+ <parm id="122">
220
+ <attributelist id="123" addr="b7db9458" >
221
+ <attribute name="type" value="a().char" id="124" addr="b7dbaf38" />
222
+ </attributelist >
223
+ </parm >
224
+ </parmlist >
225
+ </attributelist >
226
+
227
+ </typemapitem >
228
+ </typemap >
229
+ <typemap id="125" addr="b7db9598" >
230
+ <attributelist id="126" addr="b7db9598" >
231
+ <attribute name="code" value="{&#10; size_t ii;&#10; $1_basetype *b = ($1_basetype *) $1;&#10; for (ii = 0; ii &lt; (size_t)$1_size; ii++) b[ii] = *(($1_basetype *) $input + ii);&#10;}" id="127" addr="b7dbaf38" />
232
+ <attribute name="method" value="memberin" id="128" addr="b7dbaf38" />
233
+ </attributelist >
234
+
235
+ <typemapitem id="129" addr="b7db9538" >
236
+ <attributelist id="130" addr="b7db9538" >
237
+ <parmlist id="131" addr="b7db9558" >
238
+ <parm id="132">
239
+ <attributelist id="133" addr="b7db9558" >
240
+ <attribute name="type" value="a(ANY).SWIGTYPE" id="134" addr="b7dbaf38" />
241
+ </attributelist >
242
+ </parm >
243
+ </parmlist >
244
+ </attributelist >
245
+
246
+ </typemapitem >
247
+ </typemap >
248
+ <typemap id="135" addr="b7db9698" >
249
+ <attributelist id="136" addr="b7db9698" >
250
+ <attribute name="code" value="{&#10; size_t ii;&#10; $1_basetype *b = ($1_basetype *) $1;&#10; for (ii = 0; ii &lt; (size_t)$1_size; ii++) b[ii] = *(($1_basetype *) $input + ii);&#10;}" id="137" addr="b7dbaf38" />
251
+ <attribute name="method" value="globalin" id="138" addr="b7dbaf38" />
252
+ </attributelist >
253
+
254
+ <typemapitem id="139" addr="b7db9638" >
255
+ <attributelist id="140" addr="b7db9638" >
256
+ <parmlist id="141" addr="b7db9658" >
257
+ <parm id="142">
258
+ <attributelist id="143" addr="b7db9658" >
259
+ <attribute name="type" value="a(ANY).SWIGTYPE" id="144" addr="b7dbaf38" />
260
+ </attributelist >
261
+ </parm >
262
+ </parmlist >
263
+ </attributelist >
264
+
265
+ </typemapitem >
266
+ </typemap >
267
+ <typemap id="145" addr="b7db97b8" >
268
+ <attributelist id="146" addr="b7db97b8" >
269
+ <attribute name="code" value="{&#10; $basetype (*inp)[$1_dim1] = ($basetype (*)[$1_dim1])($input);&#10; $basetype (*dest)[$1_dim1] = ($basetype (*)[$1_dim1])($1);&#10; size_t ii = 0;&#10; for (; ii &lt; $1_dim0; ++ii) {&#10; $basetype *ip = inp[ii];&#10; $basetype *dp = dest[ii];&#10; size_t jj = 0;&#10; for (; jj &lt; $1_dim1; ++jj) dp[jj] = ip[jj];&#10; }&#10;}" id="147" addr="b7dbaf38" />
270
+ <attribute name="method" value="memberin" id="148" addr="b7dbaf38" />
271
+ </attributelist >
272
+
273
+ <typemapitem id="149" addr="b7db9728" >
274
+ <attributelist id="150" addr="b7db9728" >
275
+ <parmlist id="151" addr="b7db9778" >
276
+ <parm id="152">
277
+ <attributelist id="153" addr="b7db9778" >
278
+ <attribute name="type" value="a(ANY).a(ANY).SWIGTYPE" id="154" addr="b7dbaf38" />
279
+ </attributelist >
280
+ </parm >
281
+ </parmlist >
282
+ </attributelist >
283
+
284
+ </typemapitem >
285
+ </typemap >
286
+ <typemap id="155" addr="b7db98d8" >
287
+ <attributelist id="156" addr="b7db98d8" >
288
+ <attribute name="code" value="{&#10; $basetype (*inp)[$1_dim1] = ($basetype (*)[$1_dim1])($input);&#10; $basetype (*dest)[$1_dim1] = ($basetype (*)[$1_dim1])($1);&#10; size_t ii = 0;&#10; for (; ii &lt; $1_dim0; ++ii) {&#10; $basetype *ip = inp[ii];&#10; $basetype *dp = dest[ii];&#10; size_t jj = 0;&#10; for (; jj &lt; $1_dim1; ++jj) dp[jj] = ip[jj];&#10; }&#10;}" id="157" addr="b7dbaf38" />
289
+ <attribute name="method" value="globalin" id="158" addr="b7dbaf38" />
290
+ </attributelist >
291
+
292
+ <typemapitem id="159" addr="b7db9848" >
293
+ <attributelist id="160" addr="b7db9848" >
294
+ <parmlist id="161" addr="b7db9898" >
295
+ <parm id="162">
296
+ <attributelist id="163" addr="b7db9898" >
297
+ <attribute name="type" value="a(ANY).a(ANY).SWIGTYPE" id="164" addr="b7dbaf38" />
298
+ </attributelist >
299
+ </parm >
300
+ </parmlist >
301
+ </attributelist >
302
+
303
+ </typemapitem >
304
+ </typemap >
305
+ <typemap id="165" addr="b7db9ad8" >
306
+ <attributelist id="166" addr="b7db9ad8" >
307
+ <kwargs id="167" addr="b7db9918" >
308
+ <attributelist id="168" addr="b7db9918" >
309
+ <attribute name="name" value="numinputs" id="169" addr="b7dbaf38" />
310
+ <attribute name="value" value="0" id="170" addr="b7dbaf38" />
311
+ </attributelist >
312
+ <kwargssitem id="171" addr="b7db9928" >
313
+ <attributelist id="172" addr="b7db9928" >
314
+ </attributelist >
315
+ </kwargssitem >
316
+ <kwargssitem id="173" addr="b7db9938" >
317
+ <attributelist id="174" addr="b7db9938" >
318
+ </attributelist >
319
+ </kwargssitem >
320
+ </kwargs >
321
+ <attribute name="code" value="" id="175" addr="b7dbaf38" />
322
+ <attribute name="method" value="in" id="176" addr="b7dbaf38" />
323
+ </attributelist >
324
+
325
+ <typemapitem id="177" addr="b7db99b8" >
326
+ <attributelist id="178" addr="b7db99b8" >
327
+ <parmlist id="179" addr="b7db99d8" >
328
+ <parm id="180">
329
+ <attributelist id="181" addr="b7db99d8" >
330
+ <attribute name="name" value="VARARGS_SENTINEL" id="182" addr="b7dbaf38" />
331
+ <attribute name="type" value="p.SWIGTYPE" id="183" addr="b7dbaf38" />
332
+ </attributelist >
333
+ </parm >
334
+ </parmlist >
335
+ </attributelist >
336
+
337
+ </typemapitem >
338
+ <typemapitem id="184" addr="b7db9a68" >
339
+ <attributelist id="185" addr="b7db9a68" >
340
+ <parmlist id="186" addr="b7db9a88" >
341
+ <parm id="187">
342
+ <attributelist id="188" addr="b7db9a88" >
343
+ <attribute name="name" value="VARARGS_SENTINEL" id="189" addr="b7dbaf38" />
344
+ <attribute name="type" value="SWIGTYPE" id="190" addr="b7dbaf38" />
345
+ </attributelist >
346
+ </parm >
347
+ </parmlist >
348
+ </attributelist >
349
+
350
+ </typemapitem >
351
+ </typemap >
352
+ <insert id="191" addr="b7db9b18" >
353
+ <attributelist id="192" addr="b7db9b18" >
354
+ <attribute name="code" value="/* -----------------------------------------------------------------------------&#10; * This section contains generic SWIG labels for method/variable&#10; * declarations/attributes, and other compiler dependent labels.&#10; * ----------------------------------------------------------------------------- */&#10;&#10;/* template workaround for compilers that cannot correctly implement the C++ standard */&#10;#ifndef SWIGTEMPLATEDISAMBIGUATOR&#10;# if defined(__SUNPRO_CC) &amp;&amp; (__SUNPRO_CC &lt;= 0x560)&#10;# define SWIGTEMPLATEDISAMBIGUATOR template&#10;# elif defined(__HP_aCC)&#10;/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */&#10;/* If we find a maximum version that requires this, the test would be __HP_aCC &lt;= 35500 for A.03.55 */&#10;# define SWIGTEMPLATEDISAMBIGUATOR template&#10;# else&#10;# define SWIGTEMPLATEDISAMBIGUATOR&#10;# endif&#10;#endif&#10;&#10;/* inline attribute */&#10;#ifndef SWIGINLINE&#10;# if defined(__cplusplus) || (defined(__GNUC__) &amp;&amp; !defined(__STRICT_ANSI__))&#10;# define SWIGINLINE inline&#10;# else&#10;# define SWIGINLINE&#10;# endif&#10;#endif&#10;&#10;/* attribute recognised by some compilers to avoid 'unused' warnings */&#10;#ifndef SWIGUNUSED&#10;# if defined(__GNUC__)&#10;# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 &amp;&amp; __GNUC_MINOR__ >= 4))&#10;# define SWIGUNUSED __attribute__ ((__unused__)) &#10;# else&#10;# define SWIGUNUSED&#10;# endif&#10;# elif defined(__ICC)&#10;# define SWIGUNUSED __attribute__ ((__unused__)) &#10;# else&#10;# define SWIGUNUSED &#10;# endif&#10;#endif&#10;&#10;#ifndef SWIG_MSC_UNSUPPRESS_4505&#10;# if defined(_MSC_VER)&#10;# pragma warning(disable : 4505) /* unreferenced local function has been removed */&#10;# endif &#10;#endif&#10;&#10;#ifndef SWIGUNUSEDPARM&#10;# ifdef __cplusplus&#10;# define SWIGUNUSEDPARM(p)&#10;# else&#10;# define SWIGUNUSEDPARM(p) p SWIGUNUSED &#10;# endif&#10;#endif&#10;&#10;/* internal SWIG method */&#10;#ifndef SWIGINTERN&#10;# define SWIGINTERN static SWIGUNUSED&#10;#endif&#10;&#10;/* internal inline SWIG method */&#10;#ifndef SWIGINTERNINLINE&#10;# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE&#10;#endif&#10;&#10;/* exporting methods */&#10;#if (__GNUC__ >= 4) || (__GNUC__ == 3 &amp;&amp; __GNUC_MINOR__ >= 4)&#10;# ifndef GCC_HASCLASSVISIBILITY&#10;# define GCC_HASCLASSVISIBILITY&#10;# endif&#10;#endif&#10;&#10;#ifndef SWIGEXPORT&#10;# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)&#10;# if defined(STATIC_LINKED)&#10;# define SWIGEXPORT&#10;# else&#10;# define SWIGEXPORT __declspec(dllexport)&#10;# endif&#10;# else&#10;# if defined(__GNUC__) &amp;&amp; defined(GCC_HASCLASSVISIBILITY)&#10;# define SWIGEXPORT __attribute__ ((visibility(&quot;default&quot;)))&#10;# else&#10;# define SWIGEXPORT&#10;# endif&#10;# endif&#10;#endif&#10;&#10;/* calling conventions for Windows */&#10;#ifndef SWIGSTDCALL&#10;# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)&#10;# define SWIGSTDCALL __stdcall&#10;# else&#10;# define SWIGSTDCALL&#10;# endif &#10;#endif&#10;&#10;/* Deal with Microsoft's attempt at deprecating C standard runtime functions */&#10;#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) &amp;&amp; defined(_MSC_VER) &amp;&amp; !defined(_CRT_SECURE_NO_DEPRECATE)&#10;# define _CRT_SECURE_NO_DEPRECATE&#10;#endif&#10;&#10;/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */&#10;#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) &amp;&amp; defined(_MSC_VER) &amp;&amp; !defined(_SCL_SECURE_NO_DEPRECATE)&#10;# define _SCL_SECURE_NO_DEPRECATE&#10;#endif&#10;&#10;" id="193" addr="b7dbaf38" />
355
+ <attribute name="section" value="runtime" id="194" addr="b7dbaf38" />
356
+ </attributelist >
357
+
358
+ </insert >
359
+ </include >
360
+ <include id="195" addr="b7db9be8" >
361
+ <attributelist id="196" addr="b7db9be8" >
362
+ <attribute name="name" value="interfaces/libc.i" id="197" addr="b7dbaf38" />
363
+ <attribute name="module" value="" id="198" addr="b7db9c38" />
364
+ <attribute name="options" value="b7db9b98" id="199" addr="b7db9b98" />
365
+ </attributelist >
366
+
367
+ <module id="200" addr="b7db9c08" >
368
+ <attributelist id="201" addr="b7db9c08" >
369
+ <attribute name="name" value="libc" id="202" addr="b7dbaf38" />
370
+ </attributelist >
371
+
372
+ </module >
373
+ <insert id="203" addr="b7db9c58" >
374
+ <attributelist id="204" addr="b7db9c58" >
375
+ <attribute name="code" value="&#10;require 'rubygems'&#10;require 'ffi'&#10;&#10;module LibC&#10; extend FFI::Library&#10;" id="205" addr="b7dbaf38" />
376
+ </attributelist >
377
+
378
+ </insert >
379
+ <cdecl id="206" addr="b7db9cd8" >
380
+ <attributelist id="207" addr="b7db9cd8" >
381
+ <attribute name="sym_name" value="size_t" id="208" addr="b7dbaf38" />
382
+ <attribute name="name" value="size_t" id="209" addr="b7dbaf38" />
383
+ <attribute name="decl" value="" id="210" addr="b7dbaf38" />
384
+ <attribute name="storage" value="typedef" id="211" addr="b7dbaf38" />
385
+ <attribute name="kind" value="typedef" id="212" addr="b7dbaf38" />
386
+ <attribute name="type" value="unsigned int" id="213" addr="b7dbaf38" />
387
+ <attribute name="sym_symtab" value="b7db13d8" id="214" addr="b7db13d8" />
388
+ <attribute name="sym_overname" value="__SWIG_0" id="215" addr="b7dbaf38" />
389
+ </attributelist >
390
+
391
+ </cdecl >
392
+ <class id="216" addr="b7db9e28" >
393
+ <attributelist id="217" addr="b7db9e28" >
394
+ <attribute name="name" value="timeval" id="218" addr="b7dbaf38" />
395
+ <attribute name="sym_symtab" value="b7db13d8" id="219" addr="b7db13d8" />
396
+ <attribute name="symtab" value="b7db9ea8" id="220" addr="b7db9ea8" />
397
+ <attribute name="allows_typedef" value="1" id="221" addr="b7dbaf38" />
398
+ <attribute name="typepass_visit" value="1" id="222" addr="b7dbaf38" />
399
+ <attribute name="allocate_visit" value="1" id="223" addr="b7dbaf38" />
400
+ <attribute name="kind" value="struct" id="224" addr="b7dbaf38" />
401
+ <attribute name="sym_name" value="timeval" id="225" addr="b7dbaf38" />
402
+ <attribute name="allocate_default_constructor" value="1" id="226" addr="b7dbaf38" />
403
+ <attribute name="allocate_default_destructor" value="1" id="227" addr="b7dbaf38" />
404
+ <attribute name="allocate_copy_constructor" value="1" id="228" addr="b7dbaf38" />
405
+ <attribute name="module" value="libc" id="229" addr="b7db9c08" />
406
+ <attribute name="sym_overname" value="__SWIG_0" id="230" addr="b7dbaf38" />
407
+ <typescope id="231" addr="b7dbaab8" >
408
+ <attributelist id="232" addr="b7dbaab8" >
409
+ <attribute name="name" value="timeval" id="233" addr="b7dbaf38" />
410
+ <typetab id="234" addr="b7dbaac8" >
411
+ <attributelist id="235" addr="b7dbaac8" >
412
+ </attributelist >
413
+ </typetab >
414
+ <attribute name="parent" value="b7db1458" id="236" addr="b7db1458" />
415
+ <attribute name="qname" value="timeval" id="237" addr="b7dbaf38" />
416
+ <attribute name="symtab" value="b7db9ea8" id="238" addr="b7db9ea8" />
417
+ </attributelist >
418
+ <typescopesitem id="239" addr="b7dbaa88" >
419
+ <attributelist id="240" addr="b7dbaa88" >
420
+ </attributelist >
421
+ </typescopesitem >
422
+ <typescopesitem id="241" addr="b7dbaac8" >
423
+ <attributelist id="242" addr="b7dbaac8" >
424
+ </attributelist >
425
+ </typescopesitem >
426
+ <typescopesitem id="243" addr="b7db1458" >
427
+ <attributelist id="244" addr="b7db1458" >
428
+ <attribute name="name" value="" id="245" addr="b7dbaf38" />
429
+ <typetab id="246" addr="b7db1488" >
430
+ <attributelist id="247" addr="b7db1488" >
431
+ <attribute name="struct timeval" value="struct timeval" id="248" addr="b7dbaf38" />
432
+ <attribute name="size_t" value="unsigned int" id="249" addr="b7dbaf38" />
433
+ </attributelist >
434
+ <typetabsitem id="250" addr="b7dbaa48" >
435
+ <attributelist id="251" addr="b7dbaa48" >
436
+ </attributelist >
437
+ </typetabsitem >
438
+ <typetabsitem id="252" addr="b7dba9c8" >
439
+ <attributelist id="253" addr="b7dba9c8" >
440
+ </attributelist >
441
+ </typetabsitem >
442
+ </typetab >
443
+ </attributelist >
444
+ </typescopesitem >
445
+ <typescopesitem id="254" addr="b7dbaad8" >
446
+ <attributelist id="255" addr="b7dbaad8" >
447
+ </attributelist >
448
+ </typescopesitem >
449
+ <typescopesitem id="256" addr="b7db9ea8" >
450
+ <attributelist id="257" addr="b7db9ea8" >
451
+ <attribute name="name" value="timeval" id="258" addr="b7dbaf38" />
452
+ <attribute name="csymtab" value="b7db9ec8" id="259" addr="b7db9ec8" />
453
+ <attribute name="symtab" value="b7db9e98" id="260" addr="b7db9e98" />
454
+ </attributelist >
455
+ </typescopesitem >
456
+ </typescope >
457
+ </attributelist >
458
+
459
+ <cdecl id="261" addr="b7db9f58" >
460
+ <attributelist id="262" addr="b7db9f58" >
461
+ <attribute name="ismember" value="1" id="263" addr="b7dbaf38" />
462
+ <attribute name="sym_name" value="tv_sec" id="264" addr="b7dbaf38" />
463
+ <attribute name="name" value="tv_sec" id="265" addr="b7dbaf38" />
464
+ <attribute name="decl" value="" id="266" addr="b7dbaf38" />
465
+ <attribute name="access" value="public" id="267" addr="b7dbaf38" />
466
+ <attribute name="kind" value="variable" id="268" addr="b7dbaf38" />
467
+ <attribute name="type" value="unsigned long" id="269" addr="b7dbaf38" />
468
+ <attribute name="sym_symtab" value="b7db9ea8" id="270" addr="b7db9ea8" />
469
+ <attribute name="sym_overname" value="__SWIG_0" id="271" addr="b7dbaf38" />
470
+ </attributelist >
471
+
472
+ </cdecl >
473
+ <cdecl id="272" addr="b7dba0a8" >
474
+ <attributelist id="273" addr="b7dba0a8" >
475
+ <attribute name="ismember" value="1" id="274" addr="b7dbaf38" />
476
+ <attribute name="sym_name" value="tv_usec" id="275" addr="b7dbaf38" />
477
+ <attribute name="name" value="tv_usec" id="276" addr="b7dbaf38" />
478
+ <attribute name="decl" value="" id="277" addr="b7dbaf38" />
479
+ <attribute name="access" value="public" id="278" addr="b7dbaf38" />
480
+ <attribute name="kind" value="variable" id="279" addr="b7dbaf38" />
481
+ <attribute name="type" value="unsigned long" id="280" addr="b7dbaf38" />
482
+ <attribute name="sym_symtab" value="b7db9ea8" id="281" addr="b7db9ea8" />
483
+ <attribute name="sym_overname" value="__SWIG_0" id="282" addr="b7dbaf38" />
484
+ </attributelist >
485
+
486
+ </cdecl >
487
+ </class >
488
+ <cdecl id="283" addr="b7dba268" >
489
+ <attributelist id="284" addr="b7dba268" >
490
+ <attribute name="sym_name" value="strlen" id="285" addr="b7dbaf38" />
491
+ <attribute name="name" value="strlen" id="286" addr="b7dbaf38" />
492
+ <attribute name="decl" value="f(p.q(const).char)." id="287" addr="b7dbaf38" />
493
+ <parmlist id="288" addr="b7dba218" >
494
+ <parm id="289">
495
+ <attributelist id="290" addr="b7dba218" >
496
+ <attribute name="name" value="s" id="291" addr="b7dbaf38" />
497
+ <attribute name="type" value="p.q(const).char" id="292" addr="b7dbaf38" />
498
+ <attribute name="compactdefargs" value="1" id="293" addr="b7dbaf38" />
499
+ </attributelist >
500
+ </parm >
501
+ </parmlist >
502
+ <attribute name="kind" value="function" id="294" addr="b7dbaf38" />
503
+ <attribute name="type" value="size_t" id="295" addr="b7dbaf38" />
504
+ <attribute name="sym_symtab" value="b7db13d8" id="296" addr="b7db13d8" />
505
+ <attribute name="sym_overname" value="__SWIG_0" id="297" addr="b7dbaf38" />
506
+ </attributelist >
507
+
508
+ </cdecl >
509
+ <cdecl id="298" addr="b7dba468" >
510
+ <attributelist id="299" addr="b7dba468" >
511
+ <attribute name="sym_name" value="strcat" id="300" addr="b7dbaf38" />
512
+ <attribute name="name" value="strcat" id="301" addr="b7dbaf38" />
513
+ <attribute name="decl" value="f(p.char,p.q(const).char).p." id="302" addr="b7dbaf38" />
514
+ <parmlist id="303" addr="b7dba388" >
515
+ <parm id="304">
516
+ <attributelist id="305" addr="b7dba388" >
517
+ <attribute name="name" value="to" id="306" addr="b7dbaf38" />
518
+ <attribute name="type" value="p.char" id="307" addr="b7dbaf38" />
519
+ <attribute name="compactdefargs" value="1" id="308" addr="b7dbaf38" />
520
+ </attributelist >
521
+ </parm >
522
+ <parm id="309">
523
+ <attributelist id="310" addr="b7dba428" >
524
+ <attribute name="name" value="from" id="311" addr="b7dbaf38" />
525
+ <attribute name="type" value="p.q(const).char" id="312" addr="b7dbaf38" />
526
+ </attributelist >
527
+ </parm >
528
+ </parmlist >
529
+ <attribute name="kind" value="function" id="313" addr="b7dbaf38" />
530
+ <attribute name="type" value="char" id="314" addr="b7dbaf38" />
531
+ <attribute name="sym_symtab" value="b7db13d8" id="315" addr="b7db13d8" />
532
+ <attribute name="sym_overname" value="__SWIG_0" id="316" addr="b7dbaf38" />
533
+ </attributelist >
534
+
535
+ </cdecl >
536
+ <cdecl id="317" addr="b7dba668" >
537
+ <attributelist id="318" addr="b7dba668" >
538
+ <attribute name="sym_name" value="strcmp" id="319" addr="b7dbaf38" />
539
+ <attribute name="name" value="strcmp" id="320" addr="b7dbaf38" />
540
+ <attribute name="decl" value="f(p.q(const).char,p.q(const).char)." id="321" addr="b7dbaf38" />
541
+ <parmlist id="322" addr="b7dba578" >
542
+ <parm id="323">
543
+ <attributelist id="324" addr="b7dba578" >
544
+ <attribute name="name" value="s1" id="325" addr="b7dbaf38" />
545
+ <attribute name="type" value="p.q(const).char" id="326" addr="b7dbaf38" />
546
+ <attribute name="compactdefargs" value="1" id="327" addr="b7dbaf38" />
547
+ </attributelist >
548
+ </parm >
549
+ <parm id="328">
550
+ <attributelist id="329" addr="b7dba618" >
551
+ <attribute name="name" value="s2" id="330" addr="b7dbaf38" />
552
+ <attribute name="type" value="p.q(const).char" id="331" addr="b7dbaf38" />
553
+ </attributelist >
554
+ </parm >
555
+ </parmlist >
556
+ <attribute name="kind" value="function" id="332" addr="b7dbaf38" />
557
+ <attribute name="type" value="int" id="333" addr="b7dbaf38" />
558
+ <attribute name="sym_symtab" value="b7db13d8" id="334" addr="b7db13d8" />
559
+ <attribute name="sym_overname" value="__SWIG_0" id="335" addr="b7dbaf38" />
560
+ </attributelist >
561
+
562
+ </cdecl >
563
+ <cdecl id="336" addr="b7dba868" >
564
+ <attributelist id="337" addr="b7dba868" >
565
+ <attribute name="sym_name" value="gettimeofday" id="338" addr="b7dbaf38" />
566
+ <attribute name="name" value="gettimeofday" id="339" addr="b7dbaf38" />
567
+ <attribute name="decl" value="f(p.struct timeval,p.struct timezone)." id="340" addr="b7dbaf38" />
568
+ <parmlist id="341" addr="b7dba778" >
569
+ <parm id="342">
570
+ <attributelist id="343" addr="b7dba778" >
571
+ <attribute name="name" value="tp" id="344" addr="b7dbaf38" />
572
+ <attribute name="type" value="p.struct timeval" id="345" addr="b7dbaf38" />
573
+ <attribute name="compactdefargs" value="1" id="346" addr="b7dbaf38" />
574
+ </attributelist >
575
+ </parm >
576
+ <parm id="347">
577
+ <attributelist id="348" addr="b7dba818" >
578
+ <attribute name="name" value="tzp" id="349" addr="b7dbaf38" />
579
+ <attribute name="type" value="p.struct timezone" id="350" addr="b7dbaf38" />
580
+ </attributelist >
581
+ </parm >
582
+ </parmlist >
583
+ <attribute name="kind" value="function" id="351" addr="b7dbaf38" />
584
+ <attribute name="type" value="int" id="352" addr="b7dbaf38" />
585
+ <attribute name="sym_symtab" value="b7db13d8" id="353" addr="b7db13d8" />
586
+ <attribute name="sym_overname" value="__SWIG_0" id="354" addr="b7dbaf38" />
587
+ </attributelist >
588
+
589
+ </cdecl >
590
+ <insert id="355" addr="b7dba8e8" >
591
+ <attributelist id="356" addr="b7dba8e8" >
592
+ <attribute name="code" value="&#10;end&#10;" id="357" addr="b7dbaf38" />
593
+ </attributelist >
594
+
595
+ </insert >
596
+ </include >
597
+ </top >