rwdschedule 0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. data/Readme.txt +57 -0
  2. data/bin/rwdschedule +19 -0
  3. data/code/ag1core/aa0begin.rb +18 -0
  4. data/code/ag1core/rwdtinkerversion.rb +15 -0
  5. data/code/al5languagefiles/alanguagehashbegin.rb +4 -0
  6. data/code/al5languagefiles/languagehash.rb +4 -0
  7. data/code/al5languagefiles/templangfile.rb +6 -0
  8. data/code/al5languagefiles/zlanguagehashend.rb +6 -0
  9. data/code/gg0schedules/deleteeventrecord.rb +19 -0
  10. data/code/gg0schedules/gg0viewevent.rb +20 -0
  11. data/code/gg0schedules/gg9saveeventchanges.rb +18 -0
  12. data/code/gg0schedules/gh5listdaterecords.rb +19 -0
  13. data/code/gg0schedules/gl7clearscreendisplay.rb +15 -0
  14. data/code/gg0schedules/gm3deletecontactrecord.rb +24 -0
  15. data/code/gg0schedules/loadeventrecord.rb +30 -0
  16. data/code/gg0schedules/renameeventdata.rb +14 -0
  17. data/code/gg0schedules/rwdaddresseshelpabout.rb +14 -0
  18. data/code/gg0schedules/rwdschedulehelpabout.rb +14 -0
  19. data/code/gh9calendar/gh9calendar.rb +16 -0
  20. data/code/lm1installapplets/ll5listzips.rb +14 -0
  21. data/code/lm1installapplets/lm1installapplet.rb +20 -0
  22. data/code/ssdiagnostictab/diagnostictab.rb +20 -0
  23. data/code/xa5rwdtinkercallable/callable.rb +13 -0
  24. data/code/xb1rwdtinkerbackwindow/05listinstalledfiles.rb +11 -0
  25. data/code/xb1rwdtinkerbackwindow/diagnostictab.rb +20 -0
  26. data/code/xb1rwdtinkerbackwindow/ll1openname.rb +18 -0
  27. data/code/xb1rwdtinkerbackwindow/ll5listzips.rb +14 -0
  28. data/code/xb1rwdtinkerbackwindow/lm1installapplet.rb +20 -0
  29. data/code/xb1rwdtinkerbackwindow/mm1removeapplet.rb +28 -0
  30. data/code/xb1rwdtinkerbackwindow/rwdtinkerwin2version.rb +14 -0
  31. data/code/zz0applicationend/zz0end.rb +4 -0
  32. data/configuration/aa0rwdframework.cnf +11 -0
  33. data/configuration/ab1tinkerwin2.cnf +3 -0
  34. data/configuration/gg1rwdschedule.cnf +3 -0
  35. data/configuration/gh1rwdcalendar.cnf +27 -0
  36. data/ev/browser.rb +109 -0
  37. data/ev/ftools.rb +170 -0
  38. data/ev/net.rb +750 -0
  39. data/ev/ruby.rb +819 -0
  40. data/ev/rwd.rb +1848 -0
  41. data/ev/sgml.rb +236 -0
  42. data/ev/thread.rb +63 -0
  43. data/ev/tree.rb +343 -0
  44. data/ev/xml.rb +4 -0
  45. data/extras/cal.rb +166 -0
  46. data/gui/en/aa2core/aa0rwdtop.rwd +3 -0
  47. data/gui/en/gg0schedules/gg0viewevent.rwd +27 -0
  48. data/gui/en/gg0schedules/gl6editrecord.rwd +34 -0
  49. data/gui/en/gg0schedules/gl8contactutilities.rwd +23 -0
  50. data/gui/en/hl9calendar/hl9calendar.rwd +18 -0
  51. data/gui/en/ll1selectiontabbegin/selectiontabbegin.rwd +15 -0
  52. data/gui/en/ll5rwdtinkerwin2selectiontab/rwdwin2selectiontab.rwd +11 -0
  53. data/gui/en/lz1selectiontabend/endselectiontab.rwd +1 -0
  54. data/gui/en/tt0documentsbegin/tt0documentbegin.rwd +5 -0
  55. data/gui/en/uu5rwddocuments/uu5documents.rwd +13 -0
  56. data/gui/en/uu6rwdtinkerwin2documents/uu5documents.rwd +4 -0
  57. data/gui/en/uu8schedule/uu8doc_rwdschedule.rwd +4 -0
  58. data/gui/en/ww0documentsend/ww0documentend.rwd +6 -0
  59. data/gui/en/wz6finaltabs/xx0rwdfirsttab.rwd +4 -0
  60. data/gui/en/xa1versionwindow/1appname.rwd +17 -0
  61. data/gui/en/xa5rwdtinkercallablewindow/1appname.rwd +15 -0
  62. data/gui/en/xa5rwdtinkercallablewindow/9end.rwd +4 -0
  63. data/gui/en/xb1rwdtinkerbackwindow/1appname.rwd +3 -0
  64. data/gui/en/xb1rwdtinkerbackwindow/2tab1.rwd +9 -0
  65. data/gui/en/xb1rwdtinkerbackwindow/3arwddiagnostics.rwd +31 -0
  66. data/gui/en/xb1rwdtinkerbackwindow/4arwdlistapplets.rwd +42 -0
  67. data/gui/en/xb1rwdtinkerbackwindow/4arwdlistzips.rwd +33 -0
  68. data/gui/en/xb1rwdtinkerbackwindow/9backend.rwd +5 -0
  69. data/gui/en/ya1helpaboutbegin/ya0helpscreenstart.rwd +1 -0
  70. data/gui/en/yg5rwdhelpabout/1appname.rwd +2 -0
  71. data/gui/en/yg5rwdhelpabout/3copyright.rwd +1 -0
  72. data/gui/en/yg5rwdhelpabout/5version.rwd +9 -0
  73. data/gui/en/yg6rwdwin2helpabout/1appname.rwd +2 -0
  74. data/gui/en/yg6rwdwin2helpabout/3copyright.rwd +1 -0
  75. data/gui/en/yg6rwdwin2helpabout/5version.rwd +9 -0
  76. data/gui/en/yh1helpschedule/1rwdschedule.rwd +4 -0
  77. data/gui/en/yh1helpschedule/5version.rwd +8 -0
  78. data/gui/en/za1applicationend/yy9rwdend.rwd +2 -0
  79. data/gui/es/aa2core/aa0rwdtop.rwd +3 -0
  80. data/gui/es/gg0schedules/gg0viewevent.rwd +27 -0
  81. data/gui/es/gg0schedules/gl6editrecord.rwd +34 -0
  82. data/gui/es/gg0schedules/gl8contactutilities.rwd +23 -0
  83. data/gui/es/hl9calendar/hl9calendar.rwd +18 -0
  84. data/gui/es/ll1selectiontabbegin/selectiontabbegin.rwd +15 -0
  85. data/gui/es/ll5rwdtinkerwin2selectiontab/rwdwin2selectiontab.rwd +11 -0
  86. data/gui/es/lz1selectiontabend/endselectiontab.rwd +1 -0
  87. data/gui/es/tt0documentsbegin/tt0documentbegin.rwd +5 -0
  88. data/gui/es/uu5rwddocuments/uu5documents.rwd +13 -0
  89. data/gui/es/uu6rwdtinkerwin2documents/uu5documents.rwd +4 -0
  90. data/gui/es/uu8schedule/uu8doc_rwdschedule.rwd +4 -0
  91. data/gui/es/ww0documentsend/ww0documentend.rwd +6 -0
  92. data/gui/es/wz6finaltabs/xx0rwdfirsttab.rwd +4 -0
  93. data/gui/es/xa1versionwindow/1appname.rwd +17 -0
  94. data/gui/es/xa5rwdtinkercallablewindow/1appname.rwd +15 -0
  95. data/gui/es/xa5rwdtinkercallablewindow/9end.rwd +4 -0
  96. data/gui/es/xb1rwdtinkerbackwindow/1appname.rwd +3 -0
  97. data/gui/es/xb1rwdtinkerbackwindow/2tab1.rwd +9 -0
  98. data/gui/es/xb1rwdtinkerbackwindow/3arwddiagnostics.rwd +31 -0
  99. data/gui/es/xb1rwdtinkerbackwindow/4arwdlistapplets.rwd +42 -0
  100. data/gui/es/xb1rwdtinkerbackwindow/4arwdlistzips.rwd +33 -0
  101. data/gui/es/xb1rwdtinkerbackwindow/9backend.rwd +5 -0
  102. data/gui/es/ya1helpaboutbegin/ya0helpscreenstart.rwd +1 -0
  103. data/gui/es/yg5rwdhelpabout/1appname.rwd +2 -0
  104. data/gui/es/yg5rwdhelpabout/3copyright.rwd +1 -0
  105. data/gui/es/yg5rwdhelpabout/5version.rwd +9 -0
  106. data/gui/es/yg6rwdwin2helpabout/1appname.rwd +2 -0
  107. data/gui/es/yg6rwdwin2helpabout/3copyright.rwd +1 -0
  108. data/gui/es/yg6rwdwin2helpabout/5version.rwd +9 -0
  109. data/gui/es/yh1helpschedule/1rwdschedule.rwd +4 -0
  110. data/gui/es/yh1helpschedule/5version.rwd +8 -0
  111. data/gui/es/za1applicationend/yy9rwdend.rwd +2 -0
  112. data/gui/nl/aa2core/aa0rwdtop.rwd +3 -0
  113. data/gui/nl/gg0schedules/gg0viewevent.rwd +27 -0
  114. data/gui/nl/gg0schedules/gl6editrecord.rwd +34 -0
  115. data/gui/nl/gg0schedules/gl8contactutilities.rwd +23 -0
  116. data/gui/nl/hl9calendar/hl9calendar.rwd +18 -0
  117. data/gui/nl/ll1selectiontabbegin/selectiontabbegin.rwd +15 -0
  118. data/gui/nl/ll5rwdtinkerwin2selectiontab/rwdwin2selectiontab.rwd +11 -0
  119. data/gui/nl/lz1selectiontabend/endselectiontab.rwd +1 -0
  120. data/gui/nl/tt0documentsbegin/tt0documentbegin.rwd +5 -0
  121. data/gui/nl/uu5rwddocuments/uu5documents.rwd +13 -0
  122. data/gui/nl/uu6rwdtinkerwin2documents/uu5documents.rwd +4 -0
  123. data/gui/nl/uu8schedule/uu8doc_rwdschedule.rwd +4 -0
  124. data/gui/nl/ww0documentsend/ww0documentend.rwd +6 -0
  125. data/gui/nl/wz6finaltabs/xx0rwdfirsttab.rwd +4 -0
  126. data/gui/nl/xa1versionwindow/1appname.rwd +17 -0
  127. data/gui/nl/xa5rwdtinkercallablewindow/1appname.rwd +15 -0
  128. data/gui/nl/xa5rwdtinkercallablewindow/9end.rwd +4 -0
  129. data/gui/nl/xb1rwdtinkerbackwindow/1appname.rwd +3 -0
  130. data/gui/nl/xb1rwdtinkerbackwindow/2tab1.rwd +9 -0
  131. data/gui/nl/xb1rwdtinkerbackwindow/3arwddiagnostics.rwd +31 -0
  132. data/gui/nl/xb1rwdtinkerbackwindow/4arwdlistapplets.rwd +42 -0
  133. data/gui/nl/xb1rwdtinkerbackwindow/4arwdlistzips.rwd +33 -0
  134. data/gui/nl/xb1rwdtinkerbackwindow/9backend.rwd +5 -0
  135. data/gui/nl/ya1helpaboutbegin/ya0helpscreenstart.rwd +1 -0
  136. data/gui/nl/yg5rwdhelpabout/1appname.rwd +2 -0
  137. data/gui/nl/yg5rwdhelpabout/3copyright.rwd +1 -0
  138. data/gui/nl/yg5rwdhelpabout/5version.rwd +9 -0
  139. data/gui/nl/yg6rwdwin2helpabout/1appname.rwd +2 -0
  140. data/gui/nl/yg6rwdwin2helpabout/3copyright.rwd +1 -0
  141. data/gui/nl/yg6rwdwin2helpabout/5version.rwd +9 -0
  142. data/gui/nl/yh1helpschedule/1rwdschedule.rwd +4 -0
  143. data/gui/nl/yh1helpschedule/5version.rwd +8 -0
  144. data/gui/nl/za1applicationend/yy9rwdend.rwd +2 -0
  145. data/init.rb +164 -0
  146. data/installed/rwdcalendar-0.4.inf +6 -0
  147. data/installed/rwdschedule-0.5.inf +7 -0
  148. data/installed/rwdtinkerwin2-0.5.inf +16 -0
  149. data/installed/schedulesampledata1.inf +3 -0
  150. data/lang/en/rwdcore/languagefile.rb +6 -0
  151. data/lang/es/rwdcore/languagefile.rb +4 -0
  152. data/lang/nl/rwdcore/languagefile.rb +4 -0
  153. data/lib/temp.rb +1 -0
  154. data/rwd_files/HowTo_Schedule.txt +88 -0
  155. data/rwd_files/HowTo_Tinker.html +370 -0
  156. data/rwd_files/HowTo_Tinker.txt +244 -0
  157. data/rwd_files/HowTo_TinkerWin2.txt +202 -0
  158. data/rwd_files/Readme.txt +57 -0
  159. data/rwd_files/favicon.ico +0 -0
  160. data/rwd_files/rdoc-style.css +175 -0
  161. data/rwd_files/rwdapplications.html +54 -0
  162. data/rwd_files/rwdindex.html +6 -0
  163. data/schedules/200501january23CharlotteB-Day.sch +8 -0
  164. data/schedules/200501january24jazzfuller.sch +8 -0
  165. data/tests/totranslate.lang +93 -0
  166. data/zips/rwdaviewphoto-0.3.zip +0 -0
  167. data/zips/rwdhelloworld-0.2.zip +0 -0
  168. data/zips/rwdrefreshacpi-0.1.zip +0 -0
  169. data/zips/rwdwtinkerwin2-0.5.zip +0 -0
  170. metadata +210 -0
