YkLib 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,314 @@
1
+ #
2
+
3
+
4
+ require 'time'
5
+ require 'Yk/misc_tz'
6
+ require 'Yk/path_aux'
7
+ require 'Yk/shellquote'
8
+
9
+
10
+ INTPRLIST = ["/bin/sh", "/bin/ruby", "/bin/bash", "/usr/bin/bash", "/usr/bin/python", "/usr/bin/ruby", "/usr/bin/supervise" ]
11
+
12
+ class ProcInfo
13
+ private
14
+ class HashArr < Hash
15
+ def insert (k, item)
16
+ (self[k] ||= []).push item
17
+ end
18
+ end
19
+ class ProcElem
20
+ attr :pid
21
+ attr :ppid
22
+ attr :prog
23
+ attr :parent, true
24
+ attr :interpreter
25
+ attr :interpreterBase
26
+ attr :startTime
27
+ attr :args
28
+ attr :cmdline
29
+ attr :cwd
30
+ def exe
31
+ @prog
32
+ end
33
+ if CYGWIN
34
+ @@timebase = Time.now.to_f - "/proc/uptime".read.split[0].to_i
35
+ else
36
+ @@timebase = `cat /proc/stat`.each_line{|e| break(e) if e =~ /^btime\s+/ }.split[1].to_i
37
+ end
38
+ if CYGWIN
39
+ JiffiesRatio = 1000.0
40
+ else
41
+ JiffiesRatio = 100.0
42
+ end
43
+ def kill (sig = :TERM)
44
+ Process.kill sig, pid
45
+ end
46
+ def infoDir
47
+ "/proc/#{@pid}"
48
+ end
49
+ @@allList = Hash.new
50
+ def parent
51
+ @parent ||= @ppid != 0 && self.class.new(@ppid)
52
+ end
53
+ def initialize (pid)
54
+ @pid = pid
55
+ @ppid = (statArr = (infoDir / "stat").read.split)[3].to_i
56
+ @args = (carr = (infoDir / "cmdline")._?._rf?.read.split("\0"))[1..-1].__it
57
+ @cmdline = carr.__and?.condSQuote.__it
58
+ if (infoDir / "exe").exist?
59
+ @prog = (infoDir / "exe").readlink.chomp rescue nil
60
+ end
61
+ @cwd = (infoDir / "cwd").readlink.chomp rescue nil
62
+ @_startTime = statArr[21].to_i;
63
+ @startTime = Time.at(@@timebase + (@_startTime / JiffiesRatio))
64
+ if INTPRLIST.include?(@prog)
65
+ @interpreter = @prog
66
+ if tmp = @args.each_index{ |i| @args[i][0] != ?- && (tmp = @args.delete_at(i); break(tmp)) }
67
+ if tmp.is_a?(String)
68
+ if tmp.relative?
69
+ @prog = (@cwd / tmp).normalize_path
70
+ else
71
+ @prog = tmp
72
+ end
73
+ end
74
+ end
75
+ end
76
+ @@allList[pid] = self
77
+ end
78
+ def setProcessStatus ps
79
+ @processStatus = ps
80
+ end
81
+ def exited?
82
+ @processStatus && @processStatus.exited?
83
+ end
84
+ def exitstatus
85
+ @processStatus && @processStatus.exitstatus
86
+ end
87
+ def env
88
+ if !@env
89
+ @env = Hash.new
90
+ arr = (infoDir / "environ").read.split("\0")
91
+ arr.each do |e|
92
+ if e =~ /\=/
93
+ @env[$`] = $'
94
+ end
95
+ end
96
+ @env
97
+ else
98
+ @env
99
+ end
100
+ end
101
+ def children
102
+ if !@children
103
+ @children = []
104
+ "/proc".each_entry do |f|
105
+ if f.basename =~ /^(\d+)$/ && f._d? && (f / "environ")._rf?
106
+ if (f / "stat").read.split[3].to_i == @pid
107
+ @children.push ProcElem.new($1.to_i)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ @children
113
+ end
114
+ def alive?
115
+ infoDir.exist? && ((tmp = (infoDir / "stat").read.split)[21].to_i == @_startTime) && tmp[2] != "Z"
116
+ end
117
+ def zombie?
118
+ infoDir.exist? && ((tmp = (infoDir / "stat").read.split)[21].to_i == @_startTime) && tmp[2] == "Z"
119
+ end
120
+ def isProg? expr, match
121
+ begin
122
+ res = false
123
+ if @prog == expr
124
+ res = begin
125
+ case match
126
+ when nil
127
+ true
128
+ when Regexp
129
+ args.find{ |e| e =~ match }
130
+ else
131
+ args.find{ |e| e.include?(match.to_s) }
132
+ end
133
+ end
134
+ end
135
+ res
136
+ rescue
137
+ false
138
+ end
139
+ end
140
+ def file? (f)
141
+ each_file do |g|
142
+ if g == f
143
+ return true
144
+ end
145
+ end
146
+ return false
147
+ end
148
+ def each_file
149
+ begin
150
+ (infoDir / "fd").each_entry do |e|
151
+ begin
152
+ if e.basename =~ /^\d+$/ && e.symlink?
153
+ yield e.readlink
154
+ end
155
+ rescue Errno::ENOENT
156
+ rescue Errno::EACCES
157
+ end
158
+ end
159
+ rescue Errno::ENOENT
160
+ rescue Errno::EACCES
161
+ end
162
+ return false
163
+ end
164
+ def close_files (*args)
165
+ if args.size == 0
166
+ (infoDir / "fd").each_entry do |e|
167
+ if e.basename =~ /^\d+$/ && e.symlink?
168
+ if (fd = $&.to_i) != 0 && fd != 1 && fd != 2
169
+ begin
170
+ IO.for_fd(fd).close
171
+ rescue Errno::EBADF
172
+ STDERR.write "cannot close #{e.readlink}(#{fd})\n"
173
+ end
174
+ end
175
+ end
176
+ end
177
+ else
178
+ (infoDir / "fd").each_entry do |e|
179
+ if e.basename =~ /^\d+$/ && e.symlink? && args.include?(e)
180
+ IO.for_fd($&.to_i).close
181
+ else
182
+ STDERR.write "#{__FILE__}:#{__LINE__}: cannot close #{e}\n"
183
+ end
184
+ end
185
+ end
186
+ end
187
+ def kill (sig)
188
+ Process.kill sig, pid
189
+ end
190
+ def term_or_kill tmout = 2
191
+ Process.kill(:TERM, pid) rescue return(false)
192
+ cnt = 0
193
+ while true
194
+ sleep 0.1
195
+ if !alive?
196
+ return true
197
+ else
198
+ cnt += 1
199
+ if cnt > tmout * 10
200
+ Process.kill(:KILL, pid) rescue return(false)
201
+ return true
202
+ end
203
+ end
204
+ end
205
+ end
206
+ def self.allList
207
+ @@allList
208
+ end
209
+ def waitTerm cnt, step = 1
210
+ waitUntil(cnt, step){!alive?}
211
+ end
212
+ end
213
+ public
214
+ def self.parent
215
+ self.current.parent
216
+ end
217
+ def self.prog (expr, match = nil)
218
+ procList = []
219
+ "/proc".each_entry do |f|
220
+ if f.directory? && f.basename =~ /^\d+$/ && (f / "environ")._rf?
221
+ begin
222
+ pElem = ProcElem.new $&.to_i
223
+ if pElem.isProg? expr, match
224
+ procList.push pElem
225
+ end
226
+ rescue Exception => e
227
+ end
228
+ end
229
+ end
230
+ procList
231
+ end
232
+ def self.waitProg (*args)
233
+ nargs = []
234
+ pargs = []
235
+ args.each do |e|
236
+ if e.is_a? Numeric
237
+ nargs.push e
238
+ else
239
+ pargs.push e
240
+ end
241
+ end
242
+ pres = nil
243
+ res = waitUntil *nargs do
244
+ pres = prog *pargs
245
+ pres.size > 0
246
+ end
247
+ if res
248
+ pres[0]
249
+ else
250
+ res
251
+ end
252
+ end
253
+ def self.pid (id)
254
+ begin
255
+ ret = ProcElem.new(id.to_i)
256
+ rescue
257
+ ret = nil
258
+ end
259
+ ret
260
+ end
261
+ def self.current
262
+ pid($$.to_i)
263
+ end
264
+ def self.findParent (a, m = nil)
265
+ pe = ProcElem.new($$.to_i)
266
+ while true
267
+ if pe.isProg?(a, m)
268
+ return pe
269
+ elsif pe.pid == 1
270
+ return nil
271
+ else
272
+ begin
273
+ pe = ProcElem.new(pe.ppid)
274
+ rescue
275
+ return nil
276
+ end
277
+ end
278
+ end
279
+ end
280
+ def self.each
281
+ "/proc".each_entry do |d|
282
+ if d._d? && d.basename =~ /^\d+$/ && (d / "environ")._rf?
283
+ yield ProcElem.new(d.basename.to_i)
284
+ end
285
+ end
286
+ end
287
+ def self.trapChild
288
+ trap :CHLD do
289
+ pid, ps = Process.wait2
290
+ ProcElem.allList[pid] && ProcElem.allList[pid].setProcessStatus(ps)
291
+ end
292
+ end
293
+ end
294
+
295
+
296
+ class String
297
+ def procInfo (prg = nil)
298
+ if exist?
299
+ info = ProcInfo.pid(read.strip_comment.to_i)
300
+ if info && info.prog == prg
301
+ return info
302
+ end
303
+ end
304
+ return nil
305
+ end
306
+ def openingProcInfo
307
+ ret = []
308
+ %W{/usr/sbin/lsof #{self}}.read_each_line_p do |ln|
309
+ ret.push ProcInfo.pid(ln.strip[1].to_i)
310
+ end
311
+ ret
312
+ end
313
+ end
314
+