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,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
+