From 26b72d66ab1f84d0da332f46b43dfaf970e4a4ff Mon Sep 17 00:00:00 2001 From: otya128 Date: Sat, 31 Dec 2016 13:58:19 +0900 Subject: [PATCH] Add BG layer check --- SMILEBASIC/builtinfunctions.d | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/SMILEBASIC/builtinfunctions.d b/SMILEBASIC/builtinfunctions.d index 28eba6f..c0501f6 100644 --- a/SMILEBASIC/builtinfunctions.d +++ b/SMILEBASIC/builtinfunctions.d @@ -2080,43 +2080,83 @@ class BuiltinFunction } return; } + if (!p.isValidLayer(cast(int)layer)) + { + throw new OutOfRange("BGCLR", 1); + } p.getBG(cast(int)layer).clear; } static void BGSCREEN(PetitComputer p, int layer, int w, int h) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGSCREEN", 1); + } p.getBG(layer).screen(w, h); } static void BGOFS(PetitComputer p, int layer, int x, int y, DefaultValue!(int, false) z) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGOFS", 1); + } z.setDefaultValue(p.getBG(layer).offsetz); p.getBG(layer).ofs(x, y, cast(int)z); } static void BGCLIP(PetitComputer p, int layer) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGCLIP", 1); + } p.getBG(layer).clip(); } static void BGCLIP(PetitComputer p, int layer, int x, int y, int x2, int y2) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGCLIP", 1); + } p.getBG(layer).clip(x, y, x2, y2); } static void BGPUT(PetitComputer p, int layer, int x, int y, int screendata) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGPUT", 1); + } p.getBG(layer).put(x, y, screendata); } static void BGHOME(PetitComputer p, int layer, int x, int y) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGHOME", 1); + } p.getBG(layer).home(x, y); } static void BGSCALE(PetitComputer p, int layer, double x, double y) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGSCALE", 1); + } p.getBG(layer).scale(x, y); } static void BGROT(PetitComputer p, int layer, double rot) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGROT", 1); + } p.getBG(layer).rot(rot); } static void BGFILL(PetitComputer p, int layer, int x, int y, int x2, int y2, int screendata) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGFILL", 1); + } p.getBG(layer).fill(x, y, x2, y2, screendata); } static void BGPAGE(PetitComputer p, int page) @@ -2133,10 +2173,18 @@ class BuiltinFunction } static void BGSHOW(PetitComputer p, int layer) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGSHOW", 1); + } p.getBG(layer).show = true; } static void BGHIDE(PetitComputer p, int layer) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGHIDE", 1); + } p.getBG(layer).show = false; } static int BGGET(PetitComputer p, int layer, int x, int y) @@ -2145,10 +2193,18 @@ class BuiltinFunction } static int BGGET(PetitComputer p, int layer, int x, int y, int flag) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGGET", 1); + } return p.getBG(layer).get(x, y, flag); } static void BGSAVE(PetitComputer p, int layer, int x, int y, int w, int h, Value ary) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGSAVE", 1); + } if (w < 1) { throw new OutOfRange("BGSAVE", 4); @@ -2185,6 +2241,10 @@ class BuiltinFunction } static void BGLOAD(PetitComputer p, int layer, int x, int y, int w, int h, Value ary, int bgcharoffset) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGLOAD", 1); + } if (w < 1) { throw new OutOfRange("BGLOAD", 4); @@ -2217,6 +2277,10 @@ class BuiltinFunction } static void BGLOAD(PetitComputer p, int layer, Value ary) { + if (!p.isValidLayer(layer)) + { + throw new OutOfRange("BGLOAD", 1); + } if (!ary.isNumberArray) { throw new TypeMismatch("BGLOAD", 2);