ffi-swig-generator 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 >