diff --git a/lib/n65/front_end.rb b/lib/n65/front_end.rb index 4493cda..bc13130 100644 --- a/lib/n65/front_end.rb +++ b/lib/n65/front_end.rb @@ -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] " + opts.banner = "Usage: #{$PROGRAM_NAME} [options] " 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