def DSK.read(filename)
if !(filename=~/\.gz$/).nil? then
require 'zlib'
file_bytes=Zlib::GzipReader.new(open(filename,"rb")).read
else
file_bytes=open(filename,"rb").read
end
dsk=DSK.new(file_bytes)
SECTOR_ORDERS.each do |sector_order|
begin
candidate_filesystem="unknown"
if (dsk.is_dos33?(sector_order))
require 'DOSDisk'
candidate_filesystem="DOS 3.3"
dsk=DOSDisk.new(file_bytes,sector_order)
break
end
if (dsk.is_nadol?(sector_order))
require 'NADOLDisk'
candidate_filesystem="NADOL"
dsk=NADOLDisk.new(file_bytes,sector_order)
break
end
if (dsk.is_prodos?(sector_order))
require 'ProDOSDisk'
candidate_filesystem="ProDOS"
dsk=ProDOSDisk.new(file_bytes,sector_order)
break
end
if (dsk.is_pascal?(sector_order))
require 'PascalDisk'
candidate_filesystem="Pascal"
dsk=PascalDisk.new(file_bytes,sector_order)
break
end
rescue Exception=>e
STDERR<<"error while parsing #{filename} as #{candidate_filesystem} (sector order #{sector_order}\n"
STDERR<<"#{e}\n"
STDERR<<e.backtrace.join("\n")
end
end
dsk
end