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.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +34 -0
- data/LICENSE.txt +21 -0
- data/README.md +44 -0
- data/Rakefile +6 -0
- data/YkLib.gemspec +29 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/YkLib/Yk/__advance__.rb +151 -0
- data/lib/YkLib/Yk/__defun__.rb +44 -0
- data/lib/YkLib/Yk/__hook__.rb +244 -0
- data/lib/YkLib/Yk/__minmax__.rb +123 -0
- data/lib/YkLib/Yk/__stdlog.rb +329 -0
- data/lib/YkLib/Yk/adhocLiterals/email.rb +119 -0
- data/lib/YkLib/Yk/adhocLiterals/path.rb +402 -0
- data/lib/YkLib/Yk/adhocLiterals/tag.rb +19 -0
- data/lib/YkLib/Yk/adhocLiterals/url.rb +36 -0
- data/lib/YkLib/Yk/adhocLiterals.rb +199 -0
- data/lib/YkLib/Yk/auto_escseq.rb +5 -0
- data/lib/YkLib/Yk/auto_pstore.rb +179 -0
- data/lib/YkLib/Yk/bsearch.rb +120 -0
- data/lib/YkLib/Yk/clambda.rb +309 -0
- data/lib/YkLib/Yk/confLine.rb +423 -0
- data/lib/YkLib/Yk/create_tty_width_available.rb +24 -0
- data/lib/YkLib/Yk/crypt.rb +26 -0
- data/lib/YkLib/Yk/debug2 +1 -0
- data/lib/YkLib/Yk/debug2.rb +473 -0
- data/lib/YkLib/Yk/debugout.rb +139 -0
- data/lib/YkLib/Yk/email_tz.rb +533 -0
- data/lib/YkLib/Yk/enum_expect.rb +170 -0
- data/lib/YkLib/Yk/errlog.rb +5 -0
- data/lib/YkLib/Yk/escseq.rb +59 -0
- data/lib/YkLib/Yk/eval_alt.rb +281 -0
- data/lib/YkLib/Yk/expector.rb +93 -0
- data/lib/YkLib/Yk/fetch.rb +556 -0
- data/lib/YkLib/Yk/fetch_old.rb +290 -0
- data/lib/YkLib/Yk/fib.rb +158 -0
- data/lib/YkLib/Yk/file_aux.rb +843 -0
- data/lib/YkLib/Yk/file_aux2.rb +919 -0
- data/lib/YkLib/Yk/file_aux_old.rb +160 -0
- data/lib/YkLib/Yk/filemod.rb +19 -0
- data/lib/YkLib/Yk/force_escseq.rb +3 -0
- data/lib/YkLib/Yk/generator__.rb +144 -0
- data/lib/YkLib/Yk/generator__.rb.org +139 -0
- data/lib/YkLib/Yk/indenter/argless_case.rb +46 -0
- data/lib/YkLib/Yk/indenter/each_token.rb +671 -0
- data/lib/YkLib/Yk/indenter/free_case.rb +313 -0
- data/lib/YkLib/Yk/indenter/if_less.rb +53 -0
- data/lib/YkLib/Yk/indenter/independent_ensure.rb +23 -0
- data/lib/YkLib/Yk/indenter/independent_rescue.rb +23 -0
- data/lib/YkLib/Yk/indenter/operand_circumflex.rb +0 -0
- data/lib/YkLib/Yk/indenter/operand_period.rb +16 -0
- data/lib/YkLib/Yk/indenter/parenless_and.rb +37 -0
- data/lib/YkLib/Yk/indenter/post_test.rb +48 -0
- data/lib/YkLib/Yk/indenter/token.rb +1525 -0
- data/lib/YkLib/Yk/indenter.rb +1382 -0
- data/lib/YkLib/Yk/inot.rb +265 -0
- data/lib/YkLib/Yk/intf.rb +815 -0
- data/lib/YkLib/Yk/io_aux.rb +1332 -0
- data/lib/YkLib/Yk/ioctl.rb +60 -0
- data/lib/YkLib/Yk/ipcc.rb +87 -0
- data/lib/YkLib/Yk/ipcountry.rb +207 -0
- data/lib/YkLib/Yk/ipv4adr.rb +318 -0
- data/lib/YkLib/Yk/localmail.rb +276 -0
- data/lib/YkLib/Yk/method_chain.rb +359 -0
- data/lib/YkLib/Yk/misc_tz.rb +1716 -0
- data/lib/YkLib/Yk/missing_method.rb +50 -0
- data/lib/YkLib/Yk/mojiConv.rb +257 -0
- data/lib/YkLib/Yk/nostdlog.rb +4 -0
- data/lib/YkLib/Yk/on_marshal.rb +20 -0
- data/lib/YkLib/Yk/overrider.rb +47 -0
- data/lib/YkLib/Yk/path.rb +293 -0
- data/lib/YkLib/Yk/path_aux.rb +883 -0
- data/lib/YkLib/Yk/path_aux_alt.rb +0 -0
- data/lib/YkLib/Yk/path_rep.rb +1267 -0
- data/lib/YkLib/Yk/pg_setup.rb +917 -0
- data/lib/YkLib/Yk/procinfo.rb +314 -0
- data/lib/YkLib/Yk/proclist.rb +492 -0
- data/lib/YkLib/Yk/property.rb +863 -0
- data/lib/YkLib/Yk/ranger.rb +606 -0
- data/lib/YkLib/Yk/resolv_tz.rb +88 -0
- data/lib/YkLib/Yk/rlprompt.rb +73 -0
- data/lib/YkLib/Yk/rootexec.rb +48 -0
- data/lib/YkLib/Yk/rpm-packageproxy.rb +784 -0
- data/lib/YkLib/Yk/rpm-packageproxy2.rb +1430 -0
- data/lib/YkLib/Yk/rwhen.rb +21 -0
- data/lib/YkLib/Yk/selector.rb +124 -0
- data/lib/YkLib/Yk/set.rb +170 -0
- data/lib/YkLib/Yk/shellquote.rb +300 -0
- data/lib/YkLib/Yk/sio.rb +1001 -0
- data/lib/YkLib/Yk/sio0.rb +835 -0
- data/lib/YkLib/Yk/sio_aux.rb +1524 -0
- data/lib/YkLib/Yk/sio_inot.rb +86 -0
- data/lib/YkLib/Yk/sock_aux.rb +42 -0
- data/lib/YkLib/Yk/spipe.rb +843 -0
- data/lib/YkLib/Yk/sql_table.rb +565 -0
- data/lib/YkLib/Yk/stdlog.rb +4 -0
- data/lib/YkLib/Yk/syscommand.rb +173 -0
- data/lib/YkLib/Yk/sysinit.rb +75 -0
- data/lib/YkLib/Yk/ttyFontWidth.rb +46113 -0
- data/lib/YkLib/Yk/tty_char.dump +0 -0
- data/lib/YkLib/Yk/tty_char.rb +47 -0
- data/lib/YkLib/Yk/tty_char_create.rb +437031 -0
- data/lib/YkLib/Yk/tty_char_static.rb +437016 -0
- data/lib/YkLib/Yk/tty_rewrite.rb +142 -0
- data/lib/YkLib/Yk/tty_str.rb +461 -0
- data/lib/YkLib/Yk/tty_width.dat.rb +114 -0
- data/lib/YkLib/Yk/tty_width.rb +180 -0
- data/lib/YkLib/Yk/tty_width_available +569 -0
- data/lib/YkLib/Yk/tty_width_list +0 -0
- data/lib/YkLib/Yk/tty_width_list.linux +280 -0
- data/lib/YkLib/Yk/tty_width_list.windows +324 -0
- data/lib/YkLib/Yk/tz_tty +0 -0
- data/lib/YkLib/Yk/tz_tty.rb +0 -0
- data/lib/YkLib/Yk/uprepos.rb +94 -0
- data/lib/YkLib/Yk/userinfo.rb +91 -0
- data/lib/YkLib/Yk/with.rb +109 -0
- data/lib/YkLib/version.rb +3 -0
- data/lib/YkLib.rb +6 -0
- metadata +170 -0
|
@@ -0,0 +1,919 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
require 'pathname'
|
|
5
|
+
require 'Yk/__defun__'
|
|
6
|
+
require 'Yk/__hook__'
|
|
7
|
+
require 'Yk/io_aux'
|
|
8
|
+
begin
|
|
9
|
+
require 'tpty'
|
|
10
|
+
rescue LoadError
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
(class << File; self; end).class_eval do
|
|
15
|
+
alias_method :__org_open_____, :open
|
|
16
|
+
at_exit do
|
|
17
|
+
FileUtils.rm_rf "#{ENV['HOME']}/.tmp/#{File.basename($0)}/instances/#{$$}"
|
|
18
|
+
FileUtils.rmdir("#{ENV['HOME']}/.tmp/#{File.basename($0)}/instances") rescue ""
|
|
19
|
+
FileUtils.rmdir("#{ENV['HOME']}/.tmp/#{File.basename($0)}") rescue ""
|
|
20
|
+
end
|
|
21
|
+
def open (f, mode = "r", perm = nil)
|
|
22
|
+
if f == ""
|
|
23
|
+
if !File.exist? "#{ENV['HOME']}/.tmp/#{File.basename($0)}/instances/#{$$}"
|
|
24
|
+
File.mkpath "#{ENV['HOME']}/.tmp/#{File.basename($0)}/instances/#{$$}"
|
|
25
|
+
end
|
|
26
|
+
f.replace("#{ENV['HOME']}/.tmp/#{File.basename($0)}/instances/#{$$}/tmp.#{rand(10000000000).to_s}")
|
|
27
|
+
tmode = true
|
|
28
|
+
fmode.delete = true
|
|
29
|
+
end
|
|
30
|
+
res = nil
|
|
31
|
+
fmode = mode.to_fmode
|
|
32
|
+
pid = nil
|
|
33
|
+
handleIO = Proc.new do |h|
|
|
34
|
+
pid && h.__defun__(:pid, pid)
|
|
35
|
+
if block_given?
|
|
36
|
+
begin
|
|
37
|
+
res = yield h
|
|
38
|
+
ensure
|
|
39
|
+
h.closed? || h.close
|
|
40
|
+
if pid
|
|
41
|
+
begin
|
|
42
|
+
Process.waitpid pid
|
|
43
|
+
rescue => e
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
if pid
|
|
48
|
+
res = !$?.exitstatus ? nil : res
|
|
49
|
+
else
|
|
50
|
+
res
|
|
51
|
+
end
|
|
52
|
+
else
|
|
53
|
+
res = h
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
fp = nil
|
|
57
|
+
doProg = Proc.new do |cmdLine|
|
|
58
|
+
if fmode.sys?
|
|
59
|
+
raise ArgumentError.new("cannot use popen with sysopen")
|
|
60
|
+
end
|
|
61
|
+
if !fmode.terminal?
|
|
62
|
+
fp, ff = nil
|
|
63
|
+
if fmode.readable? && fmode.writable?
|
|
64
|
+
fr, fout = IO.pipe
|
|
65
|
+
pid = fork do
|
|
66
|
+
fr.close
|
|
67
|
+
fw.close
|
|
68
|
+
STDIN.reopen fin
|
|
69
|
+
fmode.stdout? && STDOUT.reopen(fout)
|
|
70
|
+
fmode.stdout? && STDERR.reopen(fout)
|
|
71
|
+
exec *cmdLine
|
|
72
|
+
end
|
|
73
|
+
fin.close
|
|
74
|
+
fout.close
|
|
75
|
+
fr.set_write_io fw
|
|
76
|
+
fp = fr
|
|
77
|
+
else
|
|
78
|
+
fr, fw = IO.pipe
|
|
79
|
+
fcs = []
|
|
80
|
+
if fmode.writable?
|
|
81
|
+
fp, ff = fw, fr
|
|
82
|
+
fcs.push STDIN
|
|
83
|
+
else
|
|
84
|
+
fp, ff = fr, fw
|
|
85
|
+
fmode.stdout? && fcs.push(STDOUT)
|
|
86
|
+
fmode.stderr? && fcs.push(STDERR)
|
|
87
|
+
end
|
|
88
|
+
#fr.nonblock = true
|
|
89
|
+
#fw.nonblock = true
|
|
90
|
+
pid = fork do
|
|
91
|
+
fp.close
|
|
92
|
+
fcs.each do |fc|
|
|
93
|
+
fc.reopen ff
|
|
94
|
+
end
|
|
95
|
+
ff.close
|
|
96
|
+
exec *cmdLine
|
|
97
|
+
end
|
|
98
|
+
ff.close
|
|
99
|
+
end
|
|
100
|
+
handleIO.call fp
|
|
101
|
+
else
|
|
102
|
+
p
|
|
103
|
+
fp = nil
|
|
104
|
+
pty = TPty.new
|
|
105
|
+
if !pty || !(fp = pty.master)
|
|
106
|
+
p pty
|
|
107
|
+
Exception.new("cannot allocate pseudo tty")
|
|
108
|
+
end
|
|
109
|
+
p
|
|
110
|
+
fq = pty.slave
|
|
111
|
+
p fp
|
|
112
|
+
fp.set_raw
|
|
113
|
+
p
|
|
114
|
+
pid = fork do
|
|
115
|
+
p
|
|
116
|
+
Process.setsid
|
|
117
|
+
#Process.setpgrp
|
|
118
|
+
fqFile = "/proc/#{$$}/fd/#{pty.slave.to_i}".readlink
|
|
119
|
+
fq.reopen fqFile
|
|
120
|
+
STDIN.reopen fq
|
|
121
|
+
STDOUT.reopen fq
|
|
122
|
+
STDERR.reopen fq
|
|
123
|
+
fq.close
|
|
124
|
+
fp.close
|
|
125
|
+
p
|
|
126
|
+
exec *cmdLine
|
|
127
|
+
p :failed
|
|
128
|
+
end
|
|
129
|
+
p pid
|
|
130
|
+
fq.close
|
|
131
|
+
trap :WINCH do
|
|
132
|
+
end
|
|
133
|
+
handleIO.call fp
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
if f.is_a? Array
|
|
137
|
+
doProg.call f
|
|
138
|
+
elsif f.is_a? String
|
|
139
|
+
f = f.clone
|
|
140
|
+
case f
|
|
141
|
+
when "|-"
|
|
142
|
+
f = "-"
|
|
143
|
+
fmode.pmode = :program
|
|
144
|
+
fmode.writable = true
|
|
145
|
+
when "-|"
|
|
146
|
+
f = "-"
|
|
147
|
+
fmode.pmode = :program
|
|
148
|
+
fmode.readable = true
|
|
149
|
+
when "|-|"
|
|
150
|
+
f = "-"
|
|
151
|
+
fmode.pmode = :program
|
|
152
|
+
fmode.readable = true
|
|
153
|
+
fmode.writable = true
|
|
154
|
+
when "-"
|
|
155
|
+
fmode.pmode = :program
|
|
156
|
+
else
|
|
157
|
+
if f =~ /^\|/
|
|
158
|
+
f.sub!(/^\|/, "")
|
|
159
|
+
fmode.writable = true; fmode.pmode = :program
|
|
160
|
+
end
|
|
161
|
+
if f =~ /^\|/
|
|
162
|
+
f.sub!(/^\|/, "")
|
|
163
|
+
fmode.readable = true; fmode.pmode = :program
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
File.pipe?(f) && fmode.pmode = :pipe
|
|
167
|
+
case fmode.pmode
|
|
168
|
+
when :program, :terminal
|
|
169
|
+
doProg.call [f]
|
|
170
|
+
else
|
|
171
|
+
writeFile = nil
|
|
172
|
+
getFp = Proc.new do |m|
|
|
173
|
+
if fmode.sys?
|
|
174
|
+
IO.for_fd IO.sysopen(f, m.to_i, perm)
|
|
175
|
+
else
|
|
176
|
+
__org_open_____ f, m.to_i, perm
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
if fmode.pmode == :pipe
|
|
180
|
+
if !IO::PIPE_LOCKABLE && fmode.lock?
|
|
181
|
+
raise ArgumentError.new("cannot lock pipe in this system")
|
|
182
|
+
end
|
|
183
|
+
if !File.exist?(f) && fmode.creatable?
|
|
184
|
+
begin
|
|
185
|
+
File.mkfifo(f)
|
|
186
|
+
rescue Exception => e
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
if !File.pipe?(f)
|
|
190
|
+
raise ArgumentError.new("cannot crate pipe #{f}, non-pipe file already exists.")
|
|
191
|
+
end
|
|
192
|
+
if fmode.writable? && fmode.readable?
|
|
193
|
+
hasPipeWriter = true
|
|
194
|
+
writeFile = "#{f}.__write__"
|
|
195
|
+
File.pipe?(f) && (File.pipe?(writeFile) || File.mkfifo(writeFile))
|
|
196
|
+
openWithWrite = Proc.new do |a, b|
|
|
197
|
+
fp = __org_open_____(a, fmode.to_i, perm)
|
|
198
|
+
fp.set_write_io __org_open_____(b, fmode.to_i, perm)
|
|
199
|
+
end
|
|
200
|
+
if fmode.truncate?
|
|
201
|
+
openWithWrite.call(f, writeFile)
|
|
202
|
+
else
|
|
203
|
+
openWithWrite.call(writeFile, f)
|
|
204
|
+
end
|
|
205
|
+
else
|
|
206
|
+
if fmode.writable? && !fmode.readable? && fmode.nonblock?
|
|
207
|
+
fmode2 = fmode.clone
|
|
208
|
+
fmode2.readable = true
|
|
209
|
+
fp = getFp.call fmode2
|
|
210
|
+
fp.fmode = fmode
|
|
211
|
+
else
|
|
212
|
+
fp = getFp.call fmode
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
else
|
|
216
|
+
fp = getFp.call fmode
|
|
217
|
+
end
|
|
218
|
+
if fmode.delete?
|
|
219
|
+
fp.__hook__ :close, f, writeFile do |_org_h, _f_h, _f_h2|
|
|
220
|
+
_org_h.call
|
|
221
|
+
File.exist?(_f_h) && File.delete(_f_h)
|
|
222
|
+
_f_h2 and File.exist?(_f_h2) && File.delete(_f_h2)
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
fmode.lock? and fp.flock fmode.to_flock
|
|
226
|
+
fmode.truncate? and (fp.truncate(0) rescue nil)
|
|
227
|
+
handleIO.call fp
|
|
228
|
+
end
|
|
229
|
+
if tmode
|
|
230
|
+
fp.__defun__ :to_s, f.clone
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
res
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
require 'Yk/file_aux_old'
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
class File
|
|
242
|
+
def self.readable_file? (f)
|
|
243
|
+
!FileTest.blockdev?(f) && !FileTest.directory?(f) && FileTest.readable?(f)
|
|
244
|
+
end
|
|
245
|
+
def self.writable_file? (f)
|
|
246
|
+
if !File.exist? f
|
|
247
|
+
File.directory?(tmp = File.dirname(f)) && File.writable?(tmp)
|
|
248
|
+
else
|
|
249
|
+
!FileTest.blockdev?(f) && !FileTest.directory?(f) && FileTest.writable?(f)
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
def self.executable_file? (f)
|
|
253
|
+
FileTest.executable?(f) && File.file?(f)
|
|
254
|
+
end
|
|
255
|
+
# def self.realpath (f)
|
|
256
|
+
# Pathname.new(f).realpath.to_s
|
|
257
|
+
# end
|
|
258
|
+
def self.relative_path (f, d = ".")
|
|
259
|
+
f = Pathname.new(f)
|
|
260
|
+
d = Pathname.new(d)
|
|
261
|
+
f.relative_path_from(d).to_s
|
|
262
|
+
end
|
|
263
|
+
def self.normalize_path (pth, defdir = nil)
|
|
264
|
+
pth = File.expand_path(pth, defdir)
|
|
265
|
+
if pth =~ /^\/+/
|
|
266
|
+
pth = "/" + $'
|
|
267
|
+
end
|
|
268
|
+
if pth =~ /\/+$/
|
|
269
|
+
pth = $`
|
|
270
|
+
end
|
|
271
|
+
pth
|
|
272
|
+
end
|
|
273
|
+
def self.is_in (f, d, cd = nil)
|
|
274
|
+
f = File.normalize_path(f, cd)
|
|
275
|
+
d = File.normalize_path(d, cd)
|
|
276
|
+
if f =~ /^#{Regexp.escape d}(\/|$)/
|
|
277
|
+
$'
|
|
278
|
+
else
|
|
279
|
+
false
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
def self.is_in? (f, d, cd = nil)
|
|
283
|
+
f = File.normalize_path(f, cd)
|
|
284
|
+
d = File.normalize_path(d, cd)
|
|
285
|
+
if f =~ /^#{Regexp.escape d}(\/|$)/
|
|
286
|
+
$'
|
|
287
|
+
else
|
|
288
|
+
false
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
def self.sibling (f, g)
|
|
292
|
+
if f =~ /\/[^\/]+$/
|
|
293
|
+
$` + "/" + g
|
|
294
|
+
else
|
|
295
|
+
g
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
def self.resymlink (src, dst)
|
|
299
|
+
if File.symlink? dst
|
|
300
|
+
if File.readlink(dst) == src
|
|
301
|
+
return
|
|
302
|
+
else
|
|
303
|
+
FileUtils.rm_f dst
|
|
304
|
+
File.symlink src, dst
|
|
305
|
+
end
|
|
306
|
+
else
|
|
307
|
+
File.symlink src, dst
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
def self.resolv_link (l)
|
|
311
|
+
if File.symlink? l
|
|
312
|
+
lk = File.readlink(l)
|
|
313
|
+
else
|
|
314
|
+
return l
|
|
315
|
+
end
|
|
316
|
+
if lk =~ /^\//
|
|
317
|
+
lk
|
|
318
|
+
else
|
|
319
|
+
File.dirname(l) + "/" + File.readlink(l)
|
|
320
|
+
end
|
|
321
|
+
end
|
|
322
|
+
def self.fifo? (f)
|
|
323
|
+
File.pipe?(f)
|
|
324
|
+
end
|
|
325
|
+
def self.lexist? (arg)
|
|
326
|
+
File.symlink?(arg) || File.exist?(arg)
|
|
327
|
+
end
|
|
328
|
+
def self.exist? (arg)
|
|
329
|
+
File.symlink?(arg) || File.exist?(arg)
|
|
330
|
+
end
|
|
331
|
+
def self.lmtime (arg)
|
|
332
|
+
File.lstat(arg).mtime
|
|
333
|
+
end
|
|
334
|
+
def self.mknod (name, type = nil, devn = nil, mode = nil)
|
|
335
|
+
if type
|
|
336
|
+
if mode
|
|
337
|
+
mode = "-m #{mode.to_s(8)}"
|
|
338
|
+
else
|
|
339
|
+
mode = ""
|
|
340
|
+
end
|
|
341
|
+
minor = devn & 0xff
|
|
342
|
+
major = devn >> 8
|
|
343
|
+
tp = type.chr
|
|
344
|
+
system "mknod #{name} #{tp} #{mode} #{major} #{minor}"
|
|
345
|
+
else
|
|
346
|
+
if system "mksock #{name}"
|
|
347
|
+
if mode
|
|
348
|
+
File.chmod mode, name
|
|
349
|
+
end
|
|
350
|
+
else
|
|
351
|
+
raise Exception.new("cannot create socket `#{name}'")
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
def self.mkfifo (name, mode = nil)
|
|
356
|
+
if mode
|
|
357
|
+
mode = "-m #{mode.to_s(8)}"
|
|
358
|
+
else
|
|
359
|
+
mode = ""
|
|
360
|
+
end
|
|
361
|
+
if !system "mkfifo #{mode} #{name}"
|
|
362
|
+
raise Exception.new("cannot create fifo `#{name}'")
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
def self.mksock (name, mode = nil)
|
|
366
|
+
if !system "mksock #{name}"
|
|
367
|
+
raise Exception.new("cannot create socket `#{name}'")
|
|
368
|
+
end
|
|
369
|
+
if mode
|
|
370
|
+
FileUtils.chmod mode, name
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
def self.partial_path (name, sub)
|
|
374
|
+
arr = name.split(/\/+/)
|
|
375
|
+
while arr.size != 0 && arr[-1] == ""
|
|
376
|
+
arr.pop
|
|
377
|
+
end
|
|
378
|
+
arr[sub].join("/")
|
|
379
|
+
end
|
|
380
|
+
def self.delext (name, ext = nil)
|
|
381
|
+
if !ext
|
|
382
|
+
if name =~ /\.[^\.]*$/ && $` != ""
|
|
383
|
+
return name.sub(/\.[^\.]*$/, "")
|
|
384
|
+
else
|
|
385
|
+
return name
|
|
386
|
+
end
|
|
387
|
+
end
|
|
388
|
+
if ext[0] != ?.
|
|
389
|
+
raise ArgumentError.new("'#{ext}' is not extension. Please add '.' before it.")
|
|
390
|
+
end
|
|
391
|
+
name = name.clone
|
|
392
|
+
name.sub! /#{Regexp.escape ext}$/, ""
|
|
393
|
+
name
|
|
394
|
+
end
|
|
395
|
+
def self.which (arg)
|
|
396
|
+
`which #{arg}`.chomp
|
|
397
|
+
end
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
class Dir
|
|
402
|
+
def self.lrecursive (d)
|
|
403
|
+
recursive d, false do |e|
|
|
404
|
+
yield e
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
def self.recursive (d, fl = true, orgSz = nil, *exList)
|
|
408
|
+
ret = []
|
|
409
|
+
if d != "/" && d =~ /\/+$/
|
|
410
|
+
d = $`
|
|
411
|
+
end
|
|
412
|
+
if orgSz == nil
|
|
413
|
+
if d == "/"
|
|
414
|
+
orgSz = 1
|
|
415
|
+
else
|
|
416
|
+
orgSz = d.size + 1
|
|
417
|
+
end
|
|
418
|
+
end
|
|
419
|
+
if !File.directory?(d)
|
|
420
|
+
return block_given? ? 0 : ret
|
|
421
|
+
end
|
|
422
|
+
getRealPath = Proc.new do |a|
|
|
423
|
+
File.realpath(a) rescue a
|
|
424
|
+
end
|
|
425
|
+
if exList[-1].is_a? Hash
|
|
426
|
+
h = exList.pop
|
|
427
|
+
else
|
|
428
|
+
h = Hash.new
|
|
429
|
+
end
|
|
430
|
+
exList.each do |e|
|
|
431
|
+
h[getRealPath.call(e)] = true
|
|
432
|
+
end
|
|
433
|
+
pth = getRealPath.call(d)
|
|
434
|
+
if h[pth]
|
|
435
|
+
return block_given? ? 0 : ret
|
|
436
|
+
end
|
|
437
|
+
h[pth] = true
|
|
438
|
+
cnt = 0
|
|
439
|
+
begin
|
|
440
|
+
Dir.foreach d do |f|
|
|
441
|
+
if f != "." && f != ".."
|
|
442
|
+
if d[-1] == ?/
|
|
443
|
+
f = d + f
|
|
444
|
+
else
|
|
445
|
+
f = d + "/" + f
|
|
446
|
+
end
|
|
447
|
+
if (fl || !File.symlink?(f)) && File.directory?(f)
|
|
448
|
+
cnt += Dir.recursive f, fl, orgSz, h do |g|
|
|
449
|
+
def g.dir
|
|
450
|
+
File.dirname(self)
|
|
451
|
+
end
|
|
452
|
+
def g.base
|
|
453
|
+
File.basename(self)
|
|
454
|
+
end
|
|
455
|
+
def g.dir?
|
|
456
|
+
File.directory?(self)
|
|
457
|
+
end
|
|
458
|
+
g.__defun__ :recbase, g do |tmp|
|
|
459
|
+
tmp[orgSz .. -1]
|
|
460
|
+
end
|
|
461
|
+
if block_given?
|
|
462
|
+
yield g
|
|
463
|
+
else
|
|
464
|
+
ret.push g
|
|
465
|
+
end
|
|
466
|
+
end
|
|
467
|
+
elsif File.exist?(f) || !fl
|
|
468
|
+
def f.dir
|
|
469
|
+
File.dirname(self)
|
|
470
|
+
end
|
|
471
|
+
def f.base
|
|
472
|
+
File.basename(self)
|
|
473
|
+
end
|
|
474
|
+
def f.dir?
|
|
475
|
+
File.directory?(self)
|
|
476
|
+
end
|
|
477
|
+
f.__defun__ :recbase, f do |tmp|
|
|
478
|
+
tmp[orgSz .. -1]
|
|
479
|
+
end
|
|
480
|
+
if block_given?
|
|
481
|
+
yield f
|
|
482
|
+
else
|
|
483
|
+
ret.push f
|
|
484
|
+
end
|
|
485
|
+
cnt += 1
|
|
486
|
+
end
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
rescue
|
|
490
|
+
return block_given? ? 0 : []
|
|
491
|
+
end
|
|
492
|
+
return block_given? ? cnt : ret
|
|
493
|
+
end
|
|
494
|
+
def self.each (d)
|
|
495
|
+
Dir.foreach d do |f|
|
|
496
|
+
next if f == "." || f == ".."
|
|
497
|
+
if d[-1] != ?/
|
|
498
|
+
g = d + "/" + f
|
|
499
|
+
else
|
|
500
|
+
g = d + f
|
|
501
|
+
end
|
|
502
|
+
def g.dir
|
|
503
|
+
File.dirname(self)
|
|
504
|
+
end
|
|
505
|
+
def g.base
|
|
506
|
+
File.basename(self)
|
|
507
|
+
end
|
|
508
|
+
def g.dir?
|
|
509
|
+
File.directory?(self)
|
|
510
|
+
end
|
|
511
|
+
yield g
|
|
512
|
+
end
|
|
513
|
+
end
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
require 'fileutils'
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
module FileUtils
|
|
521
|
+
class Entry_
|
|
522
|
+
begin
|
|
523
|
+
begin
|
|
524
|
+
File.lchmod(0644, "/")
|
|
525
|
+
rescue NotImplementedError
|
|
526
|
+
def File.lchmod (*args)
|
|
527
|
+
end
|
|
528
|
+
end
|
|
529
|
+
rescue
|
|
530
|
+
end
|
|
531
|
+
begin
|
|
532
|
+
begin
|
|
533
|
+
File.lchown(0, 0, "/")
|
|
534
|
+
rescue NotImplementedError
|
|
535
|
+
def File.lchown (*args)
|
|
536
|
+
end
|
|
537
|
+
end
|
|
538
|
+
rescue
|
|
539
|
+
end
|
|
540
|
+
def lcopy_metadata(path)
|
|
541
|
+
st = lstat()
|
|
542
|
+
if !File.symlink? path
|
|
543
|
+
File.utime st.atime, st.mtime, path
|
|
544
|
+
end
|
|
545
|
+
begin
|
|
546
|
+
File.lchown st.uid, st.gid, path
|
|
547
|
+
rescue Errno::EPERM
|
|
548
|
+
# clear setuid/setgid
|
|
549
|
+
File.lchmod st.mode & 01777, path
|
|
550
|
+
else
|
|
551
|
+
File.lchmod st.mode, path
|
|
552
|
+
end
|
|
553
|
+
end
|
|
554
|
+
def mknod (name, type = nil, devn = nil, mode = nil)
|
|
555
|
+
File.mknod(name, type, devn, mode)
|
|
556
|
+
end
|
|
557
|
+
def mkfifo (name, mode = nil)
|
|
558
|
+
File.mkfifo(name, mode)
|
|
559
|
+
end
|
|
560
|
+
end
|
|
561
|
+
def copy_entry(src, dest, preserve = false, dereference_root = false)
|
|
562
|
+
Entry_.new(src, nil, dereference_root).traverse do |ent|
|
|
563
|
+
destent = Entry_.new(dest, ent.rel, false)
|
|
564
|
+
ent.copy destent.path
|
|
565
|
+
ent.lcopy_metadata destent.path if preserve
|
|
566
|
+
end
|
|
567
|
+
end
|
|
568
|
+
def copy_stat(src, dest, preserve = true, dereference_root = false)
|
|
569
|
+
Entry_.new(src, nil, dereference_root).traverse do |ent|
|
|
570
|
+
destent = Entry_.new(dest, ent.rel, false)
|
|
571
|
+
ent.lcopy_metadata destent.path if preserve
|
|
572
|
+
end
|
|
573
|
+
end
|
|
574
|
+
def cp_stat(src, path)
|
|
575
|
+
st = File.lstat(src)
|
|
576
|
+
if !File.symlink? path
|
|
577
|
+
File.utime st.atime, st.mtime, path
|
|
578
|
+
end
|
|
579
|
+
begin
|
|
580
|
+
File.lchown st.uid, st.gid, path
|
|
581
|
+
rescue Errno::EPERM
|
|
582
|
+
# clear setuid/setgid
|
|
583
|
+
File.lchmod st.mode & 01777, path
|
|
584
|
+
else
|
|
585
|
+
File.lchmod st.mode, path
|
|
586
|
+
end
|
|
587
|
+
end
|
|
588
|
+
module_function :copy_entry
|
|
589
|
+
module_function :copy_stat
|
|
590
|
+
module_function :cp_stat
|
|
591
|
+
end
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
class File
|
|
595
|
+
class CannotGetLock < Exception
|
|
596
|
+
end
|
|
597
|
+
def try_lock_ex
|
|
598
|
+
if !flock File::LOCK_EX | File::LOCK_NB
|
|
599
|
+
false
|
|
600
|
+
else
|
|
601
|
+
true
|
|
602
|
+
end
|
|
603
|
+
end
|
|
604
|
+
def try_lock_sh
|
|
605
|
+
if !flock File::LOCK_SH | File::LOCK_NB
|
|
606
|
+
false
|
|
607
|
+
else
|
|
608
|
+
true
|
|
609
|
+
end
|
|
610
|
+
end
|
|
611
|
+
def lock_ex
|
|
612
|
+
flock File::LOCK_EX
|
|
613
|
+
end
|
|
614
|
+
def lock_sh
|
|
615
|
+
flock File::LOCK_SH
|
|
616
|
+
end
|
|
617
|
+
def unlock
|
|
618
|
+
flock File::LOCK_UN
|
|
619
|
+
end
|
|
620
|
+
def lock (mode = "e")
|
|
621
|
+
case mode
|
|
622
|
+
when "e"
|
|
623
|
+
flock File::LOCK_EX
|
|
624
|
+
when "s"
|
|
625
|
+
flock File::LOCK_SH
|
|
626
|
+
when "l"
|
|
627
|
+
flock(fmode.writable? ? File::LOCK_EX : File::LOCK_SH)
|
|
628
|
+
else
|
|
629
|
+
raise ArgumentError.new("illeagal mode, '#{mode}'")
|
|
630
|
+
end
|
|
631
|
+
end
|
|
632
|
+
def self.__lock_failed (file)
|
|
633
|
+
require 'Yk/shellquote'
|
|
634
|
+
pidList = []
|
|
635
|
+
if File.executable?("/usr/sbin/lsof") && File.executable?("/usr/bin/lsp")
|
|
636
|
+
IO.popen "/usr/sbin/lsof #{file.condSQuote} 2> /dev/null" do |r|
|
|
637
|
+
r.each_line do |ln|
|
|
638
|
+
pid = ln.strip.split[1]
|
|
639
|
+
if pid =~ /\d+/
|
|
640
|
+
pidList.push pid
|
|
641
|
+
end
|
|
642
|
+
end
|
|
643
|
+
end
|
|
644
|
+
require 'Yk/proclist'
|
|
645
|
+
ProcList.refresh
|
|
646
|
+
curProc = ProcList.current
|
|
647
|
+
pidList = pidList.select do |e|
|
|
648
|
+
if pc = ProcList.pid(e)
|
|
649
|
+
if pc.isFamilyOf?(curProc)
|
|
650
|
+
next false
|
|
651
|
+
end
|
|
652
|
+
next true
|
|
653
|
+
end
|
|
654
|
+
next false
|
|
655
|
+
end
|
|
656
|
+
if pidList.size > 0
|
|
657
|
+
system "/usr/bin/lsp -a -K #{pidList.join(' ')}"
|
|
658
|
+
end
|
|
659
|
+
end
|
|
660
|
+
end
|
|
661
|
+
def self.try_lock_ex (name)
|
|
662
|
+
fr = File.open name, File::RDONLY|File::CREAT|File::NONBLOCK
|
|
663
|
+
if !fr.flock File::LOCK_EX | File::LOCK_NB
|
|
664
|
+
$DEBUG && __lock_failed(name)
|
|
665
|
+
if block_given?
|
|
666
|
+
raise File::CannotGetLock.new("failed to get exclusive lock '#{name}'")
|
|
667
|
+
end
|
|
668
|
+
return nil
|
|
669
|
+
end
|
|
670
|
+
if block_given?
|
|
671
|
+
begin
|
|
672
|
+
yield fr
|
|
673
|
+
ensure
|
|
674
|
+
fr.close
|
|
675
|
+
end
|
|
676
|
+
else
|
|
677
|
+
fr
|
|
678
|
+
end
|
|
679
|
+
end
|
|
680
|
+
def self.setpid (name)
|
|
681
|
+
fw = File.open name, File::RDWR|File::CREAT|File::NONBLOCK
|
|
682
|
+
same = fw.read.chomp == $$.to_s
|
|
683
|
+
if !fw.flock(File::LOCK_EX | File::LOCK_NB) && !same
|
|
684
|
+
$DEBUG && __lock_failed(name)
|
|
685
|
+
fw.close
|
|
686
|
+
raise File::CannotGetLock.new("failed to get exclusive lock '#{name}'")
|
|
687
|
+
end
|
|
688
|
+
fw.pos = 0
|
|
689
|
+
if !same
|
|
690
|
+
fw.truncate(0)
|
|
691
|
+
fw.write $$.to_i
|
|
692
|
+
fw.flush
|
|
693
|
+
fw.flock File::LOCK_SH
|
|
694
|
+
else
|
|
695
|
+
Dir.foreach "/proc/#{$$}/fd" do |ent|
|
|
696
|
+
next if ent !~ /^\d+$/
|
|
697
|
+
if File.symlink?(s = "/proc/#{$$}/fd/#{ent}")
|
|
698
|
+
if File.readlink(s) == File.normalize_path(name)
|
|
699
|
+
fw.close
|
|
700
|
+
fw = IO.for_fd(ent.to_i)
|
|
701
|
+
break
|
|
702
|
+
end
|
|
703
|
+
end
|
|
704
|
+
end
|
|
705
|
+
end
|
|
706
|
+
if block_given?
|
|
707
|
+
begin
|
|
708
|
+
yield fw
|
|
709
|
+
ensure
|
|
710
|
+
File.delete name
|
|
711
|
+
!fw.closed? && fw.close
|
|
712
|
+
end
|
|
713
|
+
else
|
|
714
|
+
at_exit do
|
|
715
|
+
File.delete(name) if File.exist?(name)
|
|
716
|
+
!fw.closed? && fw.close
|
|
717
|
+
end
|
|
718
|
+
end
|
|
719
|
+
end
|
|
720
|
+
def self.try_lock_sh (name)
|
|
721
|
+
fr = File.open name, File::RDONLY|File::CREAT|File::NONBLOCK
|
|
722
|
+
if !fr.flock File::LOCK_SH | File::LOCK_NB
|
|
723
|
+
$DEBUG && __lock_failed(name)
|
|
724
|
+
if block_given?
|
|
725
|
+
raise File::CannotGetLock.new("failed to get shared lock '#{name}'")
|
|
726
|
+
end
|
|
727
|
+
return nil
|
|
728
|
+
end
|
|
729
|
+
if block_given?
|
|
730
|
+
begin
|
|
731
|
+
yield fr
|
|
732
|
+
ensure
|
|
733
|
+
fr.close
|
|
734
|
+
end
|
|
735
|
+
else
|
|
736
|
+
fr
|
|
737
|
+
end
|
|
738
|
+
end
|
|
739
|
+
def self.lock_ex (name)
|
|
740
|
+
fr = File.open name, File::RDONLY|File::CREAT|File::NONBLOCK
|
|
741
|
+
fr.flock File::LOCK_EX
|
|
742
|
+
if block_given?
|
|
743
|
+
begin
|
|
744
|
+
yield
|
|
745
|
+
ensure
|
|
746
|
+
fr.close
|
|
747
|
+
end
|
|
748
|
+
else
|
|
749
|
+
fr
|
|
750
|
+
end
|
|
751
|
+
end
|
|
752
|
+
def self.lock_sh (name)
|
|
753
|
+
fr = File.open name, File::RDONLY|File::CREAT|File::NONBLOCK
|
|
754
|
+
fr.flock File::LOCK_SH
|
|
755
|
+
if block_given?
|
|
756
|
+
begin
|
|
757
|
+
yield
|
|
758
|
+
ensure
|
|
759
|
+
fr.close
|
|
760
|
+
end
|
|
761
|
+
else
|
|
762
|
+
fr
|
|
763
|
+
end
|
|
764
|
+
end
|
|
765
|
+
end
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
class << Object.new
|
|
769
|
+
def self.rewriteIOMethods (cls, rewrite_methods)
|
|
770
|
+
cls.class_eval do
|
|
771
|
+
rms = rewrite_methods.sort_by do |a|
|
|
772
|
+
-a.size
|
|
773
|
+
end
|
|
774
|
+
def self.getLabelAndFm (e, extra = "")
|
|
775
|
+
case e.to_sym
|
|
776
|
+
when :write, :writeln
|
|
777
|
+
fmode = IO::FMode.new extra
|
|
778
|
+
fmode.writable = true
|
|
779
|
+
fmode.readable = false
|
|
780
|
+
fmode.creatable = true
|
|
781
|
+
if !fmode.append?
|
|
782
|
+
fmode.truncate = true
|
|
783
|
+
end
|
|
784
|
+
when :rewrite_each_line, :ref_each_line, :addlines, :addline, :dellines, :delline
|
|
785
|
+
fmode = IO::FMode.new extra
|
|
786
|
+
fmode.readable = true
|
|
787
|
+
fmode.writable = true
|
|
788
|
+
fmode.creatable = true
|
|
789
|
+
fmode.truncate = false
|
|
790
|
+
when :writeln_readln
|
|
791
|
+
fmode = IO::FMode.new extra
|
|
792
|
+
fmode.readable = true
|
|
793
|
+
fmode.writable = true
|
|
794
|
+
fmode.creatable = true
|
|
795
|
+
fmode.truncate = true
|
|
796
|
+
else
|
|
797
|
+
fmode = IO::FMode.new extra
|
|
798
|
+
end
|
|
799
|
+
["__#{e}_____".to_sym, fmode]
|
|
800
|
+
end
|
|
801
|
+
rms.each do |e|
|
|
802
|
+
e = e.to_sym
|
|
803
|
+
self.__hook__ e, *getLabelAndFm(e) do |org, tlabel, fmode|
|
|
804
|
+
#STDERR.write caller.inspect + "\n"
|
|
805
|
+
#STDERR.flush
|
|
806
|
+
#STDERR.write org.class.inspect + "\n"
|
|
807
|
+
#STDERR.flush
|
|
808
|
+
#STDERR.write org.inspect + "\n"
|
|
809
|
+
#STDERR.flush
|
|
810
|
+
path = org.args.shift
|
|
811
|
+
#STDERR.write path + "\n"
|
|
812
|
+
#STDERR.write fmode.inspect + "\n"
|
|
813
|
+
File.open path, fmode do |fp|
|
|
814
|
+
fp.method(tlabel).call(*org.args, &org.block)
|
|
815
|
+
end
|
|
816
|
+
end
|
|
817
|
+
end
|
|
818
|
+
self.__hook__ :method_missing do |org|
|
|
819
|
+
name = org.args[0]
|
|
820
|
+
if name != :__hk_org_method_B_missing
|
|
821
|
+
if name.to_s =~ /^(#{rms.join('|')})_/ && (lb, fm = getLabelAndFm($1, $') rescue false)
|
|
822
|
+
File.open org.args[1], fm do |fp|
|
|
823
|
+
fp.method(lb).call(*org.args[2..-1], &org.block)
|
|
824
|
+
end
|
|
825
|
+
else
|
|
826
|
+
org.call
|
|
827
|
+
end
|
|
828
|
+
else
|
|
829
|
+
__reraise_method_missing name
|
|
830
|
+
end
|
|
831
|
+
end
|
|
832
|
+
self.__hook__ :respond_to? do |org|
|
|
833
|
+
name = org.args[0]
|
|
834
|
+
if name.to_s =~ /^(#{rms.join('|')})_/ && (fm = IO::FMode.new($') rescue false)
|
|
835
|
+
true
|
|
836
|
+
else
|
|
837
|
+
org.call
|
|
838
|
+
end
|
|
839
|
+
end
|
|
840
|
+
end
|
|
841
|
+
end
|
|
842
|
+
rewriteIOMethods(IO,
|
|
843
|
+
%w{
|
|
844
|
+
read gets readline readlines foreach write
|
|
845
|
+
readln writeln read_each_line rewrite_each_line ref_each_line
|
|
846
|
+
writeln_readln print println printf printfln addline delline addlines dellines
|
|
847
|
+
}
|
|
848
|
+
)
|
|
849
|
+
end
|
|
850
|
+
|
|
851
|
+
|
|
852
|
+
class IO
|
|
853
|
+
def __read_____ (length = nil, offset = nil)
|
|
854
|
+
pos = offset if offset
|
|
855
|
+
read length
|
|
856
|
+
end
|
|
857
|
+
def __readlines_____ (rs = $/)
|
|
858
|
+
readlines rs
|
|
859
|
+
end
|
|
860
|
+
def __readline_____ (rs = $/)
|
|
861
|
+
readline rs
|
|
862
|
+
end
|
|
863
|
+
def __gets_____ (rs = $/)
|
|
864
|
+
gets rs
|
|
865
|
+
end
|
|
866
|
+
def __readln_____ (rs = $/)
|
|
867
|
+
readln rs
|
|
868
|
+
end
|
|
869
|
+
def __read_each_line_____ (rs = $/, &bl)
|
|
870
|
+
read_each_line rs, &bl
|
|
871
|
+
end
|
|
872
|
+
def __foreach_____ (rs = $/)
|
|
873
|
+
each_line rs do |ln|
|
|
874
|
+
yield ln
|
|
875
|
+
end
|
|
876
|
+
end
|
|
877
|
+
def __write_____ (*args)
|
|
878
|
+
write *args
|
|
879
|
+
end
|
|
880
|
+
def __writeln_____ (*args)
|
|
881
|
+
writeln *args
|
|
882
|
+
end
|
|
883
|
+
def __rewrite_each_line_____ (&bl)
|
|
884
|
+
rewrite_each_line(&bl)
|
|
885
|
+
end
|
|
886
|
+
def __ref_each_line_____ (&bl)
|
|
887
|
+
ref_each_line(&bl)
|
|
888
|
+
end
|
|
889
|
+
def __writeln_readln_____ (*args)
|
|
890
|
+
writeln_readln *args
|
|
891
|
+
end
|
|
892
|
+
def __print_____ (*args)
|
|
893
|
+
print *args
|
|
894
|
+
end
|
|
895
|
+
def __println_____ (*args)
|
|
896
|
+
println *args
|
|
897
|
+
end
|
|
898
|
+
def __printf_____ (*args)
|
|
899
|
+
printf *args
|
|
900
|
+
end
|
|
901
|
+
def __printfln_____ (*args)
|
|
902
|
+
println *args
|
|
903
|
+
end
|
|
904
|
+
def __addline_____ (*args)
|
|
905
|
+
addline *args
|
|
906
|
+
end
|
|
907
|
+
def __addlines_____ (*args)
|
|
908
|
+
addlines *args
|
|
909
|
+
end
|
|
910
|
+
def __delline_____ (*args)
|
|
911
|
+
delline *args
|
|
912
|
+
end
|
|
913
|
+
def __dellines_____ (*args)
|
|
914
|
+
dellines *args
|
|
915
|
+
end
|
|
916
|
+
end
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
|