Class: NarcFile

Inherits:
Object
  • Object
show all
Defined in:
lib/narc.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = "narc") ⇒ NarcFile

NarcFile.new( [name] ) => NarcFile

Instantiates a new NarcFile object. If name is not specified, the name of the NarcFile object will be just “narc”.



26
27
28
29
30
31
# File 'lib/narc.rb', line 26

def initialize(name = "narc")
  @name = name
  @elements = []
  @offsets = {}
  @size_offsets = {}
end

Instance Attribute Details

#elementsObject

Returns the value of attribute elements.



17
18
19
# File 'lib/narc.rb', line 17

def elements
  @elements
end

#nameObject

Returns the value of attribute name.



17
18
19
# File 'lib/narc.rb', line 17

def name
  @name
end

Class Method Details

.from_folder(dir) ⇒ Object

NarcFile.from_folder( [folder name] ) => NarcFile

Instantiates a new NarcFile object from the contents of a folder folder name.



74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/narc.rb', line 74

def self.from_folder(dir)
  narc = self.new(File.basename(dir))
  files = Dir.entries(dir).sort - [".", ".."]
  narc.elements = Array.new(files.size) do Narc::Element.new end
  Dir.chdir(dir) do
    files.each_with_index do |file, i|
      narc.elements[i].name = file.split("_", 2)[-1]
      File.open(file, "rb") do |f|
        narc.elements[i].data = f.read
      end
    end
  end
  return narc
end

.open(filename) ⇒ Object

NarcFile.open( filename ) => NarcFile

Instantiates a new NarcFile object from the contents of a NARC file filename.



40
41
42
43
44
45
46
# File 'lib/narc.rb', line 40

def self.open(filename)
  io = File.open(filename, "rb")
  narc = self.new(File.basename(filename, ".narc"))
  narc.get_data(io)
  io.close
  return narc
end

Instance Method Details

#extract_to_folder(folder_name = nil) ⇒ Object

narcfile.extract_to_folder( [folder name] ) => nil

Dumps the elements of the current NarcFile object to a folder. If folder name is nil or omitted, this folder will be named “ex_[name of the NarcFile object]



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/narc.rb', line 55

def extract_to_folder(folder_name = nil)
  folder_name ||= "ex_" + @name
  Dir.mkdir(folder_name) unless Dir.exists?(folder_name)
  Dir.chdir(folder_name) do
    @elements.each_with_index do |element, i|
      File.open(("%04d" % i) + "_" + element.name, "wb") do |file|
        file.write(element.data)
      end
    end
  end
end

#get_data(io) ⇒ Object

:nodoc:



134
135
136
137
138
# File 'lib/narc.rb', line 134

def get_data(io) # :nodoc:
  check_signature(io)
  get_section_offsets(io)
  get_elements(io)
end

#get_element(element) ⇒ Object

narcfile.get_element( [integer] ) => Narc::Element

narcfile.get_element( [string] ) => Narc::Element

If the parameter is a Integer, returns the element of the same index.

If it is a String, returns the first element found whose name is the parameter.



124
125
126
127
128
129
130
131
132
# File 'lib/narc.rb', line 124

def get_element(element)
  if element.is_a?(Integer)
    return self.elements[element]
  elsif element.is_a?(String)
    for elm in self.elements
      return elm if elm.name == element
    end
  end
end

#save(filename = nil, include_names = false) ⇒ Object

narcfile.save( [filename] , [include_names?] ) => nil

Makes a NARC file filename from the contents of the current NarcFile object.

If filename is nil or omitted, the filename of the new NARC file will be “saved_[name of the NarcFile object]”.

If include_names? is true, the elements in the NARC file will be named, else, they won’t. Default is false.



102
103
104
105
106
107
108
109
110
111
# File 'lib/narc.rb', line 102

def save(filename = nil, include_names = false)
  filename ||= "saved_" + self.name
  File.open(filename, "w+b") do |f|
    write_narc_section(f)
    write_fatb_section(f)
    write_fntb_section(f, include_names)
    write_fimg_section(f)
    write_size_data(f)
  end
end