bsod 0.1.0 → 1.0.0
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 +4 -4
- data/.gitignore +4 -0
- data/CHANGELOG.md +6 -0
- data/README.md +18 -5
- data/Rakefile +6 -2
- data/bin/bsod +37 -6
- data/{droidsansmono.ttf → fonts/droidsansmono.ttf} +0 -0
- data/images/bsod.png +0 -0
- data/lib/bsod/linux-sparc.rb +78 -0
- data/lib/bsod/settings.rb +25 -3
- data/lib/bsod/version.rb +1 -1
- data/lib/bsod/windows2000.rb +87 -0
- data/lib/bsod/windowsnt.rb +84 -0
- data/lib/bsod/windowsxp.rb +88 -0
- data/lib/bsod.rb +22 -78
- metadata +8 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ee3f47fca59ed812c893b1782ccaec0220ed3e6c
|
|
4
|
+
data.tar.gz: 54bb24834166e361b54b27af9e78a6baede5ca5d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b019f93776d8cbcf56ffeb22a3995d26330ec3c817a8dfdf166910a7056db45da6f4933250eaa0061bd59da39a230215c20fb2929d59bcebec2bb18acc0d5c7f
|
|
7
|
+
data.tar.gz: c1f89d815ec11d12c5725d168a1ac63a53592d9cdbd830cb8707e883011638d6252abe71ebccbcf23eb81aa158515de7d3d6bab43f77a7d7323277168afd0f0c
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
<!-- My awesome changelog -->
|
|
2
2
|
|
|
3
|
+
## 1.0.0 (Oct 20, 2013)
|
|
4
|
+
|
|
5
|
+
* Changed library API and executable commandline flags.
|
|
6
|
+
* Added way to easily add new BSODs and included some
|
|
7
|
+
more by default.
|
|
8
|
+
|
|
3
9
|
## 0.1.0 (Oct 14, 2013)
|
|
4
10
|
|
|
5
11
|
* Added both `LICENSE` (`bsod` license file) and
|
data/README.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# bsod
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
Simulates [Blue Screens of Death](https://en.wikipedia.org/wiki/Blue_screen_of_death) from
|
|
6
|
+
several systems, primarily Micro$oftWindow$. It's made in a way that eases
|
|
7
|
+
adding new BSODs.
|
|
4
8
|
|
|
5
9
|
As an executable, has optional flag to sleep before BSODing so you can surprise
|
|
6
10
|
your friends!
|
|
@@ -12,22 +16,26 @@ As a library, you can integrate a BSOD on any SDL surface.
|
|
|
12
16
|
### Executable
|
|
13
17
|
|
|
14
18
|
$ bsod
|
|
15
|
-
$ bsod --
|
|
16
|
-
$ bsod --
|
|
19
|
+
$ bsod --wait 3.1415 # waits seconds before BSODing
|
|
20
|
+
$ bsod --style windowsxp # explicitly selects BSOD style
|
|
21
|
+
$ bsod --list # show supported systems
|
|
17
22
|
|
|
18
23
|
For more see `bsod --help`.
|
|
19
24
|
|
|
20
25
|
### Library
|
|
21
26
|
|
|
22
27
|
require 'bsod'
|
|
28
|
+
# after initializing sdl properly
|
|
23
29
|
screen = SDL::Screen.get
|
|
24
|
-
BSOD::
|
|
30
|
+
bsod = BSOD::WindowsXP.new
|
|
31
|
+
bsod.draw(screen, screen.w, screen.h)
|
|
32
|
+
BSOD::wait_for_sdl_key # defaults to F8
|
|
25
33
|
|
|
26
34
|
## Install
|
|
27
35
|
|
|
28
36
|
$ gem install bsod
|
|
29
37
|
|
|
30
|
-
##
|
|
38
|
+
## Credits
|
|
31
39
|
|
|
32
40
|
Hi, I'm Alexandre Dantas! Thanks for having interest in this project. Please
|
|
33
41
|
take the time to visit any of the links below.
|
|
@@ -36,3 +44,8 @@ take the time to visit any of the links below.
|
|
|
36
44
|
* Contact: `eu @ alexdantas.net`
|
|
37
45
|
* My homepage: http://www.alexdantas.net
|
|
38
46
|
|
|
47
|
+
Huge thanks to `xscreensaver` and it's `bsod` screensaver. Took inspiration and
|
|
48
|
+
several BSODs from there, adapting to Ruby/SDL. Originally written by Jamie
|
|
49
|
+
Zawinski <jwz@jwz.org> in 1998, with contribution from many others. It's also
|
|
50
|
+
based on the concept by Stephen Martin <smartin@mks.com>.
|
|
51
|
+
|
data/Rakefile
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
|
|
2
|
-
require 'bsod/version'
|
|
3
|
-
|
|
4
2
|
# Adding lib directory to load path
|
|
5
3
|
lib = File.expand_path('../lib', __FILE__)
|
|
6
4
|
$:.unshift lib unless $:.include? lib
|
|
7
5
|
|
|
6
|
+
require 'bsod/version'
|
|
7
|
+
|
|
8
8
|
desc "Builds the gem"
|
|
9
9
|
task :build do
|
|
10
10
|
system 'gem build bsod.gemspec'
|
|
@@ -15,3 +15,7 @@ task :release => :build do
|
|
|
15
15
|
system "gem push bsod-#{BSOD::VERSION}.gem"
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
desc "Executes the program"
|
|
19
|
+
task :run do |args, a|
|
|
20
|
+
system "ruby -Ilib bin/bsod"
|
|
21
|
+
end
|
data/bin/bsod
CHANGED
|
@@ -1,19 +1,40 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# Attempts to simulate a Blue Screen of Death (BSOD),
|
|
4
|
+
# optionally with a delay before (in seconds).
|
|
5
|
+
#
|
|
6
|
+
# Make sure you have both the `rubysdl` gem and `SDL`/`SDL_TTF`
|
|
7
|
+
# libraries on your system.
|
|
2
8
|
|
|
3
9
|
require 'bsod'
|
|
4
10
|
require 'bsod/settings'
|
|
11
|
+
require 'bsod/windowsnt'
|
|
12
|
+
require 'bsod/windows2000'
|
|
13
|
+
require 'bsod/windowsxp'
|
|
14
|
+
require 'bsod/linux-sparc'
|
|
5
15
|
|
|
6
16
|
# Global configuration thingy. See `settings.rb`.
|
|
7
17
|
$settings = nil
|
|
8
18
|
|
|
9
|
-
# Starts all things related to SDL for
|
|
19
|
+
# Starts all things related to `SDL` for BSODs to work.
|
|
20
|
+
# Returns `SDL`s main drawing screen.
|
|
21
|
+
#
|
|
22
|
+
# Note: This method is only required if you don't do
|
|
23
|
+
# this manually. For most of your custom projects,
|
|
24
|
+
# ignore this.
|
|
25
|
+
# Note: This initializes `SDL` based on the global
|
|
26
|
+
# `$settings` parsed by `Settings` module.
|
|
10
27
|
#
|
|
11
|
-
|
|
12
|
-
def sdl_init
|
|
28
|
+
def self.init_sdl
|
|
13
29
|
SDL::init(SDL::INIT_VIDEO)
|
|
14
30
|
SDL::TTF.init
|
|
15
|
-
SDL::Mouse.hide
|
|
16
31
|
|
|
32
|
+
if not BSOD::sdl_inited?
|
|
33
|
+
puts "Error: SDL Video or SDL::TTF not initialized."
|
|
34
|
+
exit 666
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
SDL::Mouse.hide
|
|
17
38
|
screen = nil
|
|
18
39
|
|
|
19
40
|
if $settings[:fullscreen]
|
|
@@ -38,8 +59,18 @@ begin
|
|
|
38
59
|
time = $settings[:sleep_time]
|
|
39
60
|
sleep time if time
|
|
40
61
|
|
|
41
|
-
screen =
|
|
42
|
-
|
|
62
|
+
screen = init_sdl
|
|
63
|
+
|
|
64
|
+
bsod = nil
|
|
65
|
+
case $settings[:bsod_type]
|
|
66
|
+
when "windowsnt" then bsod = BSOD::WindowsNT.new
|
|
67
|
+
when "windows2000" then bsod = BSOD::Windows2000.new
|
|
68
|
+
when "windowsxp" then bsod = BSOD::WindowsXP.new
|
|
69
|
+
when "linux-sparc" then bsod = BSOD::LinuxSPARC.new
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
bsod.draw(screen, screen.w, screen.h)
|
|
73
|
+
BSOD::wait_for_sdl_key $settings[:exit_key]
|
|
43
74
|
|
|
44
75
|
# It automatically ends SDL on exit
|
|
45
76
|
end
|
|
File without changes
|
data/images/bsod.png
ADDED
|
Binary file
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
|
|
2
|
+
require 'bsod'
|
|
3
|
+
|
|
4
|
+
module BSOD
|
|
5
|
+
|
|
6
|
+
# Remember Window$ 2000?
|
|
7
|
+
#
|
|
8
|
+
# This is the same as WindowsNT, the only thing that
|
|
9
|
+
# changes is the default message.
|
|
10
|
+
class LinuxSPARC
|
|
11
|
+
|
|
12
|
+
BSODTEXT = <<END_OF_TEXT
|
|
13
|
+
Unable to handle kernel paging request at virtual address f0d4a000
|
|
14
|
+
tsk->mm->context = 00000014
|
|
15
|
+
tsk->mm->pgd = f26b0000
|
|
16
|
+
\\|/ ____ \\|/
|
|
17
|
+
"@'/ ,. \\`@"
|
|
18
|
+
/_| \\__/ |_\\
|
|
19
|
+
\\__U_/
|
|
20
|
+
gawk(22827): Oops
|
|
21
|
+
PSR: 044010c1 PC: f001c2cc NPC: f001c2d0 Y: 00000000
|
|
22
|
+
g0: 00001000 g1: ad88208a g2: 589528c3 g3: 4c4eaf60
|
|
23
|
+
g4: f8e9a052 g5: a8fa48c3 g6: 93eeb38e g7: ea90911f
|
|
24
|
+
o0: 6814da2c o1: bcbc439b o2: fbee7b93 o3: 5c92e715
|
|
25
|
+
o4: f4e435d8 o5: c0d794ce sp: 187d9d04 ret_pc: 5766da46
|
|
26
|
+
l0: 3623c157 l1: 8dacaddb l2: e2fb0bcb l3: 61058d7c
|
|
27
|
+
l4: c0e26c5b l5: baf25f79 l6: 9ad3e338 l7: c80f287b
|
|
28
|
+
i0: a5487db7 i1: 2a510244 i2: 90803a7c i3: bfb8cf31
|
|
29
|
+
i4: d0157ffe i5: 54647960 i6: bac6c329 i7: 2b5b54ed
|
|
30
|
+
Instruction DUMP:
|
|
31
|
+
END_OF_TEXT
|
|
32
|
+
|
|
33
|
+
# No `def initialize` on purpose
|
|
34
|
+
|
|
35
|
+
# Draws the BSOD on a SDL's `screen`, bounded by `width` and
|
|
36
|
+
# `height`.
|
|
37
|
+
#
|
|
38
|
+
# It must be a `SDL::Surface` (consequently, a `SDL::Screen`
|
|
39
|
+
# is acceptable too.
|
|
40
|
+
def draw(screen, width, height)
|
|
41
|
+
|
|
42
|
+
# Should I break the program's flow here?
|
|
43
|
+
BSOD::init_sdl if not BSOD::sdl_inited?
|
|
44
|
+
|
|
45
|
+
black = screen.format.map_rgb(0, 0, 0)
|
|
46
|
+
screen.fill_rect(0, 0, width, height, black)
|
|
47
|
+
|
|
48
|
+
# Printing that bizarre text
|
|
49
|
+
font = SDL::TTF.open($settings[:font_filename],
|
|
50
|
+
$settings[:font_size] - 2)
|
|
51
|
+
|
|
52
|
+
font.style = SDL::TTF::STYLE_BOLD if $settings[:font_bold]
|
|
53
|
+
|
|
54
|
+
# need to print at the bottom of the screen
|
|
55
|
+
lines_ammount = height / font.height
|
|
56
|
+
|
|
57
|
+
i = (lines_ammount - BSODTEXT.lines.size)
|
|
58
|
+
BSODTEXT.each_line do |line|
|
|
59
|
+
# This is a little hack to allow printing empty lines.
|
|
60
|
+
# First I remove the '\n' at the end to avoid nasty things
|
|
61
|
+
# and then I append a space, to prevent nil strings.
|
|
62
|
+
line.chomp!
|
|
63
|
+
line += " "
|
|
64
|
+
|
|
65
|
+
font.draw_solid_utf8(screen, line,
|
|
66
|
+
3, (i * font.height),
|
|
67
|
+
255, 255, 255)
|
|
68
|
+
i += 1
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
font.close
|
|
72
|
+
|
|
73
|
+
# @note Maybe update only the bounded rectangle?
|
|
74
|
+
SDL::Screen.get.update_rect(0, 0, 0, 0)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
data/lib/bsod/settings.rb
CHANGED
|
@@ -15,6 +15,9 @@ class Settings
|
|
|
15
15
|
# Makes possible to sleep for a while before BSODing
|
|
16
16
|
@settings[:sleep_time] = nil
|
|
17
17
|
|
|
18
|
+
# Which BSOD we'll show by default?
|
|
19
|
+
@settings[:bsod_type] = "windowsnt"
|
|
20
|
+
|
|
18
21
|
# This doesn't matter because it will go fullscreen anyways.
|
|
19
22
|
# Just change it if looks ugly
|
|
20
23
|
@settings[:width] = 800
|
|
@@ -25,10 +28,10 @@ class Settings
|
|
|
25
28
|
@settings[:exit_key] = SDL::Key::F8
|
|
26
29
|
|
|
27
30
|
# This is the default font, distributed with the gem.
|
|
28
|
-
# It's `../../droidsansmono.ttf` based on `settings.rb` path.
|
|
31
|
+
# It's `../../fonts/droidsansmono.ttf` based on `settings.rb` path.
|
|
29
32
|
fontname = File.expand_path("../../", __FILE__)
|
|
30
33
|
fontname = File.dirname fontname
|
|
31
|
-
fontname += "/droidsansmono.ttf"
|
|
34
|
+
fontname += "/fonts/droidsansmono.ttf"
|
|
32
35
|
@settings[:font_filename] = fontname
|
|
33
36
|
@settings[:font_size] = 14
|
|
34
37
|
@settings[:font_bold] = false
|
|
@@ -47,14 +50,33 @@ class Settings
|
|
|
47
50
|
parser.separator ""
|
|
48
51
|
parser.separator "Options:"
|
|
49
52
|
|
|
50
|
-
parser.on("-
|
|
53
|
+
parser.on("-w", "--wait N", "Waits N (float) seconds before BSODing") do |n|
|
|
51
54
|
@settings[:sleep_time] = n.to_f
|
|
52
55
|
end
|
|
53
56
|
|
|
57
|
+
parser.on("-s", "--style STYLE", "Select the BSOD style to show. To see all options use `--list`. ") do |type|
|
|
58
|
+
@settings[:bsod_type] = type.to_s
|
|
59
|
+
end
|
|
60
|
+
|
|
54
61
|
parser.on("--[no-]fullscreen", "Runs on fullscreen mode (default on)") do |f|
|
|
55
62
|
@settings[:fullscreen] = f
|
|
56
63
|
end
|
|
57
64
|
|
|
65
|
+
# parser.on("-r", "--random", "Select a random BSOD") do
|
|
66
|
+
# DO SOMETHING ABOUT IT
|
|
67
|
+
# end
|
|
68
|
+
|
|
69
|
+
parser.on("-l", "--list", "Show all possible BSODs") do
|
|
70
|
+
puts "Usage: bsod -t [type]"
|
|
71
|
+
puts " where [type] can be:"
|
|
72
|
+
puts
|
|
73
|
+
puts "windowsnt [default]"
|
|
74
|
+
puts "windows2000"
|
|
75
|
+
puts "windowsxp"
|
|
76
|
+
puts "linux-sparc"
|
|
77
|
+
exit
|
|
78
|
+
end
|
|
79
|
+
|
|
58
80
|
# These options appear if no other is given.
|
|
59
81
|
parser.on("-h", "--help", "Show this message") do
|
|
60
82
|
puts parser
|
data/lib/bsod/version.rb
CHANGED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
|
|
2
|
+
require 'bsod'
|
|
3
|
+
|
|
4
|
+
module BSOD
|
|
5
|
+
|
|
6
|
+
# Remember Window$ 2000?
|
|
7
|
+
#
|
|
8
|
+
# This is the same as WindowsNT, the only thing that
|
|
9
|
+
# changes is the default message.
|
|
10
|
+
class Windows2000
|
|
11
|
+
|
|
12
|
+
BSODTEXT = <<END_OF_TEXT
|
|
13
|
+
A problem has been detected and windows has been shut down to prevent damage
|
|
14
|
+
to your computer.
|
|
15
|
+
|
|
16
|
+
If this is the first time you've seen this stop error screen,
|
|
17
|
+
restart your computer. If this screen appears again, follow
|
|
18
|
+
these steps:
|
|
19
|
+
|
|
20
|
+
Check to be sure you have adequate disk space. If a driver is
|
|
21
|
+
identified in the Stop message, disable the driver or check
|
|
22
|
+
with the manufacturer for driver updates. Try changing video
|
|
23
|
+
adapters.
|
|
24
|
+
|
|
25
|
+
Check with your hardware vendor for any BIOS updates. Disable
|
|
26
|
+
BIOS memory options such as caching or shadowing. If you need
|
|
27
|
+
to use Safe Mode to remove or disable components, restart your
|
|
28
|
+
computer, press F8 to select Advanced Startup Options, and then
|
|
29
|
+
select Safe Mode.
|
|
30
|
+
|
|
31
|
+
Technical information:
|
|
32
|
+
|
|
33
|
+
*** STOP: 0x0000007E (0xC0000005,0xF88FF190,0x0xF8975BA0,0xF89758A0)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
*** EPUSBDSK.sys - Address F88FF190 base at FF88FE000, datestamp 3b9f3248
|
|
37
|
+
|
|
38
|
+
Beginning dump of physical memory
|
|
39
|
+
Physical memory dump complete.
|
|
40
|
+
Contact your system administrator or technical support group for further
|
|
41
|
+
assistance.
|
|
42
|
+
END_OF_TEXT
|
|
43
|
+
|
|
44
|
+
# No `def initialize` on purpose
|
|
45
|
+
|
|
46
|
+
# Draws the BSOD on a SDL's `screen`, bounded by `width` and
|
|
47
|
+
# `height`.
|
|
48
|
+
#
|
|
49
|
+
# It must be a `SDL::Surface` (consequently, a `SDL::Screen`
|
|
50
|
+
# is acceptable too.
|
|
51
|
+
def draw(screen, width, height)
|
|
52
|
+
|
|
53
|
+
# Should I break the program's flow here?
|
|
54
|
+
BSOD::init_sdl if not BSOD::sdl_inited?
|
|
55
|
+
|
|
56
|
+
# Filling screen with that sweet, sweet blue tone
|
|
57
|
+
blue = screen.format.map_rgb(0, 0, 255)
|
|
58
|
+
screen.fill_rect(0, 0, width, height, blue)
|
|
59
|
+
|
|
60
|
+
# Printing that bizarre text
|
|
61
|
+
font = SDL::TTF.open($settings[:font_filename],
|
|
62
|
+
$settings[:font_size])
|
|
63
|
+
|
|
64
|
+
font.style = SDL::TTF::STYLE_BOLD if $settings[:font_bold]
|
|
65
|
+
|
|
66
|
+
i = 0
|
|
67
|
+
BSODTEXT.each_line do |line|
|
|
68
|
+
# This is a little hack to allow printing empty lines.
|
|
69
|
+
# First I remove the '\n' at the end to avoid nasty things
|
|
70
|
+
# and then I append a space, to prevent nil strings.
|
|
71
|
+
line.chomp!
|
|
72
|
+
line += " "
|
|
73
|
+
|
|
74
|
+
font.draw_solid_utf8(screen, line,
|
|
75
|
+
3, (i * font.height),
|
|
76
|
+
255, 255, 255)
|
|
77
|
+
i += 1
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
font.close
|
|
81
|
+
|
|
82
|
+
# @note Maybe update only the bounded rectangle?
|
|
83
|
+
SDL::Screen.get.update_rect(0, 0, 0, 0)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
|
|
2
|
+
require 'bsod'
|
|
3
|
+
|
|
4
|
+
module BSOD
|
|
5
|
+
|
|
6
|
+
# Ye olde Window$ NT.
|
|
7
|
+
class WindowsNT
|
|
8
|
+
|
|
9
|
+
# The default white text that will appear over the
|
|
10
|
+
# blue background.
|
|
11
|
+
BSODTEXT = <<END_OF_TEXT
|
|
12
|
+
*** STOP: 0x00000001E (0x00000003,0x00000d0e8,0x0c001201e,0x000c0ffee)
|
|
13
|
+
Unhandled Kernel exception c0000047 from fa8418b4 (00d4a81c0,00028492e)
|
|
14
|
+
|
|
15
|
+
Dll Base Date Stamp - Name Dll Base Date Stamp - Name
|
|
16
|
+
bf7978fb be154c92 - ntoskrnl.exe 7fa3883b 11b92972 - hal.dll
|
|
17
|
+
a519c86a b386ca2c - ncrc710.sys faea83e1 c47447d7 - SCSIPORT.SYS
|
|
18
|
+
2f983e0b 6e01a9a4 - scsidisk.sys 6a7f9869 45b277c4 - Fastfat.sys
|
|
19
|
+
94041089 e1a9f5d9 - Floppy.SYS b91218c4 c037818d - Hpfs_Rec.SYS
|
|
20
|
+
0bb5c0c9 8ca7bd22 - Null.SYS 5496bb5f 1d60d82c - Beep.SYS
|
|
21
|
+
a9b37c3a f70ef21d - i8042prt.SYS 585fd0b5 1e973d5d - SERMOUSE.SYS
|
|
22
|
+
e4965cb7 24a6ec07 - kbdclass.SYS 2925baf7 5cb9a053 - MOUCLASS.SYS
|
|
23
|
+
e54f64c7 f54b26c1 - Videoprt.SYS ad7a85bd 7d2571b9 - NCC1701E.SYS
|
|
24
|
+
1a119462 e9c098e9 - Vga.SYS e3c5a4a4 f5caa34a - Msfs.SYS
|
|
25
|
+
|
|
26
|
+
Address dword dump Dll Base - Name
|
|
27
|
+
2fc589eb b483bf92 20677c0a f254e409 5977ffa0 a082a53e : c76875ba - i8042prt.SYS
|
|
28
|
+
35ec96b5 1dc0af3c 406c655c 5bfbe3fe 8390119a bd653a61 : d17a5ee1 - SCSIPORT.SYS
|
|
29
|
+
d54704c9 c9c43be6 ece08295 e5fd350c f469f913 86a54eeb : 24ed5a16 - ntoskrnl.exe
|
|
30
|
+
4ade1e66 2639fc5c 4d22f159 94f99371 f9876420 71517f45 : 69048b22 - ntoskrnl.exe
|
|
31
|
+
e3d88756 0e0e2322 2a899667 71dd4f99 9fba9b81 12b84e81 : 23ce15e3 - ntoskrnl.exe
|
|
32
|
+
981f5fa4 e03f9d34 6ec6e730 31ca1ce6 f75b54b6 d5ba53f6 : a7419dad - ntoskrnl.exe
|
|
33
|
+
16cfcafd 67eb2c74 9152a8f3 62864c8e 148c9c29 bb4235b5 : 3e24c47e - ntoskrnl.exe
|
|
34
|
+
|
|
35
|
+
Kernel Debugger Using: COM2 (Port 0x2f8, Baud Rate 19200)
|
|
36
|
+
Restart and set the recovery options in the system control panel
|
|
37
|
+
or the /CRASHDEBUG system start option. If this message reappears,
|
|
38
|
+
contact your system administrator or technical support group.
|
|
39
|
+
END_OF_TEXT
|
|
40
|
+
|
|
41
|
+
# No `def initialize` on purpose
|
|
42
|
+
|
|
43
|
+
# Draws the BSOD on a SDL's `screen`, bounded by `width` and
|
|
44
|
+
# `height`.
|
|
45
|
+
#
|
|
46
|
+
# It must be a `SDL::Surface` (consequently, a `SDL::Screen`
|
|
47
|
+
# is acceptable too.
|
|
48
|
+
def draw(screen, width, height)
|
|
49
|
+
|
|
50
|
+
# Should I break the program's flow here?
|
|
51
|
+
BSOD::init_sdl if not BSOD::sdl_inited?
|
|
52
|
+
|
|
53
|
+
# Filling screen with that sweet, sweet blue tone
|
|
54
|
+
blue = screen.format.map_rgb(0, 0, 255)
|
|
55
|
+
screen.fill_rect(0, 0, width, height, blue)
|
|
56
|
+
|
|
57
|
+
# Printing that bizarre text
|
|
58
|
+
font = SDL::TTF.open($settings[:font_filename],
|
|
59
|
+
$settings[:font_size])
|
|
60
|
+
|
|
61
|
+
font.style = SDL::TTF::STYLE_BOLD if $settings[:font_bold]
|
|
62
|
+
|
|
63
|
+
i = 0
|
|
64
|
+
BSODTEXT.each_line do |line|
|
|
65
|
+
# This is a little hack to allow printing empty lines.
|
|
66
|
+
# First I remove the '\n' at the end to avoid nasty things
|
|
67
|
+
# and then I append a space, to prevent nil strings.
|
|
68
|
+
line.chomp!
|
|
69
|
+
line += " "
|
|
70
|
+
|
|
71
|
+
font.draw_solid_utf8(screen, line,
|
|
72
|
+
3, (i * font.height),
|
|
73
|
+
255, 255, 255)
|
|
74
|
+
i += 1
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
font.close
|
|
78
|
+
|
|
79
|
+
# @note Maybe update only the bounded rectangle?
|
|
80
|
+
SDL::Screen.get.update_rect(0, 0, 0, 0)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
|
|
2
|
+
require 'bsod'
|
|
3
|
+
require 'bsod/windowsnt'
|
|
4
|
+
|
|
5
|
+
module BSOD
|
|
6
|
+
|
|
7
|
+
# As seen on Window$ XP.
|
|
8
|
+
#
|
|
9
|
+
# This is the same as WindowsNT, the only thing that
|
|
10
|
+
# changes is the default message.
|
|
11
|
+
class WindowsXP
|
|
12
|
+
|
|
13
|
+
# The default white text that will appear over the
|
|
14
|
+
# blue background.
|
|
15
|
+
BSODTEXT = <<END_OF_TEXT
|
|
16
|
+
A problem has been detected and windows has been shut down to prvent damage
|
|
17
|
+
to your computer.
|
|
18
|
+
|
|
19
|
+
The problem seems to be caused by the following file: SPCMDCON.SYS
|
|
20
|
+
|
|
21
|
+
PAGE_FAULT_IN_NONPAGED_AREA
|
|
22
|
+
|
|
23
|
+
If this is the first time you've seen this stop error screen,
|
|
24
|
+
restart your computer. If this screen appears again, follow
|
|
25
|
+
these steps:
|
|
26
|
+
|
|
27
|
+
Check to make sure any new hardware or software is properly installed.
|
|
28
|
+
If this is a new installation, ask your hardware or software manufacturer
|
|
29
|
+
for any windows updates you might need.
|
|
30
|
+
|
|
31
|
+
If problems continue, disable or remove any newly installed hardware
|
|
32
|
+
or software. Disable BIOS memory options such as caching or shadowing.
|
|
33
|
+
If you need to use Safe Mode to remove or disable components, restart
|
|
34
|
+
your computer, press F8 to select Advanced Startup Options, and then
|
|
35
|
+
select Safe Mode.
|
|
36
|
+
|
|
37
|
+
Technical information:
|
|
38
|
+
|
|
39
|
+
*** STOP: 0x00000050 (0xFD3094C2,0x00000001,0xFBFE7617,0x00000000)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
*** SPCMDCON.SYS - Address FBFE7617 base at FBFE5000, DateStamp 3d6dd67c
|
|
43
|
+
END_OF_TEXT
|
|
44
|
+
|
|
45
|
+
# No `def initialize` on purpose
|
|
46
|
+
|
|
47
|
+
# Draws the BSOD on a SDL's `screen`, bounded by `width` and
|
|
48
|
+
# `height`.
|
|
49
|
+
#
|
|
50
|
+
# It must be a `SDL::Surface` (consequently, a `SDL::Screen`
|
|
51
|
+
# is acceptable too.
|
|
52
|
+
def draw(screen, width, height)
|
|
53
|
+
|
|
54
|
+
# Should I break the program's flow here?
|
|
55
|
+
BSOD::init_sdl if not BSOD::sdl_inited?
|
|
56
|
+
|
|
57
|
+
# Filling screen with that sweet, sweet blue tone
|
|
58
|
+
blue = screen.format.map_rgb(0, 0, 255)
|
|
59
|
+
screen.fill_rect(0, 0, width, height, blue)
|
|
60
|
+
|
|
61
|
+
# Printing that bizarre text
|
|
62
|
+
font = SDL::TTF.open($settings[:font_filename],
|
|
63
|
+
$settings[:font_size])
|
|
64
|
+
|
|
65
|
+
font.style = SDL::TTF::STYLE_BOLD if $settings[:font_bold]
|
|
66
|
+
|
|
67
|
+
i = 0
|
|
68
|
+
BSODTEXT.each_line do |line|
|
|
69
|
+
# This is a little hack to allow printing empty lines.
|
|
70
|
+
# First I remove the '\n' at the end to avoid nasty things
|
|
71
|
+
# and then I append a space, to prevent nil strings.
|
|
72
|
+
line.chomp!
|
|
73
|
+
line += " "
|
|
74
|
+
|
|
75
|
+
font.draw_solid_utf8(screen, line,
|
|
76
|
+
3, (i * font.height),
|
|
77
|
+
255, 255, 255)
|
|
78
|
+
i += 1
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
font.close
|
|
82
|
+
|
|
83
|
+
# @note Maybe update only the bounded rectangle?
|
|
84
|
+
SDL::Screen.get.update_rect(0, 0, 0, 0)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
data/lib/bsod.rb
CHANGED
|
@@ -1,91 +1,31 @@
|
|
|
1
1
|
|
|
2
2
|
require 'sdl'
|
|
3
3
|
|
|
4
|
-
#
|
|
5
|
-
#
|
|
4
|
+
# This is a great container over all Blue Screens
|
|
5
|
+
# of Death (BSOD).
|
|
6
|
+
#
|
|
7
|
+
# Every BSOD must implement a `draw` method, that will
|
|
8
|
+
# render itself over any `SDL::Surface`.
|
|
6
9
|
#
|
|
7
|
-
# Make sure you have installed:
|
|
8
|
-
# * ruby `sdl` gem
|
|
9
|
-
# * C `SDL` library
|
|
10
|
-
# * C `SDL_ttf` library
|
|
11
10
|
module BSOD
|
|
12
11
|
|
|
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
12
|
|
|
13
|
+
# Tells if SDL has been initialized already, both
|
|
14
|
+
# by us (`init_sdl`) or by the user.
|
|
15
|
+
def self.sdl_inited?
|
|
52
16
|
if (SDL::inited_system(SDL::INIT_VIDEO) == 0) or
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
17
|
+
(not SDL::TTF::init?)
|
|
18
|
+
return false
|
|
80
19
|
end
|
|
81
20
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
# @note Maybe update only the bounded rectangle?
|
|
85
|
-
SDL::Screen.get.update_rect(0, 0, 0, 0)
|
|
21
|
+
return true
|
|
22
|
+
end
|
|
86
23
|
|
|
87
|
-
|
|
88
|
-
|
|
24
|
+
# Waits for a keypress of `SDL_KEY` `key`, ignoring
|
|
25
|
+
# anything else.
|
|
26
|
+
#
|
|
27
|
+
# Defaults to F8.
|
|
28
|
+
def self.wait_for_sdl_key(key=SDL::Key::F8)
|
|
89
29
|
loop = true
|
|
90
30
|
while loop
|
|
91
31
|
|
|
@@ -95,7 +35,7 @@ END_OF_TEXT
|
|
|
95
35
|
case event
|
|
96
36
|
when SDL::Event2::KeyDown
|
|
97
37
|
SDL::Key.scan
|
|
98
|
-
if SDL::Key.press?
|
|
38
|
+
if SDL::Key.press? key
|
|
99
39
|
loop = false
|
|
100
40
|
end
|
|
101
41
|
end
|
|
@@ -104,5 +44,9 @@ END_OF_TEXT
|
|
|
104
44
|
sleep 0.05
|
|
105
45
|
end
|
|
106
46
|
end
|
|
47
|
+
|
|
48
|
+
def self.init_curses
|
|
49
|
+
|
|
50
|
+
end
|
|
107
51
|
end
|
|
108
52
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bsod
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alexandre Dantas
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2013-10-
|
|
11
|
+
date: 2013-10-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -61,10 +61,15 @@ files:
|
|
|
61
61
|
- Rakefile
|
|
62
62
|
- bin/bsod
|
|
63
63
|
- bsod.gemspec
|
|
64
|
-
- droidsansmono.ttf
|
|
64
|
+
- fonts/droidsansmono.ttf
|
|
65
|
+
- images/bsod.png
|
|
65
66
|
- lib/bsod.rb
|
|
67
|
+
- lib/bsod/linux-sparc.rb
|
|
66
68
|
- lib/bsod/settings.rb
|
|
67
69
|
- lib/bsod/version.rb
|
|
70
|
+
- lib/bsod/windows2000.rb
|
|
71
|
+
- lib/bsod/windowsnt.rb
|
|
72
|
+
- lib/bsod/windowsxp.rb
|
|
68
73
|
homepage: http://www.alexdantas.net/projects/bsod
|
|
69
74
|
licenses:
|
|
70
75
|
- GPL-3.0
|