Skip to content

Commit

Permalink
Error control when load and write images
Browse files Browse the repository at this point in the history
  • Loading branch information
nataliapc committed Oct 10, 2021
1 parent d3ba6ea commit 3975108
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 29 deletions.
20 changes: 15 additions & 5 deletions MSX_image_file_import.lua
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
Code inspired by
https://github.com/kettek/aseprite-scripts/blob/master/import-apng.lua
--]]
local version = "v1.0"
local version = "v1.2"
local plugin

-- Utils classes
Expand Down Expand Up @@ -99,9 +99,9 @@ function showLoadFileInfo(dlg)
newType = scrMode.descName
newInfo = scrMode.descFormat
ret = scrMode.screen.mode
newTilesLayer = ret==1 or ret==2 or ret==4
newRenderSprites = ret < 8
end
newTilesLayer = ret==1 or ret==2 or ret==4
newRenderSprites = ret < 8
end

if newInfo ~= "" then
Expand Down Expand Up @@ -269,7 +269,12 @@ function startLoadDialog()
local rdr = Reader:getInstance(data)

if rdr ~= nil then
local err = rdr:decode()
local err = nil
if rdr.className ~= nil and rdr.className ~= Err.className then
err = rdr:decode()
else
err = rdr
end
if err ~= nil then
app.alert(err:string())
else
Expand Down Expand Up @@ -381,7 +386,12 @@ function startSaveDialog()
local wrt = Writer:getInstance(data)

if wrt ~= nil then
local err = wrt:encode()
local err = nil
if wrt.className ~= nil and wrt.className ~= Err.className then
err = wrt:encode()
else
err = wrt
end
if err ~= nil then
app.alert(err:string())
end
Expand Down
1 change: 1 addition & 0 deletions readers.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
-- ########################################################

Reader = {
className = "Reader",
msxHeader = "\xFE\x00\x00",
filename = nil, -- filename of the MSX file
file = nil, -- file reader from io
Expand Down
1 change: 1 addition & 0 deletions screen_modes.lua
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
-- Definition of the MSX Screen modes.
-- ########################################################
ScreenMode = {
className = "ScreenMode",

descName = "", -- general name of the screen mode
descFormat = "", -- description of the screen format
Expand Down
7 changes: 5 additions & 2 deletions utils.lua
Original file line number Diff line number Diff line change
Expand Up @@ -154,23 +154,26 @@ end
The Err type and helper creator Error(type, msg) provide an interface for
managing errors during the script's functioning.
--]]
local E = {
E = {
EOF = 1,
NOT_MSX_FILE = 2,
BAD_DIMENSIONS = 3,
DIMENSION_OVERFLOW = 4,
PALETTE_NOT_FOUND = 5,
TILESET_OVERFLOW = 6,
UNSUPPORTED_YET = 7,
strings = {
" End of file ",
" Invalid MSX file ",
" Bad dimensions ",
" Dimension overflow ",
" Palette not found ",
" Tileset overflow ",
" Feature unsupported yet ",
}
}
local Err = {
Err = {
className = "Error",
}
Err.__index = Err
function Err:new(t, m)
Expand Down
41 changes: 19 additions & 22 deletions writers.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@
-- ########################################################

Writer = {
className = "Writer",
msxHeader = "\xFE\x00\x00",
filename = nil, -- filename of the MSX output file
file = nil, -- file writer from io
fileSize = 0, -- full file size
spr = nil, -- Sprite object
img = nil, -- Image object
img = nil, -- Current Image object

-- From ScreenMode classes
address = {},
Expand All @@ -36,10 +37,10 @@ end

-- ============================
function Writer:getInstance(data)
if data.scrMode == 1 then return WriterSC1:new(data) end
if data.scrMode == 2 then return WriterSC2:new(data) end
if data.scrMode == 3 then return WriterSC3:new(data) end
if data.scrMode == 4 then return WriterSC4:new(data) end
if data.scrMode == 1 then return Error(E.UNSUPPORTED_YET, "SC1 Tiled Writer") end -- return WriterSC1:new(data) end
if data.scrMode == 2 then return Error(E.UNSUPPORTED_YET, "SC2 Tiled Writer") end -- return WriterSC2:new(data) end
if data.scrMode == 3 then return Error(E.UNSUPPORTED_YET, "SC3 Writer") end -- return WriterSC3:new(data) end
if data.scrMode == 4 then return Error(E.UNSUPPORTED_YET, "SC4 Tiled Writer") end -- return WriterSC4:new(data) end
if data.scrMode == 5 then return WriterSC5:new(data) end
if data.scrMode == 6 then return WriterSC6:new(data) end
if data.scrMode == 7 then return WriterSC7:new(data) end
Expand Down Expand Up @@ -122,6 +123,7 @@ function Writer:dumpImagePalette()
if self.screen.defaultPalette16==true then
palette = Palette{ fromResource="MSX2_DEFAULT" }
end
palette:resize(self.screen.maxColors)

self:seekPos(self.address.palette.pos)

Expand Down Expand Up @@ -256,9 +258,12 @@ function WriterBitmapRGB:dumpImageToFile()
self.bitsPerPixel = self:getBitsPerPixel()
self.pixelsPerByte = 8 // self.bitsPerPixel

for y=0,self.img.height-1 do
for x=0,self.img.width-1,self.pixelsPerByte do
self:dumpPixels(x, y)
local offsetX = self.img.cel.bounds.x
local offsetY = self.img.cel.bounds.y

for y=0,self.spr.height-1 do
for x=0,self.spr.width-1,self.pixelsPerByte do
self:dumpPixels(x - offsetX, y - offsetY)
end
end
end
Expand Down Expand Up @@ -353,9 +358,12 @@ end
function WriterBitmapYJK:dumpImageToFile()
self:seekPos(self.address.tilePat.pos)

for y=0,self.img.height-1 do
for x=0,self.img.width-1,4 do
self:dumpPixels(x, y)
local offsetX = self.img.cel.bounds.x
local offsetY = self.img.cel.bounds.y

for y=0,self.spr.height-1 do
for x=0,self.spr.width-1,4 do
self:dumpPixels(x - offsetX, y - offsetY)
end
end
end
Expand Down Expand Up @@ -426,17 +434,6 @@ function WriterSCA:new(input)
return o
end

-- ============================
function WriterBitmapYJK:dumpImageToFile()
self:seekPos(self.address.tilePat.pos)

for y=0,self.img.height-1 do
for x=0,self.img.width-1,4 do
self:dumpPixels(x, y)
end
end
end



-- ########################################################
Expand Down

0 comments on commit 3975108

Please sign in to comment.