YkLib 0.1.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 (125) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +7 -0
  7. data/Gemfile.lock +34 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +44 -0
  10. data/Rakefile +6 -0
  11. data/YkLib.gemspec +29 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/lib/YkLib/Yk/__advance__.rb +151 -0
  15. data/lib/YkLib/Yk/__defun__.rb +44 -0
  16. data/lib/YkLib/Yk/__hook__.rb +244 -0
  17. data/lib/YkLib/Yk/__minmax__.rb +123 -0
  18. data/lib/YkLib/Yk/__stdlog.rb +329 -0
  19. data/lib/YkLib/Yk/adhocLiterals/email.rb +119 -0
  20. data/lib/YkLib/Yk/adhocLiterals/path.rb +402 -0
  21. data/lib/YkLib/Yk/adhocLiterals/tag.rb +19 -0
  22. data/lib/YkLib/Yk/adhocLiterals/url.rb +36 -0
  23. data/lib/YkLib/Yk/adhocLiterals.rb +199 -0
  24. data/lib/YkLib/Yk/auto_escseq.rb +5 -0
  25. data/lib/YkLib/Yk/auto_pstore.rb +179 -0
  26. data/lib/YkLib/Yk/bsearch.rb +120 -0
  27. data/lib/YkLib/Yk/clambda.rb +309 -0
  28. data/lib/YkLib/Yk/confLine.rb +423 -0
  29. data/lib/YkLib/Yk/create_tty_width_available.rb +24 -0
  30. data/lib/YkLib/Yk/crypt.rb +26 -0
  31. data/lib/YkLib/Yk/debug2 +1 -0
  32. data/lib/YkLib/Yk/debug2.rb +473 -0
  33. data/lib/YkLib/Yk/debugout.rb +139 -0
  34. data/lib/YkLib/Yk/email_tz.rb +533 -0
  35. data/lib/YkLib/Yk/enum_expect.rb +170 -0
  36. data/lib/YkLib/Yk/errlog.rb +5 -0
  37. data/lib/YkLib/Yk/escseq.rb +59 -0
  38. data/lib/YkLib/Yk/eval_alt.rb +281 -0
  39. data/lib/YkLib/Yk/expector.rb +93 -0
  40. data/lib/YkLib/Yk/fetch.rb +556 -0
  41. data/lib/YkLib/Yk/fetch_old.rb +290 -0
  42. data/lib/YkLib/Yk/fib.rb +158 -0
  43. data/lib/YkLib/Yk/file_aux.rb +843 -0
  44. data/lib/YkLib/Yk/file_aux2.rb +919 -0
  45. data/lib/YkLib/Yk/file_aux_old.rb +160 -0
  46. data/lib/YkLib/Yk/filemod.rb +19 -0
  47. data/lib/YkLib/Yk/force_escseq.rb +3 -0
  48. data/lib/YkLib/Yk/generator__.rb +144 -0
  49. data/lib/YkLib/Yk/generator__.rb.org +139 -0
  50. data/lib/YkLib/Yk/indenter/argless_case.rb +46 -0
  51. data/lib/YkLib/Yk/indenter/each_token.rb +671 -0
  52. data/lib/YkLib/Yk/indenter/free_case.rb +313 -0
  53. data/lib/YkLib/Yk/indenter/if_less.rb +53 -0
  54. data/lib/YkLib/Yk/indenter/independent_ensure.rb +23 -0
  55. data/lib/YkLib/Yk/indenter/independent_rescue.rb +23 -0
  56. data/lib/YkLib/Yk/indenter/operand_circumflex.rb +0 -0
  57. data/lib/YkLib/Yk/indenter/operand_period.rb +16 -0
  58. data/lib/YkLib/Yk/indenter/parenless_and.rb +37 -0
  59. data/lib/YkLib/Yk/indenter/post_test.rb +48 -0
  60. data/lib/YkLib/Yk/indenter/token.rb +1525 -0
  61. data/lib/YkLib/Yk/indenter.rb +1382 -0
  62. data/lib/YkLib/Yk/inot.rb +265 -0
  63. data/lib/YkLib/Yk/intf.rb +815 -0
  64. data/lib/YkLib/Yk/io_aux.rb +1332 -0
  65. data/lib/YkLib/Yk/ioctl.rb +60 -0
  66. data/lib/YkLib/Yk/ipcc.rb +87 -0
  67. data/lib/YkLib/Yk/ipcountry.rb +207 -0
  68. data/lib/YkLib/Yk/ipv4adr.rb +318 -0
  69. data/lib/YkLib/Yk/localmail.rb +276 -0
  70. data/lib/YkLib/Yk/method_chain.rb +359 -0
  71. data/lib/YkLib/Yk/misc_tz.rb +1716 -0
  72. data/lib/YkLib/Yk/missing_method.rb +50 -0
  73. data/lib/YkLib/Yk/mojiConv.rb +257 -0
  74. data/lib/YkLib/Yk/nostdlog.rb +4 -0
  75. data/lib/YkLib/Yk/on_marshal.rb +20 -0
  76. data/lib/YkLib/Yk/overrider.rb +47 -0
  77. data/lib/YkLib/Yk/path.rb +293 -0
  78. data/lib/YkLib/Yk/path_aux.rb +883 -0
  79. data/lib/YkLib/Yk/path_aux_alt.rb +0 -0
  80. data/lib/YkLib/Yk/path_rep.rb +1267 -0
  81. data/lib/YkLib/Yk/pg_setup.rb +917 -0
  82. data/lib/YkLib/Yk/procinfo.rb +314 -0
  83. data/lib/YkLib/Yk/proclist.rb +492 -0
  84. data/lib/YkLib/Yk/property.rb +863 -0
  85. data/lib/YkLib/Yk/ranger.rb +606 -0
  86. data/lib/YkLib/Yk/resolv_tz.rb +88 -0
  87. data/lib/YkLib/Yk/rlprompt.rb +73 -0
  88. data/lib/YkLib/Yk/rootexec.rb +48 -0
  89. data/lib/YkLib/Yk/rpm-packageproxy.rb +784 -0
  90. data/lib/YkLib/Yk/rpm-packageproxy2.rb +1430 -0
  91. data/lib/YkLib/Yk/rwhen.rb +21 -0
  92. data/lib/YkLib/Yk/selector.rb +124 -0
  93. data/lib/YkLib/Yk/set.rb +170 -0
  94. data/lib/YkLib/Yk/shellquote.rb +300 -0
  95. data/lib/YkLib/Yk/sio.rb +1001 -0
  96. data/lib/YkLib/Yk/sio0.rb +835 -0
  97. data/lib/YkLib/Yk/sio_aux.rb +1524 -0
  98. data/lib/YkLib/Yk/sio_inot.rb +86 -0
  99. data/lib/YkLib/Yk/sock_aux.rb +42 -0
  100. data/lib/YkLib/Yk/spipe.rb +843 -0
  101. data/lib/YkLib/Yk/sql_table.rb +565 -0
  102. data/lib/YkLib/Yk/stdlog.rb +4 -0
  103. data/lib/YkLib/Yk/syscommand.rb +173 -0
  104. data/lib/YkLib/Yk/sysinit.rb +75 -0
  105. data/lib/YkLib/Yk/ttyFontWidth.rb +46113 -0
  106. data/lib/YkLib/Yk/tty_char.dump +0 -0
  107. data/lib/YkLib/Yk/tty_char.rb +47 -0
  108. data/lib/YkLib/Yk/tty_char_create.rb +437031 -0
  109. data/lib/YkLib/Yk/tty_char_static.rb +437016 -0
  110. data/lib/YkLib/Yk/tty_rewrite.rb +142 -0
  111. data/lib/YkLib/Yk/tty_str.rb +461 -0
  112. data/lib/YkLib/Yk/tty_width.dat.rb +114 -0
  113. data/lib/YkLib/Yk/tty_width.rb +180 -0
  114. data/lib/YkLib/Yk/tty_width_available +569 -0
  115. data/lib/YkLib/Yk/tty_width_list +0 -0
  116. data/lib/YkLib/Yk/tty_width_list.linux +280 -0
  117. data/lib/YkLib/Yk/tty_width_list.windows +324 -0
  118. data/lib/YkLib/Yk/tz_tty +0 -0
  119. data/lib/YkLib/Yk/tz_tty.rb +0 -0
  120. data/lib/YkLib/Yk/uprepos.rb +94 -0
  121. data/lib/YkLib/Yk/userinfo.rb +91 -0
  122. data/lib/YkLib/Yk/with.rb +109 -0
  123. data/lib/YkLib/version.rb +3 -0
  124. data/lib/YkLib.rb +6 -0
  125. metadata +170 -0
