rwdaddresses 0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. data/Readme.txt +57 -0
  2. data/bin/rwdaddresses +19 -0
  3. data/code/ag1core/aa0begin.rb +18 -0
  4. data/code/ag1core/rwdtinkerversion.rb +15 -0
  5. data/code/al5languagefiles/alanguagehashbegin.rb +4 -0
  6. data/code/al5languagefiles/languagehash.rb +4 -0
  7. data/code/al5languagefiles/templangfile.rb +6 -0
  8. data/code/al5languagefiles/zlanguagehashend.rb +6 -0
  9. data/code/gl3addresses/gl3viewnamedata.rb +26 -0
  10. data/code/gl3addresses/gl4listnamerecord.rb +11 -0
  11. data/code/gl3addresses/gl4viewphoto.rb +4 -0
  12. data/code/gl3addresses/gl5createnewnamerecord.rb +17 -0
  13. data/code/lm1installapplets/ll5listzips.rb +14 -0
  14. data/code/lm1installapplets/lm1installapplet.rb +20 -0
  15. data/code/ssdiagnostictab/diagnostictab.rb +20 -0
  16. data/code/xa5rwdtinkercallable/callable.rb +13 -0
  17. data/code/xb1rwdtinkerbackwindow/05listinstalledfiles.rb +11 -0
  18. data/code/xb1rwdtinkerbackwindow/diagnostictab.rb +20 -0
  19. data/code/xb1rwdtinkerbackwindow/ll1openname.rb +18 -0
  20. data/code/xb1rwdtinkerbackwindow/ll5listzips.rb +14 -0
  21. data/code/xb1rwdtinkerbackwindow/lm1installapplet.rb +20 -0
  22. data/code/xb1rwdtinkerbackwindow/mm1removeapplet.rb +28 -0
  23. data/code/xb1rwdtinkerbackwindow/rwdtinkerwin2version.rb +14 -0
  24. data/code/zz0applicationend/zz0end.rb +4 -0
  25. data/configuration/aa0rwdframework.cnf +11 -0
  26. data/configuration/ab1tinkerwin2.cnf +3 -0
  27. data/configuration/gl3addresses.cnf +2 -0
  28. data/ev/browser.rb +109 -0
  29. data/ev/ftools.rb +170 -0
  30. data/ev/net.rb +750 -0
  31. data/ev/ruby.rb +819 -0
  32. data/ev/rwd.rb +1848 -0
  33. data/ev/sgml.rb +236 -0
  34. data/ev/thread.rb +63 -0
  35. data/ev/tree.rb +343 -0
  36. data/ev/xml.rb +4 -0
  37. data/gui/en/aa2core/aa0rwdtop.rwd +3 -0
  38. data/gui/en/gl3addresses/gl3viewnamedata.rwd +16 -0
  39. data/gui/en/gl3addresses/gl4listnamerecordfiles.rwd +17 -0
  40. data/gui/en/gl3addresses/gl5createnewnamerecord.rwd +26 -0
  41. data/gui/en/ll1selectiontabbegin/selectiontabbegin.rwd +15 -0
  42. data/gui/en/ll5rwdtinkerwin2selectiontab/rwdwin2selectiontab.rwd +11 -0
  43. data/gui/en/lz1selectiontabend/endselectiontab.rwd +1 -0
  44. data/gui/en/tt0documentsbegin/tt0documentbegin.rwd +5 -0
  45. data/gui/en/uu5rwddocuments/uu5documents.rwd +13 -0
  46. data/gui/en/uu6rwdtinkerwin2documents/uu5documents.rwd +4 -0
  47. data/gui/en/uu8addresses/uu8doc_rwdschedule.rwd +4 -0
  48. data/gui/en/ww0documentsend/ww0documentend.rwd +6 -0
  49. data/gui/en/wz6finaltabs/xx0rwdfirsttab.rwd +4 -0
  50. data/gui/en/xa1versionwindow/1appname.rwd +17 -0
  51. data/gui/en/xa5rwdtinkercallablewindow/1appname.rwd +15 -0
  52. data/gui/en/xa5rwdtinkercallablewindow/9end.rwd +4 -0
  53. data/gui/en/xb1rwdtinkerbackwindow/1appname.rwd +3 -0
  54. data/gui/en/xb1rwdtinkerbackwindow/2tab1.rwd +9 -0
  55. data/gui/en/xb1rwdtinkerbackwindow/3arwddiagnostics.rwd +31 -0
  56. data/gui/en/xb1rwdtinkerbackwindow/4arwdlistapplets.rwd +42 -0
  57. data/gui/en/xb1rwdtinkerbackwindow/4arwdlistzips.rwd +33 -0
  58. data/gui/en/xb1rwdtinkerbackwindow/9backend.rwd +5 -0
  59. data/gui/en/ya1helpaboutbegin/ya0helpscreenstart.rwd +1 -0
  60. data/gui/en/yg5rwdhelpabout/1appname.rwd +2 -0
  61. data/gui/en/yg5rwdhelpabout/3copyright.rwd +1 -0
  62. data/gui/en/yg5rwdhelpabout/5version.rwd +9 -0
  63. data/gui/en/yg6rwdwin2helpabout/1appname.rwd +2 -0
  64. data/gui/en/yg6rwdwin2helpabout/3copyright.rwd +1 -0
  65. data/gui/en/yg6rwdwin2helpabout/5version.rwd +9 -0
  66. data/gui/en/yl3addresseshelp/yl3helpscreen.rwd +4 -0
  67. data/gui/en/yy7addressesphotowindow/yy7addressesphoto.rwd +3 -0
  68. data/gui/en/za1applicationend/yy9rwdend.rwd +2 -0
  69. data/gui/es/aa2core/aa0rwdtop.rwd +3 -0
  70. data/gui/es/gl3addresses/gl3viewnamedata.rwd +16 -0
  71. data/gui/es/gl3addresses/gl4listnamerecordfiles.rwd +17 -0
  72. data/gui/es/gl3addresses/gl5createnewnamerecord.rwd +26 -0
  73. data/gui/es/ll1selectiontabbegin/selectiontabbegin.rwd +15 -0
  74. data/gui/es/ll5rwdtinkerwin2selectiontab/rwdwin2selectiontab.rwd +11 -0
  75. data/gui/es/lz1selectiontabend/endselectiontab.rwd +1 -0
  76. data/gui/es/tt0documentsbegin/tt0documentbegin.rwd +5 -0
  77. data/gui/es/uu5rwddocuments/uu5documents.rwd +13 -0
  78. data/gui/es/uu6rwdtinkerwin2documents/uu5documents.rwd +4 -0
  79. data/gui/es/uu8addresses/uu8doc_rwdschedule.rwd +4 -0
  80. data/gui/es/ww0documentsend/ww0documentend.rwd +6 -0
  81. data/gui/es/wz6finaltabs/xx0rwdfirsttab.rwd +4 -0
  82. data/gui/es/xa1versionwindow/1appname.rwd +17 -0
  83. data/gui/es/xa5rwdtinkercallablewindow/1appname.rwd +15 -0
  84. data/gui/es/xa5rwdtinkercallablewindow/9end.rwd +4 -0
  85. data/gui/es/xb1rwdtinkerbackwindow/1appname.rwd +3 -0
  86. data/gui/es/xb1rwdtinkerbackwindow/2tab1.rwd +9 -0
  87. data/gui/es/xb1rwdtinkerbackwindow/3arwddiagnostics.rwd +31 -0
  88. data/gui/es/xb1rwdtinkerbackwindow/4arwdlistapplets.rwd +42 -0
  89. data/gui/es/xb1rwdtinkerbackwindow/4arwdlistzips.rwd +33 -0
  90. data/gui/es/xb1rwdtinkerbackwindow/9backend.rwd +5 -0
  91. data/gui/es/ya1helpaboutbegin/ya0helpscreenstart.rwd +1 -0
  92. data/gui/es/yg5rwdhelpabout/1appname.rwd +2 -0
  93. data/gui/es/yg5rwdhelpabout/3copyright.rwd +1 -0
  94. data/gui/es/yg5rwdhelpabout/5version.rwd +9 -0
  95. data/gui/es/yg6rwdwin2helpabout/1appname.rwd +2 -0
  96. data/gui/es/yg6rwdwin2helpabout/3copyright.rwd +1 -0
  97. data/gui/es/yg6rwdwin2helpabout/5version.rwd +9 -0
  98. data/gui/es/yl3addresseshelp/yl3helpscreen.rwd +4 -0
  99. data/gui/es/yy7addressesphotowindow/yy7addressesphoto.rwd +3 -0
  100. data/gui/es/za1applicationend/yy9rwdend.rwd +2 -0
  101. data/gui/nl/aa2core/aa0rwdtop.rwd +3 -0
  102. data/gui/nl/gl3addresses/gl3viewnamedata.rwd +16 -0
  103. data/gui/nl/gl3addresses/gl4listnamerecordfiles.rwd +17 -0
  104. data/gui/nl/gl3addresses/gl5createnewnamerecord.rwd +26 -0
  105. data/gui/nl/ll1selectiontabbegin/selectiontabbegin.rwd +15 -0
  106. data/gui/nl/ll5rwdtinkerwin2selectiontab/rwdwin2selectiontab.rwd +11 -0
  107. data/gui/nl/lz1selectiontabend/endselectiontab.rwd +1 -0
  108. data/gui/nl/tt0documentsbegin/tt0documentbegin.rwd +5 -0
  109. data/gui/nl/uu5rwddocuments/uu5documents.rwd +13 -0
  110. data/gui/nl/uu6rwdtinkerwin2documents/uu5documents.rwd +4 -0
  111. data/gui/nl/uu8addresses/uu8doc_rwdschedule.rwd +4 -0
  112. data/gui/nl/ww0documentsend/ww0documentend.rwd +6 -0
  113. data/gui/nl/wz6finaltabs/xx0rwdfirsttab.rwd +4 -0
  114. data/gui/nl/xa1versionwindow/1appname.rwd +17 -0
  115. data/gui/nl/xa5rwdtinkercallablewindow/1appname.rwd +15 -0
  116. data/gui/nl/xa5rwdtinkercallablewindow/9end.rwd +4 -0
  117. data/gui/nl/xb1rwdtinkerbackwindow/1appname.rwd +3 -0
  118. data/gui/nl/xb1rwdtinkerbackwindow/2tab1.rwd +9 -0
  119. data/gui/nl/xb1rwdtinkerbackwindow/3arwddiagnostics.rwd +31 -0
  120. data/gui/nl/xb1rwdtinkerbackwindow/4arwdlistapplets.rwd +42 -0
  121. data/gui/nl/xb1rwdtinkerbackwindow/4arwdlistzips.rwd +33 -0
  122. data/gui/nl/xb1rwdtinkerbackwindow/9backend.rwd +5 -0
  123. data/gui/nl/ya1helpaboutbegin/ya0helpscreenstart.rwd +1 -0
  124. data/gui/nl/yg5rwdhelpabout/1appname.rwd +2 -0
  125. data/gui/nl/yg5rwdhelpabout/3copyright.rwd +1 -0
  126. data/gui/nl/yg5rwdhelpabout/5version.rwd +9 -0
  127. data/gui/nl/yg6rwdwin2helpabout/1appname.rwd +2 -0
  128. data/gui/nl/yg6rwdwin2helpabout/3copyright.rwd +1 -0
  129. data/gui/nl/yg6rwdwin2helpabout/5version.rwd +9 -0
  130. data/gui/nl/yl3addresseshelp/yl3helpscreen.rwd +4 -0
  131. data/gui/nl/yy7addressesphotowindow/yy7addressesphoto.rwd +3 -0
  132. data/gui/nl/za1applicationend/yy9rwdend.rwd +2 -0
  133. data/init.rb +164 -0
  134. data/installed/addressessample1.inf +5 -0
  135. data/installed/rwdaddresses-0.8.inf +11 -0
  136. data/installed/rwdtinkerwin2-0.5.inf +16 -0
  137. data/lang/en/rwdcore/languagefile.rb +6 -0
  138. data/lang/es/rwdcore/languagefile.rb +4 -0
  139. data/lang/nl/rwdcore/languagefile.rb +4 -0
  140. data/lib/temp.rb +1 -0
  141. data/names/AngelinaJolie.nam +8 -0
  142. data/names/AngelinaJolie.png +0 -0
  143. data/names/StevenGibson.nam +5 -0
  144. data/names/StevenGibson.png +0 -0
  145. data/names/nophoto.png +0 -0
  146. data/rwd_files/HowTo_Addresses.html +163 -0
  147. data/rwd_files/HowTo_Addresses.txt +145 -0
  148. data/rwd_files/HowTo_Tinker.html +370 -0
  149. data/rwd_files/HowTo_Tinker.txt +244 -0
  150. data/rwd_files/HowTo_TinkerWin2.txt +202 -0
  151. data/rwd_files/Readme.txt +57 -0
  152. data/rwd_files/contacttmp.png +0 -0
  153. data/rwd_files/favicon.ico +0 -0
  154. data/rwd_files/rdoc-style.css +175 -0
  155. data/rwd_files/rwdapplications.html +54 -0
  156. data/rwd_files/rwdindex.html +6 -0
  157. data/tests/rubyslippers-0.92.gemspec +17 -0
  158. data/tests/rwdtinker-1.2.gemspec +17 -0
  159. data/tests/rwdtinkertestEN.rb +87 -0
  160. data/tests/temptest.out +18 -0
  161. data/tests/totranslate.lang +93 -0
  162. data/zips/rwdaviewphoto-0.3.zip +0 -0
  163. data/zips/rwdhelloworld-0.2.zip +0 -0
  164. data/zips/rwdrefreshacpi-0.1.zip +0 -0
  165. data/zips/rwdwtinkerwin2-0.5.zip +0 -0
  166. metadata +206 -0
