mirror of
https://github.com/safiire/n65.git
synced 2024-12-11 08:49:42 +00:00
Linted front_end.rb
This commit is contained in:
parent
520a5198af
commit
9f5f71cd4a
@ -1,73 +1,63 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'optparse'
|
||||
require_relative '../n65'
|
||||
|
||||
module N65
|
||||
|
||||
####
|
||||
## This class handles the front end aspects,
|
||||
## parsing the commandline options and running the assembler
|
||||
# This class handles the front end aspects,
|
||||
# parsing the commandline options and running the assembler
|
||||
class FrontEnd
|
||||
|
||||
####
|
||||
## Initialize with ARGV commandline
|
||||
def initialize(argv)
|
||||
@options = {output_file: nil, write_symbol_table: false, quiet: false, cycle_count: false}
|
||||
@options = { output_file: nil, write_symbol_table: false, quiet: false, cycle_count: false }
|
||||
@argv = argv.dup
|
||||
end
|
||||
|
||||
|
||||
####
|
||||
## Run the assembler
|
||||
# Run the assembler
|
||||
def run
|
||||
## First use the option parser
|
||||
parser = create_option_parser
|
||||
parser.parse!(@argv)
|
||||
|
||||
## Whatever is leftover in argv the input files
|
||||
if @argv.size.zero?
|
||||
STDERR.puts("No input files")
|
||||
warn('No input files')
|
||||
exit(1)
|
||||
end
|
||||
|
||||
## Only can assemble one file at once for now
|
||||
# Only can assemble one file at once for now
|
||||
if @argv.size != 1
|
||||
STDERR.puts "Can only assemble one input file at once, but you can use .inc and .incbin directives"
|
||||
warn('Can only assemble one input file at once, but you can use .inc and .incbin directives')
|
||||
exit(1)
|
||||
end
|
||||
|
||||
input_file = @argv.shift
|
||||
|
||||
## Make sure the input file exists
|
||||
unless File.exists?(input_file)
|
||||
STDERR.puts "Input file #{input_file} does not exist"
|
||||
# Make sure the input file exists
|
||||
unless File.exist?(input_file)
|
||||
warn("Input file #{input_file} does not exist")
|
||||
exit(1)
|
||||
end
|
||||
|
||||
## Maybe they didn't provide an output file name, so we'll guess
|
||||
# Maybe they didn't provide an output file name, so we'll guess
|
||||
if @options[:output_file].nil?
|
||||
ext = File.extname(input_file)
|
||||
@options[:output_file] = input_file.gsub(ext, '') + '.nes'
|
||||
@options[:output_file] = "#{input_file.gsub(ext, '')}.nes"
|
||||
end
|
||||
|
||||
if @options.values.any?(&:nil?)
|
||||
STDERR.puts "Missing options try --help"
|
||||
warn('Missing options try --help')
|
||||
exit(1)
|
||||
end
|
||||
|
||||
N65::Assembler.from_file(input_file, @options)
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
####
|
||||
## Create a commandline option parser
|
||||
def create_option_parser
|
||||
OptionParser.new do |opts|
|
||||
opts.banner = "Usage: #{$0} [options] <input_file.asm>"
|
||||
opts.banner = "Usage: #{$PROGRAM_NAME} [options] <input_file.asm>"
|
||||
|
||||
opts.on('-o', '--outfile filename', 'outfile') do |output_file|
|
||||
@options[:output_file] = output_file;
|
||||
@options[:output_file] = output_file
|
||||
end
|
||||
|
||||
opts.on('-s', '--symbols', 'Outputs a symbol map') do
|
||||
@ -91,11 +81,7 @@ module N65
|
||||
puts opts
|
||||
exit
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user