@@ -0,0 +1,606 @@
1
+
2
+ require "Yk/generator__"
3
+ require "Yk/misc_tz"
4
+
5
+
6
+ class Ranger
7
+ class NInf
8
+ end
9
+ class Inf
10
+ end
11
+ def Inf.num
12
+ self
13
+ end
14
+ def Inf.to_s
15
+ return "Inf"
16
+ end
17
+ def NInf.to_s
18
+ return "Ninf"
19
+ end
20
+ def Inf.<=> (arg)
21
+ return 1
22
+ end
23
+ def Inf.< (arg)
24
+ false
25
+ end
26
+ def Inf.<= (arg)
27
+ arg == Inf
28
+ end
29
+ def Inf.> (arg)
30
+ arg != Inf
31
+ end
32
+ def Inf.>= (arg)
33
+ true
34
+ end
35
+ def Inf.+ (arg)
36
+ if arg != NInf
37
+ Inf
38
+ else
39
+ raise ArgumentError.new("undefined: Inf + NInf\n")
40
+ end
41
+ end
42
+ def Inf.- (arg)
43
+ if arg != Inf
44
+ Inf
45
+ else
46
+ raise ArgumentError.new("undefined: Inf - Inf\n")
47
+ end
48
+ end
49
+ def Inf.-@ (arg)
50
+ NInf
51
+ end
52
+ def NInf.num
53
+ self
54
+ end
55
+ def NInf.<=> (arg)
56
+ return -1
57
+ end
58
+ def NInf.< (arg)
59
+ arg != NInf
60
+ end
61
+ def NInf.<= (arg)
62
+ true
63
+ end
64
+ def NInf.> (arg)
65
+ false
66
+ end
67
+ def NInf.>= (arg)
68
+ arg == NInf
69
+ end
70
+ def NInf.+ (arg)
71
+ if arg == Inf
72
+ raise ArgumentError.new("undefined: NInf + Inf\n")
73
+ else
74
+ NInf
75
+ end
76
+ end
77
+ def NInf.- (arg)
78
+ if arg != NInf
79
+ NInf
80
+ else
81
+ raise ArgumentError.new("undefined: NInf - NInf\n")
82
+ end
83
+ end
84
+ def NInf.-@ (arg)
85
+ Inf
86
+ end
87
+ def NInf.coerce (other)
88
+ [other, other - 1]
89
+ end
90
+ def Inf.coerce (other)
91
+ [other, other + 1]
92
+ end
93
+ class RgElem
94
+ attr :num, true
95
+ attr :mode, true
96
+ def initialize (fig, mode = true)
97
+ if fig.is_a? RgElem
98
+ @num = fig.num
99
+ @mode = fig.mode
100
+ return
101
+ end
102
+ @num = fig
103
+ @mode = mode
104
+ end
105
+ def clone
106
+ RgElem.new(self)
107
+ end
108
+ def inverse
109
+ RgElem.new(@num, !@mode)
110
+ end
111
+ def <=> (arg)
112
+ @num <=> arg.num
113
+ end
114
+ def < (arg)
115
+ @num < arg.num
116
+ end
117
+ def > (arg)
118
+ @num > arg.num
119
+ end
120
+ def <= (arg)
121
+ @num <= arg.num
122
+ end
123
+ def >= (arg)
124
+ @num >= arg.num
125
+ end
126
+ def == (arg)
127
+ @num == arg.num
128
+ end
129
+ def RgElem.from (arg)
130
+ return RgElem.new(arg, true), RgElem.new(Inf, false)
131
+ end
132
+ def RgElem.to (arg)
133
+ return RgElem.new(NInf, true), RgElem.new(arg + 1, false)
134
+ end
135
+ def RgElem.get (arg)
136
+ case arg
137
+ when :all
138
+ return RgElem.new(NInf, true), RgElem.new(Inf, false)
139
+ when Integer
140
+ return RgElem.new(arg, true), RgElem.new(arg + 1, false)
141
+ when Range
142
+ #if !arg.first.is_a? Integer
143
+ # raise ArgumentError.new("illeagal Range object, #{arg.first.inspect}\n")
144
+ #end
145
+ #if !arg.last.is_a? Integer
146
+ # raise ArgumentError.new("illeagal Range object\n")
147
+ #end
148
+ if arg.exclude_end?
149
+ if arg.first < arg.last
150
+ @start, @last = RgElem.new(arg.first, true), RgElem.new(arg.last, false)
151
+ else
152
+ #er arg
153
+ raise ArgumentError.new("illeagal Range object\n")
154
+ end
155
+ else
156
+ if arg.first <= arg.last
157
+ @start, @last = RgElem.new(arg.first, true), RgElem.new(arg.last + 1, false)
158
+ else
159
+ raise ArgumentError.new("illeagal Range object\n")
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
165
+ attr :ranges
166
+ def initialize (*args)
167
+ @ranges = []
168
+ def @ranges.inspect
169
+ res = "["
170
+ each_index do |i|
171
+ e = self[i]
172
+ fin = i == size - 1
173
+ res += "#{e ? e.num : e.inspect}#{!fin ? (e.mode ? '=' : '-') : ""}"
174
+ end
175
+ res += "]"
176
+ end
177
+ add(*args)
178
+ # if !arg.is_a? self.class
179
+ # if arg
180
+ # if arg.is_a? String
181
+ # arg = arg.to_i
182
+ # end
183
+ # @ranges.push(*RgElem.get(arg))
184
+ # end
185
+ # else
186
+ # arg.ranges.each do |r|
187
+ # @ranges.push r.clone
188
+ # end
189
+ # end
190
+ end
191
+ def check
192
+ #er @ranges
193
+ if @ranges.size % 2 != 0
194
+ STDERR.write "size error!\n"
195
+ exit 1
196
+ end
197
+ @ranges.each2by1 do |a, b|
198
+ if a.mode == b.mode
199
+ STDERR.write "mode error! #{a.mode}, #{b.mode}\n"
200
+ exit 1
201
+ end
202
+ if a.num >= b.num
203
+ STDERR.write "number error! #{a.num} >= #{b.num}\n"
204
+ exit 1
205
+ end
206
+ end
207
+ end
208
+ def add (*args)
209
+ args.each do |arg|
210
+ case arg
211
+ when Ranger
212
+ arg.eachRange do |r|
213
+ __add(r)
214
+ end
215
+ else
216
+ __add(arg)
217
+ end
218
+ end
219
+ end
220
+ def __add (arg)
221
+ start, last = RgElem.get(arg)
222
+ _add(start, last)
223
+ end
224
+ def _add (start, last)
225
+ #er start, last do
226
+ # "add #{start.num}=#{last.num}"
227
+ #end
228
+ if @ranges.size == 0
229
+ @ranges.clear
230
+ @ranges.push start, last
231
+ return
232
+ end
233
+ if start < @ranges[0]
234
+ if last < @ranges[0]
235
+ @ranges.unshift start, last
236
+ return
237
+ elsif last == @ranges[0]
238
+ @ranges[0].num = start.num
239
+ return
240
+ else
241
+ if @ranges[-1] <= last
242
+ @ranges.clear
243
+ @ranges.push start, last
244
+ return
245
+ end
246
+ @ranges[0].num = start.num
247
+ end
248
+ else
249
+ if @ranges[-1] <= last
250
+ if @ranges[-1] < start
251
+ @ranges.push start, last
252
+ return
253
+ elsif @ranges[-1] == start
254
+ @ranges[-1].num = last.num
255
+ return
256
+ else
257
+ if start == @ranges[0]
258
+ @ranges.clear
259
+ @ranges.push start, last
260
+ return
261
+ end
262
+ @ranges[-1].num = last.num
263
+ if @ranges[-2].num == NInf
264
+ return
265
+ else
266
+ last.num = @ranges[-2].num + 1
267
+ if last.num == @ranges[-1].num
268
+ last.num = last.num - 1
269
+ end
270
+ if start.num >= last.num
271
+ return
272
+ end
273
+ end
274
+ end
275
+ end
276
+ end
277
+ startPos = nil
278
+ lastPos = nil
279
+ (0 .. @ranges.size - 2).each do |i|
280
+ if @ranges[i] <= start && start < @ranges[i + 1]
281
+ startPos = i
282
+ end
283
+ if @ranges[i] <= last && last < @ranges[i + 1]
284
+ lastPos = i
285
+ end
286
+ end
287
+ merge start, startPos, last, lastPos
288
+ end
289
+ def merge (start, startPos, last, lastPos)
290
+ #er start, startPos, last, lastPos do
291
+ # "#{start.num}@#{startPos}=#{last.num}@#{lastPos}"
292
+ #end
293
+ case [@ranges[startPos].mode, @ranges[lastPos].mode, startPos == lastPos]
294
+ when [true, true, true]
295
+ return
296
+ when [false, false, true]
297
+ if start != @ranges[startPos]
298
+ @ranges.insert startPos + 1, start, last
299
+ else
300
+ @ranges[startPos].num = last.num
301
+ end
302
+ when [true, true, false]
303
+ @ranges.slice!(startPos + 1 .. lastPos)
304
+ when [true, false, false]
305
+ @ranges[lastPos].num = last.num
306
+ @ranges.slice!(startPos + 1 ... lastPos)
307
+ when [false, true, false]
308
+ if start != @ranges[startPos]
309
+ if startPos + 1 != lastPos
310
+ @ranges.slice!(startPos + 2 .. lastPos)
311
+ end
312
+ @ranges[startPos + 1].num = start.num
313
+ else
314
+ @ranges.slice!(startPos .. lastPos)
315
+ end
316
+ when [false, false, false]
317
+ if start != @ranges[startPos]
318
+ @ranges[startPos + 1].num = start.num
319
+ @ranges[lastPos].num = last.num
320
+ @ranges.slice!(startPos + 2 .. lastPos - 1)
321
+ else
322
+ @ranges[lastPos].num = last.num
323
+ @ranges.slice!(startPos .. lastPos - 1)
324
+ end
325
+ end
326
+ end
327
+ def addFrom (arg)
328
+ start, last = RgElem.from(arg)
329
+ _add(start, last)
330
+ end
331
+ def addTo (arg)
332
+ start, last = RgElem.to(arg)
333
+ _add(start, last)
334
+ end
335
+ def delFrom (arg)
336
+ start, last = RgElem.from(arg)
337
+ _del(start, last)
338
+ end
339
+ def delTo (arg)
340
+ start, last = RgElem.to(arg)
341
+ _del(start, last)
342
+ end
343
+ def del (arg)
344
+ start, last = RgElem.get(arg)
345
+ _del(start, last)
346
+ end
347
+ def _del (start, last)
348
+ #er start, last do
349
+ # "del #{start.num}-#{last.num}"
350
+ #end
351
+ if @ranges.size == 0
352
+ return
353
+ end
354
+ if start < @ranges[0]
355
+ if last < @ranges[0]
356
+ return
357
+ else
358
+ if @ranges[-1] <= last
359
+ @ranges.clear
360
+ return
361
+ end
362
+ start = RgElem.new(@ranges[0])
363
+ end
364
+ else
365
+ if @ranges[-1] <= last
366
+ if @ranges[-1] <= start
367
+ return
368
+ else
369
+ if start <= @ranges[0]
370
+ @ranges.clear
371
+ return
372
+ end
373
+ if @ranges[-2] < start
374
+ @ranges[-1].num = start.num
375
+ return
376
+ elsif @ranges[-2] == start
377
+ @ranges.pop
378
+ @ranges.pop
379
+ return
380
+ end
381
+ @ranges.pop
382
+ @ranges.pop
383
+ startPos = nil
384
+ (0 .. @ranges.size - 2).each do |i|
385
+ if @ranges[i] <= start && start.num <= @ranges[i + 1].num - 1
386
+ startPos = i
387
+ end
388
+ end
389
+ if startPos
390
+ last = @ranges[-1]
391
+ lastPos = @ranges.size - 1
392
+ exclude start, startPos, last, lastPos
393
+ return
394
+ else
395
+ return
396
+ end
397
+ end
398
+ end
399
+ end
400
+ startPos = nil
401
+ lastPos = nil
402
+ (0 .. @ranges.size - 2).each do |i|
403
+ if @ranges[i] <= start && start.num <= @ranges[i + 1].num - 1
404
+ startPos = i
405
+ end
406
+ if @ranges[i] <= last && last.num <= @ranges[i + 1].num - 1
407
+ lastPos = i
408
+ end
409
+ end
410
+ exclude start, startPos, last, lastPos
411
+ end
412
+ def exclude (start, startPos, last, lastPos)
413
+ #er start, startPos, last, lastPos do
414
+ # "#{start.num}@#{startPos}-#{last.num}@#{lastPos}"
415
+ #end
416
+ case [@ranges[startPos].mode, @ranges[lastPos].mode, startPos == lastPos]
417
+ when [true, true, true]
418
+ if start == @ranges[startPos]
419
+ @ranges[startPos].num = last.num
420
+ else
421
+ @ranges.insert startPos + 1, start.inverse, last.inverse
422
+ end
423
+ when [false, false, true]
424
+ when [true, true, false]
425
+ @ranges[lastPos].num = last.num
426
+ if @ranges[startPos] == start
427
+ @ranges.slice!(startPos .. lastPos - 1)
428
+ else
429
+ @ranges[startPos + 1].num = start.num
430
+ @ranges.slice!(startPos + 2 .. lastPos - 1)
431
+ end
432
+ when [true, false, false]
433
+ if @ranges[startPos] == start
434
+ @ranges.slice!(startPos .. lastPos)
435
+ else
436
+ @ranges[startPos + 1].num = start.num
437
+ @ranges.slice!(startPos + 2 .. lastPos)
438
+ end
439
+ when [false, true, false]
440
+ @ranges[lastPos].num = last.num
441
+ @ranges.slice! startPos + 1 .. lastPos - 1
442
+ when [false, false, false]
443
+ @ranges.slice! startPos + 1 .. lastPos
444
+ end
445
+ end
446
+ def reverse!
447
+ if @ranges.size == 0
448
+ @ranges.push RgElem.new(NInf, true), RgElem.new(Inf, false)
449
+ return
450
+ end
451
+ @ranges.each do |e|
452
+ e.mode = !e.mode
453
+ end
454
+ if @ranges[0].num == NInf
455
+ @ranges.slice!(0)
456
+ else
457
+ @ranges.unshift RgElem.new(NInf, true)
458
+ end
459
+ if @ranges[-1].num == Inf
460
+ @ranges.slice!(-1)
461
+ else
462
+ @ranges.push RgElem.new(Inf, false)
463
+ end
464
+ self
465
+ end
466
+ def reverse
467
+ clone.reverse!
468
+ end
469
+ def except! (arg)
470
+ arg.ranges.each2 do |a, b|
471
+ _del(a, b)
472
+ end
473
+ self
474
+ end
475
+ def except (arg)
476
+ clone.except! arg
477
+ end
478
+ def union! (arg)
479
+ arg.ranges.each2 do |a, b|
480
+ _add(a, b)
481
+ end
482
+ self
483
+ end
484
+ def union (arg)
485
+ clone.union!(arg)
486
+ end
487
+ def intersect! (arg)
488
+ except! arg.clone.reverse!
489
+ self
490
+ end
491
+ def intersect (arg)
492
+ c = clone
493
+ c.intersect!(arg)
494
+ end
495
+ def clone
496
+ self.class.new(self)
497
+ end
498
+ def each
499
+ @ranges.each2 do |a, b|
500
+ if a.num == b.num - 1
501
+ yield a.num
502
+ else
503
+ yield a.num .. b.num - 1
504
+ end
505
+ end
506
+ end
507
+ def eachRange
508
+ @ranges.each2 do |a, b|
509
+ yield a.num .. b.num - 1
510
+ end
511
+ end
512
+ def rangeArr
513
+ ret = []
514
+ eachRange do |r|
515
+ ret.push r
516
+ end
517
+ ret
518
+ end
519
+ def == (arg)
520
+ if arg.is_a? Ranger
521
+ rangeArr == arg.rangeArr
522
+ elsif arg.is_a? Integer
523
+ ra = rangeArr
524
+ if ra.size == 1
525
+ ra[0].first == arg && ra[0].first == ra[0].last
526
+ else
527
+ false
528
+ end
529
+ end
530
+ end
531
+ def include? (*args)
532
+ c = clone
533
+ args.each do |a|
534
+ if a.is_a? Range
535
+ a = Ranger.new(a)
536
+ end
537
+ c.union! a
538
+ end
539
+ self == c
540
+ end
541
+ def take (*args)
542
+ ar = Ranger.new
543
+ args.each do |e|
544
+ case e
545
+ when Ranger
546
+ ar.union! e
547
+ when Integer, Range
548
+ ar.add e
549
+ end
550
+ end
551
+ ar.delTo 0
552
+ ret = self.class.new
553
+ ret.clear
554
+ if @ranges[0].num == NInf
555
+ return ret
556
+ end
557
+ offset = 0
558
+ ar.each__ :eachRange do |g|
559
+ s, l = (+g).first, (+g).last
560
+ s -= offset
561
+ l -= offset
562
+ bg = nil
563
+ eachRange do |r|
564
+ a, b = r.first, r.last
565
+ bg == "a" && bg = a
566
+ clause do
567
+ if !bg
568
+ if b - a >= s
569
+ bg = a + s
570
+ redo
571
+ end
572
+ else
573
+ if b - a >= l
574
+ ret.add bg .. a + l
575
+ g.inc
576
+ s, l = (+g).first, (+g).last
577
+ s -= offset
578
+ l -= offset
579
+ bg = nil
580
+ redo
581
+ else
582
+ ret.add bg .. b
583
+ bg = "a"
584
+ end
585
+ end
586
+ offset += b - a + 1
587
+ s -= b - a + 1
588
+ l -= b - a + 1
589
+ end
590
+ end
591
+ end
592
+ ret
593
+ end
594
+ def size
595
+ sz = 0
596
+ eachRange do |r|
597
+ sz += r.last - r.first + 1
598
+ end
599
+ sz
600
+ end
601
+ def clear
602
+ @ranges.clear
603
+ end
604
+ end
605
+
606
+
@@ -0,0 +1,88 @@
1
+
2
+
3
+ require 'resolv'
4
+ require 'Yk/__hook__'
5
+ require 'thread'
6
+ require 'Yk/set'
7
+ require 'etc'
8
+ require 'fileutils'
9
+
10
+
11
+ class Resolv
12
+ RESOLVA = "#{Etc.getpwuid(Process.euid).dir}/.resolva"
13
+ if !File.exist? RESOLVA
14
+ Dir.mkdir RESOLVA
15
+ end
16
+ RESOLVA_D = "#{RESOLVA}/names"
17
+ if !File.exist? RESOLVA_D
18
+ Dir.mkdir RESOLVA_D
19
+ end
20
+ RESOLVA_N = "#{RESOLVA}/no_name"
21
+ class << Object.new
22
+ Resolv.__hook__ :getaddresses do |org|
23
+ mutex = Mutex.new
24
+ prc = Proc.new do |a, f|
25
+ lastMTime = File.mtime(f) rescue Time.at(0)
26
+ set = Set.new
27
+ if File.directory?(f)
28
+ Dir.foreach f do |ent|
29
+ next if ent == ".." || ent == "."
30
+ if File.mtime("#{f}/#{ent}") > Time.now - 3600 * 24
31
+ set.insert ent
32
+ else
33
+ File.delete "#{f}/#{ent}"
34
+ end
35
+ end
36
+ end
37
+ if lastMTime < Time.now - 180
38
+ trials = 0
39
+ mtrials = 0
40
+ ttrials = 0
41
+ newIPSet = Set.new
42
+ while mutex.synchronize{trials <= set.size * 3 && mtrials < 30 && ttrials < 100}
43
+ t = Thread.new do
44
+ Thread.pass
45
+ res = []
46
+ begin
47
+ ttrials += 1
48
+ res = org.getaddresses a
49
+ ttrials = 0
50
+ rescue Exception
51
+ end
52
+ mutex.synchronize do
53
+ newIPSet.insert *res
54
+ set.insert *res
55
+ trials += res.size
56
+ mtrials += 1
57
+ end
58
+ end
59
+ sleep 0.1
60
+ end
61
+ mutex.synchronize do
62
+ if !File.directory? f
63
+ Dir.mkdir f
64
+ end
65
+ newIPSet.each do |ip|
66
+ FileUtils.touch "#{f}/#{ip}"
67
+ end
68
+ end
69
+ FileUtils.touch f
70
+ end
71
+ set.to_a
72
+ end
73
+ nr = prc.call "asdf.aa#{rand.to_s[2..-1]}aa.com", RESOLVA_N
74
+ if org.args.size > 0
75
+ r = prc.call org.args[0], "#{RESOLVA_D}/#{org.args[0]}"
76
+ r -= nr
77
+ else
78
+ nr
79
+ end
80
+ end
81
+ Resolv.__hook__ :getaddress do |org|
82
+ rs = org.call
83
+ Resolv.getaddresses.include?(rs) ? nil : rs
84
+ end
85
+ end
86
+ end
87
+
88
+