data/ev/ruby.rb ADDED
@@ -0,0 +1,819 @@
1
+ require "cgi"
2
+ require "rbconfig"
3
+ require "thread"
4
+
5
+ Thread.abort_on_exception = true
6
+
7
+ $DEBUG = ($DEBUG or ENV["RUBYDEBUG"] or false)
8
+
9
+ #tekens = '\w\~\@\#\$\%\^\&\*\-\+'
10
+ tekens = '^\s\r\n\`\!\(\)\[\]\{\}\<\>\,\.\/\?\\\|\=\;\:\"'
11
+
12
+ #tekens11 = '\w'
13
+ tekens11 = tekens + "'"
14
+
15
+ tekens21 = tekens + "'"
16
+ tekens22 = tekens
17
+ tekens23 = tekens + "'"
18
+
19
+ tekens31 = '\w\s\r\n'
20
+
21
+ RegExpStringWord = "([#{tekens11}]+)" ; RegExpWord = Regexp.new(RegExpStringWord)
22
+ RegExpStringWord2 = "([#{tekens21}]([#{tekens22}]*[#{tekens23}])?)" ; RegExpWord2 = Regexp.new(RegExpStringWord2)
23
+ RegExpStringText = "([#{tekens31}]+)" ; RegExpText = Regexp.new(RegExpStringText)
24
+ RegExpStringFile = '(\w[\w\.\-]*)' ; RegExpFile = Regexp.new(RegExpStringFile)
25
+ RegExpStringEmail = '([\w\-\.]+@[\w\-\.]+)' ; RegExpEmail = Regexp.new(RegExpStringEmail)
26
+ RegExpStringURL = '(\w+:\/\/[\w\.\-]+(:\d*)?\/[\w\.\-\/\#\?\=\%]*)' ; RegExpURL = Regexp.new(RegExpStringURL)
27
+ RegExpStringPrint = '([\w \t\r\n\`\~\!\@\#\$\%\^\&\*\(\)\-\+\=\[\]\{\}\;\:\'\"\,\.\/\<\>\?\\\|]+)' ; RegExpPrint = Regexp.new(RegExpStringPrint)
28
+ RegExpStringDiff = '(^[\-\+]([^\-\+].*)?)' ; RegExpDiff = Regexp.new(RegExpStringDiff)
29
+
30
+ module Enumerable
31
+ def deep_dup
32
+ Marshal::load(Marshal::dump(dup))
33
+ end
34
+
35
+ def deep_clone
36
+ Marshal::load(Marshal::dump(clone))
37
+ end
38
+ end
39
+
40
+ class Thread
41
+ def self.background(*args)
42
+ new(*args) do |*args|
43
+ Thread.pass
44
+
45
+ yield(*args)
46
+ end
47
+ end
48
+ end
49
+
50
+ class Object
51
+ alias deep_dup :dup
52
+ alias deep_clone :clone
53
+
54
+ def to_fs
55
+ to_s
56
+ end
57
+
58
+ def ids
59
+ id
60
+ end
61
+ end
62
+
63
+ class Numeric
64
+ def to_fs
65
+ to_f
66
+ end
67
+ end
68
+
69
+ class Integer
70
+ def oct
71
+ n = self
72
+ res = []
73
+
74
+ while n > 8
75
+ n, x = n.divmod(8)
76
+ res << x
77
+ end
78
+ res << n
79
+
80
+ res.reverse.join("")
81
+ end
82
+ end
83
+
84
+ class String
85
+ def chomp!(dummy=nil)
86
+ self.gsub!(/[\r\n]*\z/, "")
87
+ end
88
+
89
+ def chomp(dummy=nil)
90
+ self.gsub(/[\r\n]*\z/, "")
91
+ end
92
+
93
+ def lf
94
+ self.gsub(/\r*\n/, "\n").gsub(/\n\z/, "") + "\n"
95
+ end
96
+
97
+ def crlf
98
+ self.gsub(/\r*\n/, "\r\n").gsub(/\r\n\z/, "") + "\r\n"
99
+ end
100
+
101
+ def strip
102
+ self.stripbefore.stripafter
103
+ end
104
+
105
+ def stripbefore
106
+ self.gsub(/\A[[:blank:]\r\n]*/, "")
107
+ end
108
+
109
+ def stripafter
110
+ self.gsub(/[[:blank:]\r\n]*\z/, "")
111
+ end
112
+
113
+ def compress
114
+ self.gsub(/[[:blank:]\r\n]+/, " ").strip
115
+ end
116
+
117
+ def compressspaces
118
+ self.gsub(/[[:blank:]]+/, " ")
119
+ end
120
+
121
+ def compressperline
122
+ res = self.split(/\n/)
123
+ res.collect!{|line| line.compress}
124
+ res.delete_if{|line| line.empty?}
125
+ res.join("\n")
126
+ end
127
+
128
+ def numeric?
129
+ d, a, n = [self].to_par
130
+
131
+ not n.empty?
132
+ end
133
+
134
+ def exec(input=nil, output=true)
135
+ res = []
136
+
137
+ IO.popen(self, "w+") do |f|
138
+ f.puts input unless input.nil?
139
+ f.close_write
140
+
141
+ res = f.readlines if output
142
+ end
143
+
144
+ res.join("")
145
+ end
146
+
147
+ def eval
148
+ Kernel::eval(self)
149
+ end
150
+
151
+ def speak
152
+ require "drb"
153
+
154
+ DRb.start_service
155
+ DRbObject.new(nil, "druby://localhost:3100").speak(self)
156
+ end
157
+
158
+ def splitblocks(*delimiters)
159
+ begindelimiters = []
160
+ enddelimiters = []
161
+
162
+ delimiters.each do |k, v|
163
+ begindelimiters << k.downcase
164
+ enddelimiters << v.downcase
165
+ end
166
+
167
+ bd = begindelimiters.collect {|s| Regexp.escape(s)}
168
+ ed = enddelimiters.collect {|s| Regexp.escape(s)}
169
+
170
+ be = bd.join("|")
171
+ ee = ed.join("|")
172
+
173
+ res = []
174
+ type = 0
175
+ tmp = ""
176
+ bs = ""
177
+ es = ""
178
+
179
+ self.split(/(#{ee}|#{be})/i).each do |s|
180
+ if type == 0
181
+ if begindelimiters.include?(s.downcase)
182
+ i = begindelimiters.index(s.downcase)
183
+ type = i+1
184
+ tmp = s
185
+ bs = s.downcase
186
+ es = enddelimiters[i]
187
+ else
188
+ res << [0, s] unless s.empty?
189
+ end
190
+ else
191
+ if s.downcase == es
192
+ res << [type, tmp + s]
193
+ type = 0
194
+ tmp = ""
195
+ bs = ""
196
+ es = ""
197
+ else
198
+ if s.downcase == bs
199
+ res << [0, tmp]
200
+ tmp = s
201
+ else
202
+ tmp = tmp + s
203
+ end
204
+ end
205
+ end
206
+ end
207
+
208
+ res << [0, tmp] unless tmp.empty?
209
+
210
+ return res
211
+ end
212
+
213
+ def splitwords(tokens=[])
214
+ tokens = [tokens] unless tokens.kind_of?(Array)
215
+ res = []
216
+
217
+ self.splitblocks(["'", "'"], ['"', '"']).each do |type, s|
218
+ case type
219
+ when 0
220
+ tokens.each do |token|
221
+ token2 = token
222
+ token2 = Regexp.escape(token2) if token2.kind_of?(String)
223
+ s.gsub!(/#{token2}/, " #{token} ")
224
+ end
225
+ s.split().each do |w|
226
+ res << w
227
+ end
228
+ when 1, 2
229
+ res << s[1..-2]
230
+ end
231
+ end
232
+
233
+ return res
234
+ end
235
+
236
+ def uncomment
237
+ res = []
238
+
239
+ self.splitblocks(["'", "'"], ['"', '"'], ["#", "\n"]).each do |type, s|
240
+ case type
241
+ when 0, 1, 2 then res << s
242
+ when 3 then res << "\n"
243
+ end
244
+ end
245
+
246
+ res.join("")
247
+ end
248
+
249
+ def noquotes
250
+ self.sub(/\A['"]/, "").sub(/['"]\z/, "")
251
+ end
252
+
253
+ def to_html(eolconversion=true)
254
+ s = CGI.escapeHTML(self)
255
+
256
+ s.gsub!(/\"/, "\&#34;")
257
+ s.gsub!(/\'/, "\&#180;")
258
+
259
+ if eolconversion
260
+ s.gsub!(/\n/ , "<br>")
261
+ end
262
+
263
+ s
264
+ end
265
+
266
+ def from_html(eolconversion=true)
267
+ s = self
268
+
269
+ s.gsub!(/&#34;/ , "\"")
270
+ s.gsub!(/&#180;/, "\'")
271
+
272
+ s = CGI.unescapeHTML(self)
273
+
274
+ if eolconversion
275
+ s.gsub!(/<br>/, "\n")
276
+ end
277
+
278
+ s
279
+ end
280
+
281
+ def to_fs
282
+ if numeric?
283
+ to_f
284
+ else
285
+ to_s
286
+ end
287
+ end
288
+ end
289
+
290
+ class Array
291
+ def chomp!
292
+ self.collect!{|s| s.chomp}
293
+ end
294
+
295
+ def chomp
296
+ self.collect{|s| s.chomp}
297
+ end
298
+
299
+ def compress
300
+ self.collect{|s| s.compress}
301
+ end
302
+
303
+ def uncomment
304
+ self.join("\0").uncomment.split("\0")
305
+ end
306
+
307
+ def strip
308
+ self.collect{|s| s.strip}
309
+ end
310
+
311
+ def sum
312
+ res = 0
313
+ self.each do |n|
314
+ res += n
315
+ end
316
+ res
317
+ end
318
+
319
+ def product
320
+ res = 1
321
+ self.each do |n|
322
+ res *= n
323
+ end
324
+ res
325
+ end
326
+
327
+ def joinwords(sep=" ", quote='"')
328
+ self.collect do |s|
329
+ s = quote + s + quote if s =~ /[[:blank:]]/
330
+ s
331
+ end.join(sep)
332
+ end
333
+
334
+ def domino(tabellen, kolom=nil, onlymatchinglines=false)
335
+ links = self
336
+ res = []
337
+ res = self.dup unless onlymatchinglines
338
+
339
+ tabellen.each do |rechts|
340
+ tmp = []
341
+
342
+ links.each do |l|
343
+ if kolom.nil? or l.length == kolom
344
+ rechts.each do |r|
345
+ tmp << l + r[1..-1] if l[-1] == r[0]
346
+ end
347
+ end
348
+ end
349
+
350
+ links = tmp
351
+ res.concat(tmp)
352
+ end
353
+
354
+ res = res.sort.uniq
355
+ end
356
+
357
+ def dominoloop(tabellen)
358
+ lres = []
359
+ res = self.dup
360
+ kolom = 2
361
+
362
+ while lres.length != res.length do
363
+ lres = res.dup
364
+ res = res.domino(tabellen, kolom)
365
+
366
+ res.each do |line|
367
+ line << "*" if (line.length != line.uniq.length and line[-1] != "*")
368
+ end
369
+
370
+ $stderr.print "#{100*(res.length)/(lres.length)}% "
371
+
372
+ kolom += 1
373
+ end
374
+
375
+ $stderr.puts ""
376
+
377
+ return res
378
+ end
379
+
380
+ def buildtree
381
+ self.dominoloop([self])
382
+ end
383
+
384
+ def subset(fields, values, results, exact=true, emptyline=nil, joinwith=nil)
385
+ fields = [fields] unless fields.kind_of? Array
386
+ values = [values] unless values.kind_of? Array
387
+ results = [results] unless results.kind_of? Array
388
+ emptyline = emptyline.downcase unless emptyline.nil?
389
+ res = self.dup
390
+ res.delete_if {true}
391
+
392
+ self.each do |l|
393
+ ok = true
394
+
395
+ case l.class.to_s
396
+ when "String"
397
+ c = l.splitwords
398
+ correction = 1
399
+ joinwith = " " if joinwith.nil?
400
+ when "Array"
401
+ c = l
402
+ correction = 0
403
+ end
404
+
405
+ #catch :stop do
406
+ values2 = values.dup
407
+ fields.each do |f|
408
+ v = values2.shift
409
+ v = v.downcase unless v.nil?
410
+ if emptyline.nil? or (not v == emptyline)
411
+ if exact
412
+ unless (v.nil? or c[f-correction].downcase == v)
413
+ ok = false
414
+ #throw :stop
415
+ end
416
+ else
417
+ unless (v.nil? or c[f-correction].downcase.include?(v))
418
+ ok = false
419
+ #throw :stop
420
+ end
421
+ end
422
+ end
423
+ end
424
+ #end
425
+
426
+ if ok
427
+ res2 = []
428
+ results.each do |n|
429
+ res2 << c[n-1]
430
+ end
431
+ res2 = res2.join(joinwith) unless joinwith.nil?
432
+ res << res2
433
+ end
434
+ end
435
+
436
+ return res
437
+ end
438
+
439
+ def format(format)
440
+ res = []
441
+
442
+ [format.length, self.length].min.times do |n|
443
+ case format[n].chr
444
+ when "i" then res << self[n].to_i
445
+ when "s" then res << self[n].to_s
446
+ when "x" then res << self[n]
447
+ end
448
+ end
449
+
450
+ res
451
+ end
452
+
453
+ def to_i
454
+ collect{|c| c.to_i}
455
+ end
456
+
457
+ def to_par
458
+ dash = self.dup
459
+ alpha = self.dup
460
+ numeric = self.dup
461
+
462
+ dash.delete_if do |s|
463
+ not (s =~ /\A-/) or
464
+ (s =~ /\A-?[[:digit:]\.]+\z/) or
465
+ (s =~ /^-+$/)
466
+ end
467
+
468
+ alpha.delete_if do |s|
469
+ ((s =~ /\A-/) or
470
+ (s =~ /\A-?[[:digit:]\.]+\z/)) and
471
+ not ((s =~ /^\.+$/) or (s =~ /^-+$/))
472
+ end
473
+
474
+ numeric.delete_if do |s|
475
+ not (s =~ /\A-?[[:digit:]\.]+\z/) or
476
+ (s =~ /^\.+$/)
477
+ end
478
+
479
+ raise "Oops!" if dash.length + alpha.length + numeric.length != length
480
+
481
+ return dash, alpha, numeric
482
+ end
483
+
484
+ def self.file(file)
485
+ res = new
486
+
487
+ File.open(file) do |f|
488
+ f.readlines.uncomment.chomp.each do |line|
489
+ res << line
490
+ end
491
+ end
492
+
493
+ res
494
+ end
495
+
496
+ def numsort
497
+ sort do |a, b|
498
+ a2 = a.to_fs
499
+ b2 = b.to_fs
500
+
501
+ if a2.class != b2.class
502
+ a2 = a
503
+ b2 = b
504
+ end
505
+
506
+ a2 <=> b2
507
+ end
508
+ end
509
+
510
+ def to_fs
511
+ collect{|s| s.to_fs}
512
+ end
513
+
514
+ def chaos
515
+ res = self.dup
516
+
517
+ (length^2).times do
518
+ a = rand(length)
519
+ b = rand(length)
520
+
521
+ res[a], res[b] = res[b], res[a]
522
+ end
523
+
524
+ res
525
+ end
526
+
527
+ def any
528
+ if empty?
529
+ nil
530
+ else
531
+ self[rand(self.length)]
532
+ end
533
+ end
534
+
535
+ def minmax
536
+ min, value, max = self
537
+ [min, [value, max].min].max
538
+ end
539
+
540
+ def ids
541
+ collect{|e| e.ids}
542
+ end
543
+ end
544
+
545
+ class Hash
546
+ def save(file, append=false)
547
+ org = {}
548
+ org = Hash.file(file) if (append and File.file?(file))
549
+
550
+ self.sort.each do |k, v|
551
+ org[k] = v
552
+ end
553
+
554
+ File.open(file, "w") do |f|
555
+ org.sort.each do |k, v|
556
+ f.puts "%s\t= %s" % [k, v]
557
+ end
558
+ end
559
+ end
560
+
561
+ def subset(fields, values, results=nil, exact=true, emptyline=nil, joinwith=nil)
562
+ fields = [fields] unless fields.kind_of? Array
563
+ values = [values] unless values.kind_of? Array
564
+ results = [results] unless results.kind_of? Array
565
+ emptyline = emptyline.downcase unless emptyline.nil?
566
+ res = self.dup
567
+ res.delete_if {true}
568
+
569
+ self.each do |k, l|
570
+ ok = true
571
+
572
+ case l.class.to_s
573
+ when "String"
574
+ c = l.splitwords
575
+ correction = 1
576
+ joinwith = " " if joinwith.nil?
577
+ when "Array"
578
+ c = l
579
+ correction = 0
580
+ end
581
+
582
+ #catch :stop do
583
+ values2 = values.dup
584
+ fields.each do |f|
585
+ v = values2.shift
586
+ v = v.downcase unless v.nil?
587
+ if emptyline.nil? or (not v == emptyline)
588
+ if exact
589
+ unless (v.nil? or c[f-correction].downcase == v)
590
+ ok = false
591
+ #throw :stop
592
+ end
593
+ else
594
+ unless (v.nil? or c[f-correction].downcase.include?(v))
595
+ ok = false
596
+ #throw :stop
597
+ end
598
+ end
599
+ end
600
+ end
601
+ #end
602
+
603
+ if ok
604
+ res2 = []
605
+ if results == [nil]
606
+ res2 = c
607
+ else
608
+ results.each do |n|
609
+ res2 << c[n-correction]
610
+ end
611
+ end
612
+ res2 = res2.join(joinwith) unless joinwith.nil?
613
+ res[k] = res2
614
+ end
615
+ end
616
+
617
+ return res
618
+ end
619
+
620
+ def to_i
621
+ collect{|k, v| v.to_i}
622
+ end
623
+
624
+ def self.file(file)
625
+ res = new
626
+
627
+ File.open(file) do |f|
628
+ #f.readlines.chomp.each do |line|
629
+ while line = f.gets do
630
+ line.chomp!
631
+
632
+ unless line.empty?
633
+ k, v = line.split(/\s*=\s*/, 2)
634
+ res[k] = v
635
+ end
636
+ end
637
+ end
638
+
639
+ res
640
+ end
641
+
642
+ def ids
643
+ collect{|k, v| [k, v].ids}
644
+ end
645
+ end
646
+
647
+ def id2ref(id)
648
+ ObjectSpace._id2ref(id)
649
+ end
650
+
651
+ def after(seconds, *args)
652
+ if not seconds.nil? and not seconds.zero?
653
+ Thread.new(*args) do |*args2|
654
+ sleep seconds
655
+ yield(*args2)
656
+ end
657
+ end
658
+ end
659
+
660
+ def every(seconds, *args)
661
+ if not seconds.nil? and not seconds.zero?
662
+ Thread.new(*args) do |*args2|
663
+ loop do
664
+ sleep seconds
665
+ yield(*args2)
666
+ end
667
+ end
668
+ end
669
+ end
670
+
671
+ def evtimeout(seconds)
672
+ begin
673
+ timeout(seconds) do
674
+ yield
675
+ end
676
+ rescue TimeoutError
677
+ end
678
+ end
679
+
680
+ def evtimeoutretry(seconds)
681
+ ok = false
682
+
683
+ while not ok
684
+ evtimeout(seconds) do
685
+ yield
686
+ ok = true
687
+ end
688
+ end
689
+ end
690
+
691
+ def trap(signal)
692
+ Kernel::trap(signal) do
693
+ yield
694
+ end
695
+
696
+ # Seems pointless, but it's for catching ^C under Windows...
697
+
698
+ every(1) {} if windows?
699
+ end
700
+
701
+ def linux?
702
+ not windows? and not cygwin?
703
+ end
704
+
705
+ def windows?
706
+ not (target_os.downcase =~ /32/).nil?
707
+ end
708
+
709
+ def cygwin?
710
+ not (target_os.downcase =~ /cyg/).nil?
711
+ end
712
+
713
+ def target_os
714
+ Config::CONFIG["target_os"] or ""
715
+ end
716
+
717
+ def user
718
+ ENV["USER"] or ENV["USERNAME"]
719
+ end
720
+
721
+ def home
722
+ (ENV["HOME"] or ENV["USERPROFILE"] or (File.directory?("h:/") ? "h:" : "c:")).gsub(/\\/, "/")
723
+ end
724
+
725
+ def temp
726
+ (ENV["TMPDIR"] or ENV["TMP"] or ENV["TEMP"] or "/tmp").gsub(/\\/, "/")
727
+ end
728
+
729
+ def stdtmp
730
+ $stderr = $stdout = File.new("#{temp}/ruby.#{Process.pid}.log", "a") unless ARGV.include?("--rwd-exit")
731
+ end
732
+
733
+ $nobm = false
734
+
735
+ def nobm
736
+ $nobm = true
737
+ end
738
+
739
+ def bm(label="")
740
+ if $nobm
741
+ if block_given?
742
+ return yield
743
+ else
744
+ return nil
745
+ end
746
+ end
747
+
748
+ label = label.to_s
749
+ res = nil
750
+
751
+ $bm_mutex = ($bm_mutex or Mutex.new)
752
+
753
+ $bm_mutex.synchronize do
754
+ if $bm.nil?
755
+ require "ev/bm"
756
+
757
+ $bm = {}
758
+
759
+ at_exit do
760
+ format1 = "%10s %10s %10s %10s %10s %10s %10s"
761
+ format2 = "%10s %10.6f %10.6f %10.6f %10.6f %10.6f %10d"
762
+
763
+ $stderr.puts format1 % ["LABEL", "USERCPU", "SYSCPU", "CUSERCPU", "CSYSCPU", "ELAPSED", "TIMES"]
764
+ $bm.sort{|a, b| [a[1], a[0]] <=> [b[1], b[0]]}.each do |k, v|
765
+ $stderr.puts format2 % [k, *v]
766
+ end
767
+ end
768
+ end
769
+
770
+ $bm[label] = [0.0]*5 + [0] unless $bm.include?(label)
771
+ end
772
+
773
+ if block_given?
774
+ bm = Benchmark.measure{res = yield}
775
+ bma = bm.to_a # [dummy label, user CPU time, system CPU time, childrens user CPU time, childrens system CPU time, elapsed real time]
776
+
777
+ $bm_mutex.synchronize do
778
+ 0.upto(4) do |n|
779
+ $bm[label][n] += bma[n+1]
780
+ end
781
+
782
+ $bm[label][5] += 1
783
+ end
784
+ end
785
+
786
+ res
787
+ end
788
+
789
+ def trace
790
+ res =nil
791
+
792
+ set_trace_func lambda { |event, file, line, id, binding, classname|
793
+ $stderr.printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
794
+ }
795
+
796
+ if block_given?
797
+ res = yield
798
+
799
+ notrace
800
+ end
801
+
802
+ res
803
+ end
804
+
805
+ def notrace
806
+ set_trace_func nil
807
+ end
808
+
809
+ def lambda_cached(&block)
810
+ hash = {}
811
+ lambda do |*args|
812
+ res = hash[args]
813
+ if res.nil?
814
+ res = block.call(*args)
815
+ hash[args] = res
816
+ end
817
+ res
818
+ end
819
+ end