rwdshell 0.95 → 0.96

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/Readme.txt +5 -1
  2. data/code/superant.com.rwdtinkerbackwindow/controlclient.rb +25 -26
  3. data/code/superant.com.rwdtinkerbackwindow/helptexthashtinkerwin2.rb +25 -4
  4. data/code/superant.com.rwdtinkerbackwindow/installapplet.rb +1 -0
  5. data/code/superant.com.rwdtinkerbackwindow/installgemapplet.rb +6 -7
  6. data/code/superant.com.rwdtinkerbackwindow/installremotegem.rb +19 -0
  7. data/code/superant.com.rwdtinkerbackwindow/listgemdirs.rb +12 -0
  8. data/code/superant.com.rwdtinkerbackwindow/listgemzips.rb +2 -2
  9. data/code/superant.com.rwdtinkerbackwindow/listzips.rb +22 -7
  10. data/code/superant.com.rwdtinkerbackwindow/openhelpwindowtinkerwin2.rb +3 -0
  11. data/code/superant.com.rwdtinkerbackwindow/remotegemlist.rb +24 -0
  12. data/code/superant.com.rwdtinkerbackwindow/saveconfigurationrecord.rb +1 -1
  13. data/configuration/rwdshellversion.cnf +1 -1
  14. data/configuration/rwdtinker.cnf +0 -3
  15. data/configuration/rwdtinkerversion.cnf +1 -1
  16. data/configuration/tinkerwin2variables.cnf +5 -1
  17. data/extras/cmdline_parse +47 -0
  18. data/extras/config_file +69 -0
  19. data/extras/errorMsg +19 -0
  20. data/extras/makePlaylist +34 -0
  21. data/extras/mp3controld +289 -0
  22. data/extras/playlist +186 -0
  23. data/extras/showHelp +18 -0
  24. data/gui/00coreguibegin/applicationguitop.rwd +1 -1
  25. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/40rwdlistzips.rwd +9 -10
  26. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/45installremotezip.rwd +44 -0
  27. data/init.rb +22 -35
  28. data/installed/rwdtinkerwin2-0.5.inf +8 -0
  29. data/installed/rwdviewlogo-0.4.inf +4 -0
  30. data/rwd_files/HowTo_Shell.txt +5 -1
  31. data/rwd_files/HowTo_Tinker.txt +17 -1
  32. data/tests/rwdtinkertestEN.rb +163 -0
  33. data/tests/test.result +32 -0
  34. metadata +20 -14
  35. data/gui/frontwindowtdocuments/superant.com.shelldocument/vvdocshellxp.rwd +0 -5
  36. data/lang/alanguagehashbegin.rb +0 -4
  37. data/lang/languagehash.rb +0 -4
  38. data/lang/templangfile.rb +0 -16
  39. data/lang/vlanguagehashend.rb +0 -6
  40. data/lang/wlocallangstart.rb +0 -5
  41. data/lang/xlocallangfile.rb +0 -16
  42. data/lang/zlocallangend.rb +0 -2
  43. data/zips/rwdwcalc-0.50.zip +0 -0