@@ -0,0 +1,11 @@
1
+ # this code is to list the applets that are installed
2
+ def listinstalledfiles
3
+ fileList = Dir.new("installed").entries.sort.reverse.delete_if { |x| ! (x =~ /inf$/) }
4
+ @filesresult = fileList.rwd_method("fillappletname")
5
+ end
6
+
7
+ def fillappletname(inffile)
8
+ applet = inffile.gsub(/\.inf$/, "")
9
+ @a_installlist = applet
10
+ @a_removeapplet = applet
11
+ end
@@ -0,0 +1,20 @@
1
+ # Application RwdTinker orginally (c) 2004 Steven Gibson under GPL.
2
+ # This application is a framework for writing programs from RubyWebDialogs
3
+ # http://www.erikveen.dds.nl/rubywebdialogs/index.html
4
+ # For more information about RwdTinker see http://www.rubyforge.net/projects/rwdapplications
5
+
6
+ # return the Ruby constant
7
+ def runrubyversion
8
+ @rubyversion = "Version " + VERSION
9
+ end
10
+
11
+ # return the platform constan
12
+ def runviewplatform
13
+ @platformdisplay = "Platform is " + RUBY_PLATFORM
14
+ end
15
+
16
+ # return Rwdtinker version to diagnostic tab
17
+ def rwdtinkerversiondiagnostic
18
+ @rwdtinkerversionreturn = "rwdtinker version " + RwdTinkerVersion
19
+ end
20
+
@@ -0,0 +1,18 @@
1
+ def openname
2
+ require 'fileutils'
3
+ nametext = "%s" % [@a_installlist]
4
+
5
+ begin # exception trapped block
6
+ fileName = "installed/" + nametext + ".inf"
7
+
8
+ fd = File.open(fileName,"r")
9
+ @displaytext = " "
10
+ while ! fd.eof?
11
+ @displaytext = fd.read
12
+ end
13
+ fd.close
14
+ rescue
15
+ @displaytext = "\n" + "error"
16
+ end # exception rescue
17
+
18
+ end
@@ -0,0 +1,14 @@
1
+ # this code is to list the zipped applets that can be installed
2
+ def listzipfilestoinstall
3
+ fileList = Dir.new("zips").entries.sort.reverse.delete_if { |x| ! (x =~ /zip$/) }
4
+ @zipslistresult = fileList.rwd_method("fillziptoinstallname")
5
+ end
6
+
7
+ def fillziptoinstallname(inffile)
8
+ applet = inffile.gsub(/\.zip$/, "")
9
+ @a_installapplet = applet
10
+
11
+ end
12
+
13
+
14
+
@@ -0,0 +1,20 @@
1
+ def installapplet
2
+ require 'fileutils'
3
+ nametext = "%s" % [@a_installapplet]
4
+
5
+ begin # exception trapped block
6
+ fileName = "zips/" + nametext + ".zip"
7
+
8
+ commandline = "unzip -o " + fileName
9
+ system( commandline+' > temp.output' )
10
+
11
+
12
+
13
+ system(commandline)
14
+ @installapplettext = Message[:applet_installed]
15
+
16
+ rescue
17
+ @installapplettext = "Done! - Check applet list - restart rwd to activate the new applet"
18
+ end # exception rescue
19
+
20
+ end
@@ -0,0 +1,28 @@
1
+ def removeapplet
2
+ require 'fileutils'
3
+ nametext = "%s" % [@a_removeapplet]
4
+
5
+ begin # exception trapped block
6
+ fileName = "installed/" + nametext + ".inf"
7
+ count = 0
8
+ fd = File.open(fileName,"r")
9
+
10
+
11
+ fd.each { |oneline|
12
+ if count == 1
13
+ commandline = "rm -r " + oneline
14
+ system( commandline+' > temp.output' )
15
+ end
16
+ count = 1
17
+ }
18
+ fd.close
19
+ commandline = "rm " + fileName
20
+
21
+ system(commandline)
22
+ @removeapplettext = "applet files removed! - restart rwd to finish uninstalling"
23
+
24
+ rescue
25
+ @removeapplettext = "\n" + "error"
26
+ end # exception rescue
27
+
28
+ end
@@ -0,0 +1,14 @@
1
+ # Application RwdTinker orginally (c) 2004 Steven Gibson under GPL.
2
+ # This application is a framework for writing programs from RubyWebDialogs
3
+ # http://www.erikveen.dds.nl/rubywebdialogs/index.html
4
+ # For more information about RwdTinker see http://www.rubyforge.net/projects/rwdapplications
5
+
6
+ # return the version constant defined in the config file
7
+ def runrwdtinkerwin2version
8
+ @rwd_window = "applicationversion"
9
+ @versionappnamedisplay = "RwdTinkerWin2"
10
+ @versioncopyrightdisplay = "(c) 2004 Steven Gibson "
11
+ @versionnumberdisplay = "Version " + RwdTinkerWin2Version
12
+
13
+ end
14
+
@@ -0,0 +1,4 @@
1
+
2
+
3
+ end # end of rwdtinker class
4
+
@@ -0,0 +1,11 @@
1
+ RwdTinkerVersion = "1.23"
2
+ CodeName = "rwdtinker"
3
+ CodeNameFile = CodeName + ".rb"
4
+ RWDFile = "rwdtinker.rwd"
5
+ $lang = "en"
6
+ @@codedir = "code"
7
+ @@guidir = "gui" + "/" + $lang
8
+ @@langdir = "lang"
9
+
10
+ TempLangHashFile = @@codedir + "/" + "al5languagefiles" + "/" + "templangfile.rb"
11
+ $port = 7705
@@ -0,0 +1,3 @@
1
+ RwdTinkerWin2Version = "0.5"
2
+ ZipsLocation = "zips" # not yet functional
3
+
@@ -0,0 +1,3 @@
1
+
2
+ RwdScheduleVersion = "0.5"
3
+ $rwdschedule_directory = "schedules"
@@ -0,0 +1,27 @@
1
+
2
+ $extras_directory = "extras"
3
+
4
+
5
+ class LanguageTextrwdcalendar
6
+
7
+ def locale(languagecode,wordtotranslate)
8
+
9
+ case languagecode
10
+
11
+ when "en"
12
+ case wordtotranslate
13
+ when "year"
14
+ return "year"
15
+ when "month"
16
+ return "month"
17
+ end
18
+ when "nl"
19
+ case wordtotranslate
20
+ when "year"
21
+ return "jaar"
22
+ when "month"
23
+ return "maand"
24
+ end
25
+ end
26
+ end
27
+ end
data/ev/browser.rb ADDED
@@ -0,0 +1,109 @@
1
+ require "ev/ruby"
2
+ require "ev/net"
3
+
4
+ begin
5
+ require "win32ole"
6
+ require "win32/registry"
7
+ rescue LoadError
8
+ $".push "win32ole.so"
9
+ $".push "win32/registry.rb"
10
+ end
11
+
12
+ def windowsbrowser
13
+ $stderr.puts "Looking for default browser..."
14
+
15
+ filetype = "htmlfile"
16
+ application = nil
17
+
18
+ begin
19
+ Win32::Registry::HKEY_CLASSES_ROOT.open('.html') do |reg|
20
+ filetype = reg[""]
21
+ end
22
+
23
+ Win32::Registry::HKEY_CLASSES_ROOT.open(filetype + '\shell\open\command') do |reg|
24
+ application = reg[""]
25
+ end
26
+ rescue NameError
27
+ $stderr.puts "Only available for Windows."
28
+ end
29
+
30
+ application
31
+ end
32
+
33
+ def linuxbrowser
34
+ application = ""
35
+
36
+ application = `which galeon 2> /dev/null`.chomp if application.empty?
37
+ application = `which mozilla 2> /dev/null`.chomp if application.empty?
38
+ application = `which firefox 2> /dev/null`.chomp if application.empty?
39
+ application = `which opera 2> /dev/null`.chomp if application.empty?
40
+ application = `which konqueror 2> /dev/null`.chomp if application.empty?
41
+ application = `which htmlview 2> /dev/null`.chomp if application.empty?
42
+ application = nil if application.empty?
43
+
44
+ application
45
+ end
46
+
47
+ def defaultbrowser
48
+ res = nil
49
+ res = windowsbrowser if windows?
50
+ res = linuxbrowser if linux?
51
+ res
52
+ end
53
+
54
+ def showinbrowser(html, browser=defaultbrowser)
55
+ port, io = TCPServer.freeport(7701, 7709)
56
+
57
+ unless browser.nil?
58
+ Thread.new do
59
+ begin
60
+ #command = "1234 \"http://localhost:#{port}\"" if linux?
61
+ #command = "L:/prog/MozillaFirefox/firefox.exe \"http://localhost:#{port}\"" if cygwin?
62
+ #command = Win32::Registry::HKEY_CLASSES_ROOT.open('htmlfile\shell\open\command')[0] + " \"http://localhost:#{port}/\"" if windows?
63
+
64
+ command = "#{browser} \"http://localhost:#{port}\""
65
+
66
+ Thread.pass
67
+
68
+ system(command)
69
+ rescue
70
+ end
71
+ end
72
+ end
73
+
74
+ HTTPServer.serve([port, io]) do |req, resp|
75
+ resp << html
76
+
77
+ resp.stop
78
+ end
79
+ end
80
+
81
+ def tab2html(tab)
82
+ res = ""
83
+
84
+ tab = tab.to_html(false)
85
+
86
+ res << "<html>\n"
87
+ res << "<body>\n"
88
+ res << "<table align='center' border='1' cellspacing='0' cellpadding='3'>\n"
89
+ res << "<tbody>\n"
90
+
91
+ tab.split(/\r*\n/).each do |line|
92
+ res << "<tr>\n"
93
+
94
+ line.split(/\t/, -1).each do |veld|
95
+ veld = "&nbsp;" if veld.compress.empty?
96
+
97
+ res << "<td>%s</td>\n" % veld
98
+ end
99
+
100
+ res << "</tr>\n"
101
+ end
102
+
103
+ res << "</tbody>\n"
104
+ res << "</table>\n"
105
+ res << "</body>\n"
106
+ res << "</html>\n"
107
+
108
+ res
109
+ end
data/ev/ftools.rb ADDED
@@ -0,0 +1,170 @@
1
+ require "ftools"
2
+
3
+ class Dir
4
+ def self.mkdirrec(dir)
5
+ pdir = File.dirname(dir)
6
+
7
+ if not pdir.empty? and not File.directory?(pdir)
8
+ Dir.mkdirrec(pdir)
9
+ end
10
+
11
+ Dir.mkdir(dir) rescue nil
12
+ end
13
+
14
+ def self.copy(from, to)
15
+ if File.directory?(from)
16
+ pdir = Dir.pwd
17
+ todir = File.expand_path(to)
18
+
19
+ mkdirrec(todir)
20
+
21
+ Dir.chdir(from)
22
+ Dir.new(".").each do |e|
23
+ Dir.copy(e, todir+"/"+e) if not [".", ".."].include?(e)
24
+ end
25
+ Dir.chdir(pdir)
26
+ else
27
+ todir = File.dirname(File.expand_path(to))
28
+
29
+ mkdirrec(todir)
30
+
31
+ File.copy(from, to)
32
+ end
33
+ end
34
+
35
+ def self.move(from, to)
36
+ Dir.copy(from, to)
37
+ Dir.rm_rf(from)
38
+ end
39
+
40
+ def self.rm_rf(entry)
41
+ if File.ftype(entry) == "directory"
42
+ pdir = Dir.pwd
43
+
44
+ Dir.chdir(entry)
45
+ Dir.new(".").each do |e|
46
+ Dir.rm_rf(e) if not [".", ".."].include?(e)
47
+ end
48
+ Dir.chdir(pdir)
49
+
50
+ Dir.delete(entry)
51
+ else
52
+ File.delete(entry)
53
+ end
54
+ end
55
+
56
+ def self.find(entry=nil, mask=nil)
57
+ entry = "." if entry.nil?
58
+
59
+ entry = entry.gsub!(/[\/\\]*$/, "") unless entry.nil?
60
+
61
+ mask = /^#{mask}$/i if mask.kind_of?(String)
62
+
63
+ res = []
64
+
65
+ if File.directory?(entry)
66
+ pdir = Dir.pwd
67
+
68
+ res += ["%s/" % entry] if mask.nil? or entry =~ mask
69
+
70
+ begin
71
+ Dir.chdir(entry)
72
+
73
+ begin
74
+ Dir.new(".").each do |e|
75
+ res += Dir.find(e, mask).collect{|e| entry+"/"+e} unless [".", ".."].include?(e)
76
+ end
77
+ ensure
78
+ Dir.chdir(pdir)
79
+ end
80
+ rescue Errno::EACCES => error
81
+ puts error
82
+ end
83
+ else
84
+ res += [entry] if mask.nil? or entry =~ mask
85
+ end
86
+
87
+ res
88
+ end
89
+ end
90
+
91
+ class File
92
+ def self.rollbackup(file, mode=nil)
93
+ backupfile = file + ".RB.BACKUP"
94
+ controlfile = file + ".RB.CONTROL"
95
+ res = nil
96
+
97
+ File.touch(file) unless File.file?(file)
98
+
99
+ # Rollback
100
+
101
+ if File.file?(backupfile) and File.file?(controlfile)
102
+ $stdout.puts "Restoring #{file}..."
103
+
104
+ File.copy(backupfile, file) # Rollback from phase 3
105
+ end
106
+
107
+ # Reset
108
+
109
+ File.delete(backupfile) if File.file?(backupfile) # Reset from phase 2 or 3
110
+ File.delete(controlfile) if File.file?(controlfile) # Reset from phase 3 or 4
111
+
112
+ # Backup
113
+
114
+ File.copy(file, backupfile) # Enter phase 2
115
+ File.touch(controlfile) # Enter phase 3
116
+
117
+ # The real thing
118
+
119
+ if block_given?
120
+ if mode.nil?
121
+ res = yield
122
+ else
123
+ File.open(file, mode) do |f|
124
+ res = yield(f)
125
+ end
126
+ end
127
+ end
128
+
129
+ # Cleanup
130
+
131
+ File.delete(backupfile) # Enter phase 4
132
+ File.delete(controlfile) # Enter phase 5
133
+
134
+ # Return, like File.open
135
+
136
+ res = File.open(file, (mode or "r")) unless block_given?
137
+
138
+ res
139
+ end
140
+
141
+ def self.touch(file)
142
+ File.open(file, "a"){|f|}
143
+ end
144
+
145
+ def self.which(file)
146
+ res = nil
147
+
148
+ if windows?
149
+ file = file.gsub(/\.exe$/i, "") + ".exe"
150
+ sep = ";"
151
+ else
152
+ sep = ":"
153
+ end
154
+
155
+ catch :stop do
156
+ ENV["PATH"].split(/#{sep}/).reverse.each do |d|
157
+ if File.directory?(d)
158
+ Dir.new(d).each do |e|
159
+ if e.downcase == file.downcase
160
+ res = File.expand_path(e, d)
161
+ throw :stop
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
167
+
168
+ res
169
+ end
170
+ end