def parse_list( filelist )
      temp_files = []
      ## Splat (*) filelist into Array if single string
      [*filelist].each do |item|
        abort( "FileList parse_list item not found : #{item}") unless ::File.exist?( item )
        ::IO.readlines( item ).each do |line|
          ## Remove // or # comments 
          line = strip_comments( line )

          ## Expand Environment variables in strings
          line = expand_envvars( line )
          
          ## -incdir, include the entire contents of listed directory
          if line.match(/^\s*-incdir\s+(\S+)\s*/)
            temp_files << incdir($1)

          ## Recurse on -f (file.f including other files.f)
          elsif line.match(/^\s*-f\s+(\S+)\s*/)
            temp_files << parse_list($1)

          ## Ignore Whitespace
          elsif line.match(/^\s$/)
            next
         
          ## Append file list line to list of files
          else
            temp_files << line.strip
          end
        end
      end

      ## Recursion embeds arrays, return flat file list

      return temp_files.flatten
    end
def parse_list( filelist )
      temp_files = []
      ## Splat (*) filelist into Array if single string
      [*filelist].each do |item|
        abort( "FileList parse_list item not found : #{item}") unless ::File.exist?( item )
        ::IO.readlines( item ).each do |line|
          ## Remove // or # comments 
          line = strip_comments( line )

          ## Expand Environment variables in strings
          line = expand_envvars( line )
          
          ## -incdir, include the entire contents of listed directory
          if line.match(/^\s*-incdir\s+(\S+)\s*/)
            temp_files << incdir($1)

          ## Recurse on -f (file.f including other files.f)
          elsif line.match(/^\s*-f\s+(\S+)\s*/)
            temp_files << parse_list($1)

          ## Ignore Whitespace
          elsif line.match(/^\s$/)
            next
         
          ## Append file list line to list of files
          else
            temp_files << line.strip
          end
        end
      end

      ## Recursion embeds arrays, return flat file list

      return temp_files.flatten
    end
Expected usage
 Use FileList to create an array of files included in design
 FileList is then used to create a Path, which loads the files into memory
 FileList and Path are separated in case you want a file list with out actually having to open the files
 Unsure of the name for this
 open : it does open the file but not like other open calls
 load : opens file and loads content, load! does not imply what it modifies
 parse_list is descriptive but not what it modifies