rubycas-server 0.5.0.186 → 0.5.0.193

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -36,7 +36,10 @@ lib/themes/warning.png
36
36
  resources/init.d.sh
37
37
  setup.rb
38
38
  test/test_casserver.rb
39
-
39
+ vendor/camping-1.5.180/CHANGELOG
40
+ vendor/camping-1.5.180/COPYING
41
+ vendor/camping-1.5.180/README
42
+ vendor/camping-1.5.180/Rakefile
40
43
  vendor/camping-1.5.180/lib/camping-unabridged.rb
41
44
  vendor/camping-1.5.180/lib/camping.rb
42
45
  vendor/camping-1.5.180/lib/camping/db.rb
@@ -44,4 +47,11 @@ vendor/camping-1.5.180/lib/camping/fastcgi.rb
44
47
  vendor/camping-1.5.180/lib/camping/reloader.rb
45
48
  vendor/camping-1.5.180/lib/camping/session.rb
46
49
  vendor/camping-1.5.180/lib/camping/webrick.rb
47
-
50
+ vendor/isaac_0.9.1/LICENSE
51
+ vendor/isaac_0.9.1/README
52
+ vendor/isaac_0.9.1/TODO
53
+ vendor/isaac_0.9.1/VERSIONS
54
+ vendor/isaac_0.9.1/crypt/ISAAC.rb
55
+ vendor/isaac_0.9.1/isaac.gemspec
56
+ vendor/isaac_0.9.1/setup.rb
57
+ vendor/isaac_0.9.1/test/TC_ISAAC.rb
@@ -0,0 +1,99 @@
1
+ = 1.5
2
+ === 3rd Oct, 2006
3
+
4
+ * Camping::Apps stores an array of classes for all loaded apps.
5
+ * bin/camping can be given a directory. Like: <tt>camping examples/</tt>
6
+ * Console mode -- thank zimbatm. Use: camping -C yourapp.rb
7
+ * Call controllers with Camping.method_missing.
8
+
9
+ Tepee.get(:Index) #=> (Response)
10
+ Blog.post(:Delete, id) #=> (Response)
11
+
12
+ Blog.post(:Login, :input => {'username' => 'admin', 'password' => 'camping'})
13
+ #=> #<Blog::Controllers::Login @user=... >
14
+
15
+ Blog.get(:Info, :env => {:HTTP_HOST => 'wagon'})
16
+ #=> #<Blog::Controllers::Info @env={'HTTP_HOST'=>'wagon'} ...>
17
+
18
+ * Using \r\n instead of \n on output. FastCGI has these needs.
19
+ * ActiveRecord no longer required or installed.
20
+ * If you refer to Models::Base, however, ActiveRecord will be loaded with autoload. (see lib/camping/db.rb)
21
+ * new Camping::FastCGI.serve which will serve a whole directory of apps
22
+ (see http://code.whytheluckystiff.net/camping/wiki/TheCampingServer)
23
+ * ~/.campingrc can contain database connection info if you want your default to be something other than SQLite.
24
+
25
+ database:
26
+ adapter: mysql
27
+ username: camping
28
+ socket: /tmp/mysql.sock
29
+ password: NOFORESTFIRES
30
+ database: camping
31
+
32
+ * controllers are now *ordered*. uses the inherited hook to keep track of all
33
+ classes created with R. those classes are scanned, in order, when a request is
34
+ made. any other controllers are handled first. so if you plan on overriding the
35
+ urls method, be sure to subclass from R().
36
+ * Console mode will load .irbrc in the working directory, if present.
37
+ (for example, in my ~/git/balloon directory, i have this in the .irbrc:
38
+ include Balloon::Models
39
+ when camping -C balloon.rb gets run, the models all get included in main.)
40
+ * And, of course, many other bugfixes from myself and the loyal+kind zimbatm...
41
+ * Markaby updated to 0.5. (See its CHANGELOG.)
42
+
43
+ = 1.4.2
44
+ === 18th May, 2006
45
+
46
+ * Efficient file uploads for multipart/form-data POSTs.
47
+ * Camping tool now uses Mongrel, if available. If not, sticks with WEBrick.
48
+ * Multiple apps can be loaded with the camping tool, each mounted according to their file name.
49
+
50
+ = 1.4.1
51
+ === 3rd May, 2006
52
+
53
+ * Streaming HTTP support. If body is IO, will simply pass to the controller. Mongrel, in particular, supports this nicely.
54
+
55
+ = 1.4
56
+ === 11th April, 2006
57
+
58
+ * Moved Camping::Controllers::Base to Camping::Base.
59
+ * Moved Camping::Controllers::R to Camping::R.
60
+ * New session library (lib/camping/session.rb).
61
+ * WEBrick handler (lib/camping/webrick.rb) and Mongrel handler (lib/camping/mongrel.rb).
62
+ * Helpers#URL, builds a complete URL for a route. Returns a URI object. This way relative links could just return self.URL.path.
63
+ * Base#initialize takes over some of Base#service's duties.
64
+ * ENV now available as @env in controllers and views.
65
+ * Beautiful multi-page docs without frames!
66
+
67
+ = 1.3
68
+ === 28th January, 2006
69
+
70
+ * bin/camping: an application launcher.
71
+ * <tt>Camping.run(request, response)</tt> now changed to <tt>controller = Camping.run(request, env)</tt>
72
+ * This means outputting the response is the wrapper/server's job. See bin/camping, you can do a controller.to_s at the least.
73
+ * <tt>Controllers::Base.env</tt> is the new thread-safe home for <tt>ENV</tt>.
74
+ * The input hash now works more like Rails params. You can call keys
75
+ like methods or with symbols or strings.
76
+ * Queries are now parsed more like PHP/Rails, in that you can denote
77
+ structure with brackets: post[user]=_why;post[id]=2
78
+ * Auto-prefix table names, to help prevent name clash.
79
+ * Helpers.errors_for simple validation.
80
+ * Lots of empty :href and :action attributes, a bug.
81
+ * New single-page flipbook RDoc template.
82
+
83
+ = 1.2
84
+ === 23rd January, 2006
85
+
86
+ * Camping.goes allows fresh modules build from all Camping parts.
87
+ * File uploads now supported (multipart/form-data).
88
+ * Helpers.R can rebuild routes.
89
+ * Helpers./ for tracing paths from the root.
90
+
91
+ = 1.1
92
+ === 19th January, 2006
93
+
94
+ * Allowed request and response streams to be passed in, to allow WEBrick and FastCGI support.
95
+
96
+ = 1.0
97
+ === 17th January, 2006
98
+
99
+ * Initial checkin, see announcement at http://redhanded.hobix.com/bits/campingAMicroframework.html.
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2006 why the lucky stiff
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,119 @@
1
+ == Camping, a Microframework
2
+
3
+ Camping is a web framework which consistently stays at less than 4kb of code.
4
+ You can probably view the complete source code on a single page. But, you know,
5
+ it's so small that, if you think about it, what can it really do?
6
+
7
+ The idea here is to store a complete fledgling web application in a single file
8
+ like many small CGIs. But to organize it as a Model-View-Controller application
9
+ like Rails does. You can then easily move it to Rails once you've got it going.
10
+
11
+ == A Camping Skeleton
12
+
13
+ A skeletal Camping blog could look like this:
14
+
15
+ require 'camping'
16
+
17
+ Camping.goes :Blog
18
+
19
+ module Blog::Models
20
+ class Post < Base; belongs_to :user; end
21
+ class Comment < Base; belongs_to :user; end
22
+ class User < Base; end
23
+ end
24
+
25
+ module Blog::Controllers
26
+ class Index < R '/'
27
+ def get
28
+ @posts = Post.find :all
29
+ render :index
30
+ end
31
+ end
32
+ end
33
+
34
+ module Blog::Views
35
+ def layout
36
+ html do
37
+ body do
38
+ self << yield
39
+ end
40
+ end
41
+ end
42
+
43
+ def index
44
+ for post in @posts
45
+ h1 post.title
46
+ end
47
+ end
48
+ end
49
+
50
+ Some things you might have noticed:
51
+
52
+ * Camping::Models uses ActiveRecord to do its work. We love ActiveRecord!
53
+ * Camping::Controllers can be assigned URLs in the class definition. Neat?
54
+ * Camping::Views describes HTML using pure Ruby. Markup as Ruby, which we
55
+ call Markaby.
56
+ * You use Camping::goes to make a copy of the Camping framework under your
57
+ own module name (in this case: <tt>Blog</tt>.)
58
+
59
+ <b>NOTE:</b> Camping auto-prefixes table names. If your class is named
60
+ <tt>Blog::Models::Post</tt>, your table will be called <b>blog_posts</b>.
61
+ Since many Camping apps can be attached to a database at once, this helps
62
+ prevent name clash.
63
+
64
+ (If you want to see the full blog example, check out <tt>examples/blog/blog.rb</tt>
65
+ for the complete code.)
66
+
67
+ If you want to write larger applications with Camping, you are encouraged to
68
+ split the application into distinct parts which can be mounted at URLs on your
69
+ web server. You might have a blog at /blog and a wiki at /wiki. Each
70
+ self-contained. But you can certainly share layouts and models by storing them
71
+ in plain Ruby scripts.
72
+
73
+ Interested yet? Okay, okay, one step at a time.
74
+
75
+ == Installation
76
+
77
+ * <tt>gem install camping</tt>
78
+
79
+ Or for the bleeding edge:
80
+
81
+ * <tt>gem install camping --source code.whytheluckystiff.net</tt>
82
+
83
+ You are encourage to install Camping and SQLite3, since it is a small database
84
+ which fits perfectly with our compact bylaws, works well with the examples.
85
+
86
+ * See http://code.whytheluckystiff.net/camping/wiki/BeAlertWhenOnSqlite3 for instructions.
87
+
88
+ == Running Camping Apps
89
+
90
+ The blog example above and most Camping applications look a lot like CGI scripts.
91
+ If you run them from the commandline, you'll probably just see a pile of HTML.
92
+
93
+ Camping comes with an tool for launching apps from the commandline:
94
+
95
+ * Run: <tt>camping blog.rb</tt>
96
+ * Visit http://localhost:3301/blog/ to use the app.
97
+
98
+ == How the Camping Tool Works
99
+
100
+ If your application isn't working with the <tt>camping</tt> tool, keep in mind
101
+ that the tool expects the following conventions to be used:
102
+
103
+ 1. You must have SQLite3 and SQLite3-ruby installed. (Once again, please see
104
+ http://code.whytheluckystiff.net/camping/wiki/BeAlertWhenOnSqlite3 for instructions.)
105
+ 2. If your script is called <tt>test.rb</tt>, Camping expects your application to
106
+ be stored in a module called <tt>Test</tt>. Case is not imporant, though. The
107
+ module can be called <tt>TeSt</tt> or any other permutation.
108
+ 3. Your script's postamble (anything enclosed in <tt>if __FILE__ == $0</tt>) will be
109
+ ignored by the tool, since the tool will create an SQLite3 database at
110
+ <tt>~/.camping.db</tt>. Or, on Windows, <tt>$USER/Application Data/Camping.db</tt>.
111
+ 4. If your application's module has a <tt>create</tt> method, it will be executed before
112
+ the web server starts up.
113
+
114
+ == The Rules of Thumb
115
+
116
+ Once you've started writing your own Camping app, I'd highly recommend that you become familiar
117
+ with the Camping Rules of Thumb which are listed on the wiki:
118
+ http://code.whytheluckystiff.net/camping/wiki/CampingRulesOfThumb
119
+
@@ -0,0 +1,117 @@
1
+ require 'rake'
2
+ require 'rake/clean'
3
+ require 'rake/gempackagetask'
4
+ require 'rake/rdoctask'
5
+ require 'rake/testtask'
6
+ require 'fileutils'
7
+ include FileUtils
8
+
9
+ NAME = "camping"
10
+ REV = File.read(".svn/entries")[/committed-rev="(\d+)"/, 1] rescue nil
11
+ VERS = ENV['VERSION'] || ("1.5" + (REV ? ".#{REV}" : ""))
12
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config', 'test/test.log']
13
+ RDOC_OPTS = ['--quiet', '--title', "Camping, the Documentation",
14
+ "--opname", "index.html",
15
+ "--line-numbers",
16
+ "--main", "README",
17
+ "--inline-source"]
18
+
19
+ desc "Packages up Camping."
20
+ task :default => [:package]
21
+ task :package => [:clean]
22
+
23
+ task :doc => [:before_doc, :rdoc, :after_doc]
24
+
25
+ task :before_doc do
26
+ mv "lib/camping.rb", "lib/camping-mural.rb"
27
+ mv "lib/camping-unabridged.rb", "lib/camping.rb"
28
+ end
29
+
30
+ Rake::RDocTask.new do |rdoc|
31
+ rdoc.rdoc_dir = 'doc/rdoc'
32
+ rdoc.options += RDOC_OPTS
33
+ rdoc.template = "extras/flipbook_rdoc.rb"
34
+ rdoc.main = "README"
35
+ rdoc.title = "Camping, the Documentation"
36
+ rdoc.rdoc_files.add ['README', 'CHANGELOG', 'COPYING', 'lib/camping.rb', 'lib/camping/*.rb']
37
+ end
38
+
39
+ task :after_doc do
40
+ mv "lib/camping.rb", "lib/camping-unabridged.rb"
41
+ mv "lib/camping-mural.rb", "lib/camping.rb"
42
+ cp "extras/Camping.gif", "doc/rdoc/"
43
+ cp "extras/permalink.gif", "doc/rdoc/"
44
+ sh %{scp -r doc/rdoc/* #{ENV['USER']}@rubyforge.org:/var/www/gforge-projects/camping/}
45
+ end
46
+
47
+ spec =
48
+ Gem::Specification.new do |s|
49
+ s.name = NAME
50
+ s.version = VERS
51
+ s.platform = Gem::Platform::RUBY
52
+ s.has_rdoc = true
53
+ s.extra_rdoc_files = ["README", "CHANGELOG", "COPYING"]
54
+ s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)\/', '--exclude', 'lib/camping.rb']
55
+ s.summary = "minature rails for stay-at-home moms"
56
+ s.description = s.summary
57
+ s.author = "why the lucky stiff"
58
+ s.email = 'why@ruby-lang.org'
59
+ s.homepage = 'http://code.whytheluckystiff.net/camping/'
60
+ s.executables = ['camping']
61
+
62
+ s.add_dependency('activesupport', '>=1.3.1')
63
+ s.add_dependency('markaby', '>=0.5')
64
+ s.add_dependency('metaid')
65
+ s.required_ruby_version = '>= 1.8.2'
66
+
67
+ s.files = %w(COPYING README Rakefile) +
68
+ Dir.glob("{bin,doc,test,lib,extras}/**/*") +
69
+ Dir.glob("ext/**/*.{h,c,rb}") +
70
+ Dir.glob("examples/**/*.rb") +
71
+ Dir.glob("tools/*.rb")
72
+
73
+ s.require_path = "lib"
74
+ # s.extensions = FileList["ext/**/extconf.rb"].to_a
75
+ s.bindir = "bin"
76
+ end
77
+
78
+ omni =
79
+ Gem::Specification.new do |s|
80
+ s.name = "camping-omnibus"
81
+ s.version = VERS
82
+ s.platform = Gem::Platform::RUBY
83
+ s.summary = "the camping meta-package for updating ActiveRecord, Mongrel and SQLite3 bindings"
84
+ s.description = s.summary
85
+ %w[author email homepage].each { |x| s.__send__("#{x}=", spec.__send__(x)) }
86
+
87
+ s.add_dependency('camping', "=#{VERS}")
88
+ s.add_dependency('activerecord')
89
+ s.add_dependency('sqlite3-ruby', '>=1.1.0.1')
90
+ s.add_dependency('mongrel')
91
+ s.add_dependency('acts_as_versioned')
92
+ s.add_dependency('RedCloth')
93
+ end
94
+
95
+ Rake::GemPackageTask.new(spec) do |p|
96
+ p.need_tar = true
97
+ p.gem_spec = spec
98
+ end
99
+
100
+ Rake::GemPackageTask.new(omni) do |p|
101
+ p.gem_spec = omni
102
+ end
103
+
104
+ task :install do
105
+ sh %{rake package}
106
+ sh %{sudo gem install pkg/#{NAME}-#{VERS}}
107
+ end
108
+
109
+ task :uninstall => [:clean] do
110
+ sh %{sudo gem uninstall #{NAME}}
111
+ end
112
+
113
+ Rake::TestTask.new(:test) do |t|
114
+ t.test_files = FileList['test/test_*.rb']
115
+ # t.warning = true
116
+ # t.verbose = true
117
+ end
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2004 - 2005 Kirk Haines (khaines@enigo.com)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ For details about the ISAAC algorithm itself, see:
15
+
16
+ http://burtleburtle.net/bob/rand/isaac.html
17
+
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
+
@@ -0,0 +1,78 @@
1
+ Crypt::ISAAC README
2
+ ============
3
+
4
+ ISAAC is a cryptographically secure PRNG for generating high quality random
5
+ numbers. Detailed information about the algorithm can be found at:
6
+
7
+ http://burtleburtle.net/bob/rand/isaac.html
8
+
9
+ This is a pure Ruby implementation of the algorithm. It is reasonably fast for
10
+ a pure Ruby implementation. On an 800Mhz PIII computer running Ruby 1.8.2,
11
+ and while the machine is also serving as general desktop, the library seems to
12
+ consistently generate between 15000 and 16000 random numbers per second.
13
+
14
+ Ruby uses the Mersenne Twister as its PRNG, and while this the Twister is
15
+ a fast PRNG that produces highly random numbers, it is not strong for
16
+ cryptographic purposes, nor is it suitable when one needs multiple
17
+ independent streams of random numbers. Crypt::ISAAC is suitable for either
18
+ purpose.
19
+
20
+
21
+ Requirements
22
+ ------------
23
+
24
+ * Ruby 1.8 (should also run on 1.6.x)
25
+
26
+
27
+ Install
28
+ -------
29
+
30
+ If you have never installed Crypt::ISAAC, you may run the testsuite
31
+ to confirm that it works with:
32
+
33
+ # ruby setup.rb test
34
+
35
+ If you already have a version of Crypt::ISAAC installed, but want to
36
+ confirm this one before installing, run the test suite manually as
37
+ follows:
38
+
39
+ # ruby test/TC_ISAAC.rb local
40
+
41
+ When you are ready to install Crypt::ISAAC, type:
42
+
43
+ # ruby setup.rb install
44
+
45
+ This one step will install Crypt::ISAAC in your Ruby SITELIB. To test
46
+ the library after installation:
47
+
48
+ # ruby setup.rb test
49
+
50
+ Usage
51
+ -----
52
+
53
+ require 'crypt/ISAAC'
54
+
55
+ rng = Crypt::ISAAC.new
56
+
57
+ r1 = rng.rand() # returns a floating point between 0 and 1
58
+ r2 = rnd.rand(1000) # returns an integer between 0 and 999
59
+
60
+ rand() should work identically to the Kernel.rand().
61
+
62
+ Enjoy it. Let me know if you find anything that can be improved or that
63
+ needs to be fixed.
64
+
65
+
66
+ License
67
+ -------
68
+
69
+ The Crypt::ISAAC library is licensed with an MIT style licence.
70
+ See the LICENSE file for details. As for the ISAAC algorithm itself,
71
+ see:
72
+
73
+ http://burtleburtle.net/bob/rand/isaac.html
74
+
75
+
76
+
77
+ Kirk Haines
78
+ khaines@enigo.com
@@ -0,0 +1,3 @@
1
+ * Add a C version of the ISAAC algorithm and make it possible to install
2
+ the pure Ruby version and/or a version using a C extension for better
3
+ performance.
@@ -0,0 +1,3 @@
1
+ * 0.9 Initial public release. Pure Ruby.
2
+ * 0.9.1 Update to tweak a couple things and reorganize project struct.
3
+ Now uses a Package based installer, or can be installed as a gem.
@@ -0,0 +1,171 @@
1
+ module Crypt
2
+
3
+ # ISAAC is a fast, strong random number generator. Details on the
4
+ # algorithm can be found here: http://burtleburtle.net/bob/rand/isaac.html
5
+ # This provides a consistent and capable algorithm for producing
6
+ # independent streams of quality random numbers.
7
+
8
+ class ISAAC
9
+
10
+ attr_accessor :randrsl, :randcnt
11
+ attr_accessor :mm, :aa, :bb, :cc
12
+
13
+ # When a Crypt::ISAAC object is created, it needs to be seeded for
14
+ # random number generation. If the system has a /dev/urandom file,
15
+ # that will be used to do the seeding by default. If false is explictly
16
+ # passed when creating the object, it will instead use /dev/random to
17
+ # generate its seeds. Be warned that this may make for SLOW
18
+ # initialization.
19
+ # If the requested source (/dev/urandom or /dev/random) do not exist,
20
+ # the system will fall back to a simplistic initialization mechanism
21
+ # using the builtin Mersenne Twister PRNG.
22
+
23
+ def initialize(noblock = true)
24
+ @mm = []
25
+ @randrsl = []
26
+ # Best initialization of the generator would be by pulling
27
+ # numbers from /dev/random.
28
+ rnd_source = noblock ? '/dev/urandom' : '/dev/random'
29
+ if (FileTest.exist? rnd_source)
30
+ File.open(rnd_source,'r') do |r|
31
+ 256.times do |t|
32
+ z = r.read(4)
33
+ x = z.unpack('V')[0]
34
+ @randrsl[t] = x
35
+ end
36
+ end
37
+ else
38
+ # If urandom isn't available, the standard Ruby PRNG makes an
39
+ # adequate fallback.
40
+ 256.times do |t|
41
+ @randrsl[t] = Kernel.rand(4294967295)
42
+ end
43
+ end
44
+ randinit(true)
45
+ nil
46
+ end
47
+
48
+ # Works just like the standard rand() function. If called with an
49
+ # integer argument, rand() will return positive random number in
50
+ # the range of 0 to (argument - 1). If called without an integer
51
+ # argument, rand() returns a positive floating point number less than 1.
52
+
53
+ def rand(*num)
54
+ if (@randcnt == 1)
55
+ isaac
56
+ @randcnt = 256
57
+ end
58
+ @randcnt -= 1
59
+ if num[0].to_i > 0
60
+ @randrsl[@randcnt].modulo(num[0])
61
+ else
62
+ ".#{@randrsl[@randcnt]}".to_f
63
+ end
64
+ end
65
+
66
+ def isaac
67
+ i = 0
68
+ x = 0
69
+ y = 0
70
+
71
+ @cc += 1
72
+ @bb += @cc
73
+ @bb & 0xffffffff
74
+
75
+ while (i < 256) do
76
+ x = @mm[i]
77
+ @aa = (@mm[(i + 128) & 255] + (@aa^(@aa << 13)) ) & 0xffffffff
78
+ @mm[i] = y = (@mm[(x>>2)&255] + @aa + @bb ) & 0xffffffff
79
+ @randrsl[i] = @bb = (@mm[(y>>10)&255] + x ) & 0xffffffff
80
+ i += 1
81
+
82
+ x = @mm[i]
83
+ @aa = (@mm[(i+128)&255] + (@aa^(0x03ffffff & (@aa >> 6))) ) & 0xffffffff
84
+ @mm[i] = y = (@mm[(x>>2)&255] + @aa + @bb ) & 0xffffffff
85
+ @randrsl[i] = @bb = (@mm[(y>>10)&255] + x ) & 0xffffffff
86
+ i += 1
87
+
88
+ x = @mm[i]
89
+ @aa = (@mm[(i + 128)&255] + (@aa^(@aa << 2)) ) & 0xffffffff
90
+ @mm[i] = y = (@mm[(x>>2)&255] + @aa + @bb ) & 0xffffffff
91
+ @randrsl[i] = @bb = (@mm[(y>>10)&255] + x ) & 0xffffffff
92
+ i += 1
93
+
94
+ x = @mm[i]
95
+ @aa = (@mm[(i+128)&255] + (@aa^(0x0000ffff & (@aa >> 16))) ) & 0xffffffff
96
+ @mm[i] = y = (@mm[(x>>2)&255] + @aa + @bb ) & 0xffffffff
97
+ @randrsl[i] = @bb = (@mm[(y>>10)&255] + x ) & 0xffffffff
98
+ i += 1
99
+ end
100
+ end
101
+
102
+ def randinit(flag)
103
+ i = 0
104
+ a = 0
105
+ b = 0
106
+ c = 0
107
+ d = 0
108
+ e = 0
109
+ f = 0
110
+ g = 0
111
+ @aa = @bb = @cc = 0
112
+ a = b = c = d = e = f = g = h = 0x9e3779b9
113
+
114
+ while (i < 4) do
115
+ a ^= b<<1; d += a; b += c
116
+ b ^= 0x3fffffff & (c>>2); e += b; c += d
117
+ c ^= d << 8; f += c; d += e
118
+ d ^= 0x0000ffff & (e >> 16); g += d; e += f
119
+ e ^= f << 10; h += e; f += g
120
+ f ^= 0x0fffffff & (g >> 4); a += f; g += h
121
+ g ^= h << 8; b += g; h += a
122
+ h ^= 0x007fffff & (a >> 9); c += h; a += b
123
+ i += 1
124
+ end
125
+
126
+ i = 0
127
+ while (i < 256) do
128
+ if (flag)
129
+ a+=@randrsl[i ].to_i; b+=@randrsl[i+1].to_i;
130
+ c+=@randrsl[i+2]; d+=@randrsl[i+3];
131
+ e+=@randrsl[i+4]; f+=@randrsl[i+5];
132
+ g+=@randrsl[i+6]; h+=@randrsl[i+7];
133
+ end
134
+
135
+ a^=b<<11; d+=a; b+=c;
136
+ b^=0x3fffffff & (c>>2); e+=b; c+=d;
137
+ c^=d<<8; f+=c; d+=e;
138
+ d^=0x0000ffff & (e>>16); g+=d; e+=f;
139
+ e^=f<<10; h+=e; f+=g;
140
+ f^=0x0fffffff & (g>>4); a+=f; g+=h;
141
+ g^=h<<8; b+=g; h+=a;
142
+ h^=0x007fffff & (a>>9); c+=h; a+=b;
143
+ @mm[i]=a;@mm[i+1]=b; @mm[i+2]=c; @mm[i+3]=d;
144
+ @mm[i+4]=e; @mm[i+5]=f; @mm[i+6]=g; @mm[i+7]=h;
145
+ i += 8
146
+ end
147
+
148
+ if flag
149
+ i = 0
150
+ while (i < 256)
151
+ a+=@mm[i ]; b+=@mm[i+1]; c+=@mm[i+2]; d+=@mm[i+3];
152
+ e+=@mm[i+4]; f+=@mm[i+5]; g+=@mm[i+6]; h+=@mm[i+7];
153
+ a^=b<<11; d+=a; b+=c;
154
+ b^=0x3fffffff & (c>>2); e+=b; c+=d;
155
+ c^=d<<8; f+=c; d+=e;
156
+ d^=0x0000ffff & (e>>16); g+=d; e+=f;
157
+ e^=f<<10; h+=e; f+=g;
158
+ f^=0x0fffffff & (g>>4); a+=f; g+=h;
159
+ g^=h<<8; b+=g; h+=a;
160
+ h^=0x007fffff & (a>>9); c+=h; a+=b;
161
+ @mm[i ]=a; @mm[i+1]=b; @mm[i+2]=c; @mm[i+3]=d;
162
+ @mm[i+4]=e; @mm[i+5]=f; @mm[i+6]=g; @mm[i+7]=h;
163
+ i += 8
164
+ end
165
+ end
166
+
167
+ isaac()
168
+ @randcnt=256; # /* prepare to use the first set of results */
169
+ end
170
+ end
171
+ end