rwdhypernote 0.04 → 0.05
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.
- data/Readme.txt +7 -0
- data/code/superant.com.rwdtinkerbackwindow/helptexthashtinkerwin2.rb +4 -1
- data/code/superant.com.rwdtinkerbackwindow/installapplet.rb +5 -3
- data/code/superant.com.rwdtinkerbackwindow/removeapplet.rb +10 -6
- data/configuration/language.dist +7 -0
- data/configuration/{rwdapplicationidentity.cnf → rwdapplicationidentity.dist} +1 -1
- data/configuration/rwdhypernote.dist +11 -0
- data/configuration/{rwdtinker.cnf → rwdtinker.dist} +3 -4
- data/configuration/{tinkerwin2variables.cnf → tinkerwin2variables.dist} +6 -1
- data/extras/rconftool.rb +380 -0
- data/extras/zip/zip.rb +1 -0
- data/init.rb +42 -37
- data/installed/rwdviewlogo-0.4.inf +4 -0
- data/rwd_files/HowTo_HyperNote.txt +7 -0
- data/rwd_files/HowTo_Tinker.txt +16 -0
- data/rwdconfig.dist +6 -0
- data/tests/checkdepends.sh +4 -0
- data/tests/cleancnf.sh +5 -0
- data/tests/makedist.rb +29 -0
- data/tests/rdep.rb +354 -0
- data/tests/rwdtinkertestEN.rb +163 -0
- data/tests/test.result +32 -0
- data/tests/totranslate.lang +93 -0
- data/zips/rwdahelloworld-0.5.zip +0 -0
- metadata +48 -48
- data/configuration/language.cnf +0 -5
- data/configuration/rwdhypernote.cnf +0 -9
- data/configuration/rwdhypernoteversion.cnf +0 -3
- data/configuration/rwdtinkerversion.cnf +0 -2
- data/configuration/tinkerwin2version.cnf +0 -3
- data/lang/alanguagehashbegin.rb +0 -4
- data/lang/languagehash.rb +0 -4
- data/lang/templangfile.rb +0 -16
- data/lang/vlanguagehashend.rb +0 -6
- data/lang/wlocallangstart.rb +0 -5
- data/lang/xlocallangfile.rb +0 -16
- data/lang/zlocallangend.rb +0 -2
data/Readme.txt
CHANGED
@@ -81,6 +81,13 @@ Steven Gibson
|
|
81
81
|
steven@superant.com
|
82
82
|
|
83
83
|
== Changelog
|
84
|
+
version 0.05
|
85
|
+
beginning to add context help
|
86
|
+
updated for rwdtinker version 1.58
|
87
|
+
added rconftool use to update configuration files
|
88
|
+
changed applets removal to not use external rm
|
89
|
+
removed version number from directory name
|
90
|
+
|
84
91
|
version 0.04
|
85
92
|
corrected bug in note name on link tab
|
86
93
|
cleaned up variable names in list notes
|
@@ -9,6 +9,7 @@
|
|
9
9
|
|
10
10
|
rwdtinker applets packaged as RubyGems can be used if you have RubyGems installed.
|
11
11
|
You can download rwdtinker gems at the 'Install Remote Applets' tab
|
12
|
+
to install applets you need the ruby zlib library installed
|
12
13
|
",
|
13
14
|
:applet_viewing => "You can get a list of all installed applets by clicking the 'listfiles button'
|
14
15
|
To see the text of a install file
|
@@ -32,7 +33,9 @@
|
|
32
33
|
chose the applet you want\n
|
33
34
|
click on 'install applet'\n
|
34
35
|
If all goes well the applet should be installed.\n
|
35
|
-
You will need to restart rwdtinker to see the new screens
|
36
|
+
You will need to restart rwdtinker to see the new screens
|
37
|
+
to install applets you need the ruby zlib library installed",
|
38
|
+
|
36
39
|
:applet_tinkerbackeditconfiguration => " You can edit the configuration
|
37
40
|
|
38
41
|
Remember to reload the configuration variables if you want your
|
@@ -1,10 +1,12 @@
|
|
1
1
|
# code in install rwdtinker applets - now uses ruby.zip module
|
2
2
|
def installapplet
|
3
|
-
|
4
|
-
require 'extras/zip/zip'
|
3
|
+
|
5
4
|
nametext = "%s" % [@a_installapplet]
|
6
|
-
|
5
|
+
|
7
6
|
begin # exception trapped block
|
7
|
+
|
8
|
+
|
9
|
+
require 'extras/zip/zip'
|
8
10
|
fullname = nametext + ".zip"
|
9
11
|
fileName = File.join($zipslocation,fullname)
|
10
12
|
|
@@ -10,19 +10,23 @@
|
|
10
10
|
|
11
11
|
fd.each { |oneline|
|
12
12
|
if count == 1
|
13
|
-
|
14
|
-
|
13
|
+
if File.exist?(oneline.chop)
|
14
|
+
FileUtils.rm_rf( oneline.chop)
|
15
|
+
end
|
16
|
+
|
15
17
|
end
|
16
18
|
count = 1
|
17
19
|
}
|
18
20
|
fd.close
|
19
|
-
|
21
|
+
|
22
|
+
FileUtils.rm_rf( fileName)
|
23
|
+
|
20
24
|
|
21
|
-
system(commandline)
|
22
25
|
@removeapplettext = "applet files removed! - restart rwd to finish uninstalling"
|
23
26
|
|
24
27
|
rescue
|
25
|
-
|
26
|
-
|
28
|
+
@removeapplettext = "\n" + "error"
|
29
|
+
|
30
|
+
end # exception rescue
|
27
31
|
|
28
32
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
##VERSION:0.05
|
2
|
+
##NAME: $rwdhypernote_directory:0
|
3
|
+
$rwdhypernote_directory = 'Notes'
|
4
|
+
$notesarray = ["Notes/changes.txt"]
|
5
|
+
$noteslinksarray = ["Notes/changes.lnk"]
|
6
|
+
$rwdhypernote_ftpsite = "ftp.mysite.com"
|
7
|
+
$rwdhypernote_ftplogin = "mylogin"
|
8
|
+
$rwdhypernote_ftppassword = "mypassword"
|
9
|
+
$rwdhypernote_ftpdirectory = "/incoming/rwdhypernotes/"
|
10
|
+
$rwdhypernote_updatedirectory = "updates"
|
11
|
+
RwdHyperNoteVersion = "0.05"
|
@@ -1,12 +1,9 @@
|
|
1
|
-
|
1
|
+
##VERSION:1.58
|
2
2
|
ConfigurationDir = "configuration" # for use in program - init.rb has this value without using this constant
|
3
3
|
CodeName = "rwdtinker"
|
4
4
|
CodeNameFile = CodeName + ".rb"
|
5
|
-
LangNameFile = "rwdlanguage.rb"
|
6
5
|
RWDFile = "rwdtinker.rwd"
|
7
6
|
LangDir = "lang"
|
8
|
-
TempLangHashFile = LangDir + "/" + "templangfile.rb"
|
9
|
-
LocalLangHashFile = LangDir + "/" + "xlocallangfile.rb"
|
10
7
|
CodeDir = "code"
|
11
8
|
GuiDir = "gui"
|
12
9
|
$help_topic = "general_help"
|
@@ -14,3 +11,5 @@ LocalLangHashFile = LangDir + "/" + "xlocallangfile.rb"
|
|
14
11
|
$prevouswindow ="main"
|
15
12
|
$rwdcontrolports =["13713","13714","13715","13716","13717","13718"]
|
16
13
|
$port = 7705
|
14
|
+
|
15
|
+
RwdTinkerVersion = "1.58"
|
@@ -1,12 +1,17 @@
|
|
1
|
-
|
1
|
+
##VERSION:1.57
|
2
2
|
TinkerWin2ConfigurationFileName = "tinkerwin2variables.cnf" # this file name - do not change
|
3
|
+
##NAME:$zipslocation:0
|
3
4
|
$zipslocation = "zips" # location of applets to add
|
4
5
|
$zipsarray = [""] ; $zipsarraylocal = [""]
|
6
|
+
##NAME:$xpcommand:0
|
5
7
|
$xpcommand = " " # Linux machines
|
6
8
|
# $xpcommand = "cmd /C " # XP machines with cmd shell
|
9
|
+
##NAME:$gemdirectory_withgemfiles:0
|
7
10
|
$gemdirectory_withgemfiles = "/usr/lib/ruby/gems/1.8/gems"
|
8
11
|
# $gemdirectory_withgemfiles = "c:\\ruby\\lib\\ruby\\gems\\1.8\\gems" # XP machine
|
12
|
+
##NAME:$geminstalled_directory:0
|
9
13
|
# $geminstalled_directory = "/ruby/lib/ruby/gems/1.8/gems" # XP machine
|
10
14
|
$geminstalled_directory = "/usr/lib/ruby/gems/1.8/gems" # Debian Linux
|
11
15
|
|
16
|
+
RwdTinkerWin2Version = "0.8"
|
12
17
|
|
data/extras/rconftool.rb
ADDED
@@ -0,0 +1,380 @@
|
|
1
|
+
#!/usr/local/bin/ruby -w
|
2
|
+
|
3
|
+
# Copyright (c) 2005 Brian Candler
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to
|
7
|
+
# deal in the Software without restriction, including without limitation the
|
8
|
+
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
9
|
+
# sell copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
20
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
21
|
+
# IN THE SOFTWARE.
|
22
|
+
|
23
|
+
##########################################################################
|
24
|
+
# rconftool is a reimplementation of Sam Varshavchik's sysconftool in Ruby.
|
25
|
+
# See http://www.courier-mta.org/sysconftool/ for details of the original.
|
26
|
+
# Its purpose is to keep configuration files "fresh" when upgrading an
|
27
|
+
# application from one version to another, ensuring that all necessary
|
28
|
+
# settings are present and obsolete ones removed.
|
29
|
+
#
|
30
|
+
# rconftool can be called as a library function or from the command line. It
|
31
|
+
# can also install groups of files recursively from one directory tree into
|
32
|
+
# another.
|
33
|
+
##########################################################################
|
34
|
+
|
35
|
+
require 'fileutils'
|
36
|
+
|
37
|
+
module Rconftool
|
38
|
+
VERSION = "0.1"
|
39
|
+
class NoVersionLine < RuntimeError; end
|
40
|
+
|
41
|
+
# This module function installs a single source (.dist) file to a target
|
42
|
+
# location, having first merged in any compatible settings from the
|
43
|
+
# target file if it existed previously [if it does not exist, any settings
|
44
|
+
# from 'oldfile' are used instead]
|
45
|
+
#
|
46
|
+
# If the distfile is not in sysconftool format (i.e. doesn't have a
|
47
|
+
# ##VERSION: header within the first 20 lines), then for safety it is only
|
48
|
+
# installed if the target file does not already exist. No attempt at data
|
49
|
+
# merging is made in that case.
|
50
|
+
|
51
|
+
def self.install(distfile, targetfile=nil, oldfile=nil, opt={})
|
52
|
+
debug = opt[:debug] || $stdout
|
53
|
+
|
54
|
+
targetfile ||= distfile
|
55
|
+
if opt[:strip_regexp]
|
56
|
+
targetfile = targetfile.sub(opt[:strip_regexp], '')
|
57
|
+
oldfile = oldfile.sub(opt[:strip_regexp], '') if oldfile
|
58
|
+
end
|
59
|
+
if opt[:add_suffix]
|
60
|
+
targetfile = targetfile + opt[:add_suffix]
|
61
|
+
oldfile = oldfile + opt[:add_suffix] if oldfile
|
62
|
+
end
|
63
|
+
raise Errno::EEXIST, "#{distfile}: dist and target filenames are the same" if distfile == targetfile
|
64
|
+
|
65
|
+
# Read in the source (.dist) file
|
66
|
+
begin
|
67
|
+
src = ConfigFile.new(distfile)
|
68
|
+
rescue NoVersionLine
|
69
|
+
# Fallback behaviour when installing a file which is not in sysconftool
|
70
|
+
# format: we install the file only if it doesn't already exist
|
71
|
+
if File.exist?(targetfile)
|
72
|
+
debug << "#{targetfile}: already exists, skipping\n"
|
73
|
+
return
|
74
|
+
end
|
75
|
+
return if opt[:noclobber]
|
76
|
+
copyfrom = (oldfile and File.exist?(oldfile)) ? oldfile : distfile
|
77
|
+
if File.symlink?(copyfrom)
|
78
|
+
File.symlink(File.readlink(copyfrom), targetfile)
|
79
|
+
debug << "#{targetfile}: symlink copied from #{copyfrom}\n"
|
80
|
+
else
|
81
|
+
FileUtils.cp copyfrom, targetfile, :preserve=>true
|
82
|
+
debug << "#{targetfile}: copied from #{copyfrom}\n"
|
83
|
+
end
|
84
|
+
return
|
85
|
+
end
|
86
|
+
|
87
|
+
# OK, so we have a sysconftool file to install. Read in the existing
|
88
|
+
# target file, or if that does not exist, the oldfile
|
89
|
+
begin
|
90
|
+
old = ConfigFile.new
|
91
|
+
old.read(targetfile)
|
92
|
+
rescue NoVersionLine
|
93
|
+
# That's OK; the old target will be renamed to .bak
|
94
|
+
rescue Errno::ENOENT
|
95
|
+
begin
|
96
|
+
target_missing = true
|
97
|
+
old.read(oldfile) if oldfile
|
98
|
+
rescue Errno::ENOENT, NoVersionLine
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# Same VERSION? No merge is required
|
103
|
+
if src.version == old.version and not opt[:force]
|
104
|
+
if target_missing
|
105
|
+
FileUtils.cp oldfile, targetfile, :preserve=>true
|
106
|
+
debug << "#{targetfile}: same VERSION, copied from #{oldfile}\n"
|
107
|
+
return
|
108
|
+
end
|
109
|
+
debug << "#{targetfile}: same VERSION, no change\n"
|
110
|
+
return
|
111
|
+
end
|
112
|
+
|
113
|
+
# Merge in old settings (note: any settings which are in targetfile but
|
114
|
+
# not in distfile will be silently dropped)
|
115
|
+
debug << "#{targetfile}:\n"
|
116
|
+
src.settings[1..-1].each do |src_setting|
|
117
|
+
name = src_setting.name
|
118
|
+
old_setting = old[name]
|
119
|
+
unless old_setting
|
120
|
+
debug << " #{name}: new\n"
|
121
|
+
next
|
122
|
+
end
|
123
|
+
if old_setting.version == src_setting.version
|
124
|
+
debug << " #{name}: unchanged\n"
|
125
|
+
src_setting.add_comment("\n DEFAULT SETTING from #{distfile}:\n")
|
126
|
+
src_setting.add_comment(src_setting.content)
|
127
|
+
src_setting.content = old_setting.content
|
128
|
+
next
|
129
|
+
end
|
130
|
+
# Otherwise, must install updated setting and comment out
|
131
|
+
# the current setting for reference
|
132
|
+
debug << " #{name}: UPDATED\n"
|
133
|
+
src_setting.add_comment("\n Previous setting (inserted by rconftool):\n\n")
|
134
|
+
src_setting.add_comment(old_setting.content)
|
135
|
+
end
|
136
|
+
|
137
|
+
return if opt[:noclobber]
|
138
|
+
|
139
|
+
# Write out the new file and carry forward permissions
|
140
|
+
begin
|
141
|
+
tempfile = targetfile+".new#{$$}"
|
142
|
+
src.write(tempfile)
|
143
|
+
st = File.stat(distfile)
|
144
|
+
begin
|
145
|
+
File.chown(st.uid, st.gid, tempfile)
|
146
|
+
rescue Errno::EPERM
|
147
|
+
end
|
148
|
+
File.chmod(st.mode, tempfile)
|
149
|
+
File.rename(targetfile, targetfile+".bak") unless target_missing
|
150
|
+
File.rename(tempfile, targetfile)
|
151
|
+
rescue
|
152
|
+
File.delete(tempfile) rescue nil
|
153
|
+
raise
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
HEADER_ID = '__header__'
|
158
|
+
|
159
|
+
# Object to represent a single setting
|
160
|
+
|
161
|
+
class Setting
|
162
|
+
attr_reader :name, :version
|
163
|
+
attr_accessor :content
|
164
|
+
|
165
|
+
def initialize(name, version)
|
166
|
+
@name = name.gsub(/\s+/,'')
|
167
|
+
@version = version.gsub(/s+/,'')
|
168
|
+
@comment = ""
|
169
|
+
@content = ""
|
170
|
+
@in_content = false
|
171
|
+
end
|
172
|
+
def <<(str)
|
173
|
+
@in_content = true unless /\A#/ =~ str
|
174
|
+
if @in_content
|
175
|
+
@content << str
|
176
|
+
else
|
177
|
+
@comment << str
|
178
|
+
end
|
179
|
+
end
|
180
|
+
# Add text to 'comment' portion of setting, prefixing each line with '#'
|
181
|
+
def add_comment(str)
|
182
|
+
@comment << str.gsub(/^/,'#')
|
183
|
+
end
|
184
|
+
def to_s
|
185
|
+
return "#{@comment}#{@content}" if @name == HEADER_ID
|
186
|
+
return "##NAME: #{@name}:#{@version}\n#{@comment}#{@content}"
|
187
|
+
end
|
188
|
+
end # class Setting
|
189
|
+
|
190
|
+
# Object to represent an entire configuration file. It consists of
|
191
|
+
# an array of Setting objects, with the first one having a special name
|
192
|
+
# (__header__). We also keep a hash of setting name => setting object
|
193
|
+
# to enable us to find a particular setting quickly.
|
194
|
+
|
195
|
+
class ConfigFile
|
196
|
+
attr_reader :version, :settings
|
197
|
+
|
198
|
+
def initialize(filename=nil)
|
199
|
+
read(filename) if filename
|
200
|
+
end
|
201
|
+
|
202
|
+
# fetch a setting by name
|
203
|
+
def [](item)
|
204
|
+
@settings_hash[item]
|
205
|
+
end
|
206
|
+
|
207
|
+
def read(filename)
|
208
|
+
@version = nil
|
209
|
+
curr_setting = Setting.new(HEADER_ID,'')
|
210
|
+
@settings = [curr_setting]
|
211
|
+
@settings_hash = {}
|
212
|
+
|
213
|
+
File.open(filename) do |f|
|
214
|
+
# VERSION header must occur within first 20 lines
|
215
|
+
20.times do
|
216
|
+
line = f.gets
|
217
|
+
break unless line
|
218
|
+
curr_setting << line
|
219
|
+
if line =~ /\A##VERSION:/
|
220
|
+
@version = line
|
221
|
+
break
|
222
|
+
end
|
223
|
+
end
|
224
|
+
raise NoVersionLine, "#{filename}: No VERSION line found" unless @version
|
225
|
+
|
226
|
+
while line = f.gets
|
227
|
+
unless line =~ /\A##NAME:(.*):(.*)/
|
228
|
+
curr_setting << line
|
229
|
+
next
|
230
|
+
end
|
231
|
+
curr_setting = Setting.new($1,$2)
|
232
|
+
@settings << curr_setting
|
233
|
+
@settings_hash[curr_setting.name] = curr_setting
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def write(filename)
|
239
|
+
File.open(filename,"w") do |f|
|
240
|
+
@settings.each do |s|
|
241
|
+
f << s.to_s
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end # class ConfigFile
|
246
|
+
|
247
|
+
# Yield directory contents recursively, without doing chdir(). Note
|
248
|
+
# that yielded pathnames are relative to the base directory given;
|
249
|
+
# so that, for example, you can simulate 'cp -r /foo/bar/ /baz/' by
|
250
|
+
# recurse_dir("/foo/bar") { |n| copy("/foo/bar/"+n,"/baz/"+n) unless
|
251
|
+
# File.directory?("/foo/bar/"+n) }
|
252
|
+
# Current behaviour is that if a directory is a symlink, we follow it.
|
253
|
+
# (Perhaps the block we yield should return true/false?)
|
254
|
+
|
255
|
+
def self.recurse_dir(base)
|
256
|
+
base = base+File::SEPARATOR unless base[-1,1] == File::SEPARATOR
|
257
|
+
dirs = ['']
|
258
|
+
while dir = dirs.pop
|
259
|
+
yield dir unless dir == ''
|
260
|
+
Dir.foreach(base+dir) do |n|
|
261
|
+
next if n == '.' || n == '..'
|
262
|
+
target = dir + n
|
263
|
+
if File.directory?(base+target)
|
264
|
+
dirs << target+File::SEPARATOR
|
265
|
+
next
|
266
|
+
end
|
267
|
+
yield target
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
class Processor
|
273
|
+
attr_reader :o
|
274
|
+
|
275
|
+
# Parse command-line options and set the @o options hash
|
276
|
+
|
277
|
+
def initialize(argv=nil)
|
278
|
+
require 'optparse'
|
279
|
+
|
280
|
+
@o = { :strip_regexp => /\.dist\z/ }
|
281
|
+
return unless argv
|
282
|
+
opts = OptionParser.new do |opts|
|
283
|
+
opts.banner = "rconftool version #{VERSION}"
|
284
|
+
opts.separator "Usage: #{$0} [options]"
|
285
|
+
opts.separator ""
|
286
|
+
opts.separator "Specific options:"
|
287
|
+
|
288
|
+
opts.on("-n", "--noclobber", "Dummy run") do
|
289
|
+
@o[:noclobber] = true
|
290
|
+
end
|
291
|
+
opts.on("-f", "--force", "Update files even if VERSION is same") do
|
292
|
+
@o[:force] = true
|
293
|
+
end
|
294
|
+
opts.on("-q", "--quiet", "No progress reporting") do
|
295
|
+
@o[:debug] = ""
|
296
|
+
end
|
297
|
+
opts.on("--targetdir DIR", "Where to write merged config files") do |dir|
|
298
|
+
@o[:targetdir] = dir
|
299
|
+
end
|
300
|
+
opts.on("--olddir DIR", "If file does not exist in targetdir,",
|
301
|
+
"try to merge from here") do |dir|
|
302
|
+
@o[:olddir] = dir
|
303
|
+
end
|
304
|
+
opts.on("--[no-]recursive", "Traverse directories recursively") do |v|
|
305
|
+
@o[:recursive] = v
|
306
|
+
end
|
307
|
+
opts.on("--strip-suffix FOO", "Remove suffix FOO from target filenames",
|
308
|
+
"(default .dist)") do |suffix|
|
309
|
+
@o[:strip_regexp] = /#{Regexp.escape(suffix)}\z/
|
310
|
+
end
|
311
|
+
opts.on("-a", "--add-suffix FOO", "Add suffix FOO to target filenames") do |suffix|
|
312
|
+
@o[:add_suffix] = suffix
|
313
|
+
end
|
314
|
+
|
315
|
+
opts.on_tail("-?", "--help", "Show this message") do
|
316
|
+
puts opts
|
317
|
+
exit
|
318
|
+
end
|
319
|
+
end
|
320
|
+
opts.parse!(argv)
|
321
|
+
end
|
322
|
+
|
323
|
+
# Process a list of files, [src1,src2,...]. If recursive mode has been
|
324
|
+
# enabled, then subdirectories of destdir are created as necessary
|
325
|
+
# when 'src' is a directory, and the mode/ownership of these newly
|
326
|
+
# created directories is copied from the original.
|
327
|
+
|
328
|
+
def run(files)
|
329
|
+
done_work = false
|
330
|
+
files.each do |f|
|
331
|
+
if not File.directory?(f)
|
332
|
+
dst = old = nil
|
333
|
+
dst = @o[:targetdir] + File::SEPARATOR + File.basename(f) if @o[:targetdir]
|
334
|
+
old = @o[:olddir] + File::SEPARATOR + File.basename(f) if @o[:olddir]
|
335
|
+
Rconftool::install(f, dst, old, @o)
|
336
|
+
elsif not @o[:recursive]
|
337
|
+
raise Errno::EISDIR, "#{f} (not copied). Need --recursive?"
|
338
|
+
else
|
339
|
+
Rconftool::recurse_dir(f) do |nf|
|
340
|
+
src = f + File::SEPARATOR + nf
|
341
|
+
dst = old = nil
|
342
|
+
dst = @o[:targetdir] + File::SEPARATOR + nf if @o[:targetdir]
|
343
|
+
old = @o[:olddir] + File::SEPARATOR + nf if @o[:olddir]
|
344
|
+
if File.directory?(src)
|
345
|
+
if dst and not File.directory?(dst)
|
346
|
+
orig = File.stat(src)
|
347
|
+
Dir.mkdir(dst, orig.mode)
|
348
|
+
begin
|
349
|
+
File.chown(orig.uid, orig.gid, dst)
|
350
|
+
rescue Errno::EPERM
|
351
|
+
end
|
352
|
+
end
|
353
|
+
else
|
354
|
+
Rconftool::install(src, dst, old, @o)
|
355
|
+
end
|
356
|
+
end
|
357
|
+
end
|
358
|
+
done_work = true
|
359
|
+
end
|
360
|
+
unless done_work
|
361
|
+
$stderr.puts "Usage: #{$0} [options] src1 src2 ...\n"+
|
362
|
+
"Try #{$0} --help for more information\n"
|
363
|
+
exit 1
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end # class Processor
|
367
|
+
|
368
|
+
end # module Rconftool
|
369
|
+
|
370
|
+
# Run from command line?
|
371
|
+
if __FILE__ == $0
|
372
|
+
|
373
|
+
begin
|
374
|
+
s = Rconftool::Processor.new(ARGV)
|
375
|
+
s.run(ARGV)
|
376
|
+
rescue Exception => e
|
377
|
+
$stderr.puts "#{$0}: #{e}"
|
378
|
+
end
|
379
|
+
|
380
|
+
end
|
data/extras/zip/zip.rb
CHANGED
data/init.rb
CHANGED
@@ -23,6 +23,7 @@
|
|
23
23
|
|
24
24
|
require "ev/rwd"
|
25
25
|
require 'fileutils'
|
26
|
+
require 'extras/rconftool'
|
26
27
|
|
27
28
|
$progdir = File::expand_path( File.dirname(__FILE__))
|
28
29
|
|
@@ -51,15 +52,33 @@ $progdir = File::expand_path( File.dirname(__FILE__))
|
|
51
52
|
if(!test(?d,x))
|
52
53
|
# only rwd files
|
53
54
|
if x =~ /rb|rwd|txt/
|
54
|
-
|
55
|
-
|
55
|
+
|
56
|
+
load x #opens the file thats in fileName and reads it
|
57
|
+
$tempdoc += $rwdguivar # adds the file into the doc string
|
56
58
|
end
|
57
59
|
end
|
58
60
|
end
|
59
61
|
end
|
60
62
|
|
63
|
+
# integrate the new configuration files
|
64
|
+
MAINconfignew = "rwdconfig.cnf"
|
65
|
+
MAINconfigdist = "rwdconfig.dist"
|
66
|
+
Rconftool::install(MAINconfigdist,MAINconfignew)
|
67
|
+
|
68
|
+
Dir.chdir("configuration") #changes the current working directory
|
69
|
+
|
70
|
+
fileList = Dir.new(".").entries.sort.reverse.delete_if { |x| ! (x =~ /dist$/) } #creates an Array separated with \n
|
71
|
+
@doc = ""
|
72
|
+
fileList.length.times{ #opening of a block
|
73
|
+
configdist =fileList.pop #pops the first item out of the Array
|
74
|
+
tempconfigfile = configdist.gsub(/\.dist$/, "")
|
75
|
+
confignew = tempconfigfile + ".cnf"
|
76
|
+
Rconftool::install(configdist,confignew) #integrates new file with old
|
77
|
+
} #closing block
|
78
|
+
# END of configuration integration
|
79
|
+
Dir.chdir($progdir)
|
80
|
+
|
61
81
|
# Read in the configuration files
|
62
|
-
|
63
82
|
Dir.chdir("configuration") #changes the current working directory
|
64
83
|
|
65
84
|
fileList = Dir.new(".").entries.sort.reverse.delete_if { |x| ! (x =~ /cnf$/) } #creates an Array separated with \n
|
@@ -69,10 +88,12 @@ $progdir = File::expand_path( File.dirname(__FILE__))
|
|
69
88
|
load fileName #loads the the config file thats in fileName
|
70
89
|
} #closing block
|
71
90
|
# END of configuration reading
|
72
|
-
|
91
|
+
|
73
92
|
Dir.chdir($progdir) # change back to top program directory
|
74
93
|
|
75
94
|
# build the English Language hash file from the parts
|
95
|
+
languagehashvariable = 'Message = Hash.new { |hh, kk| hh[kk] = "ERROR: Message not found: #{kk.inspect}."; hh[kk] }
|
96
|
+
langmessage = {' + "\n"
|
76
97
|
startlangdir = File.join(LangDir,"en")
|
77
98
|
#get a list of the files and subdirectories on the starting directory only
|
78
99
|
alanghash = Array.new(Dir[startlangdir].entries.sort)
|
@@ -100,10 +121,11 @@ $progdir = File::expand_path( File.dirname(__FILE__))
|
|
100
121
|
end
|
101
122
|
end
|
102
123
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
124
|
+
|
125
|
+
#writes the contents of doc into the languagehashvariable
|
126
|
+
languagehashvariable = languagehashvariable + $tempdoc + "} ; langmessage.each { |kk, vv| Message[kk] = vv }"
|
127
|
+
|
128
|
+
# END of en Lang building
|
107
129
|
$tempdoc = " "
|
108
130
|
Dir.chdir($progdir) # change back to top program directory
|
109
131
|
|
@@ -135,31 +157,16 @@ $progdir = File::expand_path( File.dirname(__FILE__))
|
|
135
157
|
end
|
136
158
|
end
|
137
159
|
|
138
|
-
|
139
|
-
|
140
|
-
|
160
|
+
|
161
|
+
#writes the contents of doc into the variable
|
162
|
+
languagehashvariable = languagehashvariable + " ; Message.update(" + $tempdoc + ' :rwdtinker => "Rwdtinker" ) '
|
163
|
+
|
141
164
|
|
142
165
|
$tempdoc = " "
|
143
166
|
|
144
167
|
Dir.chdir($progdir) # change back to top program directory
|
145
|
-
|
146
|
-
|
147
|
-
#get a list of the files in lang directory only
|
148
|
-
alangfile = Dir.new(LangDir).entries.sort.reverse.delete_if { |x| ! (x =~ /rb$/) }
|
149
|
-
alangfile.length.times{
|
150
|
-
fileName = alangfile.pop
|
151
|
-
Dir.chdir($progdir)
|
152
|
-
Dir.chdir(LangDir)
|
153
|
-
fileLangA=File.open("#{fileName}","r") #opens the file thats in fileName as read only
|
154
|
-
$tempdoc += fileLangA.read #reads the file into the doc string
|
155
|
-
fileLangA.close
|
156
|
-
}
|
157
|
-
|
158
|
-
Dir.chdir($progdir)
|
159
|
-
fileLangB=File.open(LangNameFile,"w") #deletes and opens a the file in fileName
|
160
|
-
fileLangB.write($tempdoc) #writes the contents of doc into the file
|
161
|
-
fileLangB.close
|
162
|
-
load LangNameFile # load the file
|
168
|
+
|
169
|
+
temp = eval( languagehashvariable )
|
163
170
|
|
164
171
|
$tempdoc = " "
|
165
172
|
|
@@ -190,10 +197,9 @@ Dir.chdir($progdir)
|
|
190
197
|
end
|
191
198
|
end
|
192
199
|
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
require CodeName # load the program file
|
200
|
+
|
201
|
+
# load the program file
|
202
|
+
tempcoderesult = eval( $tempdoc )
|
197
203
|
|
198
204
|
# build the actual GUI from the gui parts
|
199
205
|
$tempdoc = " "
|
@@ -224,9 +230,8 @@ Dir.chdir($progdir)
|
|
224
230
|
end
|
225
231
|
end
|
226
232
|
|
227
|
-
|
228
|
-
|
229
|
-
fileB.close
|
233
|
+
# gui variable is done
|
234
|
+
guiRWD = $tempdoc
|
230
235
|
|
231
236
|
require 'socket' # Network stuff
|
232
237
|
host = "127.0.0.1"
|
@@ -266,4 +271,4 @@ $port = port
|
|
266
271
|
end
|
267
272
|
|
268
273
|
|
269
|
-
RwdTinker.
|
274
|
+
RwdTinker.new( guiRWD).serve(port) # start the main class and program
|