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,244 @@
1
+ #
2
+
3
+
4
+ require 'Yk/misc_tz'
5
+
6
+
7
+ class Object
8
+ def __reraise_method_missing (name)
9
+ ex = NameError.new("undefined local variable or method `#{name}' for #{self}")
10
+ begin
11
+ raise ex
12
+ rescue NameError => e
13
+ bt = e.backtrace
14
+ bt.each_index do |i|
15
+ i = bt.size - i - 1
16
+ if bt[i] =~ /in \`method_missing\'/
17
+ bt.slice!(0..i)
18
+ break
19
+ end
20
+ end
21
+ raise
22
+ end
23
+ end
24
+ end
25
+
26
+
27
+ class Hook
28
+ class EachHook
29
+ instance_methods.each do |e|
30
+ if !["__id__", "__send__", "object_id"].include? e.to_s
31
+ undef_method e
32
+ end
33
+ end
34
+ def initialize (hook, c)
35
+ @hook = hook
36
+ @closure = c
37
+ (class << self; self; end).class_eval %{
38
+ #undef_method :initialize
39
+ def #{c.label} (*args, **opts, &bl)
40
+ newClosure = Hook::Closure.new(@closure.obj, :#{c.label}, bl, args, opts)
41
+ if @hook
42
+ @hook.call EachHook.new(@hook.prev, newClosure)
43
+ else
44
+ newClosure.call_org
45
+ end
46
+ end
47
+ def method_missing (name, *args, **opts, &bl)
48
+ obj.instance_eval do
49
+ __send__(name, *args, **opts, &bl)
50
+ end
51
+ end
52
+ }
53
+ end
54
+ def call
55
+ if @hook
56
+ @hook.call EachHook.new(@hook.prev, @closure)
57
+ else
58
+ @closure.call_org
59
+ end
60
+ end
61
+ def args
62
+ @closure.args
63
+ end
64
+ def args= (ags)
65
+ @closure.args = (ags)
66
+ end
67
+ def obj
68
+ @closure.obj
69
+ end
70
+ def obj= (o)
71
+ @closure.obj = o
72
+ end
73
+ def label
74
+ @closure.label
75
+ end
76
+ def label= (l)
77
+ @closure.label = l
78
+ end
79
+ def block
80
+ @closure.block
81
+ end
82
+ def block= (b)
83
+ @closure.block = b
84
+ end
85
+ def opts
86
+ @closure.opts
87
+ end
88
+ def opts= (o)
89
+ @closure.opts = o
90
+ end
91
+ end
92
+ attr_reader :body
93
+ attr :nxt, true
94
+ attr :prev, true
95
+ attr :label
96
+ HookList = Hash.new { |h, k| h[k] = Hash.new }
97
+ def initialize (obj, label, *largs, **lopts, &bd)
98
+ if [:initialize, :__hook__, :call, :args, :block, :obj, :opts, :label].find { |e| e.to_s == label.to_s || "#{e.to_s}=" == label.to_s }
99
+ raise ArgumentError.new("cannot hook `initialize', `hook', `call', `args', `obj', `label'")
100
+ end
101
+ @obj = obj
102
+ @label = label
103
+ @body = bd
104
+ @local_args = largs
105
+ @local_opts = lopts
106
+ if !HookList[obj].key? label
107
+ (class << obj; self; end).class_eval do
108
+ if method_defined? label
109
+ alias_method "__hk_org_#{label.to_s.underscore_escape}", label
110
+ else
111
+ if label != :method_missing
112
+ eval %{
113
+ def __hk_org_#{label.to_s.underscore_escape} (*args, **opts, &bl)
114
+ end
115
+ }
116
+ else
117
+ eval %{
118
+ def __hk_org_#{label.to_s.underscore_escape} (*args, **opts, &bl)
119
+ #__reraise_method_missing args[0]
120
+ #self.class.superclass.instance_method(label).bind(self).call(*args, **opts, &bl)
121
+ super
122
+ end
123
+ }
124
+ end
125
+ end
126
+ eval %{
127
+ def #{label} (*args, **opts, &bl)
128
+ if tmp = HookList[self][:#{label}]
129
+ tmp.createEachHook(self, :#{label}, bl, args, opts).call
130
+ else
131
+ #if :#{label} == :read and args[-1].is_a?(Hash)
132
+ # __hk_org_#{label.to_s.underscore_escape}(*args[0..-2], **args[-1], &bl)
133
+ #else
134
+ __hk_org_#{label.to_s.underscore_escape}(*args, **opts, &bl)
135
+ #end
136
+ end
137
+ end
138
+ }
139
+ end
140
+ end
141
+ @prev = HookList[obj][label]
142
+ HookList[obj][label] = self
143
+ if @prev
144
+ @prev.nxt = self
145
+ end
146
+ end
147
+ def remove
148
+ @prev.nxt = @next if @prev
149
+ @nxt.prev = @prev if @nxt
150
+ if HookList[@obj][@label] == self
151
+ HookList[@obj][@label] = @prev
152
+ end
153
+ @nxt = nil
154
+ @prev = nil
155
+ end
156
+ def call (prevEachHook)
157
+ @body.call prevEachHook, *@local_args, **@local_opts
158
+ end
159
+ class Closure
160
+ attr_accessor :obj, :label, :block, :args, :opts
161
+ def initialize (o, l, b, a, op)
162
+ @obj, @label, @block, @args, @opts = o, l, b, a, op
163
+ end
164
+ def call
165
+ @obj.method(@label).call(*@args, **@opts, &@block)
166
+ end
167
+ def call_org
168
+ @obj.method("__hk_org_#{@label.to_s.underscore_escape}").call(*@args, **@opts, &@block)
169
+ end
170
+ end
171
+ def createEachHook *all_args
172
+ if all_args[0].is_a? Closure
173
+ c = all_args[0]
174
+ else
175
+ c = Closure.new(*all_args)
176
+ end
177
+ EachHook.new(self, c)
178
+ end
179
+ class OrgProxy
180
+ instance_methods.each do |e|
181
+ if !["__id__", "__send__", "object_id"].include? e.to_s
182
+ undef_method e
183
+ end
184
+ end
185
+ def initialize (o)
186
+ @obj = o
187
+ (class << self; self; end).class_eval do
188
+ #undef_method :initialize
189
+ end
190
+ end
191
+ end
192
+ def self.createOrgProxy (*objs)
193
+ proxyList = []
194
+ objs.each do |obj|
195
+ proxy = OrgProxy.new(obj)
196
+ HookList[self].each_value do |hook|
197
+ lb = hook.label.to_s.underscore_escape
198
+ proxy.__defun__ "__org_hook_#{lb}", hook
199
+ (class << proxy; self; end).class_eval %{
200
+ def #{hook.label} (*args, **opts, &bl)
201
+ hk = __org_hook_#{lb}.createEachHook(@obj, :#{hook.label}, bl, args, opts)
202
+ hk.call
203
+ end
204
+ }
205
+ end
206
+ (class << proxy; self; end).class_eval %{
207
+ def method_missing (name, *args, **opts, &bl)
208
+ @obj.instance_eval do
209
+ if respond_to?(tmp = "__hk_org_" +name.to_s.underscore_escape)
210
+ method(tmp).call(*args, **opts, &bl)
211
+ else
212
+ method(name).call(*args, **opts, &bl)
213
+ end
214
+ end
215
+ end
216
+ }
217
+ proxyList.push proxy
218
+ end
219
+ proxyList
220
+ end
221
+ end
222
+
223
+
224
+ class Object
225
+ def __hook__ (label, *local_args, **local_opts, &bd)
226
+ Hook.new(self, label, *local_args, **local_opts, &bd)
227
+ end
228
+ def __hook_group (*objList)
229
+ if objList.size == 0
230
+ ret = *Hook.createOrgProxy(self)
231
+ else
232
+ ret = *Hook.createOrgProxy(*objList)
233
+ end
234
+ if block_given?
235
+ yield ret
236
+ else
237
+ ret
238
+ end
239
+ end
240
+ end
241
+
242
+
243
+
244
+
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ require 'delegate'
5
+
6
+ class MaxMin
7
+ def initialize (item = nil)
8
+ @item = item
9
+ end
10
+ def min= (item)
11
+ if item != nil
12
+ if @item != nil
13
+ if @item > item
14
+ @item = item
15
+ end
16
+ else
17
+ @item = item
18
+ end
19
+ end
20
+ end
21
+ def max= (item)
22
+ if item != nil
23
+ if @item != nil
24
+ if @item < item
25
+ @item = item
26
+ end
27
+ else
28
+ @item = item
29
+ end
30
+ end
31
+ end
32
+ def min
33
+ @item
34
+ end
35
+ def max
36
+ @item
37
+ end
38
+ def self.[] (a, b)
39
+ if a < b
40
+ [b, a]
41
+ else
42
+ [a, b]
43
+ end
44
+ end
45
+ end
46
+
47
+
48
+ class MinMax < MaxMin
49
+ def self.[] (a, b)
50
+ if a > b
51
+ [b, a]
52
+ else
53
+ [a, b]
54
+ end
55
+ end
56
+ end
57
+
58
+ class MinMax__ < Delegator
59
+ def initialize (arg = nil)
60
+ if arg != nil
61
+ super arg
62
+ @__inited__ = true
63
+ __setobj__(arg)
64
+ else
65
+ @__inited__ = false
66
+ end
67
+ end
68
+ def __getobj__
69
+ @__obj__
70
+ end
71
+ def __setobj__ (arg)
72
+ @__obj__ = arg
73
+ end
74
+ def __min__= (arg)
75
+ if arg == nil
76
+ return self
77
+ end
78
+ if !@__inited__
79
+ initialize(arg)
80
+ elsif arg < self
81
+ __setobj__(arg)
82
+ end
83
+ self
84
+ end
85
+ def __max__= (arg)
86
+ if arg == nil
87
+ return self
88
+ end
89
+ if !@__inited__
90
+ initialize(arg)
91
+ elsif arg > self
92
+ __setobj__(arg)
93
+ end
94
+ self
95
+ end
96
+ def __min__
97
+ @__obj__
98
+ end
99
+ def __max__
100
+ @__obj__
101
+ end
102
+ def __obj__
103
+ @__obj__
104
+ end
105
+ def coerce (other)
106
+ [other, @__obj__]
107
+ end
108
+ end
109
+
110
+
111
+ if __FILE__ == $PROGRAM_NAME
112
+ t = MinMax__.new
113
+ t.__min__ = 1
114
+ t.__min__ = -1
115
+ p t
116
+ t2 = MinMax__.new
117
+ t2.__max__ = "abc"
118
+ t2.__max__ = "a"
119
+ t2.__max__ = "z"
120
+ p t2
121
+ end
122
+
123
+
@@ -0,0 +1,329 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'tempfile'
4
+ require 'syslog'
5
+ require 'Yk/file_aux'
6
+ require 'Yk/__defun__'
7
+
8
+
9
+ module Syslog
10
+ alias :org_open :open
11
+ def open
12
+ if !Syslog.opened?
13
+ Syslog.org_open
14
+ end
15
+ end
16
+ module_function :open, :org_open
17
+ end
18
+
19
+
20
+ Syslog.open
21
+
22
+
23
+
24
+ class Stdlog
25
+ stdoutLog = true
26
+ stdoutDrt = true
27
+ UseConsole = !ENV['STDLOG_NO_CONSOLE']
28
+ if ENV['STDLOG_STDOUT_NOT_TTY'] || !STDOUT.tty?
29
+ ENV['STDLOG_STDOUT_NOT_TTY'] = "1"
30
+ if ENV['STDLOG_NO_CONSOLE']
31
+ stdoutLog = true
32
+ stdoutDrt = false
33
+ else
34
+ stdoutLog = false
35
+ stdoutDrt = true
36
+ end
37
+ end
38
+ StdoutLog = stdoutLog
39
+ StdoutDrt = stdoutDrt
40
+ def Stdlog.stdlogFunc
41
+ ENV["STDLOG_FUNC"]
42
+ end
43
+ def Stdlog.errlogFunc
44
+ ENV["ERRLOG_FUNC"]
45
+ end
46
+ class Piper
47
+ attr :fw
48
+ def initialize (&bl)
49
+ @fr, @fw = IO.pipe
50
+ init_pid = $$.to_s
51
+ @fr.sync = true
52
+ closed = false
53
+ r = rand.to_s[2..-1]
54
+ t = Thread.new do
55
+ Thread.pass
56
+ @fr.each_line do |ln|
57
+ if ln != "#{r}\n"
58
+ bl.call ln
59
+ else
60
+ @fr.close
61
+ break
62
+ end
63
+ end
64
+ end
65
+ @finalizer = Proc.new do |mode|
66
+ if init_pid == $$.to_s && !closed
67
+ closed = true
68
+ @fw.write "#{r}\n"
69
+ if mode != true
70
+ @fr.each_line do |ln|
71
+ if ln == "#{r}\n"
72
+ break
73
+ end
74
+ bl.call ln
75
+ end
76
+ end
77
+ end
78
+ end
79
+ ObjectSpace.define_finalizer t, @finalizer
80
+ end
81
+
82
+
83
+ def close
84
+ @finalizer.call true
85
+ @fw.close
86
+ end
87
+
88
+ end
89
+
90
+ class Pipeback < Piper
91
+ attr :org
92
+ def initialize (fd, drt = nil)
93
+ drt ||= fd.dup
94
+ @org = fd.dup
95
+ prc = Proc.new do |ln|
96
+ yield ln, drt
97
+ end
98
+ super &prc
99
+ fd.reopen fw
100
+ fd.__defun__ :direct do
101
+ drt
102
+ end
103
+ fd.__defun__ :restore do
104
+ fd.reopen @org
105
+ end
106
+ @org
107
+ end
108
+ end
109
+
110
+ class Bypass < Piper
111
+ def initialize (evsym, out)
112
+ prc = Proc.new do |ln|
113
+ out.write ln
114
+ end
115
+ super &prc
116
+ ENV[evsym] = fw.fileno.to_s
117
+ end
118
+ end
119
+
120
+ def Stdlog.prefix (prog = "", str = "")
121
+ require 'Yk/misc_tz'
122
+ progStr = (@@prefixProgs + [prog]).cond_join(":", "(parent = {})")
123
+ nameStr = (@@prefixNames + [str]).prefix_cond_join(":")
124
+ [progStr, nameStr].prefix_cond_join(" ")
125
+ end
126
+
127
+ def Stdlog.logerr (arg)
128
+ arg = arg.chomp
129
+ arg = arg.gsub /\n/, " "
130
+ arg = arg.gsub /\t/, " "
131
+ if errlogFunc
132
+ i = 0
133
+ cur = arg[i ... i + 80]
134
+ while true
135
+ if i != 0
136
+ body = "(__debug__errlog__) " + cur
137
+ else
138
+ body = "(__debug__errlog__) (__d_first)" + cur
139
+ end
140
+ i += 80
141
+ cur = arg[i ... i + 80]
142
+ if cur
143
+ tail = "(__d_cont)\n"
144
+ Syslog.err body + tail
145
+ else
146
+ tail = "\n"
147
+ Syslog.err body + tail
148
+ break
149
+ end
150
+ end
151
+ else
152
+ Syslog.err arg
153
+ end
154
+ end
155
+
156
+ def Stdlog.main
157
+ psf, psf = "", ""
158
+ if ENV['STDLOG_PARENT'] != nil && ENV['STDLOG_PARENT'] =~ /::/
159
+ pre = $`
160
+ post = $'
161
+ if pre && pre != ""
162
+ @@prefixNames = pre.split /:/
163
+ else
164
+ @@prefixNames = []
165
+ end
166
+ if post && post != ""
167
+ @@prefixProgs = post.split /:/
168
+ else
169
+ @@prefixProgs = []
170
+ end
171
+ else
172
+ @@prefixNames = []
173
+ @@prefixProgs = []
174
+ end
175
+ if ENV['RUBYOPT'] == nil || ENV['RUBYOPT'] !~ /(^|\s)\-rtz\/__stdlog\.rb\b/
176
+ ENV['RUBYOPT'] = (ENV['RUBYOPT'] || "") + " -rtz/__stdlog.rb "
177
+ Pipeback.new STDOUT do |ln1, direct1|
178
+ direct1.write ln1 if StdoutDrt
179
+ Syslog.info prefix + ln1 if StdoutLog && stdlogFunc
180
+ end
181
+ @@stdoutm = Bypass.new('STDLOG_STDOUT_DIRECT', STDOUT.direct).fw
182
+ Pipeback.new STDERR do |ln2, direct2|
183
+ direct2.write ln2 if UseConsole
184
+ logerr prefix + ln2
185
+ end
186
+ @@stderrm = Bypass.new('STDLOG_STDERR_DIRECT', STDERR.direct).fw
187
+ else
188
+ if !defined? @@stdoutm
189
+ @@stdoutm = (IO.open(ENV['STDLOG_STDOUT_DIRECT'].to_i) rescue return)
190
+ end
191
+ if !defined? @@stderrm
192
+ @@stderrm = (IO.open(ENV['STDLOG_STDERR_DIRECT'].to_i) rescue return)
193
+ end
194
+ Pipeback.new STDOUT, @@stdoutm do |ln3, direct3|
195
+ direct3.write ln3 if StdoutDrt
196
+ Syslog.info prefix + ln3 if StdoutLog && stdlogFunc
197
+ end
198
+ Pipeback.new STDERR, @@stderrm do |ln4, direct4|
199
+ direct4.write ln4 if UseConsole
200
+ logerr prefix + ln4
201
+ end
202
+ end
203
+
204
+ end
205
+ end
206
+
207
+ Stdlog.main
208
+
209
+ alias :org_fork :fork
210
+ alias :org_exec :exec
211
+
212
+ def ___setParent (prc, prefix = nil)
213
+ if ENV['STDLOG_PARENT'] && ENV['STDLOG_PARENT'] =~ /::/
214
+ pre, post = $`, $'
215
+ parents = (post != "" && post != nil) ? post.split(/:/) : []
216
+ prefixes = (pre != "" && pre != nil) ? pre.split(/:/) : []
217
+ else
218
+ prefixes = []
219
+ parents = []
220
+ end
221
+ parents.push "#{$0}[#{prc.to_s}]"
222
+ if prefix != nil && prefix.strip != ""
223
+ prefixes.unshift prefix
224
+ end
225
+ ENV['STDLOG_PARENT'] = prefixes.join(":") + "::" + parents.join(":")
226
+ end
227
+
228
+ def fork
229
+ parent = $$.to_s
230
+ if block_given?
231
+ ret = org_fork do
232
+ ___setParent parent
233
+ Stdlog.main
234
+ yield
235
+ end
236
+ ret
237
+ else
238
+ ret = org_fork
239
+ if ret == nil
240
+ ___setParent parent
241
+ Stdlog.main
242
+ end
243
+ ret
244
+ end
245
+ end
246
+
247
+ alias :system_org :system
248
+ def system (*args)
249
+ all_prefix = ""
250
+ apx = ""
251
+ if String === args[0]
252
+ if args[0] =~ /^prefix:/
253
+ all_prefix = $'.strip
254
+ apx = all_prefix + ": "
255
+ args.shift
256
+ end
257
+ end
258
+ child_prefix = nil
259
+ piper1 = Stdlog::Piper.new do |ln|
260
+ while child_prefix == nil
261
+ sleep 0.1
262
+ end
263
+ STDOUT.direct.write ln if Stdlog::StdoutDrt
264
+ Syslog.info Stdlog.prefix + child_prefix + apx + ln if Stdlog::StdoutLog&& Stdlog::stdlogFunc
265
+ end
266
+ piper2 = Stdlog::Piper.new do |ln|
267
+ while child_prefix == nil
268
+ sleep 0.1
269
+ end
270
+ STDERR.direct.write ln if Stdlog::UseConsole
271
+ Stdlog.logerr(Stdlog.prefix + child_prefix + apx + ln)
272
+ end
273
+ parent = $$.to_s
274
+ pid = org_fork do
275
+ STDOUT.reopen piper1.fw
276
+ STDERR.reopen piper2.fw
277
+ ___setParent parent, all_prefix
278
+ if !exec *args
279
+ exit 1
280
+ end
281
+ end
282
+ if Array === args[0]
283
+ child_prefix = args[0][0] + "[#{pid}]: "
284
+ else
285
+ child_prefix = args[0].strip.split(/\s+/)[0] + "[#{pid}]: "
286
+ end
287
+ ret = Process.waitpid2(pid)[1].exitstatus == 0
288
+ piper1.close
289
+ piper2.close
290
+ ret
291
+ end
292
+
293
+
294
+ def exec (*args)
295
+ STDERR.flush
296
+ STDOUT.flush
297
+ if STDERR.respond_to? :restore
298
+ STDERR.restore
299
+ end
300
+ if STDOUT.respond_to? :restore
301
+ STDOUT.restore
302
+ end
303
+ org_exec *args
304
+ end
305
+
306
+
307
+ if File.basename($0) == File.basename(__FILE__)
308
+ 2.times do
309
+ STDERR.write "err\n"
310
+ end
311
+ 2.times do
312
+ STDOUT.write "out\n"
313
+ end
314
+ p "aa"
315
+ system "prefix: test", "ruby -e 'STDOUT.write(\"testout\\n\"); STDERR.write(\"testerr\\n\");'"
316
+ system "prefix: test2", "echo stdout; echo $RUBYOPT >&2"
317
+
318
+ def pp
319
+
320
+ sdddfags
321
+ end
322
+ def xd
323
+ pp
324
+ end
325
+ xd
326
+ sleep 10
327
+ end
328
+
329
+