bsod 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/Gemfile +3 -0
- data/README.md +38 -0
- data/Rakefile +15 -0
- data/bin/bsod +46 -0
- data/bsod.gemspec +38 -0
- data/droidsansmono.ttf +0 -0
- data/lib/bsod/settings.rb +99 -0
- data/lib/bsod/version.rb +5 -0
- data/lib/bsod.rb +108 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4fcb61503d20aadeeb8d96bd59b25abfd8c55982
|
4
|
+
data.tar.gz: 21917c0d26eab1ae230f4a53bb926a6e4af33cf2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b73af5a295d3046ff810a1fe38e3811d57d0535fb0ed22fe10ba04e0edd44fec15b34c6c0faa11d30cbf6e84971abeafc99486d82fd918bd00cd200532d9b099
|
7
|
+
data.tar.gz: 6ee4b3e0425c61a088d5f3b4152a7f95f6a31fdfa3801036daf8aee74b6de99307678f4661ca126e52f1ab408083b5746b0ae2b10ce9c6a93e86e02638eff783
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# bsdod
|
2
|
+
|
3
|
+
Simulates a Blue Screen of Death, as seen on Micro$oftWindow$.
|
4
|
+
|
5
|
+
As an executable, has optional flag to sleep before BSODing so you can surprise
|
6
|
+
your friends!
|
7
|
+
|
8
|
+
As a library, you can integrate a BSOD on any SDL surface.
|
9
|
+
|
10
|
+
## Usage
|
11
|
+
|
12
|
+
### Executable
|
13
|
+
|
14
|
+
$ bsod
|
15
|
+
$ bsod --sleep 3.1415 # sleep before BSODing
|
16
|
+
$ bsod --no-fullscreen
|
17
|
+
|
18
|
+
For more see `bsod --help`.
|
19
|
+
|
20
|
+
### Library
|
21
|
+
|
22
|
+
require 'bsod'
|
23
|
+
screen = SDL::Screen.get
|
24
|
+
BSOD::run(screen, screen.w, screen.h)
|
25
|
+
|
26
|
+
## Install
|
27
|
+
|
28
|
+
$ gem install bsod
|
29
|
+
|
30
|
+
## Contact
|
31
|
+
|
32
|
+
Hi, I'm Alexandre Dantas! Thanks for having interest in this project. Please
|
33
|
+
take the time to visit any of the links below.
|
34
|
+
|
35
|
+
* `bsod` homepage: http://www.alexdantas.net/projects/bsod
|
36
|
+
* Contact: `eu @ alexdantas.net`
|
37
|
+
* My homepage: http://www.alexdantas.net
|
38
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
require 'bsod/version'
|
3
|
+
|
4
|
+
# Adding lib directory to load path
|
5
|
+
lib = File.expand_path('../lib', __FILE__)
|
6
|
+
$:.unshift lib unless $:.include? lib
|
7
|
+
|
8
|
+
task :build do
|
9
|
+
system 'gem build bsod.gemspec'
|
10
|
+
end
|
11
|
+
|
12
|
+
task :release => :build do
|
13
|
+
system "gem push bsod-#{BSOD::VERSION}.gem"
|
14
|
+
end
|
15
|
+
|
data/bin/bsod
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bsod'
|
4
|
+
require 'bsod/settings'
|
5
|
+
|
6
|
+
# Global configuration thingy. See `settings.rb`.
|
7
|
+
$settings = nil
|
8
|
+
|
9
|
+
# Starts all things related to SDL for this program to work.
|
10
|
+
#
|
11
|
+
# Returns SDL's main drawing screen.
|
12
|
+
def sdl_init
|
13
|
+
SDL::init(SDL::INIT_VIDEO)
|
14
|
+
SDL::TTF.init
|
15
|
+
SDL::Mouse.hide
|
16
|
+
|
17
|
+
screen = nil
|
18
|
+
|
19
|
+
if $settings[:fullscreen]
|
20
|
+
screen = SDL::Screen.open($settings[:width],
|
21
|
+
$settings[:height],
|
22
|
+
0,
|
23
|
+
SDL::HWSURFACE | SDL::FULLSCREEN)
|
24
|
+
else
|
25
|
+
screen = SDL::Screen.open($settings[:width],
|
26
|
+
$settings[:height],
|
27
|
+
0,
|
28
|
+
SDL::HWSURFACE)
|
29
|
+
end
|
30
|
+
return screen
|
31
|
+
end
|
32
|
+
|
33
|
+
begin
|
34
|
+
$settings = Settings.new
|
35
|
+
$settings.parse ARGV
|
36
|
+
|
37
|
+
# Will wait for a while if the user told us so
|
38
|
+
time = $settings[:sleep_time]
|
39
|
+
sleep time if time
|
40
|
+
|
41
|
+
screen = sdl_init
|
42
|
+
BSOD::run(screen, screen.w, screen.h)
|
43
|
+
|
44
|
+
# It automatically ends SDL on exit
|
45
|
+
end
|
46
|
+
|
data/bsod.gemspec
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# Adding ./lib directory to load path
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$:.unshift lib unless $:.include? lib
|
4
|
+
|
5
|
+
require 'bsod/version'
|
6
|
+
require 'date'
|
7
|
+
|
8
|
+
Gem::Specification.new do |s|
|
9
|
+
s.name = 'bsod'
|
10
|
+
s.version = BSOD::VERSION
|
11
|
+
s.summary = "Simulates a Blue Screen Of Death"
|
12
|
+
s.date = Date.today.to_s
|
13
|
+
s.description = <<END_OF_DESCRIPTION
|
14
|
+
Simulates a Blue Screen Of Death, as seen on Micro$oftWindow$.
|
15
|
+
As an executable, has optional flag to sleep before BSODing so
|
16
|
+
you can surprise your friends!
|
17
|
+
As a library, you can integrate a BSOD on any SDL surface.
|
18
|
+
END_OF_DESCRIPTION
|
19
|
+
s.authors = ["Alexandre Dantas"]
|
20
|
+
s.email = ["eu@alexdantas.net"]
|
21
|
+
s.homepage = 'http://www.alexdantas.net/projects/bsod'
|
22
|
+
s.license = "GPL-3.0"
|
23
|
+
|
24
|
+
# Including everything that's checked out on git
|
25
|
+
s.files = `git ls-files`.split($/)
|
26
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
27
|
+
s.require_paths = ['lib']
|
28
|
+
|
29
|
+
s.add_development_dependency "rake"
|
30
|
+
s.add_dependency "rubysdl", "~> 2.1.2"
|
31
|
+
|
32
|
+
s.post_install_message = <<END_OF_INSTALL_MESSAGE
|
33
|
+
* To exit the BSOD press `F8`
|
34
|
+
END_OF_INSTALL_MESSAGE
|
35
|
+
|
36
|
+
s.metadata = { 'github' => 'http://www.github.com/alexdantas/bsod' }
|
37
|
+
end
|
38
|
+
|
data/droidsansmono.ttf
ADDED
Binary file
|
@@ -0,0 +1,99 @@
|
|
1
|
+
|
2
|
+
require 'optparse'
|
3
|
+
require 'bsod/version'
|
4
|
+
|
5
|
+
# Global configurations of the program, along with a commandline
|
6
|
+
# argument parser.
|
7
|
+
#
|
8
|
+
# Contains the program's specific configuration rules.
|
9
|
+
class Settings
|
10
|
+
|
11
|
+
# Creates a configuration, with default values.
|
12
|
+
def initialize
|
13
|
+
@settings = {}
|
14
|
+
|
15
|
+
# Makes possible to sleep for a while before BSODing
|
16
|
+
@settings[:sleep_time] = nil
|
17
|
+
|
18
|
+
# This doesn't matter because it will go fullscreen anyways.
|
19
|
+
# Just change it if looks ugly
|
20
|
+
@settings[:width] = 800
|
21
|
+
@settings[:height] = 600
|
22
|
+
@settings[:fullscreen] = true
|
23
|
+
|
24
|
+
# SDL-specific key to exit BSOD
|
25
|
+
@settings[:exit_key] = SDL::Key::F8
|
26
|
+
|
27
|
+
# This is the default font, distributed with the gem.
|
28
|
+
# It's `../../droidsansmono.ttf` based on `settings.rb` path.
|
29
|
+
fontname = File.expand_path("../../", __FILE__)
|
30
|
+
fontname = File.dirname fontname
|
31
|
+
fontname += "/droidsansmono.ttf"
|
32
|
+
@settings[:font_filename] = fontname
|
33
|
+
@settings[:font_size] = 14
|
34
|
+
@settings[:font_bold] = false
|
35
|
+
end
|
36
|
+
|
37
|
+
# Sets options based on commandline arguments `args`.
|
38
|
+
# It should be `ARGV`.
|
39
|
+
def parse args
|
40
|
+
|
41
|
+
opts = OptionParser.new do |parser|
|
42
|
+
parser.banner = "Usage: bsod [options]"
|
43
|
+
|
44
|
+
# Make output beautiful
|
45
|
+
parser.separator ""
|
46
|
+
parser.separator "Note: Default key to exit BSOD is `F8`"
|
47
|
+
parser.separator ""
|
48
|
+
parser.separator "Options:"
|
49
|
+
|
50
|
+
parser.on("-s", "--sleep N", "Sleep N (float) seconds before BSODing") do |n|
|
51
|
+
@settings[:sleep_time] = n.to_f
|
52
|
+
end
|
53
|
+
|
54
|
+
parser.on("--[no-]fullscreen", "Runs on fullscreen mode (default on)") do |f|
|
55
|
+
@settings[:fullscreen] = f
|
56
|
+
end
|
57
|
+
|
58
|
+
# These options appear if no other is given.
|
59
|
+
parser.on("-h", "--help", "Show this message") do
|
60
|
+
puts parser
|
61
|
+
exit
|
62
|
+
end
|
63
|
+
|
64
|
+
parser.on("--version", "Show version and license info") do
|
65
|
+
puts <<END_OF_VERSION
|
66
|
+
_ __ _ _
|
67
|
+
|_) (_ / \\ | \\
|
68
|
+
|_) __) \\_/ |_/ #{BSOD::VERSION} (http://alexdantas.net/projects/bsod)
|
69
|
+
|
70
|
+
Copyright (C) 2011-2012 Alexandre Dantas <eu@alexdantas.net>
|
71
|
+
|
72
|
+
bsod is free software: you can redistribute it and/or modify
|
73
|
+
it under the terms of the GNU General Public License as published by
|
74
|
+
the Free Software Foundation, either version 3 of the License, or
|
75
|
+
any later version.
|
76
|
+
|
77
|
+
This program is distributed in the hope that it will be useful,
|
78
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
79
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
80
|
+
GNU General Public License for more details.
|
81
|
+
|
82
|
+
You should have received a copy of the GNU General Public License
|
83
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
84
|
+
END_OF_VERSION
|
85
|
+
exit
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
opts.parse! args
|
90
|
+
|
91
|
+
return @settings
|
92
|
+
end
|
93
|
+
|
94
|
+
# Returns a specific setting previously set.
|
95
|
+
def [] name
|
96
|
+
return @settings[name]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
data/lib/bsod/version.rb
ADDED
data/lib/bsod.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
|
2
|
+
require 'sdl'
|
3
|
+
|
4
|
+
# Attempts to simulate a Blue Screen of Death, optionally
|
5
|
+
# with a delay before (in seconds).
|
6
|
+
#
|
7
|
+
# Make sure you have installed:
|
8
|
+
# * ruby `sdl` gem
|
9
|
+
# * C `SDL` library
|
10
|
+
# * C `SDL_ttf` library
|
11
|
+
module BSOD
|
12
|
+
|
13
|
+
# This is the full text to be displayed onscreen.
|
14
|
+
# Change it to your heart's content!
|
15
|
+
BSODTEXT = <<END_OF_TEXT
|
16
|
+
*** STOP: 0x00000001E (0x00000003,0x00000d0e8,0x0c001201e,0x000c0ffee)
|
17
|
+
Unhandled Kernel exception c0000047 from fa8418b4 (00d4a81c0,00028492e)
|
18
|
+
|
19
|
+
Dll Base Date Stamp - Name Dll Base Date Stamp - Name
|
20
|
+
bf7978fb be154c92 - ntoskrnl.exe 7fa3883b 11b92972 - hal.dll
|
21
|
+
a519c86a b386ca2c - ncrc710.sys faea83e1 c47447d7 - SCSIPORT.SYS
|
22
|
+
2f983e0b 6e01a9a4 - scsidisk.sys 6a7f9869 45b277c4 - Fastfat.sys
|
23
|
+
94041089 e1a9f5d9 - Floppy.SYS b91218c4 c037818d - Hpfs_Rec.SYS
|
24
|
+
0bb5c0c9 8ca7bd22 - Null.SYS 5496bb5f 1d60d82c - Beep.SYS
|
25
|
+
a9b37c3a f70ef21d - i8042prt.SYS 585fd0b5 1e973d5d - SERMOUSE.SYS
|
26
|
+
e4965cb7 24a6ec07 - kbdclass.SYS 2925baf7 5cb9a053 - MOUCLASS.SYS
|
27
|
+
e54f64c7 f54b26c1 - Videoprt.SYS ad7a85bd 7d2571b9 - NCC1701E.SYS
|
28
|
+
1a119462 e9c098e9 - Vga.SYS e3c5a4a4 f5caa34a - Msfs.SYS
|
29
|
+
|
30
|
+
Address dword dump Dll Base - Name
|
31
|
+
2fc589eb b483bf92 20677c0a f254e409 5977ffa0 a082a53e : c76875ba - i8042prt.SYS
|
32
|
+
35ec96b5 1dc0af3c 406c655c 5bfbe3fe 8390119a bd653a61 : d17a5ee1 - SCSIPORT.SYS
|
33
|
+
d54704c9 c9c43be6 ece08295 e5fd350c f469f913 86a54eeb : 24ed5a16 - ntoskrnl.exe
|
34
|
+
4ade1e66 2639fc5c 4d22f159 94f99371 f9876420 71517f45 : 69048b22 - ntoskrnl.exe
|
35
|
+
e3d88756 0e0e2322 2a899667 71dd4f99 9fba9b81 12b84e81 : 23ce15e3 - ntoskrnl.exe
|
36
|
+
981f5fa4 e03f9d34 6ec6e730 31ca1ce6 f75b54b6 d5ba53f6 : a7419dad - ntoskrnl.exe
|
37
|
+
16cfcafd 67eb2c74 9152a8f3 62864c8e 148c9c29 bb4235b5 : 3e24c47e - ntoskrnl.exe
|
38
|
+
|
39
|
+
Kernel Debugger Using: COM2 (Port 0x2f8, Baud Rate 19200)
|
40
|
+
Restart and set the recovery options in the system control panel
|
41
|
+
or the /CRASHDEBUG system start option. If this message reappears,
|
42
|
+
contact your system administrator or technical support group.
|
43
|
+
END_OF_TEXT
|
44
|
+
|
45
|
+
# Runs the BSOD on a SDL's `screen`, bounded by `width` and
|
46
|
+
# `height`.
|
47
|
+
#
|
48
|
+
# It must be a `SDL::Surface` (consequently, a `SDL::Screen` is
|
49
|
+
# acceptable too.
|
50
|
+
def self.run(screen, width, height)
|
51
|
+
|
52
|
+
if (SDL::inited_system(SDL::INIT_VIDEO) == 0) or
|
53
|
+
(not SDL::TTF::init?)
|
54
|
+
puts "Error: SDL Video or SDL::TTF not initialized."
|
55
|
+
exit 666
|
56
|
+
end
|
57
|
+
|
58
|
+
# Filling screen with that sweet, sweet blue tone
|
59
|
+
blue = screen.format.map_rgb(0, 0, 255)
|
60
|
+
screen.fill_rect(0, 0, width, height, blue)
|
61
|
+
|
62
|
+
# Printing that bizarre text
|
63
|
+
font = SDL::TTF.open($settings[:font_filename],
|
64
|
+
$settings[:font_size])
|
65
|
+
|
66
|
+
font.style = SDL::TTF::STYLE_BOLD if $settings[:font_bold]
|
67
|
+
|
68
|
+
i = 0
|
69
|
+
BSODTEXT.each_line do |line|
|
70
|
+
# This is a little hack to allow printing empty lines.
|
71
|
+
# First I remove the '\n' at the end to avoid nasty things
|
72
|
+
# and then I append a space, to prevent nil strings.
|
73
|
+
line.chomp!
|
74
|
+
line += " "
|
75
|
+
|
76
|
+
font.draw_solid_utf8(screen, line,
|
77
|
+
3, (i * font.height),
|
78
|
+
255, 255, 255)
|
79
|
+
i += 1
|
80
|
+
end
|
81
|
+
|
82
|
+
font.close
|
83
|
+
|
84
|
+
# @note Maybe update only the bounded rectangle?
|
85
|
+
SDL::Screen.get.update_rect(0, 0, 0, 0)
|
86
|
+
|
87
|
+
# This basically waits for keypresses and ignores everything
|
88
|
+
# except for that special key you've defined.
|
89
|
+
loop = true
|
90
|
+
while loop
|
91
|
+
|
92
|
+
# Get events, exit when a certain key is pressed
|
93
|
+
while event = SDL::Event2.poll
|
94
|
+
|
95
|
+
case event
|
96
|
+
when SDL::Event2::KeyDown
|
97
|
+
SDL::Key.scan
|
98
|
+
if SDL::Key.press? $settings[:exit_key]
|
99
|
+
loop = false
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
# Sleeping a little to avoid high-CPU rates.
|
104
|
+
sleep 0.05
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bsod
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexandre Dantas
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubysdl
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.1.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.1.2
|
41
|
+
description: |
|
42
|
+
Simulates a Blue Screen Of Death, as seen on Micro$oftWindow$.
|
43
|
+
As an executable, has optional flag to sleep before BSODing so
|
44
|
+
you can surprise your friends!
|
45
|
+
As a library, you can integrate a BSOD on any SDL surface.
|
46
|
+
email:
|
47
|
+
- eu@alexdantas.net
|
48
|
+
executables:
|
49
|
+
- bsod
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- ".gitignore"
|
54
|
+
- Gemfile
|
55
|
+
- README.md
|
56
|
+
- Rakefile
|
57
|
+
- bin/bsod
|
58
|
+
- bsod.gemspec
|
59
|
+
- droidsansmono.ttf
|
60
|
+
- lib/bsod.rb
|
61
|
+
- lib/bsod/settings.rb
|
62
|
+
- lib/bsod/version.rb
|
63
|
+
homepage: http://www.alexdantas.net/projects/bsod
|
64
|
+
licenses:
|
65
|
+
- GPL-3.0
|
66
|
+
metadata:
|
67
|
+
github: http://www.github.com/alexdantas/bsod
|
68
|
+
post_install_message: |
|
69
|
+
* To exit the BSOD press `F8`
|
70
|
+
rdoc_options: []
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
requirements: []
|
84
|
+
rubyforge_project:
|
85
|
+
rubygems_version: 2.1.7
|
86
|
+
signing_key:
|
87
|
+
specification_version: 4
|
88
|
+
summary: Simulates a Blue Screen Of Death
|
89
|
+
test_files: []
|