ehbrs_ruby_utils 0.31.0 → 0.33.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ehbrs_ruby_utils/bga/table/whatsapp_formatters/base/format_option.rb +22 -0
  3. data/lib/ehbrs_ruby_utils/bga/table/whatsapp_formatters/base/format_player.rb +27 -0
  4. data/lib/ehbrs_ruby_utils/bga/table/whatsapp_formatters/base.rb +68 -0
  5. data/lib/ehbrs_ruby_utils/bga/table/whatsapp_formatters/beginning/format_player.rb +24 -0
  6. data/lib/ehbrs_ruby_utils/bga/table/whatsapp_formatters/beginning.rb +35 -0
  7. data/lib/ehbrs_ruby_utils/bga/table/whatsapp_formatters/ending/format_player.rb +32 -0
  8. data/lib/ehbrs_ruby_utils/bga/table/whatsapp_formatters/ending.rb +45 -0
  9. data/lib/ehbrs_ruby_utils/bga/table/whatsapp_formatters.rb +13 -0
  10. data/lib/ehbrs_ruby_utils/cooking_book/build/base_page.rb +42 -0
  11. data/lib/ehbrs_ruby_utils/cooking_book/build/index_page.rb +26 -0
  12. data/lib/ehbrs_ruby_utils/cooking_book/build/recipe_page.rb +26 -0
  13. data/lib/ehbrs_ruby_utils/cooking_book/build.rb +45 -0
  14. data/lib/ehbrs_ruby_utils/cooking_book/project.rb +31 -0
  15. data/lib/ehbrs_ruby_utils/cooking_book/recipe/ingredient.rb +21 -0
  16. data/lib/ehbrs_ruby_utils/cooking_book/recipe/measure.rb +60 -0
  17. data/lib/ehbrs_ruby_utils/cooking_book/recipe/part.rb +32 -0
  18. data/lib/ehbrs_ruby_utils/cooking_book/recipe.rb +37 -0
  19. data/lib/ehbrs_ruby_utils/cooking_book.rb +9 -0
  20. data/lib/ehbrs_ruby_utils/gjt1/manager.rb +8 -5
  21. data/lib/ehbrs_ruby_utils/version.rb +1 -1
  22. data/lib/ehbrs_ruby_utils/vg/wii/file_move.rb +89 -0
  23. data/lib/ehbrs_ruby_utils/vg/wii/game_file.rb +87 -0
  24. data/lib/ehbrs_ruby_utils/vg/wii/wit/image_format.rb +47 -0
  25. data/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb +67 -0
  26. data/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/info.rb +39 -0
  27. data/lib/ehbrs_ruby_utils/vg/wii/wit/path.rb +55 -0
  28. data/lib/ehbrs_ruby_utils/vg/wii/wit.rb +13 -0
  29. data/lib/ehbrs_ruby_utils/vg/wii.rb +11 -0
  30. data/lib/ehbrs_ruby_utils/vg.rb +9 -0
  31. data/spec/lib/ehbrs_ruby_utils/cooking_book/recipe/measure_spec.rb +21 -0
  32. data/spec/lib/ehbrs_ruby_utils/vg/wii/game_file_spec.rb +21 -0
  33. data/spec/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump_spec.rb +11 -0
  34. data/spec/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump_spec_files/pikmin2_R92P01_wia.source.witdump +27 -0
  35. data/spec/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump_spec_files/pikmin2_R92P01_wia.target.yaml +22 -0
  36. data/spec/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump_spec_files/pikmin2_pal_iso.source.witdump +28 -0
  37. data/spec/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump_spec_files/pikmin2_pal_iso.target.yaml +21 -0
  38. data/spec/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump_spec_files/resident_evil_code_veronica_disc2_iso.source.witdump +16 -0
  39. data/spec/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump_spec_files/resident_evil_code_veronica_disc2_iso.target.yaml +19 -0
  40. data/spec/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump_spec_files/super_mario_galaxy_wbfs.source.witdump +28 -0
  41. data/spec/lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump_spec_files/super_mario_galaxy_wbfs.target.yaml +23 -0
  42. data/spec/lib/ehbrs_ruby_utils/vg/wii/wit/path_spec.rb +33 -0
  43. metadata +104 -62
  44. data/lib/ehbrs_ruby_utils/bga/table_whatsapp_formatter/format_option.rb +0 -18
  45. data/lib/ehbrs_ruby_utils/bga/table_whatsapp_formatter/format_player.rb +0 -30
  46. data/lib/ehbrs_ruby_utils/bga/table_whatsapp_formatter.rb +0 -66
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'ehbrs/executables'
5
+ require 'ehbrs_ruby_utils/vg/wii/wit/image_format'
6
+ require 'ehbrs_ruby_utils/vg/wii/wit/path'
7
+ require 'fileutils'
8
+
9
+ module EhbrsRubyUtils
10
+ module Vg
11
+ module Wii
12
+ class FileMove
13
+ common_constructor :game, :target do
14
+ self.target = ::EhbrsRubyUtils::Vg::Wii::Wit::Path.assert(target)
15
+ end
16
+
17
+ ['', 'path_', 'type_'].each do |prefix|
18
+ method_name = "#{prefix}change?"
19
+ define_method(method_name) do
20
+ source.send(method_name, target)
21
+ end
22
+ end
23
+
24
+ def run
25
+ [%w[path type], %w[path], %w[type]].each do |parts|
26
+ next unless parts.all? { |part| send("#{part}_change?") }
27
+
28
+ assert_target_dir
29
+ send("change_#{parts.join('_and_')}")
30
+ check_target
31
+ break
32
+ end
33
+ end
34
+
35
+ def source
36
+ game.wit_path
37
+ end
38
+
39
+ private
40
+
41
+ def assert_target_dir
42
+ target.path.parent.mkpath
43
+ end
44
+
45
+ def change_path
46
+ ::FileUtils.mv(source.path, target.path)
47
+ end
48
+
49
+ def change_path_and_type
50
+ ::Ehbrs::Executables.wit.command
51
+ .append(change_path_and_type_args)
52
+ .system!
53
+ check_target
54
+ source.path.unlink
55
+ end
56
+
57
+ def change_path_and_type_args
58
+ r = %w[copy]
59
+ target_image_format.if_present { |v| r << v.option }
60
+ r + [source.path, target.path]
61
+ end
62
+
63
+ def change_type
64
+ ::Ehbrs::Executables.wit.command
65
+ .append(change_type_args)
66
+ .system!
67
+ end
68
+
69
+ def change_type_args
70
+ r = %w[convert]
71
+ target_image_format.if_present { |v| r << v.option }
72
+ r + [target.path]
73
+ end
74
+
75
+ def check_target
76
+ return if ::EhbrsRubyUtils::Vg::Wii::GameFile.new(target.path).valid?
77
+
78
+ raise "Target \"#{target}\" is not a valid Wii game"
79
+ end
80
+
81
+ def target_image_format
82
+ return nil if target.type.blank?
83
+
84
+ ::EhbrsRubyUtils::Vg::Wii::Wit::ImageFormat.by_name(target.type)
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_ruby_utils/custom_format'
5
+ require 'ehbrs_ruby_utils/vg/wii/wit/parsers/dump'
6
+ require 'ehbrs_ruby_utils/vg/wii/wit/path'
7
+ require 'pathname'
8
+
9
+ module EhbrsRubyUtils
10
+ module Vg
11
+ module Wii
12
+ class GameFile < ::Pathname
13
+ enable_simple_cache
14
+
15
+ DISC_NUMBER_PATTERN = /disc.?(\d)/i.freeze
16
+
17
+ FORMAT = ::EacRubyUtils::CustomFormat.new(
18
+ b: :basename,
19
+ d: :dirname,
20
+ D: :disc_number,
21
+ e: :extname,
22
+ i: :id6,
23
+ m: :normalized_disc_name,
24
+ n: :disc_name,
25
+ N: :nintendont_basename,
26
+ s: :sanitized_disc_name,
27
+ t: :database_title,
28
+ T: :disc_type
29
+ )
30
+
31
+ def database_title
32
+ properties.fetch('DB title')
33
+ end
34
+
35
+ def disc_name
36
+ properties.fetch('Disc name')
37
+ end
38
+
39
+ def disc_number
40
+ DISC_NUMBER_PATTERN.if_match(basename.to_s, false) { |m| m[1].to_i }.if_present(1)
41
+ end
42
+
43
+ def disc_type
44
+ properties.fetch('File & disc type/type')
45
+ end
46
+
47
+ def format(string)
48
+ FORMAT.format(string).with(self)
49
+ end
50
+
51
+ def normalized_disc_name
52
+ sanitized_disc_name.downcase
53
+ end
54
+
55
+ def nintendont_basename
56
+ n = disc_number
57
+ n == 1 ? 'game' : "disc#{n}"
58
+ end
59
+
60
+ def id6
61
+ properties.fetch('Disc & part IDs/disc')
62
+ end
63
+
64
+ def sanitized_disc_name
65
+ ::ActiveSupport::Inflector.transliterate(disc_name).gsub(/[^0-9a-z ]/i, '')
66
+ end
67
+
68
+ def valid?
69
+ properties.present?
70
+ end
71
+
72
+ def wit_path
73
+ ::EhbrsRubyUtils::Vg::Wii::Wit::Path.new(disc_type, self)
74
+ end
75
+
76
+ private
77
+
78
+ def properties_uncached
79
+ r = ::Ehbrs::Executables.wit.command.append(['dump', to_s]).execute
80
+ return nil unless r.fetch(:exit_code).zero?
81
+
82
+ ::EhbrsRubyUtils::Vg::Wii::Wit::Parsers::Dump.new(r.fetch(:stdout)).properties
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'ehbrs/executables'
5
+ require 'ehbrs_ruby_utils/vg/wii/wit/parsers/info'
6
+
7
+ module EhbrsRubyUtils
8
+ module Vg
9
+ module Wii
10
+ module Wit
11
+ class ImageFormat
12
+ class << self
13
+ SECTION_NAME_PATTERN = /\A#{::Regexp.quote('IMAGE-FORMAT:')}(.+)\z/.freeze
14
+
15
+ enable_simple_cache
16
+
17
+ def by_name(name)
18
+ all.find { |i| i.name.downcase == name.to_s.downcase } ||
19
+ raise(::ArgumentError, "Image not found with name \"#{name.to_s.downcase}\"" \
20
+ " (Available: #{all.map(&:name).join(', ')})")
21
+ end
22
+
23
+ private
24
+
25
+ def all_uncached
26
+ ::EhbrsRubyUtils::Vg::Wii::Wit::Parsers::Info.new(info_output).images
27
+ .map do |_label, data|
28
+ new(
29
+ *%w[name info option].map { |k| data.fetch(k) },
30
+ *%w[extensions attributes].map { |k| data.fetch(k).to_s.split(/\s+/) }
31
+ )
32
+ end
33
+ end
34
+
35
+ def info_output
36
+ ::Ehbrs::Executables.wit.command
37
+ .append(%w[info image-format --sections])
38
+ .execute!
39
+ end
40
+ end
41
+
42
+ common_constructor :name, :description, :option, :extensions, :attributes
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Vg
7
+ module Wii
8
+ module Wit
9
+ module Parsers
10
+ class Dump
11
+ enable_simple_cache
12
+ common_constructor :output
13
+
14
+ # WIA/WII (v1.00,LZMA2.7@100) & Wii
15
+ # ISO/WII & Wii
16
+ # WBFS/WII & Wii
17
+ # ISO/GC & GameCube
18
+ FILE_DISC_TYPE_PATTERN = %r{\A(\S+)/(\S+)\s+(?:\(([^\)]+)\)\s+)?&\s+(\S+)\z}.freeze
19
+
20
+ private
21
+
22
+ def properties_uncached
23
+ r = {}
24
+ output.each_line do |line|
25
+ dump_output_line_to_hash(line).if_present { |v| r.merge!(v) }
26
+ end
27
+ r
28
+ end
29
+
30
+ def dump_output_line_to_hash(line)
31
+ m = /\A\s*([^:]+):\s+(.+)\z/.match(line.strip)
32
+ return nil unless m
33
+
34
+ parse_attribute(m[1].strip, m[2].strip)
35
+ end
36
+
37
+ def line_method_parser(label)
38
+ "parse_#{label}".parameterize.underscore
39
+ end
40
+
41
+ def parse_attribute(label, value)
42
+ method = line_method_parser(label)
43
+ return { label => value } unless respond_to?(method, true)
44
+
45
+ send(method, value).transform_keys { |k| "#{label}/#{k}" }
46
+ end
47
+
48
+ def parse_file_disc_type(value)
49
+ r = FILE_DISC_TYPE_PATTERN.match(value).if_present do |m|
50
+ { type: m[1], platform_acronym: m[2], type_extra: m[3],
51
+ platform_name: m[4] }
52
+ end
53
+ r.if_blank { raise "\"#{FILE_DISC_TYPE_PATTERN}\" does not match \"#{value}\"" }
54
+ end
55
+
56
+ def parse_disc_part_ids(value)
57
+ value.split(',').map(&:strip).map do |v|
58
+ r = v.split('=')
59
+ [r[0].strip, r[1].strip]
60
+ end.to_h
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'ehbrs/executables'
5
+ require 'fileutils'
6
+ require 'inifile'
7
+
8
+ module EhbrsRubyUtils
9
+ module Vg
10
+ module Wii
11
+ module Wit
12
+ module Parsers
13
+ class Info
14
+ SECTION_NAME_PATTERN = /\A#{::Regexp.quote('IMAGE-FORMAT:')}(.+)\z/.freeze
15
+
16
+ enable_simple_cache
17
+ common_constructor :output
18
+
19
+ private
20
+
21
+ def images_uncached
22
+ ini = ::IniFile.new(content: output)
23
+ r = {}
24
+ ini.sections.each do |section_name|
25
+ image_section_name = parse_image_section_name(section_name)
26
+ r[image_section_name] = ini[section_name] if image_section_name.present?
27
+ end
28
+ r
29
+ end
30
+
31
+ def parse_image_section_name(section_name)
32
+ SECTION_NAME_PATTERN.match(section_name).if_present { |m| m[1] }
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Vg
7
+ module Wii
8
+ module Wit
9
+ class Path
10
+ WIT_PATH_PATTERN = /\A(?:([a-z0-9]+):)?(.+)\z/i.freeze
11
+
12
+ class << self
13
+ def assert(source)
14
+ source = parse(source) unless source.is_a?(self)
15
+ source
16
+ end
17
+
18
+ def parse(path)
19
+ WIT_PATH_PATTERN
20
+ .match(path)
21
+ .if_present { |m| new(m[1], m[2]) }
22
+ .if_blank { raise "\"#{WIT_PATH_PATTERN}\" does not match \"#{path}\"" }
23
+ end
24
+ end
25
+
26
+ common_constructor :type, :path do
27
+ self.type = type.to_s.upcase
28
+ self.path = ::Pathname.new(path.to_s)
29
+ end
30
+
31
+ def change?(other)
32
+ type_change?(other) || path_change?(other)
33
+ end
34
+
35
+ def path_change?(other)
36
+ path.expand_path.to_s != other.path.expand_path.to_s
37
+ end
38
+
39
+ def to_s
40
+ r = path.to_s
41
+ r = "#{type.to_s.upcase}:#{r}" if type.present?
42
+ r
43
+ end
44
+
45
+ def type_change?(other)
46
+ return false if other.type.blank?
47
+ return true if type.blank?
48
+
49
+ type != other.type
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Vg
7
+ module Wii
8
+ module Wit
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Vg
7
+ module Wii
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EhbrsRubyUtils
6
+ module Vg
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/cooking_book/recipe/measure'
4
+
5
+ RSpec.describe ::EhbrsRubyUtils::CookingBook::Recipe::Measure do
6
+ describe '#build'
7
+ {
8
+ '1.5 cup' => [1.5, nil, 'cup'],
9
+ '~' => [nil, nil, nil],
10
+ '2/ 3 u' => [2, 3, 'u'],
11
+ '4.5/7.8' => [4.5, 7.8, nil]
12
+ }.each do |source, expected|
13
+ context "when source is \"#{source}\"" do
14
+ let(:instance) { described_class.build(source) }
15
+
16
+ it { expect(instance.numerator).to eq(expected[0]) }
17
+ it { expect(instance.denominator).to eq(expected[1]) }
18
+ it { expect(instance.unit).to eq(expected[2]) }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/vg/wii/game_file'
4
+
5
+ RSpec.describe ::EhbrsRubyUtils::Vg::Wii::GameFile do
6
+ [['game.iso', 1, 'game'], ['disc1.iso', 1, 'game'], ['disc2.iso', 2, 'disc2'],
7
+ ['Resident Evil - Code - Veronica X (USA) (Disc 1)', 1, 'game'],
8
+ ['Resident Evil - Code - Veronica X (USA) (Disc 2)', 2, 'disc2']].each do |s|
9
+ context "when game file is #{s[0]}" do
10
+ let(:game_file) { described_class.new(s[0]) }
11
+
12
+ it "disc_number should be #{s[1]}" do
13
+ expect(game_file.disc_number).to eq(s[1])
14
+ end
15
+
16
+ it "nintendont_basename should be #{s[2]}" do
17
+ expect(game_file.nintendont_basename).to eq(s[2])
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ehbrs_ruby_utils/vg/wii/wit/parsers/dump'
4
+
5
+ RSpec.describe ::EhbrsRubyUtils::Vg::Wii::Wit::Parsers::Dump do
6
+ include_examples 'source_target_fixtures', __FILE__
7
+
8
+ def source_data(source_file)
9
+ described_class.new(::File.read(source_file)).properties
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+
2
+ Dump of file /home/eduardo/storage/roms/wii/games_untested/Pikmin 2 - New Play Control_ [R92P01].wia
3
+
4
+ Real path: /mnt/storage/eduardo/roms/wii/games_untested/Pikmin 2 - New Play Control_ [R92P01].wia
5
+ Virtual size: 118240000/hex = 4699979776 = 4482 MiB
6
+ Scrubbed size: 7af30000/hex = 2062745600 = 1967 MiB, 43.9%, 62950*32K
7
+ WIA file size: 63d2da4e/hex = 1674762830 = 1597 MiB, 35.6%, 81.2%
8
+ File & disc type: WIA/WII (v1.00,LZMA2.7@100) & Wii
9
+ Disc & part IDs: disc=R92P01, ticket=R92P, tmd=R92P, boot=R92P01
10
+ Disc name: PIKMIN2 for Wii
11
+ DB title: Pikmin 2
12
+ ID Region: PAL [PAL ]
13
+ Region setting: 2 [Europe] / Jap=128 USA=128 ?=128 Eur=0,3,3,4,3,7 Kor=128
14
+ System version: 00000001-00000021 = IOS 0x21 = IOS 33
15
+ Partitions: 1 [encrypted, well signed]
16
+ Directories: 593
17
+ Files: 2376
18
+
19
+ 1 partition table with 1 partition:
20
+
21
+ index type offset .. end off size/hex = size/dec = MiB status
22
+ ----------------------------------------------------------------------------------------
23
+ 0 part.tab 40020 .. 40028 8 = 8 1 partition
24
+ ----------------------------------------------------------------------------------------
25
+ 0.0 DATA 0 f800000 .. 1173c0000 107bc0000 = 4424728576 = 4220 enc,signed
26
+ ----------------------------------------------------------------------------------------
27
+
@@ -0,0 +1,22 @@
1
+ ---
2
+ Real path: "/mnt/storage/eduardo/roms/wii/games_untested/Pikmin 2 - New Play Control_
3
+ [R92P01].wia"
4
+ Virtual size: 118240000/hex = 4699979776 = 4482 MiB
5
+ Scrubbed size: 7af30000/hex = 2062745600 = 1967 MiB, 43.9%, 62950*32K
6
+ WIA file size: 63d2da4e/hex = 1674762830 = 1597 MiB, 35.6%, 81.2%
7
+ File & disc type/type: WIA
8
+ File & disc type/platform_acronym: WII
9
+ File & disc type/type_extra: v1.00,LZMA2.7@100
10
+ File & disc type/platform_name: Wii
11
+ Disc & part IDs/disc: R92P01
12
+ Disc & part IDs/ticket: R92P
13
+ Disc & part IDs/tmd: R92P
14
+ Disc & part IDs/boot: R92P01
15
+ Disc name: PIKMIN2 for Wii
16
+ DB title: Pikmin 2
17
+ ID Region: PAL [PAL ]
18
+ Region setting: 2 [Europe] / Jap=128 USA=128 ?=128 Eur=0,3,3,4,3,7 Kor=128
19
+ System version: 00000001-00000021 = IOS 0x21 = IOS 33
20
+ Partitions: 1 [encrypted, well signed]
21
+ Directories: '593'
22
+ Files: '2376'
@@ -0,0 +1,28 @@
1
+
2
+ Dump of file pikmin2_pal.iso
3
+
4
+ Real path: /mnt/storage/eduardo/roms/wii/games_untested/pikmin2_pal.iso
5
+ ISO file size: 118240000/hex = 4699979776 = 4482 MiB
6
+ Scrubbed size: 85790000/hex = 2239299584 = 2136 MiB, 47.6%, 68338*32K
7
+ File & disc type: ISO/WII & Wii
8
+ Disc & part IDs: disc=R92P01, ticket=R92P, tmd=R92P, boot=R92P01
9
+ Disc name: PIKMIN2 for Wii
10
+ DB title: Pikmin 2
11
+ ID Region: PAL [PAL ]
12
+ Region setting: 2 [Europe] / Jap=128 USA=128 ?=128 Eur=0,3,3,4,3,7 Kor=128
13
+ System menu: v386 = 3.4E
14
+ System version: 00000001-00000021 = IOS 0x21 = IOS 33
15
+ Partitions: 2 [encrypted, well signed]
16
+ Directories: 598
17
+ Files: 2421
18
+
19
+ 1 partition table with 2 partitions:
20
+
21
+ index type offset .. end off size/hex = size/dec = MiB status
22
+ ----------------------------------------------------------------------------------------
23
+ 0 part.tab 40020 .. 40030 10 = 16 2 partitions
24
+ ----------------------------------------------------------------------------------------
25
+ 0.0 UPDATE 1 50000 .. a8b8000 a868000 = 176586752 = 168 enc,signed
26
+ 0.1 DATA 0 f800000 .. 1173c0000 107bc0000 = 4424728576 = 4220 enc,signed
27
+ ----------------------------------------------------------------------------------------
28
+
@@ -0,0 +1,21 @@
1
+ ---
2
+ Real path: "/mnt/storage/eduardo/roms/wii/games_untested/pikmin2_pal.iso"
3
+ ISO file size: 118240000/hex = 4699979776 = 4482 MiB
4
+ Scrubbed size: 85790000/hex = 2239299584 = 2136 MiB, 47.6%, 68338*32K
5
+ File & disc type/type: ISO
6
+ File & disc type/platform_acronym: WII
7
+ File & disc type/type_extra:
8
+ File & disc type/platform_name: Wii
9
+ Disc & part IDs/disc: R92P01
10
+ Disc & part IDs/ticket: R92P
11
+ Disc & part IDs/tmd: R92P
12
+ Disc & part IDs/boot: R92P01
13
+ Disc name: PIKMIN2 for Wii
14
+ DB title: Pikmin 2
15
+ ID Region: PAL [PAL ]
16
+ Region setting: 2 [Europe] / Jap=128 USA=128 ?=128 Eur=0,3,3,4,3,7 Kor=128
17
+ System menu: v386 = 3.4E
18
+ System version: 00000001-00000021 = IOS 0x21 = IOS 33
19
+ Partitions: 2 [encrypted, well signed]
20
+ Directories: '598'
21
+ Files: '2421'
@@ -0,0 +1,16 @@
1
+
2
+ Dump of file /home/eduardo/storage/roms/gc/RESIDENT EVIL CVX [GCDE08]/disc2.iso
3
+
4
+ Real path: /mnt/storage/eduardo/roms/wii/disk/games/RESIDENT EVIL CVX [GCDE08]/disc2.iso
5
+ ISO file size: 57058000/hex = 1459978240 = 1392 MiB
6
+ Scrubbed size: 4fcf8000/hex = 1338998784 = 1277 MiB, 91.7%, 40863*32K
7
+ File & disc type: ISO/GC & GameCube
8
+ Disc & part IDs: disc=GCDE08, ticket=...., tmd=-, boot=GCDE08
9
+ Disc name: RESIDENT EVIL CVX
10
+ DB title: Resident Evil Code: Veronica X
11
+ ID Region: NTSC/USA [USA ]
12
+ BI2 Region: 1 [USA]
13
+ Partitions: 1 []
14
+ Directories: 4
15
+ Files: 54
16
+
@@ -0,0 +1,19 @@
1
+ ---
2
+ Real path: "/mnt/storage/eduardo/roms/wii/disk/games/RESIDENT EVIL CVX [GCDE08]/disc2.iso"
3
+ ISO file size: 57058000/hex = 1459978240 = 1392 MiB
4
+ Scrubbed size: 4fcf8000/hex = 1338998784 = 1277 MiB, 91.7%, 40863*32K
5
+ File & disc type/type: ISO
6
+ File & disc type/platform_acronym: GC
7
+ File & disc type/type_extra:
8
+ File & disc type/platform_name: GameCube
9
+ Disc & part IDs/disc: GCDE08
10
+ Disc & part IDs/ticket: "...."
11
+ Disc & part IDs/tmd: "-"
12
+ Disc & part IDs/boot: GCDE08
13
+ Disc name: RESIDENT EVIL CVX
14
+ DB title: 'Resident Evil Code: Veronica X'
15
+ ID Region: NTSC/USA [USA ]
16
+ BI2 Region: 1 [USA]
17
+ Partitions: 1 []
18
+ Directories: '4'
19
+ Files: '54'
@@ -0,0 +1,28 @@
1
+
2
+ Dump of file /home/eduardo/storage/roms/wii/disk/wbfs/SUPER MARIO GALAXY [RMGE01]/RMGE01.wbfs/#0
3
+
4
+ Real path: /mnt/storage/eduardo/roms/wii/disk/wbfs/SUPER MARIO GALAXY [RMGE01]/RMGE01.wbfs/#0
5
+ Virtual size: 118240000/hex = 4699979776 = 4482 MiB
6
+ Scrubbed size: d0b28000/hex = 3501359104 = 3339 MiB, 74.5%, 106853*32K
7
+ WBFS file size: d1200000/hex = 3508535296 = 3346 MiB, 74.7%, 100.2%
8
+ WBFS fragments: 1+0 = a ratio of 0.00 additional_fragments/GiB
9
+ File & disc type: WBFS/WII & Wii
10
+ Disc & part IDs: disc=RMGE01, ticket=RMGE, tmd=RMGE, boot=RMGE01, wbfs=RMGE01
11
+ Disc name: SUPER MARIO GALAXY
12
+ DB title: Super Mario Galaxy
13
+ ID Region: NTSC/USA [USA ]
14
+ Region setting: 1 [USA] / Jap=128 USA=6 ?=128 Eur=128,128,128,128,128,128 Kor=128
15
+ System version: 00000001-00000021 = IOS 0x21 = IOS 33
16
+ Partitions: 1 [encrypted, scrubbed, well signed]
17
+ Directories: 79
18
+ Files: 2383
19
+
20
+ 1 partition table with 1 partition:
21
+
22
+ index type offset .. end off size/hex = size/dec = MiB status
23
+ ----------------------------------------------------------------------------------------
24
+ 0 part.tab 40020 .. 40028 8 = 8 1 partition
25
+ ----------------------------------------------------------------------------------------
26
+ 0.0 DATA 0 f800000 .. 1173c0000 107bc0000 = 4424728576 = 4220 enc,signed,scrub
27
+ ----------------------------------------------------------------------------------------
28
+
@@ -0,0 +1,23 @@
1
+ ---
2
+ Real path: "/mnt/storage/eduardo/roms/wii/disk/wbfs/SUPER MARIO GALAXY [RMGE01]/RMGE01.wbfs/#0"
3
+ Virtual size: 118240000/hex = 4699979776 = 4482 MiB
4
+ Scrubbed size: d0b28000/hex = 3501359104 = 3339 MiB, 74.5%, 106853*32K
5
+ WBFS file size: d1200000/hex = 3508535296 = 3346 MiB, 74.7%, 100.2%
6
+ WBFS fragments: 1+0 = a ratio of 0.00 additional_fragments/GiB
7
+ File & disc type/type: WBFS
8
+ File & disc type/platform_acronym: WII
9
+ File & disc type/type_extra:
10
+ File & disc type/platform_name: Wii
11
+ Disc & part IDs/disc: RMGE01
12
+ Disc & part IDs/ticket: RMGE
13
+ Disc & part IDs/tmd: RMGE
14
+ Disc & part IDs/boot: RMGE01
15
+ Disc & part IDs/wbfs: RMGE01
16
+ Disc name: SUPER MARIO GALAXY
17
+ DB title: Super Mario Galaxy
18
+ ID Region: NTSC/USA [USA ]
19
+ Region setting: 1 [USA] / Jap=128 USA=6 ?=128 Eur=128,128,128,128,128,128 Kor=128
20
+ System version: 00000001-00000021 = IOS 0x21 = IOS 33
21
+ Partitions: 1 [encrypted, scrubbed, well signed]
22
+ Directories: '79'
23
+ Files: '2383'