@@ -0,0 +1,289 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # --- MP3 Control ---
4
+ #
5
+ # Author: Magnus Engstr�m
6
+ # Email: magnus@gisab.se
7
+ # File: mp3controld
8
+ #
9
+ # Description
10
+ # -----------
11
+ # An application which manages
12
+ # mp3 songs on the poor users
13
+ # computer.
14
+ # -------------------------
15
+
16
+ # --- External files ---
17
+ # Change directory to find all functions
18
+ #Dir::chdir("/usr/lib/mp3control")
19
+
20
+ load "extras/config_file" # Handles the mp3controld.conf configuration file
21
+ load "extras/cmdline_parse" # Provides the Commandline::parse which returns an hash of the commandline
22
+ load "extras/showHelp" # Hmmm... guess what? This function shows the help message =)
23
+ load "extras/errorMsg" # Outputs error messages to the admin
24
+ load "extras/playlist" # Core playlist functionality
25
+
26
+ # --- MP3Control - the main class ---
27
+ class MP3Control
28
+ # --- Core functions ---
29
+ # initialize() reads the config files and daemonizes!
30
+ def initialize()
31
+ # Parse the commandline
32
+ $commandline = Commandline::parse()
33
+
34
+ # Display help if the commandline sucks
35
+ if($commandline == -1)
36
+ showHelp()
37
+ Kernel::exit(-1)
38
+ end
39
+
40
+ # Make this class instance a background daemon
41
+ daemonize() if($commandline["--daemon"] != 'no' && $commandline["-D"] != 'no')
42
+
43
+ # Read the configuration file
44
+ configfile = ( $commandline["--configfile"] ? $commandline["--configfile"] : 'configuration/mp3controld.conf' ) # Use the --configfile if supplied, else use the default /etc/mp3controld/mp3controld.conf
45
+ $configFile = ConfigFile::parse(configfile) # Create an new config file object
46
+ errorMsg("Configuration file #{configfile} isn't readable or doesn't exist!", 137) if($configFile == -1)
47
+
48
+ # Find the default playlist (or use the user supplied one from the commandline)
49
+ defaultPlaylist = $configFile.getParam("programConfig", "defaultPlaylist")
50
+ defaultPlaylist = $commandline["--playlist"] if($commandline["--playlist"])
51
+ if( $configFile.getParam(defaultPlaylist, 'listFile').type == String) # Make sure the listFile contains a value
52
+ if(FileTest.readable_real?( $configFile.getParam(defaultPlaylist, 'listFile') )) # Make sure this file is readable
53
+ # Cool. Everything looks alright. Lets create a playlist!
54
+ errorMsg("Loading playlist '#{defaultPlaylist}' from #{$configFile.getParam(defaultPlaylist, 'listFile')}...") if($commandline['--verbose'] == 'on')
55
+ $current_playlist = Playlist::create_from_file($configFile.getParam(defaultPlaylist, 'listFile'))
56
+ $current_playlist_name = defaultPlaylist
57
+
58
+ # Errorhandling
59
+ errorMsg("Playlist creation from #{$current_playlist.filename} failed.", 1) if($current_playlist == -1) # Quit and complain if it didn't work
60
+ errorMsg("Playlist #{defaultPlaylist} (#{$current_playlist.filename}) doesn't contain any entries.", 1) if($current_playlist.length() < 1)
61
+ errorMsg("Playlist '#{defaultPlaylist}' loaded successfully.") if($commandline["--verbose"] == 'on')
62
+
63
+ # Fix wrap/repeat and shuffle the playlist if the configfile says so
64
+ $current_playlist.wrap = true if($configFile.getParam(defaultPlaylist, 'repeat') == 'true')
65
+ $current_playlist.shuffle() if($configFile.getParam(defaultPlaylist, 'random') == 'true')
66
+ $current_playlist.goto(0) # Rewind the playlist
67
+ else
68
+ errorMsg("The default playlist doesn't appear to exist, or has the wrong permissions. That's not good.", 1)
69
+ end
70
+ else # listFile returns other than string, that's baaaaad
71
+ errorMsg("the listFile value for '#{defaultPlaylist}' doesn't appear to exist in your #{$configFile.filename}. That's not good.", 1)
72
+ end
73
+
74
+ # Check for the existence of our mpg123 instance
75
+ errorMsg("Trying to find the mp3 player...") if($commandline["--verbose"] == 'on')
76
+ @mpg123 = $configFile.getParam('programConfig', 'application') # Get the application name, path, and possible arguments
77
+ mpg123_application = @mpg123.scan(/^\S+/)
78
+ if(mpg123_application.type == Array)
79
+ mpg123_application = mpg123_application[0]
80
+ else
81
+ errorMsg("Please check your ProgramConfig/application setting in the configuration file. It seems weird.", 1)
82
+ end
83
+
84
+ # Do some nice errorhandling
85
+ if( !FileTest::executable_real?(mpg123_application) )
86
+ errorMsg("#{mpg123_application} doesn't appear to exist. Please do something about it (no, not \"touch #{mpg123_application}\"! Stupid!).", 1)
87
+ else
88
+ errorMsg("Found #{mpg123_application}!") if($commandline["--verbose"] == 'on')
89
+ end
90
+
91
+ # Open an instance of mpg123, our high-performance mp3 player
92
+ @@mpg123 = IO::popen("#{@mpg123} -R -", 'r+')
93
+
94
+ # Start all plugins
95
+ load_plugins()
96
+
97
+ # Start the mp3 player
98
+ mpg123_control()
99
+
100
+ end
101
+
102
+ # mpg123_control() gets the input from the mpg123 process and handles it hopefully correctly :)
103
+ def mpg123_control()
104
+
105
+ # Initialize class variables
106
+ @@stopped = false
107
+
108
+ # Start playing if the configfile says so
109
+ if( $configFile.getParam('programConfig', 'playOnStartup') == 'true' )
110
+ MP3Control::play()
111
+ else
112
+ puts("Dont want to play!")
113
+ end
114
+
115
+ # The infinite 5 second loop =)
116
+ while(true)
117
+ begin
118
+ input = @@mpg123.readline.chop()
119
+ rescue EOFError
120
+ errorMsg("mpg123 error! Probably just a file that didn't exist (#{$current_playlist.song_info["filename"]}).")
121
+ @@mpg123 = IO::popen("#{@mpg123} -R -", 'r+') # Just start it again...
122
+ MP3Control::next_song() # Next song, so it doesn't die again...
123
+ end
124
+
125
+ # Song stopped
126
+ MP3Control::next_song() if(input == '@P 0' && @@stopped != true) # Change to the next song if current song stops and the user didn't told it to
127
+ @@stopped = false if(input == '@P 0' && @@stopped == true) # Reset the stop-flag if the user ordered the stop
128
+
129
+ # Time left
130
+ if(input[0,2] == '@F')
131
+ input =~ /^@F\s+\S+\s+\S+\s+(\S+)\s+(\S+)$/
132
+ @@time = $1
133
+ @@timeleft = $2
134
+ end
135
+
136
+ end
137
+ end
138
+
139
+ # start() creates a new instance. Just like .new, but a nicer name.
140
+ def MP3Control::start()
141
+ MP3Control::new()
142
+ end
143
+
144
+ # daemonize() daemonizes this process. Cool =)
145
+ def daemonize()
146
+ if(child_pid = fork) # Parent code
147
+ puts("PID #{child_pid}")
148
+ Kernel::exit(0) # We dont want this parent process any more. Too bad.
149
+ end
150
+
151
+ # Child code. And child wants to be free from parent
152
+ Process.setsid()
153
+ end
154
+
155
+ # load_plugins() loads all plugins that can be found in the plugins directory
156
+ def load_plugins()
157
+ Dir::entries('extras/plugins/').each { |plugin|
158
+ # Try to load every plugin except all files that begins with a dot
159
+ if(plugin[0].chr() != '.')
160
+ retval = 0
161
+ # Do some errorhandling
162
+ begin
163
+ load("extras/plugins/#{plugin}") # Load the files
164
+ errorMsg("Loaded plugin '#{plugin}'") if($commandline['--verbose'] == 'no')
165
+ rescue SyntaxError
166
+ errorMsg("Plugin '#{plugin}' has syntax errors.")
167
+ end
168
+
169
+ # Run the plugin in a separate thread
170
+ # Try to start the class with the same name as the plugin
171
+ eval("
172
+ Thread::new() {
173
+ start_again = true
174
+ while(start_again)
175
+ puts(\"Plugin starting...\")
176
+ begin
177
+ retval = #{plugin}::start()
178
+ rescue
179
+ error = $!
180
+ puts(error)
181
+ puts(error.backtrace)
182
+ puts(\"Error in plugin #{plugin}! Waiting for 5 seconds before attempting to start again...\")
183
+ sleep(5)
184
+ end
185
+ if(retval == -1)
186
+ errorMsg(\"Plugin 'plugins/#{plugin}' failed to load...\")
187
+ start_again = false
188
+ end
189
+ end
190
+ }
191
+ ")
192
+
193
+ end
194
+ }
195
+ end
196
+
197
+ # exit_mpg123() terminates the current mpg123 session
198
+ def MP3Control::exit_mpg123()
199
+ #system("kill `pidof mpg123`") # Yes, I know this isn't a nice way to do it in, please fix this and send me a patch :)
200
+ end
201
+
202
+ # mpg123_command() sends a command to mpg123
203
+ def MP3Control::mpg123_command(command)
204
+ errorMsg("mpg123 command: '#{command}'") if($commandline['--verbose'] == 'on')
205
+ @@mpg123.write("#{command}\n")
206
+ @@mpg123.flush()
207
+ end
208
+
209
+
210
+ # --- play functions ---
211
+ # play() plays the current index of the current playlist
212
+ def MP3Control::play()
213
+ @@stopped = false
214
+ mpg123_command("LOAD #{$current_playlist.song_info["filename"]}")
215
+ end
216
+
217
+ # stop() stops playing
218
+ def MP3Control::stop()
219
+ mpg123_command("PAUSE")
220
+ @@stopped = true # Set the stop-status to true
221
+ end
222
+
223
+ # pause() pauses playing
224
+ def MP3Control::pause()
225
+ @@stopped = false
226
+ mpg123_command("PAUSE")
227
+ end
228
+
229
+ # next_song() loads the next song. Yay...
230
+ def MP3Control::next_song()
231
+ retval = $current_playlist.next()
232
+ if(retval == -1)
233
+ errorMsg("Error while changing to the next song.") # Tell him/her
234
+ else
235
+ MP3Control::play() if(@@stopped == false)
236
+ end
237
+ end
238
+
239
+ # prev_song() loads the previous song. Yay...
240
+ def MP3Control::prev_song()
241
+ retval = $current_playlist.prev()
242
+ if(retval == -1)
243
+ errorMsg("Error while changing to the previous song.") # Tell him/her
244
+ else
245
+ MP3Control::play() if(@@stopped == false)
246
+ end
247
+ end
248
+
249
+ # forward(sec) jumps sec seconds forward
250
+ def MP3Control::forward(sec)
251
+ mpg123_command("JUMP +#{sec*38}")
252
+ end
253
+
254
+ # backward(sec) jumps sec seconds backward
255
+ def MP3Control::backward(sec)
256
+ mpg123_command("JUMP -#{sec*38}")
257
+ end
258
+
259
+
260
+ # --- Misc functions ---
261
+ # getTime() - Get the current song time information. getTime(true) for time left
262
+ def MP3Control::getTime(whichTime = 'elapsed')
263
+ case whichTime
264
+ when 'elapsed'
265
+ parsed = Time::at(@@time.to_i)
266
+ when 'left'
267
+ parsed = Time::at(@@timeleft.to_i)
268
+ when 'total'
269
+ parsed = Time::at( (@@time.to_f + @@timeleft.to_f).to_i )
270
+ end
271
+
272
+ hour = (parsed.hour - 1).to_s
273
+ min = parsed.min.to_s
274
+ sec = parsed.sec.to_s
275
+
276
+ hour = "0#{hour}" if(hour.length == 1)
277
+ min = "0#{min}" if(min.length == 1)
278
+ sec = "0#{sec}" if(sec.length == 1)
279
+
280
+ hour = (hour == '00' ? '' : "#{hour}:")
281
+
282
+ # Return the now formatted time
283
+ "#{hour}#{min}:#{sec}"
284
+ end
285
+
286
+ end
287
+
288
+ # Create an instance of the MP3Control class and start the application
289
+ MP3Control::start()
data/extras/playlist ADDED
@@ -0,0 +1,186 @@
1
+ #!ruby
2
+
3
+ # --- Playlist class ---
4
+ #
5
+ # Author: Magnus Engstr�m
6
+ # Email: magnus@gisab.se
7
+ # File: playlist
8
+ #
9
+ # Description
10
+ # -----------
11
+ # The Playlist class handles everything a playlist should be able to manage.
12
+ # Shuffle it, unshuffle it, wrap it if desired, add new songs, find songs and
13
+ # so on. Cool huh? :)
14
+ # ----------------------
15
+
16
+ class Playlist
17
+ # create_from_file() creates a playlist from a file and returns either a Playlist instance or -1 in case of error
18
+ # This function should be used instead of the ::new, because this one
19
+ # returns -1 on file read errors, which the ::new doesn't.
20
+ def Playlist::create_from_file(filename)
21
+ # Check that the file is readable
22
+ if(FileTest::readable_real?(filename))
23
+ new(filename) # Return the Playlist class instance
24
+ else
25
+ -1 # Return -1 on error
26
+ end
27
+ end
28
+
29
+ # initialize reads the playlist from a file and returns the Playlist instance
30
+ def initialize(filename)
31
+
32
+ @filename = filename # Store the filename for later use
33
+ @playlist = Array::new() # This hash contains the whole playlist
34
+ @index = 0 # Playlist's current position
35
+ @wrap = false # Don't repeat the list as default
36
+
37
+ # Parse these fields, separated with double pipes (||) (songname, artist, album, year, comment, tracknum, genre_id, genre)
38
+ File::foreach(filename) { |line| # Iterate through every line in the file
39
+ foo = line.split(/\|\|/)
40
+ @playlist << { "filename" => foo[0], "songname" => foo[1], "artist" => foo[2], "album" => foo[3], "year" => foo[4], "comment" => foo[5], "tracknum" => foo[6], "genre_id" => foo[7], "genre" => foo[8] } # Add a hash to the @playlist array with all values found in the playlist file
41
+ }
42
+
43
+ end
44
+
45
+ def insert(song, placement = 0)
46
+ # Check song information
47
+ return -1 if(song.type != Hash)
48
+ song = { "filename" => song["filename"], "songname" => song["songname"], "artist" => song["artist"], "album" => song["album"], "year" => song["year"], "comment" => song["comment"], "tracknum" => song["tracknum"], "genre_id" => song["genre_id"], "genre" => song["genre"] }
49
+
50
+ # Check minimum and maximum values
51
+ placement = 0 if(placement < 0)
52
+ placement = @playlist.length() if(placement > @playlist.length() )
53
+
54
+ # Retrieve the two parts of the split playlist
55
+ first = @playlist[0...placement]
56
+ second = @playlist[placement...@playlist.length()]
57
+
58
+ # Put it together again
59
+ @playlist = Array::new()
60
+ @playlist = first
61
+ @playlist << song
62
+ @playlist.concat(second)
63
+
64
+ end
65
+
66
+ def remove(placement = 0)
67
+ # Check boundaries
68
+ placement = 0 if(placement < 0)
69
+ placement = @playlist.length()-1 if( placement >= @playlist.length() )
70
+
71
+ # Delete the item
72
+ @playlist.delete_at(placement)
73
+ end
74
+
75
+ def find(search_string, case_insensitive = false, fields = ["songname", "filename"])
76
+ case_insensitive = nil if(case_insensitive == false)
77
+
78
+ results = Array::new()
79
+ regex = Regexp::new(search_string, case_insensitive) # The regex that will be matched
80
+
81
+ # Iterate through the playlist to find one or more matching songs
82
+ @playlist.length().times { |index|
83
+ # Iterate through the user supplied list of fields to be searched
84
+ fields.each { |field|
85
+ # Make sure this is a hash, so we don't go and crash, or make someone's dog sick :)
86
+ if(@playlist[index].type == Hash)
87
+ results << index if( regex.match(@playlist[index][field]) && !(results.include?(index)) ) # If it matches, and if it doesn't already is in the results. We don't want duplicates :)
88
+ end
89
+ }
90
+ }
91
+
92
+ results # Return the results
93
+
94
+ end
95
+
96
+ def shuffle()
97
+ # Iterate through the playlist
98
+ ( 0...@playlist.length() ).each { |i|
99
+ j = rand @playlist.length() # Grab a random value between 0 and @playlist.length()
100
+
101
+ # Maintain index
102
+ if(@index == j)
103
+ @index = i
104
+ elsif(@index == i)
105
+ @index = j
106
+ end
107
+
108
+ @playlist[i], @playlist[j] = @playlist[j], @playlist[i]
109
+ }
110
+ end
111
+
112
+ def re_read()
113
+ # Maintain index
114
+ current_filename = @playlist[@index]["filename"]
115
+
116
+ # Create a new playlist array
117
+ @playlist = Array::new()
118
+ @index = 0
119
+ foo_index = 0 # Just to keep the count while adding all songs to the @playlist
120
+
121
+ # Parse these fields, separated with double pipes (||) (songname, artist, album, year, comment, tracknum, genre_id, genre)
122
+ # Iterate through every line in the file
123
+ File::foreach(@filename) { |line|
124
+ foo = line.split(/\|\|/) # Separate the fields with double pipes (||)
125
+ @playlist << { "filename" => foo[0], "songname" => foo[1], "artist" => foo[2], "album" => foo[3], "year" => foo[4], "comment" => foo[5], "tracknum" => foo[6], "genre_id" => foo[7], "genre" => foo[8] } # Add a hash to the @playlist array with all values found in the playlist file
126
+
127
+ # Maintain index
128
+ @index = foo_index if(foo[0] == current_filename)
129
+ foo_index += 1
130
+ }
131
+
132
+ end
133
+
134
+ def next()
135
+ # Increase the counter and return -1 if the playlist went to far, and wrap isn't true
136
+ @index += 1
137
+ if( @index >= @playlist.length() )
138
+ if(@wrap)
139
+ @index = 0
140
+ else
141
+ @index -= 1
142
+ -1 # Return an error
143
+ end
144
+ else
145
+ @index
146
+ end
147
+ end
148
+
149
+ def prev()
150
+ # Decrease the counter and return -1 if the playlist went to far, and wrap isn't true
151
+ @index -= 1
152
+ if( @index < 0 )
153
+ if(@wrap)
154
+ @index = @playlist.length() -1
155
+ else
156
+ @index += 1
157
+ -1 # Return an error
158
+ end
159
+ else
160
+ @index
161
+ end
162
+ end
163
+
164
+ def song_info(index = @index)
165
+ @playlist[index]
166
+ end
167
+
168
+ def goto(index = 0)
169
+ if( index >= 0 && index < @playlist.length() )
170
+ @index = index
171
+ else
172
+ return -1
173
+ end
174
+ end
175
+
176
+ def length()
177
+ @playlist.length()
178
+ end
179
+
180
+ def each()
181
+ @playlist.each { |song| yield(song) }
182
+ end
183
+
184
+ attr_reader :wrap, :index, :filename
185
+ attr_writer :wrap
186
+ end
data/extras/showHelp ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # --- showHelp ----
4
+ #
5
+ # Author: Magnus Engstr�m
6
+ # Email: magnus@gisab.se
7
+ # File: showHelp
8
+ #
9
+ # Description
10
+ # -----------
11
+ # This function
12
+ # print the help
13
+ # message on STDOUT
14
+ # -----------------
15
+
16
+ def showHelp()
17
+ STDOUT.puts("MaGnuX Mp3 Management server - Ruby Edition v0.2a\n-------------------------------------------------\n\n--help\t\t\tShow this message\n--debug on\t\tShow some debug data\n--configfile file\tSelect configuration file\n--daemon, -D (yes*|no)\tGo to background on startup\n\n")
18
+ end
@@ -1,4 +1,4 @@
1
1
  $rwdguivar=
2
2
  "<application>
3
- <window name=\"main\" title=\"rwdshell - shell and scripts using Tinker - RubyWebDialogs\">
3
+ <window name=\"main\" title=\"Tinker - RubyWebDialogs\">
4
4
  <tabs>"
@@ -6,30 +6,29 @@ $rwdguivar=
6
6
  <row> <p align=\"right\">File Name:</p> <text size=70 name=\"a_installapplet\"/> </row>
7
7
 
8
8
  </table>
9
- <horizontal>
10
- <button caption=\"view applet contents\" action=\"viewappletcontents\"/>
11
- <button caption=\"view (GEM Directory) applet contents\" action=\"viewgemappletcontents\"/>
12
- </horizontal>
13
- <p>%appletcontentstext%</p>
9
+
14
10
 
15
11
  <horizontal>
16
12
 
17
-
18
- <button caption=\"install applet\" action=\"installapplet\"/>
19
- <button caption=\"install (Gem Directory) applet\" action=\"installgemapplet\"/>
13
+
14
+ <button caption=\"install (rwdtinker) applet\" action=\"installgemapplet\"/>
20
15
  <button caption=\"Help\" action=\"runhelpwindowtinkerwin2\"/>
21
16
 
22
17
  </horizontal>
23
18
  <p>%installapplettext%</p>
24
19
 
25
-
20
+ <horizontal>
21
+
22
+ <button caption=\"view (rwdtinker) applet contents\" action=\"viewgemappletcontents\"/>
23
+ </horizontal>
24
+ <p>%appletcontentstext%</p>
26
25
  <table>
27
26
  <row> <p align=\"right\">Click below to view the list of zip files </row>
28
27
 
29
28
  </table>
30
29
 
31
30
  <horizontal>
32
- <button caption=\"List applets available for installing\" action=\"listzipfilestoinstall\"/>
31
+ <button caption=\"List (zip directory) applets available for installing\" action=\"listzipfilestoinstall\"/>
33
32
 
34
33
  <button caption=\"List applets (in the GEM Directory) available for installing\" action=\"listgemzips\"/>
35
34
 
@@ -0,0 +1,44 @@
1
+ $rwdguivar=
2
+ "
3
+ <tab name=\"superantcomremotezipsinstall\" caption=\"Install Remote Applets\">
4
+
5
+ <table>
6
+ <row> <p align=\"right\">File Name:</p> <text size=70 name=\"superantcominstallremoteappletinput\"/> </row>
7
+
8
+ </table>
9
+ <horizontal>
10
+ <button caption=\"install remote Gem applet package\" action=\"superantcominstallremotegemapplet\"/>
11
+ <button caption=\"Help\" action=\"runhelpwindowtinkerwin2\"/>
12
+
13
+ </horizontal>
14
+ <p>%superantcominstallremotegemappletresult%</p>
15
+
16
+ <horizontal>
17
+
18
+
19
+
20
+ <button caption=\"view already installed GEM applets\" action=\"superantcomshowgemfiledirs\"/>
21
+ </horizontal>
22
+ <p>%%superantcomshowgemappletdirsresult%%</p>
23
+
24
+
25
+
26
+
27
+
28
+ <table>
29
+ <row> <p align=\"right\">Click below to view the list of zip files </row>
30
+
31
+ </table>
32
+
33
+ <horizontal>
34
+
35
+ <button caption=\"List applets in the Remote GEM Repository available for downloading\" action=\"superantcomremotegemlist\"/>
36
+
37
+ </horizontal>
38
+ <p>%superantcomremotegemappletsfullresult%</p>
39
+ <p>%%superantcomremotegemappletsresult%%</p>
40
+
41
+ </tab>"
42
+
43
+
44
+
data/init.rb CHANGED
@@ -51,8 +51,9 @@ $progdir = File::expand_path( File.dirname(__FILE__))
51
51
  if(!test(?d,x))
52
52
  # only rwd files
53
53
  if x =~ /rb|rwd|txt/
54
- load x #opens the file thats in fileName and reads it
55
- $tempdoc += $rwdguivar # adds the file into the doc string
54
+
55
+ load x #opens the file thats in fileName and reads it
56
+ $tempdoc += $rwdguivar # adds the file into the doc string
56
57
  end
57
58
  end
58
59
  end
@@ -73,6 +74,8 @@ $progdir = File::expand_path( File.dirname(__FILE__))
73
74
  Dir.chdir($progdir) # change back to top program directory
74
75
 
75
76
  # build the English Language hash file from the parts
77
+ languagehashvariable = 'Message = Hash.new { |hh, kk| hh[kk] = "ERROR: Message not found: #{kk.inspect}."; hh[kk] }
78
+ langmessage = {' + "\n"
76
79
  startlangdir = File.join(LangDir,"en")
77
80
  #get a list of the files and subdirectories on the starting directory only
78
81
  alanghash = Array.new(Dir[startlangdir].entries.sort)
@@ -100,10 +103,11 @@ $progdir = File::expand_path( File.dirname(__FILE__))
100
103
  end
101
104
  end
102
105
 
103
- fileLangHash=File.open(TempLangHashFile,"w") #deletes and opens a the file in fileName
104
- fileLangHash.write($tempdoc) #writes the contents of doc into the file
105
- fileLangHash.close
106
- # END of Lang building
106
+
107
+ #writes the contents of doc into the languagehashvariable
108
+ languagehashvariable = languagehashvariable + $tempdoc + "} ; langmessage.each { |kk, vv| Message[kk] = vv }"
109
+
110
+ # END of en Lang building
107
111
  $tempdoc = " "
108
112
  Dir.chdir($progdir) # change back to top program directory
109
113
 
@@ -135,31 +139,16 @@ $progdir = File::expand_path( File.dirname(__FILE__))
135
139
  end
136
140
  end
137
141
 
138
- filelocalLangHash=File.open(LocalLangHashFile,"w") #deletes and opens a the file in fileName
139
- filelocalLangHash.write($tempdoc) #writes the contents of doc into the file
140
- filelocalLangHash.close
142
+
143
+ #writes the contents of doc into the variable
144
+ languagehashvariable = languagehashvariable + " ; Message.update(" + $tempdoc + ' :rwdtinker => "Rwdtinker" ) '
145
+
141
146
 
142
147
  $tempdoc = " "
143
148
 
144
149
  Dir.chdir($progdir) # change back to top program directory
145
-
146
- # build the language hash constant object from the lang parts
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
150
+
151
+ temp = eval( languagehashvariable )
163
152
 
164
153
  $tempdoc = " "
165
154
 
@@ -190,10 +179,9 @@ Dir.chdir($progdir)
190
179
  end
191
180
  end
192
181
 
193
- fileB=File.open(CodeNameFile,"w") #deletes and opens a the file in fileName
194
- fileB.write($tempdoc) #writes the contents of doc into the file
195
- fileB.close
196
- require CodeName # load the program file
182
+
183
+ # load the program file
184
+ tempcoderesult = eval( $tempdoc )
197
185
 
198
186
  # build the actual GUI from the gui parts
199
187
  $tempdoc = " "
@@ -224,9 +212,8 @@ Dir.chdir($progdir)
224
212
  end
225
213
  end
226
214
 
227
- fileB=File.open(RWDFile,"w") #deletes and opens a the file in fileName
228
- fileB.write($tempdoc) #writes the contents of doc into the file
229
- fileB.close
215
+ # gui variable is done
216
+ guiRWD = $tempdoc
230
217
 
231
218
  require 'socket' # Network stuff
232
219
  host = "127.0.0.1"
@@ -266,4 +253,4 @@ $port = port
266
253
  end
267
254
 
268
255
 
269
- RwdTinker.file(RWDFile).serve(port) # start the main class and program
256
+ RwdTinker.new( guiRWD).serve(port) # start the main class and program