From 63741c07147ee45bf4ecc89190cc8c69d5860565 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Mon, 3 Mar 2014 10:27:20 -0600 Subject: [PATCH] Removed unnecessary cruft from project. --- Makefile | 22 +- src/apple2.cpp | 6 +- src/gui/button.cpp | 269 ---- src/gui/button.h | 47 - src/gui/diskselector.cpp | 2 +- src/gui/diskwindow.cpp | 287 ---- src/gui/diskwindow.h | 42 - src/gui/draggablewindow.cpp | 198 --- src/gui/draggablewindow.h | 41 - src/gui/draggablewindow2.cpp | 213 --- src/gui/draggablewindow2.h | 32 - src/gui/element.cpp | 332 ---- src/gui/element.h | 70 - src/gui/font1.h | 262 ---- src/gui/gui.cpp | 10 +- src/gui/gui.h | 3 +- src/gui/guielements.h | 343 ----- src/gui/guimisc.cpp | 2822 ---------------------------------- src/gui/guimisc.h | 62 - src/gui/menu.cpp | 322 ---- src/gui/menu.h | 68 - src/gui/text.cpp | 36 - src/gui/text.h | 30 - src/gui/textedit.cpp | 253 --- src/gui/textedit.h | 39 - src/gui/window.cpp | 183 --- src/gui/window.h | 41 - 27 files changed, 27 insertions(+), 6008 deletions(-) delete mode 100644 src/gui/button.cpp delete mode 100644 src/gui/button.h delete mode 100644 src/gui/diskwindow.cpp delete mode 100644 src/gui/diskwindow.h delete mode 100644 src/gui/draggablewindow.cpp delete mode 100644 src/gui/draggablewindow.h delete mode 100644 src/gui/draggablewindow2.cpp delete mode 100644 src/gui/draggablewindow2.h delete mode 100644 src/gui/element.cpp delete mode 100644 src/gui/element.h delete mode 100644 src/gui/font1.h delete mode 100644 src/gui/guielements.h delete mode 100644 src/gui/guimisc.cpp delete mode 100644 src/gui/guimisc.h delete mode 100644 src/gui/menu.cpp delete mode 100644 src/gui/menu.h delete mode 100644 src/gui/text.cpp delete mode 100644 src/gui/text.h delete mode 100644 src/gui/textedit.cpp delete mode 100644 src/gui/textedit.h delete mode 100644 src/gui/window.cpp delete mode 100644 src/gui/window.h diff --git a/Makefile b/Makefile index 83ae3dd..37c51a1 100644 --- a/Makefile +++ b/Makefile @@ -99,19 +99,9 @@ LIBS = -L/usr/local/lib -L/usr/lib $(SDL_LIBS) -lstdc++ -lz $(GLLIB) -pg INCS = -I. -I./src OBJS = \ - obj/button.o \ obj/diskselector.o \ - obj/diskwindow.o \ - obj/draggablewindow.o \ - obj/draggablewindow2.o \ - obj/element.o \ obj/font14pt.o \ obj/gui.o \ - obj/guimisc.o \ - obj/menu.o \ - obj/text.o \ - obj/textedit.o \ - obj/window.o \ \ obj/applevideo.o \ obj/ay8910.o \ @@ -130,6 +120,18 @@ OBJS = \ obj/apple2.o \ $(ICON) +#foooked: +# obj/button.o \ + obj/diskwindow.o \ + obj/draggablewindow.o \ + obj/draggablewindow2.o \ + obj/element.o \ + obj/guimisc.o \ + obj/menu.o \ + obj/text.o \ + obj/textedit.o \ + obj/window.o \ + all: checkenv message obj $(TARGET)$(EXESUFFIX) @echo @echo -e "\033[01;33m***\033[00;32m Looks like it compiled OK... Give it a whirl!\033[00m" diff --git a/src/apple2.cpp b/src/apple2.cpp index 793070b..6b80cac 100644 --- a/src/apple2.cpp +++ b/src/apple2.cpp @@ -52,9 +52,9 @@ #include "mmu.h" #include "gui/gui.h" -#include "gui/window.h" -#include "gui/draggablewindow2.h" -#include "gui/textedit.h" +//#include "gui/window.h" +//#include "gui/draggablewindow2.h" +//#include "gui/textedit.h" // Debug and misc. defines diff --git a/src/gui/button.cpp b/src/gui/button.cpp deleted file mode 100644 index 8d69fbd..0000000 --- a/src/gui/button.cpp +++ /dev/null @@ -1,269 +0,0 @@ -// -// BUTTON.CPP -// -// Graphical User Interface button class -// by James Hammons -// -// JLH = James Hammons -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JLH 02/02/2006 Created this file -// - -#include "button.h" -#include "guimisc.h" // Various support functions - -#if SDL_BYTEORDER == SDL_BIG_ENDIAN -#define MASK_R 0xFF000000 -#define MASK_G 0x00FF0000 -#define MASK_B 0x0000FF00 -#define MASK_A 0x000000FF -#else -#define MASK_R 0x000000FF -#define MASK_G 0x0000FF00 -#define MASK_B 0x00FF0000 -#define MASK_A 0xFF000000 -#endif - -// Debugging... -//#define DEBUG_GUI_BUTTON -#ifdef DEBUG_GUI_BUTTON -#include "log.h" -#endif - -// -// Button class implementation -// - -/* -Some notes about this class: - -- Button colors are hardwired (for plain text buttons) -*/ - -Button::Button(uint32_t x/*= 0*/, uint32_t y/*= 0*/, uint32_t w/*= 0*/, uint32_t h/*= 0*/, - Element * parent/*= NULL*/): - Element(x, y, w, h, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, parent), - activated(false), clicked(false), inside(false), - buttonUp(NULL), buttonDown(NULL), buttonHover(NULL), surfacesAreLocal(false), - activatedSave(false), clickedSave(false), insideSave(false) -{ - // Should we make a local button bitmap here? -} - -Button::Button(uint32_t x, uint32_t y, uint32_t w, uint32_t h, SDL_Surface * upImg, Element * parent/*= NULL*/): - Element(x, y, w, h, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, parent), - activated(false), clicked(false), inside(false), - buttonUp(upImg), buttonDown(NULL), buttonHover(NULL), surfacesAreLocal(false), - activatedSave(false), clickedSave(false), insideSave(false) -{ -// if (upImg == NULL) -// return; -// -// uint32_t width = ((Bitmap *)upImg)->width, height = ((Bitmap *)upImg)->height; -// -// buttonUp = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, -// 32, MASK_R, MASK_G, MASK_B, MASK_A); -// memcpy(buttonUp->pixels, ((Bitmap *)upImg)->pixelData, width * height * 4); - - // Should we make a local button bitmap here? NO--it's passed in! -} - -Button::Button(uint32_t x, uint32_t y, SDL_Surface * bU, SDL_Surface * bH/*= NULL*/, - SDL_Surface * bD/*= NULL*/, Element * parent/*= NULL*/): - Element(x, y, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, parent), - activated(false), clicked(false), inside(false), - buttonUp(bU), buttonDown(bD), buttonHover(bH), surfacesAreLocal(false), - activatedSave(false), clickedSave(false), insideSave(false) -{ - if (buttonUp) - extents.w = buttonUp->w, - extents.h = buttonUp->h; -} - -Button::Button(uint32_t x, uint32_t y, uint32_t w, uint32_t h, std::string s, Element * parent/*= NULL*/): - Element(x, y, w, h, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, parent), - activated(false), clicked(false), inside(false), - buttonUp(NULL), buttonDown(NULL), buttonHover(NULL), surfacesAreLocal(true), - activatedSave(false), clickedSave(false), insideSave(false) -{ - // Create the button surfaces here... -} - -Button::Button(uint32_t x, uint32_t y, std::string s, Element * parent/*= NULL*/): - Element(x, y, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xCF, 0x00, 0xFF, parent), - activated(false), clicked(false), inside(false), - buttonUp(NULL), buttonDown(NULL), buttonHover(NULL), surfacesAreLocal(true), - activatedSave(false), clickedSave(false), insideSave(false) -{ - extents.w = (s.length() + 2) * GetFontWidth(); - extents.h = GetFontHeight(); - - // Create the button surfaces here... - - buttonUp = SDL_CreateRGBSurface(SDL_SWSURFACE, extents.w, extents.h, 32, - MASK_R, MASK_G, MASK_B, MASK_A); - buttonDown = SDL_CreateRGBSurface(SDL_SWSURFACE, extents.w, extents.h, 32, - MASK_R, MASK_G, MASK_B, MASK_A); - buttonHover = SDL_CreateRGBSurface(SDL_SWSURFACE, extents.w, extents.h, 32, - MASK_R, MASK_G, MASK_B, MASK_A); - -//bleh -uint8_t r1, g1, b1, a1; -SDL_GetRGBA(fgColor, screen->format, &r1, &g1, &b1, &a1); -fgColor = SDL_MapRGBA(buttonUp->format, r1, g1, b1, a1); -SDL_GetRGBA(bgColor, screen->format, &r1, &g1, &b1, &a1); -bgColor = SDL_MapRGBA(buttonUp->format, r1, g1, b1, a1); -fgColorHL = SDL_MapRGBA(buttonUp->format, 0xFF, 0xFF, 0xFF, 0xFF); -bgColorHL = SDL_MapRGBA(buttonUp->format, 0x4F, 0xFF, 0x4F, 0xFF); -//helb - - // Need to create backgrounds before we do this stuff... - SDL_FillRect(buttonUp, NULL, bgColor); - SDL_FillRect(buttonDown, NULL, fgColor); - SDL_FillRect(buttonHover, NULL, bgColorHL); - - DrawStringTrans(buttonUp, GetFontWidth(), 0, fgColor, s.c_str()); - DrawStringTrans(buttonDown, GetFontWidth(), 0, fgColor, s.c_str()); - DrawStringTrans(buttonHover, GetFontWidth(), 0, fgColorHL, s.c_str()); - -#ifdef DEBUG_GUI_BUTTON - WriteLog("Button::Button()...\n"); - WriteLog("\tbuttonUp w/h = %u/%u\n", buttonUp->w, buttonUp->h); - WriteLog("\tbuttonDown w/h = %u/%u\n", buttonDown->w, buttonDown->h); - WriteLog("\tbuttonHover w/h = %u/%u\n", buttonHover->w, buttonHover->h); -#endif -} - -Button::~Button() -{ - if (surfacesAreLocal) - { - if (buttonUp) - SDL_FreeSurface(buttonUp); - - if (buttonDown) - SDL_FreeSurface(buttonDown); - - if (buttonHover) - SDL_FreeSurface(buttonHover); - } -} - -void Button::HandleKey(SDL_Scancode key) -{ -} - -void Button::HandleMouseMove(uint32_t x, uint32_t y) -{ - if (!visible) - return; - - SaveStateVariables(); - inside = Inside(x, y); - CheckStateAndRedrawIfNeeded(); -} - -void Button::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - if (!visible) - return; - - SaveStateVariables(); - - if (inside) - { - if (mouseDown) - clicked = true; - - if (clicked && !mouseDown) - { - clicked = false, activated = true; - - // Send a message to our parent widget (if any) that we're activated - if (parent) - parent->Notify(this); - } - } - else - clicked = activated = false; - - CheckStateAndRedrawIfNeeded(); -} - -void Button::Draw(void) -{ -#ifdef DEBUG_GUI_BUTTON - WriteLog("Button::Draw()...\n"); -#endif - if (!visible) - return; - - if (buttonUp == NULL) - return; // Bail out if no surface was created... - - // Now, draw the appropriate button state! - - SDL_Surface * picToShow = buttonUp; - - if (buttonHover != NULL && inside && !clicked) - picToShow = buttonHover; - - if (buttonDown != NULL && inside && clicked) - picToShow = buttonDown; - - SDL_Rect rect = GetScreenCoords(); -#ifdef DEBUG_GUI_BUTTON - WriteLog(" coords: x=%u, y=%u\n", rect.x, rect.y); - WriteLog(" picToShow=%08X\n", picToShow); -#endif - -//Need to do coverage list blitting here, to avoid unnecessary drawing when doing mouseovers -//Also, need to add suport in Gui()... - SDL_BlitSurface(picToShow, NULL, screen, &rect); // This handles alpha blending too! :-D -#ifdef DEBUG_GUI_BUTTON - WriteLog(" width: w=%u, h=%u\n", rect.w, rect.h); -#endif - - needToRefreshScreen = true; - -#ifdef DEBUG_GUI_BUTTON -// SDL_FillRect(screen, &extents, fgColor); -#endif -} - -void Button::Notify(Element *) -{ -} - -bool Button::ButtonClicked(void) -{ - return activated; -} - -void Button::SaveStateVariables(void) -{ - activatedSave = activated; - clickedSave = clicked; - insideSave = inside; -} - -void Button::CheckStateAndRedrawIfNeeded(void) -{ - // Check to see if any of our state variables changed since we last saved them... - if (activated != activatedSave || clicked != clickedSave || inside != insideSave) - Draw(); -} - -void Button::SetText(std::string s) -{ - // Need to create backgrounds before we do this stuff... - SDL_FillRect(buttonUp, NULL, bgColor); - SDL_FillRect(buttonDown, NULL, fgColor); - SDL_FillRect(buttonHover, NULL, bgColorHL); - - DrawStringTrans(buttonUp, GetFontWidth(), 0, fgColor, s.c_str()); - DrawStringTrans(buttonDown, GetFontWidth(), 0, fgColor, s.c_str()); - DrawStringTrans(buttonHover, GetFontWidth(), 0, fgColorHL, s.c_str()); -} diff --git a/src/gui/button.h b/src/gui/button.h deleted file mode 100644 index 4b4f131..0000000 --- a/src/gui/button.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// BUTTON.H -// -// Graphical User Interface button class -// - -#ifndef __BUTTON_H__ -#define __BUTTON_H__ - -#include -//#include -#include "element.h" - -//Apparently this approach doesn't work for inheritance... D'oh! -//class Element; // Forward declaration - -class Button: public Element -{ - public: - Button(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0, Element * parent = NULL); - Button(uint32_t x, uint32_t y, uint32_t w, uint32_t h, SDL_Surface * upImg, Element * parent = NULL); - Button(uint32_t x, uint32_t y, SDL_Surface * bU, SDL_Surface * bH = NULL, SDL_Surface * bD = NULL, Element * parent = NULL); - Button(uint32_t x, uint32_t y, uint32_t w, uint32_t h, std::string s, Element * parent = NULL); - Button(uint32_t x, uint32_t y, std::string s, Element * parent = NULL); - ~Button(); - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(void); - virtual void Notify(Element *); - bool ButtonClicked(void); - void SaveStateVariables(void); - void CheckStateAndRedrawIfNeeded(void); - void SetText(std::string s); - - protected: - bool activated, clicked, inside; - SDL_Surface * buttonUp, * buttonDown, * buttonHover; - uint32_t fgColorHL; - uint32_t bgColorHL; - - private: - bool surfacesAreLocal; - bool activatedSave, clickedSave, insideSave; -}; - -#endif // __BUTTON_H__ diff --git a/src/gui/diskselector.cpp b/src/gui/diskselector.cpp index 45f86f7..1aafa47 100644 --- a/src/gui/diskselector.cpp +++ b/src/gui/diskselector.cpp @@ -3,6 +3,7 @@ // // Floppy disk selector GUI // by James Hammons +// © 2014 Underground Software // // JLH = James Hammons // @@ -70,7 +71,6 @@ void DiskSelector::Init(SDL_Renderer * renderer) { window = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_TARGET, 400, 300); -// charStamp = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ABGR8888, charStamp = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, FONT_WIDTH, FONT_HEIGHT); diff --git a/src/gui/diskwindow.cpp b/src/gui/diskwindow.cpp deleted file mode 100644 index b4e6f48..0000000 --- a/src/gui/diskwindow.cpp +++ /dev/null @@ -1,287 +0,0 @@ -// -// DISKWINDOW.CPP -// -// Graphical User Interface disk window class -// by James Hammons -// -// JLH = James Hammons -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JLH 02/02/2009 Created this file -// - -/* -IDEA: Make a recently used file list when ejecting a disk, either here or in - another window. -*/ - -#include "diskwindow.h" -#include "floppy.h" -#include "text.h" -#include "button.h" -//#include "guimisc.h" // Various support functions -//#include - -// Debug support... -//#define DESTRUCTOR_TESTING - -// Rendering experiment... -//BAH -//#define USE_COVERAGE_LISTS - -#if SDL_BYTEORDER == SDL_BIG_ENDIAN -#define MASK_R 0xFF000000 -#define MASK_G 0x00FF0000 -#define MASK_B 0x0000FF00 -#define MASK_A 0x000000FF -#else -#define MASK_R 0x000000FF -#define MASK_G 0x0000FF00 -#define MASK_B 0x00FF0000 -#define MASK_A 0xFF000000 -#endif - -// -// DiskWindow class implementation -// -// NOTE: FG/BG colors are hard-wired -// - -DiskWindow::DiskWindow(FloppyDrive * fdp, uint32_t x/*= 0*/, uint32_t y/*= 0*/): Window(x, y, 200, 140, NULL), floppyDrive(fdp) -{ -//Could probably move this into the initializer list as well... -// closeButton = new Button(w - (cbWidth + 1), 1, cbUp, cbHover, cbDown, this); -// list.push_back(closeButton); - - name1 = new Text(4, 4, floppyDrive->ImageName(0), 0xFF00FF00, 0xFF23239F, this); - name2 = new Text(4, 24, floppyDrive->ImageName(1), 0xFF00FF00, 0xFF23239F, this); - - AddElement(name1); - AddElement(name2); - - load1 = new Button(4, 44, "Load1", this); - eject1 = new Button(4, 64, "Eject1", this); - load2 = new Button(4, 88, "Load2", this); - eject2 = new Button(4, 108, "Eject2", this); - - load1->SetVisible(false); - load2->SetVisible(false); - - AddElement(load1); - AddElement(eject1); - AddElement(load2); - AddElement(eject2); - - newDisk1 = new Button(4, 132, "NewDisk1", this); - newDisk2 = new Button(4, 152, "NewDisk2", this); - writeProtect1 = new Button(4, 176, "WriteProt1", this); - writeProtect2 = new Button(4, 196, "WriteProt2", this); - swap = new Button(4, 220, "Swap Disks", this); - - writeProtect1->SetText((floppyDrive->IsWriteProtected(0) ? "no write" : "write")); - writeProtect2->SetText((floppyDrive->IsWriteProtected(1) ? "no write" : "write")); - - AddElement(newDisk1); - AddElement(newDisk2); - AddElement(writeProtect1); - AddElement(writeProtect2); - AddElement(swap); - - // In spite of this, it's still blanking out the background... - // Actually, come to think of it, it's got a stale backbuffer when - // the GUI comes in again... !!! FIX !!! -#warning !!! FIX !!! - SetBackgroundDraw(false); -// CreateBackstore(); - Draw(); // Can we do this in the constructor??? Mebbe. -} - -DiskWindow::~DiskWindow() -{ -#ifdef DESTRUCTOR_TESTING -printf("Inside ~DiskWindow()...\n"); -#endif -} - -void DiskWindow::HandleKey(SDL_Scancode key) -{ - Window::HandleKey(key); -#if 0 - if (key == SDLK_ESCAPE) - { - SDL_Event event; - event.type = SDL_USEREVENT, event.user.code = WINDOW_CLOSE; - SDL_PushEvent(&event); - } - - // Handle the items this window contains... - for(uint32_t i=0; iHandleKey(key); -#endif -} - -void DiskWindow::HandleMouseMove(uint32_t x, uint32_t y) -{ - Window::HandleMouseMove(x, y); -#if 0 - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseMove(x - extents.x, y - extents.y); -#endif -} - -void DiskWindow::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - Window::HandleMouseButton(x, y, mouseDown); -#if 0 -#if 1 - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseButton(x - extents.x, y - extents.y, mouseDown); -#else //? This works in draggablewindow2... - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseButton(x - extents.x, y - extents.y, mouseDown); - - if (list[i]->Inside(x - extents.x, y - extents.y)) - clicked = false; - } -#endif -#endif -} - -void DiskWindow::Draw(void) -{ - Window::Draw(); -#if 0 - // These are *always* top level and parentless, so no need to traverse up through - // the parent chain... - SDL_FillRect(screen, &extents, bgColor); - - // Handle the items this window contains... - for(uint32_t i=0; iDraw(); - - needToRefreshScreen = true; -#endif -} - -void DiskWindow::Notify(Element * e) -{ -/* if (e == closeButton) - { - SDL_Event event; - event.type = SDL_USEREVENT; - event.user.code = WINDOW_CLOSE; - event.user.data1 = (void *)this; - SDL_PushEvent(&event); - }*/ - if (e == load1) - { - // Load up file selector, etc... BLEAH - // If load was successful, then hide load and show eject, else, fuggetaboutit - } - else if (e == eject1) - { - floppyDrive->EjectImage(0); - - // Housekeeping - eject1->SetVisible(false); - load1->SetVisible(true); - name1->SetText(""); - Draw(); - } - else if (e == load2) - { - // Load up file selector, etc... BLEAH - // If load was successful, then hide load and show eject, else, fuggetaboutit - } - else if (e == eject2) - { - floppyDrive->EjectImage(1); - - // Housekeeping - eject2->SetVisible(false); - load2->SetVisible(true); - name2->SetText(""); - Draw(); - } - else if (e == newDisk1) - { - if (!floppyDrive->IsEmpty(0)) - { - // Put up a warning and give user a chance to exit this potentially - // disastrous action -// Now, how to do this? Notify() isn't asynchronous... -// And until we return from here, there is no GUI main loop to show any dialogs! -/* -what you could do is like this way: - --- have a callback function for after the intermediate window gets dismissed --- have a separate GUI thread --- have a 2nd GUI object and run that loop to completion - - -*/ - } - - floppyDrive->SaveImage(0); - floppyDrive->CreateBlankImage(0); - - // Housekeeping - eject1->SetVisible(true); - load1->SetVisible(false); - name1->SetText(floppyDrive->ImageName(0)); - Draw(); - } - else if (e == newDisk2) - { - if (!floppyDrive->IsEmpty(1)) - { - // Put up a warning and give user a chance to exit this potentially - // disastrous action - } - - floppyDrive->SaveImage(1); - floppyDrive->CreateBlankImage(1); - - // Housekeeping - eject2->SetVisible(true); - load2->SetVisible(false); - name2->SetText(floppyDrive->ImageName(1)); - Draw(); - } - else if (e == writeProtect1) - { - floppyDrive->SetWriteProtect((floppyDrive->IsWriteProtected(0) ? false : true), 0); -// floppyDrive->SetWriteProtect(false, 0); -// else -// floppyDrive->SetWriteProtect(true, 0); - - // Housekeeping - writeProtect1->SetText((floppyDrive->IsWriteProtected(0) ? "no write" : "write")); - Draw(); - } - else if (e == writeProtect2) - { - floppyDrive->SetWriteProtect((floppyDrive->IsWriteProtected(1) ? false : true), 1); - - // Housekeeping - writeProtect2->SetText((floppyDrive->IsWriteProtected(1) ? "no write" : "write")); - Draw(); - } - else if (e == swap) - { - floppyDrive->SwapImages(); - - // Housekeeping - name1->SetText(floppyDrive->ImageName(0)); - name2->SetText(floppyDrive->ImageName(1)); - Draw(); - } -} diff --git a/src/gui/diskwindow.h b/src/gui/diskwindow.h deleted file mode 100644 index 3131750..0000000 --- a/src/gui/diskwindow.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// DISKWINDOW.H -// -// Graphical User Interface disk window class -// - -#ifndef __DISKWINDOW_H__ -#define __DISKWINDOW_H__ - -#include "window.h" - -class FloppyDrive; -class Text; - -class DiskWindow: public Window -{ - public: - DiskWindow(FloppyDrive * fdp, uint32_t x = 0, uint32_t y = 0); - ~DiskWindow(); //Does this destructor need to be virtual? Not sure... Check! - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(void); - virtual void Notify(Element *); -// void AddElement(Element * e); -// void AddCloseButton(void); - - protected: -// void (* handler)(Element *); -// Button * closeButton; -// std::vector list; - - private: - FloppyDrive * floppyDrive; -// uint16_t cbWidth, cbHeight; -// SDL_Surface * cbUp, * cbDown, * cbHover; - Text * name1, * name2; - Button * load1, * load2, * eject1, * eject2, - * newDisk1, * newDisk2, * swap, * writeProtect1, * writeProtect2; -}; - -#endif // __DISKWINDOW_H__ diff --git a/src/gui/draggablewindow.cpp b/src/gui/draggablewindow.cpp deleted file mode 100644 index 1d9b3da..0000000 --- a/src/gui/draggablewindow.cpp +++ /dev/null @@ -1,198 +0,0 @@ -// -// DRAGGABLEWINDOW.CPP -// -// Graphical User Interface draggable window class -// by James Hammons -// -// JLH = James Hammons -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JLH 03/01/2006 Created this file -// -// STILL TO DO: -// -// - Check for parent's extents and clip movement against those extents -// - -#include "draggablewindow.h" -#include "button.h" -#include "guimisc.h" // Various support functions -#include - -#if SDL_BYTEORDER == SDL_BIG_ENDIAN -#define MASK_R 0xFF000000 -#define MASK_G 0x00FF0000 -#define MASK_B 0x0000FF00 -#define MASK_A 0x000000FF -#else -#define MASK_R 0x000000FF -#define MASK_G 0x0000FF00 -#define MASK_B 0x00FF0000 -#define MASK_A 0xFF000000 -#endif - -#define BACKGROUND_IMG_TEST -//#define USE_COVERAGE_LISTS - -// -// DraggableWindow class implementation -// -// NOTE: FG/BG colors are hard-wired -// - -DraggableWindow::DraggableWindow(uint32_t x/*= 0*/, uint32_t y/*= 0*/, uint32_t w/*= 0*/, uint32_t h/*= 0*/, - void (* f)(Element *)/*= NULL*/): - Element(x, y, w, h, 0x4D, 0xFF, 0x84, 0xFF, 0x1F, 0x84, 0x84, 0xFF), handler(f), - clicked(false), - cbWidth((closeBox[0] << 8) | closeBox[1]), cbHeight((closeBox[2] << 8) | closeBox[3]), - cbUp(SDL_CreateRGBSurfaceFrom(&closeBox[4], cbWidth, cbHeight, 32, cbWidth * 4, - MASK_R, MASK_G, MASK_B, MASK_A)), - cbDown(SDL_CreateRGBSurfaceFrom(&closeBoxDown[4], cbWidth, cbHeight, 32, cbWidth * 4, - MASK_R, MASK_G, MASK_B, MASK_A)), - cbHover(SDL_CreateRGBSurfaceFrom(&closeBoxHover[4], cbWidth, cbHeight, 32, cbWidth * 4, - MASK_R, MASK_G, MASK_B, MASK_A)) -{ -//Could probably move this into the initializer list as well... - closeButton = new Button(w - (cbWidth + 1), 1, cbUp, cbHover, cbDown, this); - list.push_back(closeButton); - -#ifdef BACKGROUND_IMG_TEST -uint16_t imgWidth = (floppyDiskImg[0] << 8) | floppyDiskImg[1]; -uint16_t imgHeight = (floppyDiskImg[2] << 8) | floppyDiskImg[3]; -img = SDL_CreateRGBSurfaceFrom(&floppyDiskImg[4], imgWidth, imgHeight, 32, imgWidth * 4, - MASK_R, MASK_G, MASK_B, MASK_A); -#endif - - CreateBackstore(); - Draw(); // Can we do this in the constructor??? Mebbe. -} - -DraggableWindow::~DraggableWindow() -{ - for(uint32_t i=0; iHandleKey(key); -} - -void DraggableWindow::HandleMouseMove(uint32_t x, uint32_t y) -{ - if (clicked) - { -//Need to check whether or not we've run into the extents of the screen... !!! FIX !!! - RestoreScreenFromBackstore(); - extents.x = x - offset.x; - extents.y = y - offset.y; - SDL_BlitSurface(screen, &extents, backstore, NULL); - Draw(); - - return; - } - - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseMove(x - extents.x, y - extents.y); -} - -void DraggableWindow::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - clicked = false; - - if (mouseDown && Inside(x, y)) - { - clicked = true; - offset.x = x - extents.x; - offset.y = y - extents.y; - } - - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseButton(x - extents.x, y - extents.y, mouseDown); - - if (list[i]->Inside(x - extents.x, y - extents.y)) - clicked = false; - } -} - -void DraggableWindow::Draw(void) -{ -#ifdef USE_COVERAGE_LISTS - // These are *always* top level and parentless, so no need to traverse up through - // the parent chain... - for(std::list::iterator i=coverList.begin(); i!=coverList.end(); i++) - SDL_FillRect(screen, &(*i), bgColor); - - // Handle the items this window contains... - for(uint32_t i=0; iDraw(); -#else - // These are *always* top level and parentless, so no need to traverse up through - // the parent chain... -//Perhaps we can make these parentable, put the parent traversal in the base class? -//Prolly. -#ifdef BACKGROUND_IMG_TEST - SDL_Rect src, dst; - src.x = 0, src.y = 0, src.w = extents.w, src.h = extents.h; - dst.x = extents.x, dst.y = extents.y; - SDL_BlitSurface(img, &src, screen, &dst); - - extern char textChar2e[]; - uint8_t * fontAddr = (uint8_t *)textChar2e + ((128 + 32) * 7 * 8); - SetNewFont(Font(fontAddr, 7, 8)); - DrawStringOpaque(screen, extents.x + 8, extents.y + 6, 0xFF000000, 0xFFFFFFFF, "Ultima III - Boo"); - DrawStringOpaque(screen, extents.x + 8, extents.y + 14, 0xFF000000, 0xFFFFFFFF, "0123456789012345"); - DrawStringOpaque(screen, extents.x + 8, extents.y + 22, 0xFF000000, 0xFFFFFFFF, "1234567890123456"); - DrawStringOpaque(screen, extents.x + 8, extents.y + 30, 0xFF000000, 0xFFFFFFFF, "2345678901234567"); - RestoreOldFont(); -#else - SDL_FillRect(screen, &extents, bgColor); -#endif - - // Handle the items this window contains... - for(uint32_t i=0; iDraw(); -#endif - -//Prolly don't need this since the close button will do this for us... - needToRefreshScreen = true; -} - -void DraggableWindow::Notify(Element * e) -{ - if (e == closeButton) - { - SDL_Event event; - event.type = SDL_USEREVENT, event.user.code = WINDOW_CLOSE; - SDL_PushEvent(&event); - } -} - -void DraggableWindow::AddElement(Element * e) -{ - list.push_back(e); -} diff --git a/src/gui/draggablewindow.h b/src/gui/draggablewindow.h deleted file mode 100644 index a658cb9..0000000 --- a/src/gui/draggablewindow.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// DRAGGABLEWINDOW.H -// -// Graphical User Interface window class -// - -#ifndef __DRAGGABLEWINDOW_H__ -#define __DRAGGABLEWINDOW_H__ - -#include "element.h" -#include - -class Button; // Forward declaration - -class DraggableWindow: public Element -{ - public: - DraggableWindow(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0, - void (* f)(Element *) = NULL); - ~DraggableWindow(); //Does this destructor need to be virtual? Not sure... Check! - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(void); - virtual void Notify(Element *); - void AddElement(Element * e); - - protected: - void (* handler)(Element *); - Button * closeButton; - std::vector list; - bool clicked; - SDL_Rect offset; - - private: - uint16_t cbWidth, cbHeight; - SDL_Surface * cbUp, * cbDown, * cbHover; - SDL_Surface * img; -}; - -#endif // __DRAGGABLEWINDOW_H__ diff --git a/src/gui/draggablewindow2.cpp b/src/gui/draggablewindow2.cpp deleted file mode 100644 index 4b385fb..0000000 --- a/src/gui/draggablewindow2.cpp +++ /dev/null @@ -1,213 +0,0 @@ -// -// DRAGGABLEWINDOW2.CPP -// -// Graphical User Interface draggable window class -// by James Hammons -// -// JLH = James Hammons -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JLH 03/17/2006 Created this file -// JLH 03/17/2006 Added clipping against parent extents -// -// STILL TO DO: -// -// - Check for parent's extents and clip movement against those extents [DONE] -// - -#include "draggablewindow2.h" -#include "guimisc.h" // Various support functions -#include - -// Debugging support - -//#define DESTRUCTOR_TESTING -#define BACKGROUND_IMG_TEST -#define USE_COVERAGE_LISTS - -#if SDL_BYTEORDER == SDL_BIG_ENDIAN -#define MASK_R 0xFF000000 -#define MASK_G 0x00FF0000 -#define MASK_B 0x0000FF00 -#define MASK_A 0x000000FF -#else -#define MASK_R 0x000000FF -#define MASK_G 0x0000FF00 -#define MASK_B 0x00FF0000 -#define MASK_A 0xFF000000 -#endif - -// -// DraggableWindow class implementation -// -// NOTE: FG/BG colors are hard-wired -// - -DraggableWindow2::DraggableWindow2(uint32_t x/*= 0*/, uint32_t y/*= 0*/, uint32_t w/*= 0*/, uint32_t h/*= 0*/, - void (* f)(Element *)/*= NULL*/): - Window(x, y, w, h, f), clicked(false) -{ -#ifdef BACKGROUND_IMG_TEST - uint16_t imgWidth = (floppyDiskImg[0] << 8) | floppyDiskImg[1]; - uint16_t imgHeight = (floppyDiskImg[2] << 8) | floppyDiskImg[3]; - img = SDL_CreateRGBSurfaceFrom(&floppyDiskImg[4], imgWidth, imgHeight, 32, imgWidth * 4, - MASK_R, MASK_G, MASK_B, MASK_A); -// label = SDL_CreateRGBSurface(SDL_SWSURFACE, 16*7, 32, 32, -// MASK_R, MASK_G, MASK_B, MASK_A); - -//Prolly should draw this in the constructor... -//Now is! :-D - extern char textChar2e[]; - uint8_t * fontAddr = (uint8_t *)textChar2e + ((128 + 32) * 7 * 8); - SetNewFont(Font(fontAddr, 7, 8)); -// DrawStringOpaque(label, 0, 0, 0xFF000000, 0xFFFFFFFF, "Ultima III - Boo"); -// DrawStringOpaque(label, 0, 8, 0xFF000000, 0xFFFFFFFF, "0123456789012345"); -// DrawStringOpaque(label, 0, 16, 0xFF000000, 0xFFFFFFFF, "1234567890123456"); -// DrawStringOpaque(label, 0, 24, 0xFF000000, 0xFFFFFFFF, "2345678901234567"); - DrawStringOpaque(img, 8, 6, 0xFF000000, 0xFFFFFFFF, "Ultima III - Boo"); - DrawStringOpaque(img, 8, 14, 0xFF000000, 0xFFFFFFFF, "t Disk6789012345"); - DrawStringOpaque(img, 8, 22, 0xFF000000, 0xFFFFFFFF, "1234567890123456"); - DrawStringOpaque(img, 6, 30, 0xFF000000, 0xFFFFFFFF, "2345678901234567"); - RestoreOldFont(); -#endif - -// CreateBackstore(); -//Bleh. We only have to do this here because Window's constructor is doing it too. !!! FIX !!! -//Mebbe put this shiaut into Element? What about stuff that doesn't draw itself right away? -//Perhaps we should just hit needToRefreshScreen or some such--but will that trigger a redraw? - RestoreScreenFromBackstore(); - Draw(); // Can we do this in the constructor??? Mebbe. -} - -DraggableWindow2::~DraggableWindow2() -{ -#ifdef DESTRUCTOR_TESTING -printf("Inside ~DraggableWindow2()...\n"); -#endif - -#ifdef BACKGROUND_IMG_TEST - SDL_FreeSurface(img); -// SDL_FreeSurface(label); -#endif -} - -void DraggableWindow2::HandleMouseMove(uint32_t x, uint32_t y) -{ - if (clicked) - { -//Need to check whether or not we've run into the extents of the screen... !!! FIX !!! -//[DONE] - int32_t newX = x - offset.x; - int32_t newY = y - offset.y; - SDL_Rect clip = GetParentRect(); - - if (newX < clip.x) - newX = clip.x; - else if (newX > (clip.w - extents.w)) - newX = clip.w - extents.w; - - if (newY < clip.y) - newY = clip.y; - else if (newY > (clip.h - extents.h)) - newY = clip.h - extents.h; - - RestoreScreenFromBackstore(); - extents.x = newX; - extents.y = newY; - SaveScreenToBackstore(); -#ifdef USE_COVERAGE_LISTS -//If we don't do this, the coverage list doesn't move with the window...! - ResetCoverageList(); -#endif -// SDL_BlitSurface(screen, &extents, backstore, NULL); - Draw(); - - return; - } - - // Handle the items this window contains... -// for(uint32_t i=0; iHandleMouseMove(x - extents.x, y - extents.y); - Window::HandleMouseMove(x, y); -} - -void DraggableWindow2::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - clicked = false; - - if (mouseDown && Inside(x, y)) - { - clicked = true; - offset.x = x - extents.x; - offset.y = y - extents.y; - } - - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseButton(x - extents.x, y - extents.y, mouseDown); - - if (list[i]->Inside(x - extents.x, y - extents.y)) - clicked = false; - } -} - -void DraggableWindow2::Draw(void) -{ -//NOTE: What we need to do here is render into a surface THEN do the blits from the coverage list. !!! FIX !!! -#ifdef USE_COVERAGE_LISTS - // These are *always* top level and parentless, so no need to traverse up through - // the parent chain... - for(std::list::iterator i=coverList.begin(); i!=coverList.end(); i++) - { - SDL_Rect src, dst; - src.x = (*i).x - extents.x, src.y = (*i).y - extents.y, src.w = (*i).w, src.h = (*i).h; - dst.x = (*i).x, dst.y = (*i).y; - SDL_BlitSurface(img, &src, screen, &dst); - } - -// HUH??!?!? The label should have been drawn into img already!!! !!! FIX !!! [DONE] -//This doesn't get clipped at all... !!! FIX !!! -// SDL_Rect src, dst; -// src.x = 0, src.y = 0, src.w = label->w, src.h = label->h; -// dst.x = extents.x + 8, dst.y = extents.y + 6; -// SDL_BlitSurface(label, &src, screen, &dst); - - // Handle the items this window contains... - for(uint32_t i=0; iDraw(); -#else - // These are *always* top level and parentless, so no need to traverse up through - // the parent chain... -//Perhaps we can make these parentable, put the parent traversal in the base class? -//Prolly. -#ifdef BACKGROUND_IMG_TEST - SDL_Rect src, dst; - src.x = 0, src.y = 0, src.w = extents.w, src.h = extents.h; - dst.x = extents.x, dst.y = extents.y; - SDL_BlitSurface(img, &src, screen, &dst); - -//WTF? Unnecessary! -// extern char textChar2e[]; -// uint8_t * fontAddr = (uint8_t *)textChar2e + ((128 + 32) * 7 * 8); -// SetNewFont(Font(fontAddr, 7, 8)); -// DrawStringOpaque(screen, extents.x + 8, extents.y + 6, 0xFF000000, 0xFFFFFFFF, "Ultima III - Boo"); -// DrawStringOpaque(screen, extents.x + 8, extents.y + 14, 0xFF000000, 0xFFFFFFFF, "0123456789012345"); -// DrawStringOpaque(screen, extents.x + 8, extents.y + 22, 0xFF000000, 0xFFFFFFFF, "1234567890123456"); -// DrawStringOpaque(screen, extents.x + 8, extents.y + 30, 0xFF000000, 0xFFFFFFFF, "2345678901234567"); -// RestoreOldFont(); -#else - SDL_FillRect(screen, &extents, bgColor); -#endif - - // Handle the items this window contains... - for(uint32_t i=0; iDraw(); -#endif - -//Prolly don't need this since the close button will do this for us... - needToRefreshScreen = true; -} diff --git a/src/gui/draggablewindow2.h b/src/gui/draggablewindow2.h deleted file mode 100644 index 045f988..0000000 --- a/src/gui/draggablewindow2.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// DRAGGABLEWINDOW2.H -// -// Graphical User Interface window class -// - -#ifndef __DRAGGABLEWINDOW2_H__ -#define __DRAGGABLEWINDOW2_H__ - -#include "window.h" -#include - -class DraggableWindow2: public Window -{ - public: - DraggableWindow2(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0, - void (* f)(Element *) = NULL); - ~DraggableWindow2(); // Does this destructor need to be virtual? No, it doesn't! - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(void); - - protected: - bool clicked; - SDL_Rect offset; - - private: - SDL_Surface * img; -// SDL_Surface * label; -}; - -#endif // __DRAGGABLEWINDOW2_H__ diff --git a/src/gui/element.cpp b/src/gui/element.cpp deleted file mode 100644 index 3adb4b3..0000000 --- a/src/gui/element.cpp +++ /dev/null @@ -1,332 +0,0 @@ -// -// ELEMENT.CPP -// -// Graphical User Interface base class -// by James Hammons -// -// JLH = James Hammons -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JLH 02/02/2006 Created this file -// JLH 02/13/2006 Added backbuffer and rendering functions -// JLH 03/02/2006 Moved backbuffer destruction to destructor, added parent -// corner discovery -// - -#include "element.h" -#include "guimisc.h" // Various support functions - -#if SDL_BYTEORDER == SDL_BIG_ENDIAN -#define MASK_R 0xFF000000 -#define MASK_G 0x00FF0000 -#define MASK_B 0x0000FF00 -#define MASK_A 0x000000FF -#else -#define MASK_R 0x000000FF -#define MASK_G 0x0000FF00 -#define MASK_B 0x00FF0000 -#define MASK_A 0xFF000000 -#endif - -//#define DEBUG_ELEMENT - -#ifdef DEBUG_ELEMENT -#include "log.h" -#endif - -// Initialize class variables - -SDL_Surface * Element::screen = NULL; -bool Element::needToRefreshScreen = false; - -Element::Element(uint32_t x/*= 0*/, uint32_t y/*= 0*/, uint32_t w/*= 0*/, uint32_t h/*= 0*/, - Element * parentElement/*= NULL*/): parent(parentElement), backstore(NULL), visible(true) -{ - extents.x = x, - extents.y = y, - extents.w = w, - extents.h = h; - coverList.push_back(extents); -} - -Element::Element(uint32_t x, uint32_t y, uint32_t w, uint32_t h, - uint8_t fgR/*= 0xFF*/, uint8_t fgG/*= 0xFF*/, uint8_t fgB/*= 0xFF*/, uint8_t fgA/*= 0xFF*/, - uint8_t bgR/*= 0x00*/, uint8_t bgG/*= 0x00*/, uint8_t bgB/*= 0x00*/, uint8_t bgA/*= 0xFF*/, - Element * parentElement/*= NULL*/): parent(parentElement), backstore(NULL), visible(true) -{ - extents.x = x, - extents.y = y, - extents.w = w, - extents.h = h; - coverList.push_back(extents); - -#if 0 - // This *should* allow us to store our colors in an endian safe way... :-/ - uint8_t * c = (uint8_t *)&fgColor; - c[0] = fgR, c[1] = fgG, c[2] = fgB, c[3] = fgA; - c = (uint8_t *)&bgColor; - c[0] = bgR, c[1] = bgG, c[2] = bgB, c[3] = bgA; -#else - fgColor = SDL_MapRGBA(screen->format, fgR, fgG, fgB, fgA); - bgColor = SDL_MapRGBA(screen->format, bgR, bgG, bgB, bgA); -#endif -} - -Element::~Element() -{ - if (backstore) - { - RestoreScreenFromBackstore(); - SDL_FreeSurface(backstore); - needToRefreshScreen = true; - } -} - -bool Element::Inside(uint32_t x, uint32_t y) -{ - return (x >= (uint32_t)extents.x && x < (uint32_t)(extents.x + extents.w) - && y >= (uint32_t)extents.y && y < (uint32_t)(extents.y + extents.h) ? true : false); -} - -//Badly named--!!! FIX !!! [DONE] -//SDL_Rect Element::GetParentCorner(void) -SDL_Rect Element::GetScreenCoords(void) -{ - SDL_Rect rect; - rect.x = extents.x, rect.y = extents.y; - - // First, traverse the parent tree to get the absolute screen address... - - Element * currentParent = parent; - - while (currentParent) - { - rect.x += currentParent->extents.x; - rect.y += currentParent->extents.y; - currentParent = currentParent->parent; - } - - return rect; -} - -#if 1 -//May use this in the future... -SDL_Rect Element::GetParentRect(void) -{ - // If there is no parent, then return the entire screen as the parent's - // rectangle. - - SDL_Rect rect; - rect.x = 0, rect.y = 0, rect.w = screen->w, rect.h = screen->h; - - if (parent) - { - rect.x = parent->extents.x; - rect.y = parent->extents.y; - rect.w = parent->extents.w; - rect.h = parent->extents.h; - } - - return rect; -} -#endif - -SDL_Rect Element::GetExtents(void) -{ - return extents; -} - -//kludge -#include "settings.h" -void Element::CreateBackstore(void) -{ - backstore = SDL_CreateRGBSurface(SDL_SWSURFACE, extents.w, extents.h, 32, - MASK_R, MASK_G, MASK_B, 0x00); -//#define TEST_GL -#ifdef TEST_GL -printf("Element: About to do SDL_BlitSurface...\n"); -#endif -//kludge -if (settings.useOpenGL) - return; - -//Since screen is the main screen surface, OpenGL doesn't like it being touched. -//How to fix? Dunno. - SDL_BlitSurface(screen, &extents, backstore, NULL); -#ifdef TEST_GL -printf("Element: SDL_BlitSurface...Done.\n"); -#endif -} - -void Element::RestoreScreenFromBackstore(void) -{ - SDL_Rect r; - - r.x = extents.x; - r.y = extents.y; - SDL_BlitSurface(backstore, NULL, screen, &r); -} - -void Element::SaveScreenToBackstore(void) -{ - SDL_BlitSurface(screen, &extents, backstore, NULL); -} - -void Element::ResetCoverageList(void) -{ - // Setup our coverage list with the entire window area - coverList.empty(); - coverList.push_back(extents); -} - -void Element::AdjustCoverageList(SDL_Rect r) -{ -//Prolly should have a bool here to set whether or not to do this crap, since it -//takes a little time... - - // Here's where we do the coverage list voodoo... :-) - -/* -Steps: - o Check for intersection. If no intersection, then no need to divide rects. - o Loop through current rects. If rect is completely inside passed in rect, remove from list. - o Loop through remaining rects. If rect intersects, decompose to four rects and - exclude degenerate rects, push rest into the coverage list. - -*/ -// std::list::reverse_iterator ri; -// std::list::iterator i; - - // Loop through rects and remove those completely covered by passed in rect. -/* for(i=coverList.begin(); i!=coverList.end(); i++) - { -// if (RectanglesIntersect(r, *i)) - if (RectangleFirstInsideSecond(*i, r)) - { -//This is not right--do a while loop instead of a for loop? - // Remove it from the list... - std::list::iterator next = coverList.erase(i); - } - } -*/ - // Loop through rects and remove those completely covered by passed in rect. - std::list::iterator i = coverList.begin(); - - while (i != coverList.end()) - { - if (RectangleFirstInsideSecond(*i, r)) - i = coverList.erase(i); // This will also advance i to the next item! - else - i++; - } - -//This may not be needed if nothing follows the loop below...! -// if (coverList.empty()) -// return; - - // Check for intersection. If no intersection, then no need to divide rects. - i = coverList.begin(); - - while (i != coverList.end()) - { - if (RectanglesIntersect(r, *i)) - { - // Do the decomposition here. There will always be at least *one* rectangle - // generated by this algorithm, so we know we're OK in removing the original - // from the list. The general pattern looks like this: - // - // +------+ - // |1 | - // +-+--+-+ - // |2|//|3| <- Rectangle "r" is in the center - // +-+--+-+ - // |4 | - // +------+ - // - // Even if r extends beyond the bounds of the rectangle under consideration, - // that's OK because we test to see that the rectangle isn't degenerate - // before adding it to the list. - -//Should probably use a separate list here and splice it in when we're done here... -//Or, could use push_front() to avoid the problem... Neat! Doesn't require a separate list! -//But, we need to remove the currently referenced rect... Another while loop! - -//This approach won't work--if no rect1 then we're screwed! [FIXED] -//Now *that* will work... - SDL_Rect current = *i; - uint32_t bottomOfRect1 = current.y; -// uint32_t rightOfRect2 = current.x; -// uint32_t leftOfRect3 = current.x + current.w; - uint32_t topOfRect4 = current.y + current.h; - - // Rectangle #1 (top) - if (r.y > current.y) // Simple rectangle degeneracy test... - { - bottomOfRect1 = r.y; - SDL_Rect rect = current; - rect.h = r.y - current.y; - coverList.push_front(rect); - } - - // Rectangle #4 (bottom) - if (r.y + r.h < current.y + current.h) - { - topOfRect4 = r.y + r.h; - SDL_Rect rect = current; - rect.y = r.y + r.h; - rect.h = (current.y + current.h) - (r.y + r.h); - coverList.push_front(rect); - } - - // Rectangle #2 (left side) - if (r.x > current.x) - { - SDL_Rect rect = current; - rect.w = r.x - current.x; - rect.y = bottomOfRect1; - rect.h = topOfRect4 - bottomOfRect1; - coverList.push_front(rect); - } - - // Rectangle #3 (right side) - if (r.x + r.w < current.x + current.w) - { - SDL_Rect rect; - rect.x = r.x + r.w; - rect.w = (current.x + current.w) - (r.x + r.w); - rect.y = bottomOfRect1; - rect.h = topOfRect4 - bottomOfRect1; - coverList.push_front(rect); - } - - i = coverList.erase(i); // This will also advance i to the next item! - } - else - i++; - } -} - -void Element::SetVisible(bool visibility) -{ - visible = visibility; -} - -// -// Class methods -// - -void Element::SetScreen(SDL_Surface * s) -{ - screen = s; -} - -bool Element::ScreenNeedsRefreshing(void) -{ - return needToRefreshScreen; -} - -void Element::ScreenWasRefreshed(void) -{ - needToRefreshScreen = false; -} diff --git a/src/gui/element.h b/src/gui/element.h deleted file mode 100644 index e3ad812..0000000 --- a/src/gui/element.h +++ /dev/null @@ -1,70 +0,0 @@ -// -// ELEMENT.H -// -// Graphical User Interface base class -// All GUI elements are derived from this base class. -// - -#ifndef __ELEMENT_H__ -#define __ELEMENT_H__ - -// These are various GUI messages that can be sent to the SDL event handler - -enum { WINDOW_CLOSE, MENU_ITEM_CHOSEN, SCREEN_REFRESH_NEEDED }; - -#include -#include -#include - -class Element -{ - public: - Element(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0, - Element * parentElement = NULL); - Element(uint32_t x, uint32_t y, uint32_t w, uint32_t h, - uint8_t fgR = 0xFF, uint8_t fgG = 0xFF, uint8_t fgB = 0xFF, uint8_t fgA = 0xFF, - uint8_t bgR = 0x00, uint8_t bgG = 0x00, uint8_t bgB = 0x00, uint8_t bgA = 0xFF, - Element * parentElement = NULL); - virtual ~Element(); // Destructor cannot be pure virtual... - virtual void HandleKey(SDL_Scancode key) = 0; // These are "pure" virtual functions... - virtual void HandleMouseMove(uint32_t x, uint32_t y) = 0; - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) = 0; - virtual void Draw(void) = 0; - virtual void Notify(Element *) = 0; - bool Inside(uint32_t x, uint32_t y); -//Badly named, though we may code something that does this... -// SDL_Rect GetParentCorner(void); - SDL_Rect GetScreenCoords(void); - SDL_Rect GetExtents(void); -#if 1 -//May use this in the future... - SDL_Rect GetParentRect(void); -#endif - void CreateBackstore(void); - void RestoreScreenFromBackstore(void); - void SaveScreenToBackstore(void); - void ResetCoverageList(void); -//Need something to prevent this on Elements that don't have mouseover effects... - void AdjustCoverageList(SDL_Rect r); - void SetVisible(bool); - // Class methods... - static void SetScreen(SDL_Surface *); - static bool ScreenNeedsRefreshing(void); - static void ScreenWasRefreshed(void); - - protected: - SDL_Rect extents; - uint32_t state; - Element * parent; - uint32_t fgColor; - uint32_t bgColor; - SDL_Surface * backstore; - std::list coverList; - bool visible; - - // Class variables... - static SDL_Surface * screen; - static bool needToRefreshScreen; -}; - -#endif // __ELEMENT_H__ diff --git a/src/gui/font1.h b/src/gui/font1.h deleted file mode 100644 index 624047f..0000000 --- a/src/gui/font1.h +++ /dev/null @@ -1,262 +0,0 @@ -// -// This file was automagically generated by bin2c (by James Hammons) -// - -char font1[0x4000] = { - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 -}; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 6128486..59a7681 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -18,6 +18,7 @@ // - Multiple window handling [DONE] // +#if 0 #include "gui.h" #include "menu.h" // Element class methods are pulled in here... #include "window.h" @@ -480,7 +481,7 @@ void GUI::Stop(void) { exitGUI = true; } - +#endif // @@ -501,6 +502,13 @@ struct Bitmap { }; +#include "gui.h" +#include "apple2.h" +#include "applevideo.h" +#include "diskselector.h" +#include "log.h" +#include "video.h" + // Icons, in GIMP "C" format #include "gfx/icon-selection.c" #include "gfx/disk-icon.c" diff --git a/src/gui/gui.h b/src/gui/gui.h index 302cbca..5f1a82f 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -10,6 +10,7 @@ #include #include +#if 0 class Menu; // Now *this* should work, since we've got pointers... class MenuItems; class Element; @@ -34,7 +35,7 @@ class GUI bool showMouse; SDL_Rect mouse, oldMouse; }; - +#endif class GUI2 { diff --git a/src/gui/guielements.h b/src/gui/guielements.h deleted file mode 100644 index af17ca1..0000000 --- a/src/gui/guielements.h +++ /dev/null @@ -1,343 +0,0 @@ -// -// GUIELEMENTS.H -// -// Graphical User Interface bitmaps and such -// - -#ifndef __GUIELEMENTS_H__ -#define __GUIELEMENTS_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// Okay, this is ugly but works and I can't think of any better way to handle this. So what -// we do when we pass the GIMP bitmaps into a function is pass them as a (void *) and then -// cast them as type (Bitmap *) in order to use them. Yes, it's ugly. Come up with something -// better! - -struct Bitmap { - unsigned int width; - unsigned int height; - unsigned int bytesPerPixel; // 3:RGB, 4:RGBA - unsigned char pixelData[]; -}; - -//NOTE: 32-bit pixels are in the format of ABGR... -// This may not be endian safe... Mac users? -//Using the GIMP C style bitmap is portable in that it's specified in bytes -//but we can cast it in uint32_ts and thus it will display correctly regardless of -//the underlying endianess. At least, in theory. ;-) - -uint32_t mousePic[] = { - 6, 8, - - 0xFF00FF00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, // + - 0xFF00C600,0xFF00FF00,0x00000000,0x00000000,0x00000000,0x00000000, // @+ - 0xFF00C600,0xFF00FF00,0xFF00FF00,0x00000000,0x00000000,0x00000000, // @++ - 0xFF00C600,0xFF00C600,0xFF00FF00,0xFF00FF00,0x00000000,0x00000000, // @@++ - 0xFF00C600,0xFF00C600,0xFF00FF00,0xFF00FF00,0xFF00FF00,0x00000000, // @@+++ - 0xFF00C600,0xFF00C600,0xFF00C600,0xFF00FF00,0xFF00FF00,0xFF00FF00, // @@@+++ - 0xFF00C600,0xFF00C600,0xFF00C600,0x00000000,0x00000000,0x00000000, // @@@ - 0xFF00C600,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000 // @ -/* - 0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // + - 0x0300,0x03E0,0x0000,0x0000,0x0000,0x0000, // @+ - 0x0300,0x03E0,0x03E0,0x0000,0x0000,0x0000, // @++ - 0x0300,0x0300,0x03E0,0x03E0,0x0000,0x0000, // @@++ - 0x0300,0x0300,0x03E0,0x03E0,0x03E0,0x0000, // @@+++ - 0x0300,0x0300,0x0300,0x03E0,0x03E0,0x03E0, // @@@+++ - 0x0300,0x0300,0x0300,0x0000,0x0000,0x0000, // @@@ - 0x0300,0x0000,0x0000,0x0000,0x0000,0x0000 // @ - - 0xFFFF,0x0000,0x0000,0x0000,0x0000,0x0000, // + - 0xE318,0xFFFF,0x0000,0x0000,0x0000,0x0000, // @+ - 0xE318,0xFFFF,0xFFFF,0x0000,0x0000,0x0000, // @++ - 0xE318,0xE318,0xFFFF,0xFFFF,0x0000,0x0000, // @@++ - 0xE318,0xE318,0xFFFF,0xFFFF,0xFFFF,0x0000, // @@+++ - 0xE318,0xE318,0xE318,0xFFFF,0xFFFF,0xFFFF, // @@@+++ - 0xE318,0xE318,0xE318,0x0000,0x0000,0x0000, // @@@ - 0xE318,0x0000,0x0000,0x0000,0x0000,0x0000 // @ -*/ -}; - -uint32_t upArrowBox[] = { - 8, 8, - - 0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649, // ++++++++ - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0xFFBD8400, // + @@@@ . - 0xFFF7D649,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFBD8400, // +@@@@@@. - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400 // ........ -}; - -uint32_t downArrowBox[] = { - 8, 8, - - 0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649, // ++++++++ - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFBD8400, // +@@@@@@. - 0xFFF7D649,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0xFFBD8400, // + @@@@ . - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400 // ........ -}; - -/* GIMP RGBA C-Source image dump (unlit button (16x16).png.c) */ - -static const struct { - unsigned int width; - unsigned int height; - unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ - unsigned char pixel_data[16 * 16 * 4 + 1]; -} pbUp = { - 16, 16, 4, - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26\26\26\40`__\203\205rr\305\216mm\344\205" - "cc\345kWW\306@??\202\16\16\16\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\2\2\2\4nll\205\277\217\217\372\251LL\377\23588\377\23155\377\227" - "22\377\22600\377\22477\377\204UU\371>;;\203\1\1\1\3\0\0\0\0\0\0\0\0\0\0\0" - "\0\2\2\2\4\225\215\215\260\271hh\377\234==\377\22499\377\22366\377\22233" - "\377\22111\377\221//\377\220--\377\221,,\377\213==\377SJJ\254\1\1\1\4\0\0" - "\0\0\0\0\0\0omm\205\271hh\377\231==\377\224::\377\22377\377\22344\377\223" - "22\377\22100\377\220..\377\220--\377\220,,\377\220++\377\213<<\377=;;\204" - "\0\0\0\0\27\27\27\"\301\220\220\372\234==\377\224::\377\22388\377\22555\377" - "\22533\377\22411\377\223//\377\222--\377\220,,\377\220++\377\221**\377\222" - "**\377\204RR\372\16\16\16\37baa\205\252MM\377\224::\377\22377\377\22655\377" - "\22433\377\22111\377\216//\377\214..\377\214,,\377\217++\377\221++\377\221" - "**\377\224**\377\22422\377=<<\203\207tt\307\23599\377\22366\377\22355\377" - "\22533\377\22111\377\215//\377\213..\377\213--\377\212,,\377\212++\377\221" - "**\377\222**\377\226**\377\227**\377dNN\306\222oo\344\23155\377\22244\377" - "\22322\377\22411\377\216//\377\213..\377\213--\377\212,,\377\212++\377\212" - "**\377\220**\377\223**\377\230))\377\231**\377xTT\345\210ff\345\23033\377" - "\22111\377\22100\377\223//\377\215..\377\213--\377\212,,\377\212++\377\212" - "**\377\212**\377\221**\377\224))\377\232))\377\233))\377yTT\344lYY\304\230" - "11\377\221//\377\220..\377\222--\377\215,,\377\212,,\377\212++\377\212**" - "\377\212**\377\211**\377\224))\377\226))\377\235))\377\235**\377dNN\305?" - ">>\177\230;;\377\220..\377\220--\377\220,,\377\217++\377\212++\377\212**" - "\377\212**\377\212**\377\222))\377\225))\377\234))\377\237))\377\23455\377" - ";;;\200\15\15\15\34\207YY\367\222--\377\220,,\377\220++\377\221++\377\222" - "**\377\220**\377\221**\377\224))\377\224))\377\232))\377\237))\377\237**" - "\377\211UU\367\14\14\14\34\0\0\0\0:88{\221CC\377\220++\377\221++\377\221" - "**\377\222**\377\223**\377\224))\377\226))\377\234))\377\237))\377\237))" - "\377\232AA\377988{\0\0\0\0\0\0\0\0\1\1\1\2NGG\243\221CC\377\223++\377\224" - "**\377\226**\377\227))\377\232))\377\235))\377\236))\377\237**\377\232BB" - "\377OGG\244\1\1\1\2\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\2""766w\204WW\365\2279" - "9\377\231,,\377\231**\377\233**\377\236++\377\23388\377\207VV\365766w\1\1" - "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\12\12\12\30""777w]M" - "M\272rSS\330sSS\330]MM\270777w\12\12\12\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0", -}; - -uint32_t pushButtonUp[] = { - 8, 8, - - 0x00000000, 0xFF1B1B1B, 0xFF545477, 0xFF525292, 0xFF474787, 0xFF363659, 0xFF0F0F0F, 0x00000000, - 0xFF1B1B1C, 0xFF6666A7, 0xFF393995, 0xFF343492, 0xFF2F2F90, 0xFF2C2C90, 0xFF3B3B7E, 0xFF0F0F0F, - 0xFF555578, 0xFF3A3A95, 0xFF353594, 0xFF303091, 0xFF2D2D8F, 0xFF2B2B90, 0xFF2A2A92, 0xFF333358, - 0xFF545493, 0xFF343492, 0xFF303092, 0xFF2D2D8B, 0xFF2B2B8A, 0xFF2A2A8D, 0xFF292994, 0xFF3D3D83, - 0xFF484889, 0xFF2F2F90, 0xFF2D2D8F, 0xFF2B2B8A, 0xFF2A2A89, 0xFF29298E, 0xFF292998, 0xFF3D3D84, - 0xFF37375A, 0xFF2C2C90, 0xFF2B2B90, 0xFF2A2A8D, 0xFF29298E, 0xFF292995, 0xFF29299D, 0xFF34345B, - 0xFF0E0E0E, 0xFF3E3E7F, 0xFF2A2A92, 0xFF292994, 0xFF292998, 0xFF29299D, 0xFF3C3C88, 0xFF0E0E0E, - 0x00000000, 0xFF0D0D0D, 0xFF343456, 0xFF3D3D80, 0xFF3D3D82, 0xFF333358, 0xFF0D0D0D, 0x00000000 -}; - -uint8_t pbuAlpha[] = { - 0xFF, 0xE4, 0xA0, 0x99, 0xA4, 0xBE, 0xF0, 0xFF, - 0xE3, 0x85, 0x00, 0x00, 0x00, 0x00, 0xAF, 0xF0, - 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, - 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, - 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, - 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, - 0xF1, 0xAD, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xF1, - 0xFF, 0xF2, 0xC0, 0xAD, 0xAD, 0xC0, 0xF2, 0xFF -}; - -/* GIMP RGBA C-Source image dump (Lit Button (16x16).png.c) */ - -static const struct { - unsigned int width; - unsigned int height; - unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ - unsigned char pixel_data[16 * 16 * 4 + 1]; -} pbDown = { - 16, 16, 4, - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\261\261\261\36\276\276\276\200\272\272\272" - "\302\255\255\255\343\236\236\236\343\214\214\214\302~~~\177uuu\35\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\223\223\223\3\332\332\332\200\353" - "\353\353\371\347\323\323\377\321\224\224\377\303rr\377\274jj\377\263uu\377" - "\237\212\212\377\205\205\205\370xxx\177ccc\3\0\0\0\0\0\0\0\0\0\0\0\0\236" - "\236\236\3\345\345\345\252\371\362\362\377\326\203\203\377\325BB\377\353" - "DD\377\365DD\377\365CC\377\351>>\377\31777\377\251TT\377\210\200\200\377" - "yyy\250```\3\0\0\0\0\0\0\0\0\333\333\333\200\371\362\362\377\320cc\377\356" - "GG\377\371HH\377\366FF\377\363CC\377\363BB\377\365AA\377\367@@\377\351<<" - "\377\257@@\377\203{{\377www\177\0\0\0\0\261\261\261\36\354\354\354\370\326" - "\204\204\377\356GG\377\370HH\377\362EE\377\351BB\377\340>>\377\337==\377" - "\347>>\377\357??\377\366??\377\352;;\377\242LL\377{{{\370sss\35\300\300\300" - "\200\350\324\324\377\326BB\377\371HH\377\362EE\377\341@@\377\324<<\377\326" - "<<\377\325;;\377\32199\377\335;;\377\360>>\377\370??\377\32033\377\205pp" - "\377xxx\177\274\274\274\302\322\225\225\377\353DD\377\366FF\377\351BB\377" - "\324<<\377\331==\377\335>>\377\335==\377\330;;\377\32088\377\347<<\377\365" - ">>\377\353::\377\225UU\377xxx\303\260\260\260\343\305tt\377\366EE\377\363" - "DD\377\340>>\377\326<<\377\335>>\377\342??\377\342>>\377\334<<\377\32388" - "\377\33599\377\363>>\377\371==\377\237II\377yyy\343\237\237\237\343\275l" - "l\377\365CC\377\363BB\377\337==\377\325;;\377\335==\377\342>>\377\342>>\377" - "\334<<\377\32388\377\33699\377\364>>\377\372==\377\240II\377yyy\343\216\216" - "\216\303\264vv\377\352??\377\365AA\377\347>>\377\32199\377\330;;\377\334" - "<<\377\334<<\377\327::\377\31777\377\350;;\377\371>>\377\357;;\377\227UU" - "\377xxx\302~~~\200\240\214\214\377\32188\377\367@@\377\357??\377\335;;\377" - "\32088\377\32388\377\32388\377\31777\377\33799\377\362==\377\376>>\377\326" - "55\377\204nn\377www\177vvv\34\205\205\205\370\253UU\377\353==\377\366??\377" - "\360>>\377\347<<\377\33599\377\33699\377\350;;\377\362==\377\375>>\377\362" - ";;\377\246HH\377zzz\370rrr\36\0\0\0\0xxx\177\210\200\200\377\261AA\377\353" - "==\377\370??\377\365>>\377\363>>\377\364>>\377\370>>\377\376>>\377\362<<" - "\377\266<<\377~uu\377www\177\0\0\0\0\0\0\0\0ddd\3yyy\250\203{{\377\243MM" - "\377\32155\377\354<<\377\371>>\377\372>>\377\357;;\377\32755\377\246HH\377" - "~uu\377xxx\250___\3\0\0\0\0\0\0\0\0\0\0\0\0hhh\3www\177{{{\370\205pp\377" - "\225UU\377\237JJ\377\240JJ\377\227UU\377\204nn\377zzz\370www\177```\3\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ttt\35www\200xxx\303yyy\343y" - "yy\343xxx\303xxx\177sss\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", -}; - -uint32_t pushButtonDown[] = { - 8, 8, - - 0x00000000, 0xFF1B1B1B, 0xFF8B8B90, 0xFF8C8CAF, 0xFF767699, 0xFF56565B, 0xFF0F0F0F, 0x00000000, - 0xFF1B1B1B, 0xFFB8B8D6, 0xFF5555E4, 0xFF4444F2, 0xFF4040F1, 0xFF4141D5, 0xFF626282, 0xFF0F0F0F, - 0xFF8C8C91, 0xFF5555E4, 0xFF4444EF, 0xFF3E3EDC, 0xFF3B3BDB, 0xFF3D3DEC, 0xFF3E3ED4, 0xFF4B4B51, - 0xFF8D8DB1, 0xFF4444F2, 0xFF3E3EDC, 0xFF3E3EDD, 0xFF3C3CDC, 0xFF3939D9, 0xFF3C3CF3, 0xFF59597E, - 0xFF77779B, 0xFF4141F1, 0xFF3B3BDB, 0xFF3C3CDC, 0xFF3B3BDC, 0xFF3838D9, 0xFF3C3CF5, 0xFF595980, - 0xFF57575D, 0xFF4242D8, 0xFF3D3DEC, 0xFF3939D9, 0xFF3838D9, 0xFF3C3CEF, 0xFF3D3DDC, 0xFF4C4C52, - 0xFF101010, 0xFF636385, 0xFF3E3ED8, 0xFF3D3DF4, 0xFF3D3DF6, 0xFF3D3DDD, 0xFF5D5D83, 0xFF101010, - 0x00000000, 0xFF101010, 0xFF4E4E55, 0xFF5B5B83, 0xFF5B5B84, 0xFF4D4D54, 0xFF101010, 0x00000000 -}; - -uint8_t pbdAlpha[] = { - 0xFF, 0xE4, 0x72, 0x68, 0x7E, 0xA7, 0xF0, 0xFF, - 0xE4, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x93, 0xF0, - 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, - 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, - 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, - 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, - 0xEF, 0x91, 0x00, 0x00, 0x00, 0x00, 0x96, 0xEF, - 0xFF, 0xEF, 0xAE, 0x98, 0x97, 0xAF, 0xEF, 0xFF -}; - -uint32_t slideSwitchUp[] = { - 8, 16, - -//0C7F -> 000011 00011 11111 -> 0000 1100 0001 1000 1111 1111 -> 0C 18 FF - 0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649, // ++++++++ - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400 // ........ -}; - -uint32_t slideSwitchDown[] = { - 8, 16, - - 0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649, // ++++++++ - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400 // ........ -}; - -#define CLOSEBOX_WIDTH 15 -#define CLOSEBOX_HEIGHT 15 - -uint32_t closeBox[] = { - 15, 15, - - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000, - 0xFF3838ED, 0xFF5858E7, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF5858E7, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF3838ED, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF3838ED, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF3838ED, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF3838ED, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF5858E7, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF5858E7, 0xFF3838ED, - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000 -}; - -uint32_t closeBoxHover[] = { - 15, 15, - - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000, - 0xFF3838ED, 0xFF5858E7, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF5858E7, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF3838ED, 0xFF3838ED, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF3838ED, 0xFF3838ED, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF52B7FF, 0xFF52B7FF, 0xFF52B7FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF40AFFF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF63BEFF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF40AFFF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF40AFFF, 0xFF52B7FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF52B7FF, 0xFF40AFFF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF40AFFF, 0xFF52B7FF, 0xFF63BEFF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF63BEFF, 0xFF52B7FF, 0xFF40AFFF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF40AFFF, 0xFF52B7FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF52B7FF, 0xFF40AFFF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF40AFFF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF63BEFF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF40AFFF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF52B7FF, 0xFF52B7FF, 0xFF52B7FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF3838ED, 0xFF3838ED, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF3838ED, 0xFF3838ED, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF5858E7, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF5858E7, 0xFF3838ED, - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000 -}; - -uint32_t closeBoxDown[] = { - 15, 15, - - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000, - 0xFF3838ED, 0xFF1D1DE2, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF1D1DE2, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF3838ED, 0xFF3838ED, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF3838ED, 0xFF3838ED, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0077CC, 0xFF0077CC, 0xFF0077CC, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF0786E2, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF006EBD, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0786E2, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF0786E2, 0xFF0077CC, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0077CC, 0xFF0786E2, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF0786E2, 0xFF0077CC, 0xFF006EBD, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF006EBD, 0xFF0077CC, 0xFF0786E2, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF0786E2, 0xFF0077CC, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0077CC, 0xFF0786E2, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF0786E2, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF006EBD, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0786E2, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0077CC, 0xFF0077CC, 0xFF0077CC, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF3838ED, 0xFF3838ED, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF3838ED, 0xFF3838ED, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF1D1DE2, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF1D1DE2, 0xFF3838ED, - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000 -}; - -#include "vj_title_small.c" - -#ifdef __cplusplus -} -#endif - -#endif // __GUIELEMENTS_H__ diff --git a/src/gui/guimisc.cpp b/src/gui/guimisc.cpp deleted file mode 100644 index 8e623ac..0000000 --- a/src/gui/guimisc.cpp +++ /dev/null @@ -1,2822 +0,0 @@ -// -// GUIMISC.CPP -// -// Graphical User Interface support functions -// by James Hammons -// -// JLH = James Hammons -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JLH 02/02/2006 Created this file -// JLH 03/13/2006 Abstracted out font to allow external fonts -// - -#include "guimisc.h" -#include "font14pt.h" -//Can't do this...! -//#include "charset.h" // For Apple II font (small) -#include -#include - - -#if SDL_BYTEORDER == SDL_BIG_ENDIAN -#define MASK_R 0xFF000000 -#define MASK_G 0x00FF0000 -#define MASK_B 0x0000FF00 -#define MASK_A 0x000000FF -#else -#define MASK_R 0x000000FF -#define MASK_G 0x0000FF00 -#define MASK_B 0x00FF0000 -#define MASK_A 0xFF000000 -#endif - -// Local variables -// This will enable us to set up any font without having it embedded here... - -static Font font((uint8_t *)font2, FONT_WIDTH, FONT_HEIGHT); -static std::vector oldFontList; - - -void SetNewFont(Font newFont) -{ - oldFontList.push_back(font); - font.data = newFont.data, font.width = newFont.width, font.height = newFont.height; -} - -void RestoreOldFont(void) -{ - if (oldFontList.size() == 0) - return; - - font = oldFontList.back(); - oldFontList.pop_back(); -} - -uint32_t GetFontWidth(void) -{ - return font.width; -} - -uint32_t GetFontHeight(void) -{ - return font.height; -} - -// -// Draw text at the given x/y coordinates with transparency (255 is fully opaque, 0 is fully transparent). -// -void DrawStringTrans(SDL_Surface * screen, uint32_t x, uint32_t y, uint32_t color, const char * text, ...) -{ - char string[4096]; - va_list arg; - - va_start(arg, text); - vsprintf(string, text, arg); - va_end(arg); - - uint8_t * esColor = (uint8_t *)&color; // Do things endian safe...! - uint8_t trans = esColor[3]; - uint32_t length = strlen(string); - - // Make a "stamp" surface (with built in alpha!) for constructing our font chars... - SDL_Surface * chr = SDL_CreateRGBSurface(SDL_SWSURFACE, font.width, font.height, 32, - MASK_R, MASK_G, MASK_B, MASK_A); - SDL_Rect rect; - rect.x = x, rect.y = y; - -//bleh -uint8_t r1, g1, b1, a1; -SDL_GetRGBA(color, screen->format, &r1, &g1, &b1, &a1); -color = SDL_MapRGBA(chr->format, r1, g1, b1, a1); -//helb - - for(uint32_t i=0; ipixels)[xx + (yy * (chr->pitch / 4))] = color; - } - } - - SDL_BlitSurface(chr, NULL, screen, &rect); - rect.x += font.width; - } - - SDL_FreeSurface(chr); -} - -// -// Draw text at given x/y coords using foreground/background color combination -// -void DrawStringOpaque(SDL_Surface * screen, uint32_t x, uint32_t y, uint32_t fg, uint32_t bg, const char * text, ...) -{ - char string[4096]; - va_list arg; - - va_start(arg, text); - vsprintf(string, text, arg); - va_end(arg); - - uint8_t * esColor = (uint8_t *)&fg; // Do things endian safe...! - uint32_t length = strlen(string); - - SDL_Rect destRect; - - destRect.x = x, destRect.y = y; - destRect.w = length * font.width, destRect.h = font.height; - - SDL_FillRect(screen, &destRect, bg); - - // Make a "stamp" surface (with built in alpha!) for constructing our font chars... - SDL_Surface * chr = SDL_CreateRGBSurface(SDL_SWSURFACE, font.width, font.height, 32, - MASK_R, MASK_G, MASK_B, MASK_A); - SDL_Rect rect; - rect.x = x, rect.y = y; - -//bleh (we have to map colors from the HW surface to the SW surface) -uint8_t r1, g1, b1, a1; -SDL_GetRGBA(fg, screen->format, &r1, &g1, &b1, &a1); -fg = SDL_MapRGBA(chr->format, r1, g1, b1, a1); -SDL_GetRGBA(bg, screen->format, &r1, &g1, &b1, &a1); -bg = SDL_MapRGBA(chr->format, r1, g1, b1, a1); -//helb - - for(uint32_t i=0; ipixels)[xx + (yy * (chr->pitch / 4))] = fg; - } - } - - SDL_BlitSurface(chr, NULL, screen, &rect); - rect.x += font.width; - } - - SDL_FreeSurface(chr); -} - -bool RectanglesIntersect(SDL_Rect r1, SDL_Rect r2) -{ - // The strategy here is to see if any of the sides of the smaller rect - // fall within the larger. - -/* - +-----------------+ r1 - | | - | +------+ r2 | - | | | | - | | | | - | +------+ | - | | - +-----------------+ - -*/ - -//This approach fails if r2 is inside of r1. !!! FIX !!! [DONE] - if (RectangleFirstInsideSecond(r2, r1)) - return true; - - if ((r1.x > r2.x && r1.x < (r2.x + r2.w)) - || ((r1.x + r1.w) > r2.x && (r1.x + r1.w) < (r2.x + r2.w)) - || (r1.y > r2.y && r1.y < (r2.y + r2.h)) - || ((r1.y + r1.h) > r2.y && (r1.y + r1.h) < (r2.y + r2.h))) - return true; - - return false; -} - -bool RectangleFirstInsideSecond(SDL_Rect r1, SDL_Rect r2) -{ - if ((r1.x > r2.x && (r1.x + r1.w) > r2.x) - && (r1.x < (r2.x + r2.w) && (r1.x + r1.w) < (r2.x + r2.w)) - && (r1.y > r2.y && (r1.y + r1.h) > r2.y) - && (r1.y < (r2.y + r2.h) && (r1.y + r1.h) < (r2.y + r2.h))) - return true; - - return false; -} - - -// -// Various GUI bitmaps -// - -// These representations *should* be endian safe. - -uint8_t closeBox[] = { - 15 / 256, 15 % 256, // width (HI byte, LO byte) - 15 / 256, 15 % 256, // height (HI byte, LO byte) - - 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00 -}; - -uint8_t closeBoxHover[] = { - 15 / 256, 15 % 256, // width (HI byte, LO byte) - 15 / 256, 15 % 256, // height (HI byte, LO byte) - - 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00 -}; - -uint8_t closeBoxDown[] = { - 15 / 256, 15 % 256, // width (HI byte, LO byte) - 15 / 256, 15 % 256, // height (HI byte, LO byte) - - 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xED, 0x38, 0x38, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00 -}; - -#include "fd-img-128x128.c" - - -#if 0 -#include -#include // For MacOS dependency -#include -#include -#include -#include -#include -#include // For toupper() -#include "settings.h" -#include "tom.h" -#include "video.h" -#include "clock.h" -#include "font1.h" -#include "font14pt.h" // Also 15, 16, 17, 18 -#include "guielements.h" -#include "crc32.h" -#include "zlib.h" -#include "unzip.h" -#include "sdlemu_opengl.h" -#include "gui.h" - -using namespace std; // For STL stuff - -// Private function prototypes - -class Window; // Forward declaration... - -//void DrawTransparentBitmap(uint32_t * screen, uint32_t x, uint32_t y, uint32_t * bitmap, uint8_t * alpha = NULL); -void DrawTransparentBitmapDeprecated(uint32_t * screen, uint32_t x, uint32_t y, uint32_t * bitmap); -void DrawTransparentBitmap(uint32_t * screen, uint32_t x, uint32_t y, const void * bitmap); -void DrawBitmap(uint32_t * screen, uint32_t x, uint32_t y, const void * bitmap); -//Should call this FillScreenRectangle with a number representing the RGBA value to fill. !!! FIX !!! -//void ClearScreenRectangle(uint32_t * screen, uint32_t x, uint32_t y, uint32_t w, uint32_t h); -void FillScreenRectangle(uint32_t * screen, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t color); -void DrawStringTrans(uint32_t * screen, uint32_t x, uint32_t y, uint32_t color, uint8_t opacity, const char * text, ...); -void DrawStringOpaque(uint32_t * screen, uint32_t x, uint32_t y, uint32_t color1, uint32_t color2, const char * text, ...); -void DrawString(uint32_t * screen, uint32_t x, uint32_t y, bool invert, const char * text, ...); -void DrawString2(uint32_t * screen, uint32_t x, uint32_t y, uint32_t color, uint8_t transparency, const char * text, ...); -Window * LoadROM(void); -Window * ResetJaguar(void); -Window * ResetJaguarCD(void); -Window * RunEmu(void); -Window * Quit(void); -Window * About(void); -Window * MiscOptions(void); - -int gzfilelength(gzFile gd); - -// External variables - -extern uint8_t * jaguar_mainRam; -extern uint8_t * jaguar_mainRom; -extern uint8_t * jaguar_bootRom; -extern uint8_t * jaguar_CDBootROM; -extern bool BIOSLoaded; -extern bool CDBIOSLoaded; - -// Local global variables - -bool exitGUI = false; // GUI (emulator) done variable -int mouseX = 0, mouseY = 0; -uint32_t background[1280 * 256]; // GUI background buffer - -char separator[] = "--------------------------------------------------------"; - -// -// Case insensitive string compare function -// Taken straight out of Thinking In C++ by Bruce Eckel. Thanks Bruce! -// - -int stringCmpi(const string &s1, const string &s2) -{ - // Select the first element of each string: - string::const_iterator p1 = s1.begin(), p2 = s2.begin(); - - while (p1 != s1.end() && p2 != s2.end()) // Don�t run past the end - { - if (toupper(*p1) != toupper(*p2)) // Compare upper-cased chars - return (toupper(*p1) < toupper(*p2) ? -1 : 1);// Report which was lexically greater - - p1++; - p2++; - } - - // If they match up to the detected eos, say which was longer. Return 0 if the same. - return s2.size() - s1.size(); -} - -// -// Local GUI classes -// - -enum { WINDOW_CLOSE, MENU_ITEM_CHOSEN }; - -class Element -{ - public: - Element(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0) - { extents.x = x, extents.y = y, extents.w = w, extents.h = h; } - virtual void HandleKey(SDL_Scancode key) = 0; // These are "pure" virtual functions... - virtual void HandleMouseMove(uint32_t x, uint32_t y) = 0; - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) = 0; - virtual void Draw(uint32_t, uint32_t) = 0; - virtual void Notify(Element *) = 0; -//Needed? virtual ~Element() = 0; -//We're not allocating anything in the base class, so the answer would be NO. - bool Inside(uint32_t x, uint32_t y); - // Class method -// static void SetScreenAndPitch(int16_t * s, uint32_t p) { screenBuffer = s, pitch = p; } - static void SetScreenAndPitch(uint32_t * s, uint32_t p) { screenBuffer = s, pitch = p; } - - protected: - SDL_Rect extents; - uint32_t state; - // Class variables... -// static int16_t * screenBuffer; - static uint32_t * screenBuffer; - static uint32_t pitch; -}; - -// Initialize class variables (Element) -//int16_t * Element::screenBuffer = NULL; -uint32_t * Element::screenBuffer = NULL; -uint32_t Element::pitch = 0; - -bool Element::Inside(uint32_t x, uint32_t y) -{ - return (x >= (uint32_t)extents.x && x < (uint32_t)(extents.x + extents.w) - && y >= (uint32_t)extents.y && y < (uint32_t)(extents.y + extents.h) ? true : false); -} - - -// -// Button class -// - -class Button: public Element -{ - public: - Button(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0): Element(x, y, w, h), - activated(false), clicked(false), inside(false), fgColor(0xFFFFFFFF), - bgColor(0xFF00FF00), pic(NULL), elementToTell(NULL) {} - Button(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t * p): Element(x, y, w, h), - activated(false), clicked(false), inside(false), fgColor(0xFFFFFFFF), - bgColor(0xFF00FF00), pic(p), elementToTell(NULL) {} -// Button(uint32_t x, uint32_t y, uint32_t * p): Element(x, y, 0, 0), - Button(uint32_t x, uint32_t y, uint32_t * p, uint32_t * pH = NULL, uint32_t * pD = NULL): Element(x, y, 0, 0), - activated(false), clicked(false), inside(false), fgColor(0xFFFFFFFF), - bgColor(0xFF00FF00), pic(p), picHover(pH), picDown(pD), elementToTell(NULL) - { if (pic) extents.w = pic[0], extents.h = pic[1]; } - Button(uint32_t x, uint32_t y, uint32_t w, uint32_t h, string s): Element(x, y, w, h), - activated(false), clicked(false), inside(false), fgColor(0xFFFFFFFF), - bgColor(0xFF00FF00), pic(NULL), text(s), elementToTell(NULL) {} - Button(uint32_t x, uint32_t y, string s): Element(x, y, 0, FONT_HEIGHT), - activated(false), clicked(false), inside(false), fgColor(0xFFFFFFFF), - bgColor(0xFF00FF00), pic(NULL), text(s), elementToTell(NULL) - { extents.w = s.length() * FONT_WIDTH; } - virtual void HandleKey(SDL_Scancode key) {} - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0); - virtual void Notify(Element *) {} - bool ButtonClicked(void) { return activated; } - void SetNotificationElement(Element * e) { elementToTell = e; } - - protected: - bool activated, clicked, inside; - uint32_t fgColor, bgColor; - uint32_t * pic, * picHover, * picDown; - string text; - Element * elementToTell; -}; - -void Button::HandleMouseMove(uint32_t x, uint32_t y) -{ - inside = Inside(x, y); -} - -void Button::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - if (inside) - { - if (mouseDown) - clicked = true; - - if (clicked && !mouseDown) - { - clicked = false, activated = true; - - // Send a message that we're activated (if there's someone to tell, that is) - if (elementToTell) - elementToTell->Notify(this); - } - } - else - clicked = activated = false; -} - -void Button::Draw(uint32_t offsetX/*= 0*/, uint32_t offsetY/*= 0*/) -{ - uint32_t addr = (extents.x + offsetX) + ((extents.y + offsetY) * pitch); - - if (text.length() > 0) // Simple text button -// if (pic == NULL) - { - for(uint32_t y=0; y 010000 11111 10000 -> 0100 0001 1111 1111 1000 0100 -> 41 FF 84 - = (clicked && inside ? fgColor : (inside ? 0xFF84FF41 : bgColor)); - } - } - - DrawString(screenBuffer, extents.x + offsetX, extents.y + offsetY, false, "%s", text.c_str()); - } - else // Graphical button - { - uint32_t * picToShow = pic; - - if (picHover != NULL && inside && !clicked) - picToShow = picHover; - - if (picDown != NULL && inside && clicked) - picToShow = picDown; - - DrawTransparentBitmapDeprecated(screenBuffer, extents.x + offsetX, extents.y + offsetY, picToShow); - } -} - - -// -// PushButton class -// - -class PushButton: public Element -{ -// How to handle? -// Save state externally? -//We pass in a state variable if we want to track it externally, otherwise we use our own -//internal state var. Still need to do some kind of callback for pushbuttons that do things -//like change from fullscreen to windowed... !!! FIX !!! - - public: -// PushButton(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0): Element(x, y, w, h), -// activated(false), clicked(false), inside(false), fgColor(0xFFFF), -// bgColor(0x03E0), pic(NULL), elementToTell(NULL) {} -// PushButton(uint32_t x, uint32_t y, bool * st, string s): Element(x, y, 8, 8), state(st), -// inside(false), text(s) { if (st == NULL) state = &internalState; } - PushButton(uint32_t x, uint32_t y, bool * st, string s): Element(x, y, 16, 16), state(st), - inside(false), text(s) { if (st == NULL) state = &internalState; } -/* Button(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t * p): Element(x, y, w, h), - activated(false), clicked(false), inside(false), fgColor(0xFFFF), - bgColor(0x03E0), pic(p), elementToTell(NULL) {} - Button(uint32_t x, uint32_t y, uint32_t * p): Element(x, y, 0, 0), - activated(false), clicked(false), inside(false), fgColor(0xFFFF), - bgColor(0x03E0), pic(p), elementToTell(NULL) - { if (pic) extents.w = pic[0], extents.h = pic[1]; } - Button(uint32_t x, uint32_t y, uint32_t w, uint32_t h, string s): Element(x, y, w, h), - activated(false), clicked(false), inside(false), fgColor(0xFFFF), - bgColor(0x03E0), pic(NULL), text(s), elementToTell(NULL) {} - PushButton(uint32_t x, uint32_t y, string s): Element(x, y, 0, 8), - activated(false), clicked(false), inside(false), fgColor(0xFFFF), - bgColor(0x03E0), pic(NULL), text(s), elementToTell(NULL) - { extents.w = s.length() * 8; }*/ - virtual void HandleKey(SDL_Scancode key) {} - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0); - virtual void Notify(Element *) {} -// bool ButtonClicked(void) { return activated; } -// void SetNotificationElement(Element * e) { elementToTell = e; } - - protected: - bool * state; - bool inside; -// bool activated, clicked, inside; -// uint16_t fgColor, bgColor; -// uint32_t * pic; - string text; -// Element * elementToTell; - bool internalState; -}; - -void PushButton::HandleMouseMove(uint32_t x, uint32_t y) -{ - inside = Inside(x, y); -} - -void PushButton::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - if (inside && mouseDown) - { -/* if (mouseDown) - clicked = true; - - if (clicked && !mouseDown) - { - clicked = false, activated = true; - - // Send a message that we're activated (if there's someone to tell, that is) - if (elementToTell) - elementToTell->Notify(this); - }*/ - *state = !(*state); - } -// else -// clicked = activated = false; -} - -void PushButton::Draw(uint32_t offsetX/*= 0*/, uint32_t offsetY/*= 0*/) -{ -/* uint32_t addr = (extents.x + offsetX) + ((extents.y + offsetY) * pitch); - - for(uint32_t y=0; y 0) - DrawString(screenBuffer, extents.x + offsetX + 24, extents.y + offsetY, false, "%s", text.c_str()); -} - - -// -// SlideSwitch class -// - -class SlideSwitch: public Element -{ -// How to handle? -// Save state externally? -//Seems to be handled the same as PushButton, but without sanity checks. !!! FIX !!! - - public: - SlideSwitch(uint32_t x, uint32_t y, bool * st, string s1, string s2): Element(x, y, 16, 32), state(st), - inside(false), text1(s1), text2(s2) {} - virtual void HandleKey(SDL_Scancode key) {} - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0); - virtual void Notify(Element *) {} -// bool ButtonClicked(void) { return activated; } -// void SetNotificationElement(Element * e) { elementToTell = e; } - - protected: - bool * state; - bool inside; -// bool activated, clicked, inside; -// uint16_t fgColor, bgColor; -// uint32_t * pic; - string text1, text2; -// Element * elementToTell; -}; - -void SlideSwitch::HandleMouseMove(uint32_t x, uint32_t y) -{ - inside = Inside(x, y); -} - -void SlideSwitch::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - if (inside && mouseDown) - { -/* if (mouseDown) - clicked = true; - - if (clicked && !mouseDown) - { - clicked = false, activated = true; - - // Send a message that we're activated (if there's someone to tell, that is) - if (elementToTell) - elementToTell->Notify(this); - }*/ - *state = !(*state); - } -// else -// clicked = activated = false; -} - -void SlideSwitch::Draw(uint32_t offsetX/*= 0*/, uint32_t offsetY/*= 0*/) -{ - DrawTransparentBitmapDeprecated(screenBuffer, extents.x + offsetX, extents.y + offsetY, (*state ? slideSwitchDown : slideSwitchUp)); - - if (text1.length() > 0) - DrawString(screenBuffer, extents.x + offsetX + 24, extents.y + offsetY, false, "%s", text1.c_str()); - - if (text2.length() > 0) - DrawString(screenBuffer, extents.x + offsetX + 24, extents.y + offsetY + 16, false, "%s", text2.c_str()); -} - - -// -// Window class -// - -class Window: public Element -{ - public: -/* Window(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0): Element(x, y, w, h), - fgColor(0x4FF0), bgColor(0xFE10) - { close = new Button(w - 8, 1, closeBox); list.push_back(close); }*/ - Window(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0, - void (* f)(Element *) = NULL): Element(x, y, w, h), -// /*clicked(false), inside(false),*/ fgColor(0x4FF0), bgColor(0x1E10), -//4FF0 -> 010011 11111 10000 -> 0100 1101 1111 1111 1000 0100 -> 4D FF 84 -//1E10 -> 000111 10000 10000 -> 0001 1111 1000 0100 1000 0100 -> 1F 84 84 - /*clicked(false), inside(false),*/ fgColor(0xFF84FF4D), bgColor(0xFF84841F), - handler(f) - { close = new Button(w - (CLOSEBOX_WIDTH + 1), 1, closeBox, closeBoxHover, closeBoxDown); - list.push_back(close); - close->SetNotificationElement(this); } - virtual ~Window(); - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0); - virtual void Notify(Element * e); - void AddElement(Element * e); -// bool WindowActive(void) { return true; }//return !close->ButtonClicked(); } - - protected: -// bool clicked, inside; - uint32_t fgColor, bgColor; - void (* handler)(Element *); - Button * close; -//We have to use a list of Element *pointers* because we can't make a list that will hold -//all the different object types in the same list... - vector list; -}; - -Window::~Window() -{ - for(uint32_t i=0; iHandleKey(key); -} - -void Window::HandleMouseMove(uint32_t x, uint32_t y) -{ - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseMove(x - extents.x, y - extents.y); -} - -void Window::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseButton(x - extents.x, y - extents.y, mouseDown); -} - -void Window::Draw(uint32_t offsetX/*= 0*/, uint32_t offsetY/*= 0*/) -{ - uint32_t addr = (extents.x + offsetX) + ((extents.y + offsetY) * pitch); - - for(uint32_t y=0; yDraw(extents.x, extents.y); -} - -void Window::AddElement(Element * e) -{ - list.push_back(e); -} - -void Window::Notify(Element * e) -{ - if (e == close) - { - SDL_Event event; - event.type = SDL_USEREVENT, event.user.code = WINDOW_CLOSE; - SDL_PushEvent(&event); - } -} - - -// -// Static text class -// - -class Text: public Element -{ - public: -// Text(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0): Element(x, y, w, h), -// fgColor(0x4FF0), bgColor(0xFE10) {} -// Text(uint32_t x, uint32_t y, string s, uint16_t fg = 0x4FF0, uint16_t bg = 0xFE10): Element(x, y, 0, 0), -// fgColor(fg), bgColor(bg), text(s) {} -//4FF0 -> 010011 11111 10000 -> 0100 1101 1111 1111 1000 0100 -> 4D FF 84 -//FE10 -> 111111 10000 10000 -> 1111 1111 1000 0100 1000 0100 -> FF 84 84 - Text(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0): Element(x, y, w, h), - fgColor(0xFF8484FF), bgColor(0xFF84FF4D) {} - Text(uint32_t x, uint32_t y, string s, uint32_t fg = 0xFF8484FF, uint32_t bg = 0xFF84FF4D): - Element(x, y, 0, 0), fgColor(fg), bgColor(bg), text(s) {} - virtual void HandleKey(SDL_Scancode key) {} - virtual void HandleMouseMove(uint32_t x, uint32_t y) {} - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) {} - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0); - virtual void Notify(Element *) {} - - protected: - uint32_t fgColor, bgColor; - string text; -}; - -void Text::Draw(uint32_t offsetX/*= 0*/, uint32_t offsetY/*= 0*/) -{ - if (text.length() > 0) -// DrawString(screenBuffer, extents.x + offsetX, extents.y + offsetY, false, "%s", text.c_str()); - DrawStringOpaque(screenBuffer, extents.x + offsetX, extents.y + offsetY, fgColor, bgColor, "%s", text.c_str()); -} - - -// -// Static image class -// - -class Image: public Element -{ - public: - Image(uint32_t x, uint32_t y, const void * img): Element(x, y, 0, 0), image(img) {} - virtual void HandleKey(SDL_Scancode key) {} - virtual void HandleMouseMove(uint32_t x, uint32_t y) {} - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) {} - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0); - virtual void Notify(Element *) {} - - protected: - uint32_t fgColor, bgColor; - const void * image; -}; - -void Image::Draw(uint32_t offsetX/*= 0*/, uint32_t offsetY/*= 0*/) -{ - if (image != NULL) - DrawTransparentBitmap(screenBuffer, extents.x + offsetX, extents.y + offsetY, image); -} - - -// -// TextEdit class -// - -class TextEdit: public Element -{ - public: - TextEdit(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0): Element(x, y, w, h), - fgColor(0xFF8484FF), bgColor(0xFF84FF4D), text(""), caretPos(0), - maxScreenSize(10) {} - TextEdit(uint32_t x, uint32_t y, string s, uint32_t mss = 10, uint32_t fg = 0xFF8484FF, - uint32_t bg = 0xFF84FF4D): Element(x, y, 0, 0), fgColor(fg), bgColor(bg), text(s), - caretPos(0), maxScreenSize(mss) {} - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y) {} - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) {} - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0); - virtual void Notify(Element *) {} - - protected: - uint32_t fgColor, bgColor; - string text; - uint32_t caretPos; - uint32_t maxScreenSize; -}; - -//Set different filters depending on type passed in on construction, e.g., filename, amount, etc...? -void TextEdit::HandleKey(SDL_Scancode key) -{ - if ((key >= SDLK_a && key <= SDLK_z) || (key >= SDLK_0 && key <= SDLK_9) || key == SDLK_PERIOD - || key == SDLK_SLASH) - { - //Need to handle shift key as well... - text[caretPos++] = key; - Draw(); - } - else if (key == SDLK_BACKSPACE) - { - - } - else if (key == SDLK_DELETE) - { - } -//left, right arrow -} - -void TextEdit::Draw(uint32_t offsetX/*= 0*/, uint32_t offsetY/*= 0*/) -{ - if (text.length() > 0) - { - FillScreenRectangle(screenBuffer, extents.x + offsetX, extents.y + offsetY, FONT_WIDTH * maxScreenSize, FONT_HEIGHT, bgColor); -// DrawString(screenBuffer, extents.x + offsetX, extents.y + offsetY, false, "%s", text.c_str()); - DrawStringOpaque(screenBuffer, extents.x + offsetX, extents.y + offsetY, fgColor, bgColor, "%s", text.c_str()); - } - - // Draw the caret (underscore? or vertical line?) -} - - -// -// ListBox class -// - -class ListBox: public Element -//class ListBox: public Window -{ - public: -// ListBox(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0): Element(x, y, w, h), - ListBox(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0);//: Window(x, y, w, h), -// windowPtr(0), cursor(0), limit(0), charWidth((w / 8) - 1), charHeight(h / 8), -// elementToTell(NULL), upArrow(w - 8, 0, upArrowBox), -// downArrow(w - 8, h - 8, downArrowBox), upArrow2(w - 8, h - 16, upArrowBox) {} - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0); - virtual void Notify(Element * e); - void SetNotificationElement(Element * e) { elementToTell = e; } - void AddItem(string s); - string GetSelectedItem(void); - - protected: - bool thumbClicked; - uint32_t windowPtr, cursor, limit; - uint32_t charWidth, charHeight; // Box width/height in characters - Element * elementToTell; - Button upArrow, downArrow, upArrow2; - vector item; - - private: - uint32_t yRelativePoint; -}; - -ListBox::ListBox(uint32_t x, uint32_t y, uint32_t w, uint32_t h): Element(x, y, w, h), - thumbClicked(false), windowPtr(0), cursor(0), limit(0), charWidth((w / FONT_WIDTH) - 1), - charHeight(h / FONT_HEIGHT), elementToTell(NULL), upArrow(w - 8, 0, upArrowBox), - downArrow(w - 8, h - 8, downArrowBox), upArrow2(w - 8, h - 16, upArrowBox) -{ - upArrow.SetNotificationElement(this); - downArrow.SetNotificationElement(this); - upArrow2.SetNotificationElement(this); - extents.w -= 8; // Make room for scrollbar... -} - -void ListBox::HandleKey(SDL_Scancode key) -{ - if (key == SDLK_DOWN) - { - if (cursor != limit - 1) // Cursor is within its window - cursor++; - else // Otherwise, scroll the window... - { - if (cursor + windowPtr != item.size() - 1) - windowPtr++; - } - } - else if (key == SDLK_UP) - { - if (cursor != 0) - cursor--; - else - { - if (windowPtr != 0) - windowPtr--; - } - } - else if (key == SDLK_PAGEDOWN) - { - if (cursor != limit - 1) - cursor = limit - 1; - else - { - windowPtr += limit; - if (windowPtr > item.size() - limit) - windowPtr = item.size() - limit; - } - } - else if (key == SDLK_PAGEUP) - { - if (cursor != 0) - cursor = 0; - else - { - if (windowPtr < limit) - windowPtr = 0; - else - windowPtr -= limit; - } - } - else if (key >= SDLK_a && key <= SDLK_z) - { - // Advance cursor to filename with first letter pressed... - uint8_t which = (key - SDLK_a) + 65; // Convert key to A-Z char - - for(uint32_t i=0; i windowPtr + limit - 1) - windowPtr = i - limit + 1, cursor = limit - 1; - if (i < windowPtr) - windowPtr = i, cursor = 0; - break; - } - } - } -} - -void ListBox::HandleMouseMove(uint32_t x, uint32_t y) -{ - upArrow.HandleMouseMove(x - extents.x, y - extents.y); - downArrow.HandleMouseMove(x - extents.x, y - extents.y); - upArrow2.HandleMouseMove(x - extents.x, y - extents.y); - - if (thumbClicked) - { - uint32_t sbHeight = extents.h - 24, - thumb = (uint32_t)(((float)limit / (float)item.size()) * (float)sbHeight); - -//yRelativePoint is the spot on the thumb where we clicked... - int32_t newThumbStart = y - yRelativePoint; - - if (newThumbStart < 0) - newThumbStart = 0; - - if ((uint32_t)newThumbStart > sbHeight - thumb) - newThumbStart = sbHeight - thumb; - - windowPtr = (uint32_t)(((float)newThumbStart / (float)sbHeight) * (float)item.size()); -//Check for cursor bounds as well... Or do we need to??? -//Actually, we don't...! - } -} - -void ListBox::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - if (Inside(x, y) && mouseDown) - { - // Why do we have to do this??? (- extents.y?) - // I guess it's because only the Window class has offsetting implemented... !!! FIX !!! -// cursor = (y - extents.y) / 8; - cursor = (y - extents.y) / FONT_HEIGHT; - } - - // Check for a hit on the scrollbar... - if (x > (uint32_t)(extents.x + extents.w) && x <= (uint32_t)(extents.x + extents.w + 8) - && y > (uint32_t)(extents.y + 8) && y <= (uint32_t)(extents.y + extents.h - 16)) - { - if (mouseDown) - { -// This shiaut should be calculated in AddItem(), not here... (or in Draw() for that matter) - uint32_t sbHeight = extents.h - 24, - thumb = (uint32_t)(((float)limit / (float)item.size()) * (float)sbHeight), - thumbStart = (uint32_t)(((float)windowPtr / (float)item.size()) * (float)sbHeight); - - // Did we hit the thumb? - if (y >= (extents.y + 8 + thumbStart) && y < (extents.y + 8 + thumbStart + thumb)) - thumbClicked = true, yRelativePoint = y - thumbStart; - } -//Seems that this is useless--never reached except in rare cases and that the code outside is -//more effective... -// else -// thumbClicked = false; - } - - if (!mouseDown) - thumbClicked = false; - - upArrow.HandleMouseButton(x - extents.x, y - extents.y, mouseDown); - downArrow.HandleMouseButton(x - extents.x, y - extents.y, mouseDown); - upArrow2.HandleMouseButton(x - extents.x, y - extents.y, mouseDown); -} - -void ListBox::Draw(uint32_t offsetX/*= 0*/, uint32_t offsetY/*= 0*/) -{ - for(uint32_t i=0; i= thumbStart + (extents.y+offsetY+8) && y < thumbStart + thumb + (extents.y+offsetY+8)) -// screenBuffer[x + (y * pitch)] = (thumbClicked ? 0x458E : 0xFFFF); -//458E -> 01 0001 0 1100 0 1110 -> 0100 0101 0110 0011 0111 0011 -> 45 63 73 - screenBuffer[x + (y * pitch)] = (thumbClicked ? 0xFF736345 : 0xFFFFFFFF); - else -// screenBuffer[x + (y * pitch)] = 0x0200; -//0200 -> 000000 10000 00000 -> 00 1000 0100 00 - screenBuffer[x + (y * pitch)] = 0xFF008400; - } - } -} - -void ListBox::Notify(Element * e) -{ - if (e == &upArrow || e == &upArrow2) - { - if (windowPtr != 0) - { - windowPtr--; - - if (cursor < limit - 1) - cursor++; - } - } - else if (e == &downArrow) - { - if (windowPtr < item.size() - limit) - { - windowPtr++; - - if (cursor != 0) - cursor--; - } - } -} - -void ListBox::AddItem(string s) -{ - // Do a simple insertion sort - bool inserted = false; - - for(vector::iterator i=item.begin(); i charHeight ? charHeight : item.size()); -} - -string ListBox::GetSelectedItem(void) -{ - return item[windowPtr + cursor]; -} - - -// -// FileList class -// - -class FileList: public Window -{ - public: - FileList(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0); - virtual ~FileList() {} - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y) { Window::HandleMouseMove(x, y); } - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) { Window::HandleMouseButton(x, y, mouseDown); } - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0) { Window::Draw(offsetX, offsetY); } - virtual void Notify(Element * e); - - protected: - ListBox * files; - Button * load; -}; - -//Need 4 buttons, one scrollbar... -FileList::FileList(uint32_t x, uint32_t y, uint32_t w, uint32_t h): Window(x, y, w, h) -{ - files = new ListBox(8, 8, w - 16, h - 32); - AddElement(files); - load = new Button(8, h - 16, " Load "); - AddElement(load); - load->SetNotificationElement(this); - -//!!! FIX !!! Directory might not exist--this shouldn't cause VJ to crash! - DIR * dp = opendir(vjs.ROMPath); - dirent * de; - - if (dp != NULL) - { - while ((de = readdir(dp)) != NULL) - { - char * ext = strrchr(de->d_name, '.'); - - if (ext != NULL) - if (strcasecmp(ext, ".zip") == 0 || strcasecmp(ext, ".j64") == 0 - || strcasecmp(ext, ".abs") == 0 || strcasecmp(ext, ".jag") == 0 - || strcasecmp(ext, ".rom") == 0) - files->AddItem(string(de->d_name)); - } - - closedir(dp); - } - else - { -//Give a diagnostic message here so that the (l)user can figure out what went wrong. !!! FIX !!! - } -} - -void FileList::HandleKey(SDL_Scancode key) -{ - if (key == SDLK_RETURN) - Notify(load); - else - Window::HandleKey(key); -} - -void FileList::Notify(Element * e) -{ - if (e == load) - { - char filename[MAX_PATH]; - strcpy(filename, vjs.ROMPath); - - if (strlen(filename) > 0) - if (filename[strlen(filename) - 1] != '/') - strcat(filename, "/"); - - strcat(filename, files->GetSelectedItem().c_str()); - -// uint32_t romSize = JaguarLoadROM(jaguar_mainRom, filename); -// JaguarLoadCart(jaguar_mainRom, filename); - if (JaguarLoadFile(filename)) - { - SDL_Event event; - event.type = SDL_USEREVENT, event.user.code = WINDOW_CLOSE; - SDL_PushEvent(&event); - - event.type = SDL_USEREVENT, event.user.code = MENU_ITEM_CHOSEN; - event.user.data1 = (void *)ResetJaguar; - SDL_PushEvent(&event); - } - else - { - SDL_Event event; - event.type = SDL_USEREVENT, event.user.code = WINDOW_CLOSE; - SDL_PushEvent(&event); - - // Handle the error, but don't run... - // Tell the user that we couldn't run their file for some reason... !!! FIX !!! -//how to kludge: Make a function like ResetJaguar which creates the dialog window - } - } - else - Window::Notify(e); -} - - -// -// Menu class & supporting structs/classes -// - -struct NameAction -{ - string name; - Window * (* action)(void); - SDL_Scancode hotKey; - - NameAction(string n, Window * (* a)(void) = NULL, SDL_Scancode k = SDLK_UNKNOWN): name(n), - action(a), hotKey(k) {} -}; - -class MenuItems -{ - public: - MenuItems(): charLength(0) {} - bool Inside(uint32_t x, uint32_t y) - { return (x >= (uint32_t)extents.x && x < (uint32_t)(extents.x + extents.w) - && y >= (uint32_t)extents.y && y < (uint32_t)(extents.y + extents.h) ? true : false); } - - string title; - vector item; - uint32_t charLength; - SDL_Rect extents; -}; - -class Menu: public Element -{ - public: -// 1CFF -> 0 001 11 00 111 1 1111 -// 421F -> 0 100 00 10 000 1 1111 - Menu(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = FONT_HEIGHT, -/* uint16_t fgc = 0x1CFF, uint16_t bgc = 0x000F, uint16_t fgch = 0x421F, - uint16_t bgch = 0x1CFF): Element(x, y, w, h), activated(false), clicked(false),*/ -/* uint32_t fgc = 0xFF3F3F00, uint32_t bgc = 0x7F000000, uint32_t fgch = 0xFF878700, - uint32_t bgch = 0xFF3F3F00): Element(x, y, w, h), activated(false), clicked(false),*/ -/* uint32_t fgc = 0xFFFF3F3F, uint32_t bgc = 0xFF7F0000, uint32_t fgch = 0xFFFF8787, - uint32_t bgch = 0xFFFF3F3F): Element(x, y, w, h), activated(false), clicked(false),*/ - uint32_t fgc = 0xFF7F0000, uint32_t bgc = 0xFFFF3F3F, uint32_t fgch = 0xFFFF3F3F, - uint32_t bgch = 0xFFFF8787): Element(x, y, w, h), activated(false), clicked(false), - inside(0), insidePopup(0), fgColor(fgc), bgColor(bgc), fgColorHL(fgch), - bgColorHL(bgch), menuChosen(-1), menuItemChosen(-1) {} - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0); - virtual void Notify(Element *) {} - void Add(MenuItems mi); - - protected: - bool activated, clicked; - uint32_t inside, insidePopup; -// uint16_t fgColor, bgColor, fgColorHL, bgColorHL; - uint32_t fgColor, bgColor, fgColorHL, bgColorHL; - int menuChosen, menuItemChosen; - - private: - vector itemList; -}; - -void Menu::HandleKey(SDL_Scancode key) -{ - for(uint32_t i=0; i= xpos && x < xpos + width) - { - inside = i + 1; - menuChosen = i; - break; - } - - xpos += width; - } - } - - if (!Inside(x, y) && !clicked) - { - menuChosen = -1; - } - - if (itemList[menuChosen].Inside(x, y) && clicked) - { - insidePopup = ((y - itemList[menuChosen].extents.y) / FONT_HEIGHT) + 1; - menuItemChosen = insidePopup - 1; - } -} - -void Menu::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - if (!clicked) - { - if (mouseDown) - { - if (inside) - clicked = true; - else - menuChosen = -1; // clicked is already false...! - } - } - else // clicked == true - { - if (insidePopup && !mouseDown) // I.e., mouse-button-up - { - activated = true; - if (itemList[menuChosen].item[menuItemChosen].action != NULL) - { -// itemList[menuChosen].item[menuItemChosen].action(); - SDL_Event event; - event.type = SDL_USEREVENT; - event.user.code = MENU_ITEM_CHOSEN; - event.user.data1 = (void *)itemList[menuChosen].item[menuItemChosen].action; - SDL_PushEvent(&event); - - clicked = false, menuChosen = menuItemChosen = -1; - -/* SDL_Event event; - while (SDL_PollEvent(&event)); // Flush the event queue... - event.type = SDL_MOUSEMOTION; - int mx, my; - SDL_GetMouseState(&mx, &my); - event.motion.x = mx, event.motion.y = my; - SDL_PushEvent(&event); // & update mouse position...! -*/ } - } - - if (!inside && !insidePopup && mouseDown) - clicked = false, menuChosen = menuItemChosen = -1; - } -} - -void Menu::Draw(uint32_t offsetX/*= 0*/, uint32_t offsetY/*= 0*/) -{ - uint32_t xpos = extents.x + offsetX; - - for(uint32_t i=0; i 0) - DrawStringOpaque(screenBuffer, itemList[menuChosen].extents.x, ypos, - color1, color2, " %-*.*s ", itemList[menuChosen].charLength, - itemList[menuChosen].charLength, itemList[menuChosen].item[i].name.c_str()); - else - DrawStringOpaque(screenBuffer, itemList[menuChosen].extents.x, ypos, - fgColor, bgColor, "%.*s", itemList[menuChosen].charLength + 2, separator); - - ypos += FONT_HEIGHT; - } - } -} - -void Menu::Add(MenuItems mi) -{ - for(uint32_t i=0; i mi.charLength) - mi.charLength = mi.item[i].name.length(); - - // Set extents here as well... - mi.extents.x = extents.x + extents.w, mi.extents.y = extents.y + FONT_HEIGHT + 1; - mi.extents.w = (mi.charLength + 2) * FONT_WIDTH, mi.extents.h = mi.item.size() * FONT_HEIGHT; - - itemList.push_back(mi); - extents.w += (mi.title.length() + 2) * FONT_WIDTH; -} - - -//Do we even *need* this? -//Doesn't seem like it... -/*class RootWindow: public Window -{ - public: - RootWindow(Menu * m, Window * w = NULL): menu(m), window(w) {} -//Do we even need to care about this crap? -// { extents.x = extents.y = 0, extents.w = 320, extents.h = 240; } - virtual void HandleKey(SDL_Scancode key) {} - virtual void HandleMouseMove(uint32_t x, uint32_t y) {} - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) {} - virtual void Draw(uint32_t offsetX = 0, uint32_t offsetY = 0) {} - virtual void Notify(Element *) {} - - private: - Menu * menu; - Window * window; - int16_t * rootImage[1280 * 240 * 2]; -};//*/ - - -// -// Draw text at the given x/y coordinates. Can invert text as well. -// -void DrawString(uint32_t * screen, uint32_t x, uint32_t y, bool invert, const char * text, ...) -{ - char string[4096]; - va_list arg; - - va_start(arg, text); - vsprintf(string, text, arg); - va_end(arg); - - uint32_t pitch = sdlemuGetOverlayWidthInPixels();//GetSDLScreenWidthInPixels(); - uint32_t length = strlen(string), address = x + (y * pitch); - - uint32_t color1 = 0x0080FF; - uint8_t nBlue = (color1 >> 16) & 0xFF, nGreen = (color1 >> 8) & 0xFF, nRed = color1 & 0xFF; - uint8_t xorMask = (invert ? 0xFF : 0x00); - - for(uint32_t i=0; i> 16) & 0xFF, - eGreen = (existingColor >> 8) & 0xFF, - eRed = existingColor & 0xFF; - - uint8_t trans = font2[fontAddr] ^ xorMask; - uint8_t invTrans = trans ^ 0xFF; - - uint32_t bRed = (eRed * invTrans + nRed * trans) / 255, - bGreen = (eGreen * invTrans + nGreen * trans) / 255, - bBlue = (eBlue * invTrans + nBlue * trans) / 255; - - *(screen + address + xx + (yy * pitch)) = 0xFF000000 | (bBlue << 16) | (bGreen << 8) | bRed; - fontAddr++; - } - } - - address += FONT_WIDTH; - } -} - -// -// Draw text at the given x/y coordinates, using FG/BG colors. -// -void DrawStringOpaque(uint32_t * screen, uint32_t x, uint32_t y, uint32_t color1, uint32_t color2, const char * text, ...) -{ - char string[4096]; - va_list arg; - - va_start(arg, text); - vsprintf(string, text, arg); - va_end(arg); - - uint32_t pitch = sdlemuGetOverlayWidthInPixels(); - uint32_t length = strlen(string), address = x + (y * pitch); - - uint8_t eBlue = (color2 >> 16) & 0xFF, eGreen = (color2 >> 8) & 0xFF, eRed = color2 & 0xFF, - nBlue = (color1 >> 16) & 0xFF, nGreen = (color1 >> 8) & 0xFF, nRed = color1 & 0xFF; - - for(uint32_t i=0; i> 16) & 0xFF, - eGreen = (existingColor >> 8) & 0xFF, - eRed = existingColor & 0xFF, -//This could be done ahead of time, instead of on each pixel... - nBlue = (color >> 16) & 0xFF, - nGreen = (color >> 8) & 0xFF, - nRed = color & 0xFF; - -//This could be sped up by using a table of 5 + 5 + 5 bits (32 levels transparency -> 32768 entries) -//Here we've modified it to have 33 levels of transparency (could have any # we want!) -//because dividing by 32 is faster than dividing by 31...! - uint8_t invTrans = 32 - trans; - - uint32_t bRed = (eRed * trans + nRed * invTrans) / 32; - uint32_t bGreen = (eGreen * trans + nGreen * invTrans) / 32; - uint32_t bBlue = (eBlue * trans + nBlue * invTrans) / 32; - - *(screen + address + xx + (yy * pitch)) = 0xFF000000 | (bBlue << 16) | (bGreen << 8) | bRed; - } - - fontAddr++; - } - } - - address += 8; - } -} - -// -// Draw text at the given x/y coordinates, using FG color and overlay alpha blending. -// -void DrawString2(uint32_t * screen, uint32_t x, uint32_t y, uint32_t color, uint8_t transparency, const char * text, ...) -{ - char string[4096]; - va_list arg; - - va_start(arg, text); - vsprintf(string, text, arg); - va_end(arg); - - uint32_t pitch = sdlemuGetOverlayWidthInPixels(); - uint32_t length = strlen(string), address = x + (y * pitch); - - color &= 0x00FFFFFF; // Just in case alpha was passed in... - - for(uint32_t i=0; i> 8) & 0xFF, - eBlue = (existingColor >> 16) & 0xFF, - - nRed = color & 0xFF, - nGreen = (color >> 8) & 0xFF, - nBlue = (color >> 16) & 0xFF; - - uint8_t invTrans = 255 - trans; - uint32_t bRed = (eRed * trans + nRed * invTrans) / 255; - uint32_t bGreen = (eGreen * trans + nGreen * invTrans) / 255; - uint32_t bBlue = (eBlue * trans + nBlue * invTrans) / 255; - - uint32_t blendedColor = 0xFF000000 | bRed | (bGreen << 8) | (bBlue << 16); - - *(screen + address + xx + (yy * pitch)) = blendedColor; - - alpha++; - } - - bitmap++; - } - } -}*/ -void DrawTransparentBitmapDeprecated(uint32_t * screen, uint32_t x, uint32_t y, uint32_t * bitmap) -{ - uint32_t width = bitmap[0], height = bitmap[1]; - bitmap += 2; - - uint32_t pitch = sdlemuGetOverlayWidthInPixels();//GetSDLScreenWidthInPixels(); - uint32_t address = x + (y * pitch); - - for(uint32_t yy=0; yy> 24 != 0x00) // Pixel needs blending - { - uint8_t trans = color >> 24; - uint8_t invTrans = trans ^ 0xFF;//255 - trans; - - uint8_t eRed = existingColor & 0xFF, - eGreen = (existingColor >> 8) & 0xFF, - eBlue = (existingColor >> 16) & 0xFF, - - nRed = color & 0xFF, - nGreen = (color >> 8) & 0xFF, - nBlue = (color >> 16) & 0xFF; - - uint32_t bRed = (eRed * invTrans + nRed * trans) / 255; - uint32_t bGreen = (eGreen * invTrans + nGreen * trans) / 255; - uint32_t bBlue = (eBlue * invTrans + nBlue * trans) / 255; - - blendedColor = 0xFF000000 | bRed | (bGreen << 8) | (bBlue << 16); - } - - *(screen + address + xx + (yy * pitch)) = blendedColor; - bitmap++; - } - } -} - -void DrawTransparentBitmap(uint32_t * screen, uint32_t x, uint32_t y, const void * bitmap) -{ - uint32_t pitch = sdlemuGetOverlayWidthInPixels(); - uint32_t address = x + (y * pitch); - uint32_t count = 0; - - for(uint32_t yy=0; yy<((Bitmap *)bitmap)->height; yy++) - { - for(uint32_t xx=0; xx<((Bitmap *)bitmap)->width; xx++) - { - uint32_t color = ((uint32_t *)((Bitmap *)bitmap)->pixelData)[count]; - uint32_t blendedColor = color; - uint32_t existingColor = *(screen + address + xx + (yy * pitch)); - - if (existingColor >> 24 != 0x00) // Pixel needs blending - { - uint8_t trans = color >> 24; - uint8_t invTrans = trans ^ 0xFF; - - uint8_t eRed = existingColor & 0xFF, - eGreen = (existingColor >> 8) & 0xFF, - eBlue = (existingColor >> 16) & 0xFF, - - nRed = color & 0xFF, - nGreen = (color >> 8) & 0xFF, - nBlue = (color >> 16) & 0xFF; - - uint32_t bRed = (eRed * invTrans + nRed * trans) / 255; - uint32_t bGreen = (eGreen * invTrans + nGreen * trans) / 255; - uint32_t bBlue = (eBlue * invTrans + nBlue * trans) / 255; - -// Instead of $FF, should use the alpha from the destination pixel as the final alpha value... - blendedColor = 0xFF000000 | bRed | (bGreen << 8) | (bBlue << 16); - } - - *(screen + address + xx + (yy * pitch)) = blendedColor; - count++; - } - } -} - -// -// Draw a bitmap without using blending -// -void DrawBitmap(uint32_t * screen, uint32_t x, uint32_t y, const void * bitmap) -{ - uint32_t pitch = sdlemuGetOverlayWidthInPixels(); - uint32_t address = x + (y * pitch); - uint32_t count = 0; - - for(uint32_t yy=0; yy<((Bitmap *)bitmap)->height; yy++) - { - for(uint32_t xx=0; xx<((Bitmap *)bitmap)->width; xx++) - { - *(screen + address + xx + (yy * pitch)) = ((uint32_t *)((Bitmap *)bitmap)->pixelData)[count]; - count++; - } - } -} - -// -// Fill a portion of the screen with the passed in color -// -void FillScreenRectangle(uint32_t * screen, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t color) -//void ClearScreenRectangle(uint32_t * screen, uint32_t x, uint32_t y, uint32_t w, uint32_t h) -{ - uint32_t pitch = sdlemuGetOverlayWidthInPixels(); - uint32_t address = x + (y * pitch); - - for(uint32_t yy=0; yy 000100 01000 10001 -> 0001 0000 0100 0010 1000 1100 -> 10 42 8C - for(uint32_t i=0; iAddElement(new Text(8, 8, "Error!")); - mainWindow->AddElement(new Text(8, 24, errText)); - } - } - -WriteLog("GUI: Entering main loop...\n"); - while (!exitGUI) - { - if (SDL_PollEvent(&event)) - { - if (event.type == SDL_USEREVENT) - { - if (event.user.code == WINDOW_CLOSE) - { - delete mainWindow; - mainWindow = NULL; - } - else if (event.user.code == MENU_ITEM_CHOSEN) - { - // Confused? Let me enlighten... What we're doing here is casting - // data1 as a pointer to a function which returns a Window pointer and - // which takes no parameters (the "(Window *(*)(void))" part), then - // derefencing it (the "*" in front of that) in order to call the - // function that it points to. Clear as mud? Yeah, I hate function - // pointers too, but what else are you gonna do? - mainWindow = (*(Window *(*)(void))event.user.data1)(); - - while (SDL_PollEvent(&event)); // Flush the event queue... - event.type = SDL_MOUSEMOTION; - int mx, my; - SDL_GetMouseState(&mx, &my); - event.motion.x = mx, event.motion.y = my; - SDL_PushEvent(&event); // & update mouse position...! - - oldMouseX = mouseX, oldMouseY = mouseY; - mouseX = mx, mouseY = my; // This prevents "mouse flash"... - } - } - else if (event.type == SDL_ACTIVEEVENT) - { - if (event.active.state == SDL_APPMOUSEFOCUS) - showMouse = (event.active.gain ? true : false); - } - else if (event.type == SDL_KEYDOWN) - { - if (mainWindow) - mainWindow->HandleKey(event.key.keysym.sym); - else - mainMenu.HandleKey(event.key.keysym.sym); - } - else if (event.type == SDL_MOUSEMOTION) - { - oldMouseX = mouseX, oldMouseY = mouseY; - mouseX = event.motion.x, mouseY = event.motion.y; - - if (mainWindow) - mainWindow->HandleMouseMove(mouseX, mouseY); - else - mainMenu.HandleMouseMove(mouseX, mouseY); - } - else if (event.type == SDL_MOUSEBUTTONDOWN) - { - uint32_t mx = event.button.x, my = event.button.y; - - if (mainWindow) - mainWindow->HandleMouseButton(mx, my, true); - else - mainMenu.HandleMouseButton(mx, my, true); - } - else if (event.type == SDL_MOUSEBUTTONUP) - { - uint32_t mx = event.button.x, my = event.button.y; - - if (mainWindow) - mainWindow->HandleMouseButton(mx, my, false); - else - mainMenu.HandleMouseButton(mx, my, false); - } - -//PROBLEM: In order to use the dirty rectangle approach here, we need some way of -// handling it in mainMenu.Draw() and mainWindow->Draw(). !!! FIX !!! -//POSSIBLE SOLUTION: -// When mouse is moving and not on menu or window, can do straight dirty rect. -// When mouse is on menu, need to update screen. Same for buttons on windows... -// What the menu & windows should do is only redraw on a state change. IOW, they -// should call their own/child window's Draw() function instead of doing it top -// level. -//#define NEW_BACKSTORE_METHOD - - // Draw the GUI... -// The way we do things here is kinda stupid (redrawing the screen every frame), but -// it's simple. Perhaps there may be a reason down the road to be more selective with -// our clearing, but for now, this will suffice. -// memset(backbuffer, 0x11, tom_getVideoModeWidth() * 240 * 2); -// memcpy(backbuffer, background, tom_getVideoModeWidth() * 256 * 2); -// memcpy(backbuffer, background, tom_getVideoModeWidth() * 256 * 4); -#ifndef NEW_BACKSTORE_METHOD - memset(sdlemuGetOverlayPixels(), 0, sdlemuGetOverlayWidthInPixels() * 480 * 4); - - mainMenu.Draw(); -//Could do multiple windows here by using a vector + priority info... -//Though the way ZSNES does it seems to be by a bool (i.e., they're always active, just not shown) - if (mainWindow) - mainWindow->Draw(); -#endif - -/*uint32_t pBGS[6 * 8 + 3] = { 6, 8, 4, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 -};*/ -//This isn't working... Why???? -//It's because DrawTransparentBitmap does alpha blending if it detects zero in the alpha channel. -//So why do it that way? Hm. - overlayPixels = (uint32_t *)sdlemuGetOverlayPixels(); - -#ifdef NEW_BACKSTORE_METHOD -// DrawTransparentBitmapDeprecated(overlayPixels, oldMouseX, oldMouseY, pointerBGSave); -// DrawTransparentBitmap(overlayPixels, oldMouseX, oldMouseY, pBGS); - for(uint32_t y=0; y> 16) & 0xFF, g = (pixel >> 8) & 0xFF, r = pixel & 0xFF; - pixel = ((r + g + b) / 3) & 0x00FF; - backbuffer[i] = 0xFF000000 | (pixel << 16) | (pixel << 8); - } -return NULL;//*/ - -//This is crappy... !!! FIX !!! - extern bool finished, showGUI; - -// uint32_t nFrame = 0, nFrameskip = 0; - uint32_t totalFrames = 0; - finished = false; - bool showMessage = true; - uint32_t showMsgFrames = 120; - uint8_t transparency = 0; - // Pass a message to the "joystick" code to debounce the ESC key... - debounceRunKey = true; - - uint32_t cartType = 4; - if (jaguarRomSize == 0x200000) - cartType = 0; - else if (jaguarRomSize == 0x400000) - cartType = 1; - else if (jaguar_mainRom_crc32 == 0x687068D5) - cartType = 2; - else if (jaguar_mainRom_crc32 == 0x55A0669C) - cartType = 3; - - char * cartTypeName[5] = { "2M Cartridge", "4M Cartridge", "CD BIOS", "CD Dev BIOS", "Homebrew" }; - uint32_t elapsedTicks = SDL_GetTicks(), frameCount = 0, framesPerSecond = 0; - - while (true) - { - // Set up new backbuffer with new pixels and data - JaguarExecute(backbuffer, true); -// JaguarExecuteNew(); - totalFrames++; -//WriteLog("Frame #%u...\n", totalFrames); -//extern bool doDSPDis; -//if (totalFrames == 373) -// doDSPDis = true; - -//This sucks... !!! FIX !!! - joystick_exec(); -//This is done here so that the crud below doesn't get on our GUI background... - if (finished) - break; - - // Some QnD GUI stuff here... - if (showGUI) - { - extern uint32_t gpu_pc, dsp_pc; - DrawString(backbuffer, 8, 8, false, "GPU PC: %08X", gpu_pc); - DrawString(backbuffer, 8, 16, false, "DSP PC: %08X", dsp_pc); - DrawString(backbuffer, 8, 32, false, "%u FPS", framesPerSecond); - } - - if (showMessage) - { -// FF0F -> 1111 11 11 000 0 1111 -> 3F 18 0F -// 3FE3 -> 0011 11 11 111 0 0011 -> 0F 3F 03 -/* DrawStringTrans((uint32_t *)backbuffer, 8, 24*8, 0xFF0F, transparency, "Running..."); - DrawStringTrans((uint32_t *)backbuffer, 8, 26*8, 0x3FE3, transparency, "%s, run address: %06X", cartTypeName[cartType], jaguarRunAddress); - DrawStringTrans((uint32_t *)backbuffer, 8, 27*8, 0x3FE3, transparency, "CRC: %08X", jaguar_mainRom_crc32);//*/ -//first has wrong color. !!! FIX !!! - DrawStringTrans(backbuffer, 8, 24*8, 0xFF7F63FF, transparency, "Running..."); - DrawStringTrans(backbuffer, 8, 26*8, 0xFF1FFF3F, transparency, "%s, run address: %06X", cartTypeName[cartType], jaguarRunAddress); - DrawStringTrans(backbuffer, 8, 27*8, 0xFF1FFF3F, transparency, "CRC: %08X", jaguar_mainRom_crc32); - - if (showMsgFrames == 0) - { - transparency++; - - if (transparency == 33) -{ - showMessage = false; -/*extern bool doGPUDis; -doGPUDis = true;//*/ -} - - } - else - showMsgFrames--; - } - - RenderBackbuffer(); - frameCount++; - - if (SDL_GetTicks() - elapsedTicks > 250) - elapsedTicks += 250, framesPerSecond = frameCount * 4, frameCount = 0; - } - - // Reset the pitch, since it may have been changed in-game... - Element::SetScreenAndPitch((uint32_t *)backbuffer, GetSDLScreenWidthInPixels()); - - // Save the background for the GUI... -// memcpy(background, backbuffer, tom_getVideoModeWidth() * 240 * 2); - // In this case, we squash the color to monochrome, then force it to blue + green... - for(uint32_t i=0; i> 16) & 0xFF, g = (pixel >> 8) & 0xFF, r = pixel & 0xFF; - pixel = ((r + g + b) / 3) & 0x00FF; - background[i] = 0xFF000000 | (pixel << 16) | (pixel << 8); - } - - return NULL; -} - -#else - -bool debounceRunKey = true; -Window * RunEmu(void) -{ - extern uint32_t * backbuffer; - uint32_t * overlayPixels = (uint32_t *)sdlemuGetOverlayPixels(); - memset(overlayPixels, 0x00, 640 * 480 * 4); // Clear out overlay... - -//This is crappy... !!! FIX !!! - extern bool finished, showGUI; - - sdlemuDisableOverlay(); - -// uint32_t nFrame = 0, nFrameskip = 0; - uint32_t totalFrames = 0; - finished = false; - bool showMessage = true; - uint32_t showMsgFrames = 120; - uint8_t transparency = 0xFF; - // Pass a message to the "joystick" code to debounce the ESC key... - debounceRunKey = true; - - uint32_t cartType = 4; - if (jaguarRomSize == 0x200000) - cartType = 0; - else if (jaguarRomSize == 0x400000) - cartType = 1; - else if (jaguar_mainRom_crc32 == 0x687068D5) - cartType = 2; - else if (jaguar_mainRom_crc32 == 0x55A0669C) - cartType = 3; - - char * cartTypeName[5] = { "2M Cartridge", "4M Cartridge", "CD BIOS", "CD Dev BIOS", "Homebrew" }; - uint32_t elapsedTicks = SDL_GetTicks(), frameCount = 0, framesPerSecond = 0; - - while (!finished) - { - // Set up new backbuffer with new pixels and data - JaguarExecuteNew(); - totalFrames++; -//WriteLog("Frame #%u...\n", totalFrames); -//extern bool doDSPDis; -//if (totalFrames == 373) -// doDSPDis = true; - -//Problem: Need to do this *only* when the state changes from visible to not... -//Also, need to clear out the GUI when not on (when showMessage is active...) -if (showGUI || showMessage) - sdlemuEnableOverlay(); -else - sdlemuDisableOverlay(); - -//Add in a new function for clearing patches of screen (ClearOverlayRect) - - // Some QnD GUI stuff here... - if (showGUI) - { - FillScreenRectangle(overlayPixels, 8, 1*FONT_HEIGHT, 128, 4*FONT_HEIGHT, 0x00000000); - extern uint32_t gpu_pc, dsp_pc; - DrawString(overlayPixels, 8, 1*FONT_HEIGHT, false, "GPU PC: %08X", gpu_pc); - DrawString(overlayPixels, 8, 2*FONT_HEIGHT, false, "DSP PC: %08X", dsp_pc); - DrawString(overlayPixels, 8, 4*FONT_HEIGHT, false, "%u FPS", framesPerSecond); - } - - if (showMessage) - { - DrawString2(overlayPixels, 8, 24*FONT_HEIGHT, 0x007F63FF, transparency, "Running..."); - DrawString2(overlayPixels, 8, 26*FONT_HEIGHT, 0x001FFF3F, transparency, "%s, run address: %06X", cartTypeName[cartType], jaguarRunAddress); - DrawString2(overlayPixels, 8, 27*FONT_HEIGHT, 0x001FFF3F, transparency, "CRC: %08X", jaguar_mainRom_crc32); - - if (showMsgFrames == 0) - { - transparency--; - - if (transparency == 0) -{ - showMessage = false; -/*extern bool doGPUDis; -doGPUDis = true;//*/ -} - - } - else - showMsgFrames--; - } - - frameCount++; - - if (SDL_GetTicks() - elapsedTicks > 250) - elapsedTicks += 250, framesPerSecond = frameCount * 4, frameCount = 0; - } - - // Save the background for the GUI... - // In this case, we squash the color to monochrome, then force it to blue + green... - for(uint32_t i=0; i> 16) & 0xFF, g = (pixel >> 8) & 0xFF, r = pixel & 0xFF; - pixel = ((r + g + b) / 3) & 0x00FF; - backbuffer[i] = 0xFF000000 | (pixel << 16) | (pixel << 8); - } - - sdlemuEnableOverlay(); - - return NULL; -} - -#endif - - -Window * Quit(void) -{ - WriteLog("GUI: Quitting due to user request.\n"); - exitGUI = true; - - return NULL; -} - -Window * About(void) -{ - char buf[512]; -// sprintf(buf, "Virtual Jaguar CVS %s", __DATE__); - sprintf(buf, "CVS %s", __DATE__); -//fprintf(fp, "VirtualJaguar v1.0.8 (Last full build was on %s %s)\n", __DATE__, __TIME__); -//VirtualJaguar v1.0.8 (Last full build was on Dec 30 2004 20:01:31) -//Hardwired, bleh... !!! FIX !!! -uint32_t width = 55 * FONT_WIDTH, height = 18 * FONT_HEIGHT; -uint32_t xpos = (640 - width) / 2, ypos = (480 - height) / 2; -// Window * window = new Window(8, 16, 50 * FONT_WIDTH, 21 * FONT_HEIGHT); - Window * window = new Window(xpos, ypos, width, height); -// window->AddElement(new Text(8, 8, "Virtual Jaguar 1.0.8")); -// window->AddElement(new Text(8, 8, "Virtual Jaguar CVS 20050110", 0xFF3030FF, 0xFF000000)); -// window->AddElement(new Text(208, 8+0*FONT_HEIGHT, buf, 0xFF3030FF, 0xFF000000)); - window->AddElement(new Text(248, 8+4*FONT_HEIGHT+5, buf, 0xFF3030FF, 0xFF000000)); - window->AddElement(new Text(8, 8+0*FONT_HEIGHT, "Coders:")); - window->AddElement(new Text(16, 8+1*FONT_HEIGHT, "James L. Hammons (shamus)")); - window->AddElement(new Text(16, 8+2*FONT_HEIGHT, "Niels Wagenaar (nwagenaar)")); - window->AddElement(new Text(16, 8+3*FONT_HEIGHT, "Carwin Jones (Caz)")); - window->AddElement(new Text(16, 8+4*FONT_HEIGHT, "Adam Green")); - window->AddElement(new Text(8, 8+6*FONT_HEIGHT, "Testers:")); - window->AddElement(new Text(16, 8+7*FONT_HEIGHT, "Guruma")); - window->AddElement(new Text(8, 8+9*FONT_HEIGHT, "Thanks go out to:")); - window->AddElement(new Text(16, 8+10*FONT_HEIGHT, "Aaron Giles for the original CoJag")); - window->AddElement(new Text(16, 8+11*FONT_HEIGHT, "David Raingeard for the original VJ")); - window->AddElement(new Text(16, 8+12*FONT_HEIGHT, "Karl Stenerud for his Musashi 68K emu")); - window->AddElement(new Text(16, 8+13*FONT_HEIGHT, "Sam Lantinga for his amazing SDL libs")); - window->AddElement(new Text(16, 8+14*FONT_HEIGHT, "Ryan C. Gordon for VJ's web presence")); - window->AddElement(new Text(16, 8+15*FONT_HEIGHT, "Curt Vendel for various Jaguar goodies")); - window->AddElement(new Text(16, 8+16*FONT_HEIGHT, "The guys over at Atari Age ;-)")); -// window->AddElement(new Image(8, 8, &vj_title_small)); - window->AddElement(new Image(width - (vj_title_small.width + 8), 8, &vj_title_small)); - - return window; -} - -Window * MiscOptions(void) -{ - Window * window = new Window(8, 16, 304, 192); - window->AddElement(new PushButton(8, 8, &vjs.useJaguarBIOS, "BIOS")); - window->AddElement(new SlideSwitch(8, 32, &vjs.hardwareTypeNTSC, "PAL", "NTSC")); - window->AddElement(new PushButton(8, 64, &vjs.DSPEnabled, "DSP")); - window->AddElement(new SlideSwitch(24, 88, &vjs.usePipelinedDSP, "Original", "Pipelined")); - window->AddElement(new SlideSwitch(8, 120, (bool *)&vjs.glFilter, "Sharp", "Blurry")); - window->AddElement(new SlideSwitch(8, 152, (bool *)&vjs.renderType, "Normal render", "TV style")); - - window->AddElement(new TextEdit(88, 8, vjs.ROMPath, 20, 0xFF8484FF, 0xFF000000)); - -/*TextEdit(uint32_t x, uint32_t y, string s, uint32_t mss = 10, uint32_t fg = 0xFF8484FF, - uint32_t bg = 0xFF84FF4D): Element(x, y, 0, 0), fgColor(fg), bgColor(bg), text(s), - caretPos(0), maxScreenSize(mss) {}*/ -// Missing: -// * BIOS path -// * ROM path -// * EEPROM path -// * joystick -// * joystick port -// * OpenGL? -// * GL Filter type -// * Window/fullscreen -// * Key definitions - - return window; -} - - -// -// Generic ROM loading -// -uint32_t JaguarLoadROM(uint8_t * rom, char * path) -{ -// We really should have some kind of sanity checking for the ROM size here to prevent -// a buffer overflow... !!! FIX !!! - uint32_t romSize = 0; - -WriteLog("JaguarLoadROM: Attempting to load file '%s'...", path); - char * ext = strrchr(path, '.'); -if (ext == NULL) - WriteLog("FAILED!\n"); -else - WriteLog("Succeeded in finding extension (%s)!\n", ext); - - if (ext != NULL) - { - WriteLog("VJ: Loading \"%s\"...", path); - - if (strcasecmp(ext, ".zip") == 0) - { - // Handle ZIP file loading here... - WriteLog("(ZIPped)..."); - - if (load_zipped_file(0, 0, path, NULL, &rom, &romSize) == -1) - { - WriteLog("Failed!\n"); - return 0; - } - } - else - { -/* FILE * fp = fopen(path, "rb"); - - if (fp == NULL) - { - WriteLog("Failed!\n"); - return 0; - } - - fseek(fp, 0, SEEK_END); - romSize = ftell(fp); - fseek(fp, 0, SEEK_SET); - fread(rom, 1, romSize, fp); - fclose(fp);*/ - - // Handle gzipped files transparently [Adam Green]... - - gzFile fp = gzopen(path, "rb"); - - if (fp == NULL) - { - WriteLog("Failed!\n"); - return 0; - } - - romSize = gzfilelength(fp); - gzseek(fp, 0, SEEK_SET); - gzread(fp, rom, romSize); - gzclose(fp); - } - - WriteLog("OK (%i bytes)\n", romSize); - } - - return romSize; -} - -// -// Jaguar file loading -// -bool JaguarLoadFile(char * path) -{ -// jaguarRomSize = JaguarLoadROM(mem, path); - jaguarRomSize = JaguarLoadROM(jaguar_mainRom, path); - -/*//This is not *nix friendly for some reason... -// if (!UserSelectFile(path, newPath)) - if (!UserSelectFile((strlen(path) == 0 ? (char *)"." : path), newPath)) - { - WriteLog("VJ: Could not find valid ROM in directory \"%s\"...\nAborting!\n", path); - log_done(); - exit(0); - }*/ - - if (jaguarRomSize == 0) - { -// WriteLog("VJ: Could not load ROM from file \"%s\"...\nAborting!\n", newPath); - WriteLog("GUI: Could not load ROM from file \"%s\"...\nAborting load!\n", path); -// Need to do something else here, like throw up an error dialog instead of aborting. !!! FIX !!! -// log_done(); -// exit(0); - return false; // This is a start... - } - - jaguar_mainRom_crc32 = crc32_calcCheckSum(jaguar_mainRom, jaguarRomSize); - WriteLog("CRC: %08X\n", (unsigned int)jaguar_mainRom_crc32); - eeprom_init(); - - jaguarRunAddress = 0x802000; - - char * ext = strrchr(path, '.'); // Get the file's extension for non-cartridge checking - -//NOTE: Should fix JaguarLoadROM() to replace .zip with what's *in* the zip (.abs, .j64, etc.) - if (strcasecmp(ext, ".rom") == 0) - { - // File extension ".ROM": Alpine image that loads/runs at $802000 - WriteLog("GUI: Setting up homebrew (ROM)... Run address: 00802000, length: %08X\n", jaguarRomSize); - - for(int i=jaguarRomSize-1; i>=0; i--) - jaguar_mainRom[0x2000 + i] = jaguar_mainRom[i]; - - memset(jaguar_mainRom, 0xFF, 0x2000); -/* memcpy(jaguar_mainRam, jaguar_mainRom, jaguarRomSize); - memset(jaguar_mainRom, 0xFF, 0x600000); - memcpy(jaguar_mainRom + 0x2000, jaguar_mainRam, jaguarRomSize); - memset(jaguar_mainRam, 0x00, 0x400000);*/ - -/* -Stubulator ROM vectors... -handler 001 at $00E00008 -handler 002 at $00E008DE -handler 003 at $00E008E2 -handler 004 at $00E008E6 -handler 005 at $00E008EA -handler 006 at $00E008EE -handler 007 at $00E008F2 -handler 008 at $00E0054A -handler 009 at $00E008FA -handler 010 at $00000000 -handler 011 at $00000000 -handler 012 at $00E008FE -handler 013 at $00E00902 -handler 014 at $00E00906 -handler 015 at $00E0090A -handler 016 at $00E0090E -handler 017 at $00E00912 -handler 018 at $00E00916 -handler 019 at $00E0091A -handler 020 at $00E0091E -handler 021 at $00E00922 -handler 022 at $00E00926 -handler 023 at $00E0092A -handler 024 at $00E0092E -handler 025 at $00E0107A -handler 026 at $00E0107A -handler 027 at $00E0107A -handler 028 at $00E008DA -handler 029 at $00E0107A -handler 030 at $00E0107A -handler 031 at $00E0107A -handler 032 at $00000000 - -Let's try setting up the illegal instruction vector for a stubulated jaguar... -*/ -/* SET32(jaguar_mainRam, 0x08, 0x00E008DE); - SET32(jaguar_mainRam, 0x0C, 0x00E008E2); - SET32(jaguar_mainRam, 0x10, 0x00E008E6); // <-- Should be here (it is)... - SET32(jaguar_mainRam, 0x14, 0x00E008EA);//*/ - - // Try setting the vector to say, $1000 and putting an instruction there that loops forever: - // This kludge works! Yeah! - SET32(jaguar_mainRam, 0x10, 0x00001000); - SET16(jaguar_mainRam, 0x1000, 0x60FE); // Here: bra Here - } - else if (strcasecmp(ext, ".abs") == 0) - { - // File extension ".ABS": Atari linker output file with header (w/o is useless to us here) - -/* -ABS Format sleuthing (LBUGDEMO.ABS): - -000000 60 1B 00 00 05 0C 00 04 62 C0 00 00 04 28 00 00 -000010 12 A6 00 00 00 00 00 80 20 00 FF FF 00 80 25 0C -000020 00 00 40 00 - -DRI-format file detected... -Text segment size = 0x0000050c bytes -Data segment size = 0x000462c0 bytes -BSS Segment size = 0x00000428 bytes -Symbol Table size = 0x000012a6 bytes -Absolute Address for text segment = 0x00802000 -Absolute Address for data segment = 0x0080250c -Absolute Address for BSS segment = 0x00004000 - -(CRZDEMO.ABS): -000000 01 50 00 03 00 00 00 00 00 03 83 10 00 00 05 3b -000010 00 1c 00 03 00 00 01 07 00 00 1d d0 00 03 64 98 -000020 00 06 8b 80 00 80 20 00 00 80 20 00 00 80 3d d0 - -000030 2e 74 78 74 00 00 00 00 00 80 20 00 00 80 20 00 .txt (+36 bytes) -000040 00 00 1d d0 00 00 00 a8 00 00 00 00 00 00 00 00 -000050 00 00 00 00 00 00 00 20 -000058 2e 64 74 61 00 00 00 00 00 80 3d d0 00 80 3d d0 .dta (+36 bytes) -000068 00 03 64 98 00 00 1e 78 00 00 00 00 00 00 00 00 -000078 00 00 00 00 00 00 00 40 -000080 2e 62 73 73 00 00 00 00 00 00 50 00 00 00 50 00 .bss (+36 bytes) -000090 00 06 8b 80 00 03 83 10 00 00 00 00 00 00 00 00 -0000a0 00 00 00 00 00 00 00 80 - -Header size is $A8 bytes... - -BSD/COFF format file detected... -3 sections specified -Symbol Table offset = 230160 ($00038310) -Symbol Table contains 1339 symbol entries ($0000053B) -The additional header size is 28 bytes ($001C) -Magic Number for RUN_HDR = 0x00000107 -Text Segment Size = 7632 ($00001DD0) -Data Segment Size = 222360 ($00036498) -BSS Segment Size = 428928 ($00068B80) -Starting Address for executable = 0x00802000 -Start of Text Segment = 0x00802000 -Start of Data Segment = 0x00803dd0 -*/ - if (jaguar_mainRom[0] == 0x60 && jaguar_mainRom[1] == 0x1B) - { - uint32_t loadAddress = GET32(jaguar_mainRom, 0x16), //runAddress = GET32(jaguar_mainRom, 0x2A), - codeSize = GET32(jaguar_mainRom, 0x02) + GET32(jaguar_mainRom, 0x06); - WriteLog("GUI: Setting up homebrew (ABS-1)... Run address: %08X, length: %08X\n", loadAddress, codeSize); - - if (loadAddress < 0x800000) - memcpy(jaguar_mainRam + loadAddress, jaguar_mainRom + 0x24, codeSize); - else - { - for(int i=codeSize-1; i>=0; i--) - jaguar_mainRom[(loadAddress - 0x800000) + i] = jaguar_mainRom[i + 0x24]; -/* memcpy(jaguar_mainRam, jaguar_mainRom + 0x24, codeSize); - memset(jaguar_mainRom, 0xFF, 0x600000); - memcpy(jaguar_mainRom + (loadAddress - 0x800000), jaguar_mainRam, codeSize); - memset(jaguar_mainRam, 0x00, 0x400000);*/ - } - - jaguarRunAddress = loadAddress; - } - else if (jaguar_mainRom[0] == 0x01 && jaguar_mainRom[1] == 0x50) - { - uint32_t loadAddress = GET32(jaguar_mainRom, 0x28), runAddress = GET32(jaguar_mainRom, 0x24), - codeSize = GET32(jaguar_mainRom, 0x18) + GET32(jaguar_mainRom, 0x1C); - WriteLog("GUI: Setting up homebrew (ABS-2)... Run address: %08X, length: %08X\n", runAddress, codeSize); - - if (loadAddress < 0x800000) - memcpy(jaguar_mainRam + loadAddress, jaguar_mainRom + 0xA8, codeSize); - else - { - for(int i=codeSize-1; i>=0; i--) - jaguar_mainRom[(loadAddress - 0x800000) + i] = jaguar_mainRom[i + 0xA8]; -/* memcpy(jaguar_mainRam, jaguar_mainRom + 0xA8, codeSize); - memset(jaguar_mainRom, 0xFF, 0x600000); - memcpy(jaguar_mainRom + (loadAddress - 0x800000), jaguar_mainRam, codeSize); - memset(jaguar_mainRam, 0x00, 0x400000);*/ - } - - jaguarRunAddress = runAddress; - } - else - { - WriteLog("GUI: Couldn't find correct ABS format: %02X %02X\n", jaguar_mainRom[0], jaguar_mainRom[1]); - return false; - } - } - else if (strcasecmp(ext, ".jag") == 0) - { - // File extension ".JAG": Atari server file with header -//NOTE: The bytes 'JAGR' should also be at position $1C... -// Also, there's *always* a $601A header at position $00... - if (jaguar_mainRom[0] == 0x60 && jaguar_mainRom[1] == 0x1A) - { - uint32_t loadAddress = GET32(jaguar_mainRom, 0x22), runAddress = GET32(jaguar_mainRom, 0x2A); -//This is not always right! Especially when converted via bin2jag1!!! -//We should have access to the length of the furshlumiger file that was loaded anyway! -//Now, we do! ;-) -// uint32_t progLength = GET32(jaguar_mainRom, 0x02); -//jaguarRomSize -//jaguarRunAddress -// WriteLog("Jaguar: Setting up PD ROM... Run address: %08X, length: %08X\n", runAddress, progLength); -// memcpy(jaguar_mainRam + loadAddress, jaguar_mainRom + 0x2E, progLength); - WriteLog("GUI: Setting up homebrew (JAG)... Run address: %08X, length: %08X\n", runAddress, jaguarRomSize - 0x2E); - memcpy(jaguar_mainRam + loadAddress, jaguar_mainRom + 0x2E, jaguarRomSize - 0x2E); -// SET32(jaguar_mainRam, 4, runAddress); - jaguarRunAddress = runAddress; - } - else - return false; - } - // .J64 (Jaguar cartridge ROM image) is implied by the FileList object... - - return true; -} - -// -// Get the length of a (possibly) gzipped file -// -int gzfilelength(gzFile gd) -{ - int size = 0, length = 0; - unsigned char buffer[0x10000]; - - gzrewind(gd); - - do - { - // Read in chunks until EOF - size = gzread(gd, buffer, 0x10000); - - if (size <= 0) - break; - - length += size; - } - while (!gzeof(gd)); - - gzrewind(gd); - return length; -} -#endif diff --git a/src/gui/guimisc.h b/src/gui/guimisc.h deleted file mode 100644 index 30f3023..0000000 --- a/src/gui/guimisc.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// GUIMISC.H -// -// Graphical User Interface support functions -// - -#ifndef __GUIMISC_H__ -#define __GUIMISC_H__ - -#include -#include -#include - -// Useful structs - -struct Font -{ - Font(uint8_t * d = NULL, uint32_t w = 0, uint32_t h = 0): data(d), width(w), height(h) {} - - uint8_t * data; - uint32_t width, height; -}; - -// Okay, this is ugly but works and I can't think of any better way to handle this. So what -// we do when we pass the GIMP bitmaps into a function is pass them as a (void *) and then -// cast them as type (Bitmap *) in order to use them. Yes, it's ugly. Come up with something -// better! - -/*struct Bitmap { - unsigned int width; - unsigned int height; - unsigned int bytesPerPixel; // 3:RGB, 4:RGBA - unsigned char pixelData[]; -};*/ - -// A better way is just to use the following format: -// bytes 0-1: width (HI/LO) -// bytes 2-3: height (HI/LO) -// bytes 4-n: pixel data in RGBA format - -// Global functions - -//void SetFont(uint8_t *, uint32_t, uint32_t); -void SetNewFont(Font); -void RestoreOldFont(void); -uint32_t GetFontWidth(void); -uint32_t GetFontHeight(void); -void DrawStringTrans(SDL_Surface * screen, uint32_t x, uint32_t y, uint32_t color, const char * text, ...); -void DrawStringOpaque(SDL_Surface * screen, uint32_t x, uint32_t y, uint32_t fg, uint32_t bg, const char * text, ...); - -//Not sure these belong here, but there you go... -bool RectanglesIntersect(SDL_Rect r1, SDL_Rect r2); -bool RectangleFirstInsideSecond(SDL_Rect r1, SDL_Rect r2); - -// GUI bitmaps (exported) - -extern uint8_t closeBox[]; -extern uint8_t closeBoxDown[]; -extern uint8_t closeBoxHover[]; -extern uint8_t floppyDiskImg[]; - -#endif // __GUIMISC_H__ diff --git a/src/gui/menu.cpp b/src/gui/menu.cpp deleted file mode 100644 index 7401837..0000000 --- a/src/gui/menu.cpp +++ /dev/null @@ -1,322 +0,0 @@ -// -// MENU.CPP -// -// Graphical User Interface menu support -// by James Hammons -// -// JLH = James Hammons -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JLH 02/09/2006 Created this file -// JLH 02/13/2006 Added rendering support -// - -#include "menu.h" -#include "guimisc.h" - -//#define DEBUG_MENU - -#ifdef DEBUG_MENU -#include "log.h" -#endif - -#if SDL_BYTEORDER == SDL_BIG_ENDIAN -#define MASK_R 0xFF000000 -#define MASK_G 0x00FF0000 -#define MASK_B 0x0000FF00 -#define MASK_A 0x000000FF -#else -#define MASK_R 0x000000FF -#define MASK_G 0x0000FF00 -#define MASK_B 0x00FF0000 -#define MASK_A 0xFF000000 -#endif - -// -// MenuItems class implementation -// - -MenuItems::MenuItems(): charLength(0), popupBackstore(NULL) -{ -} - -bool MenuItems::Inside(uint32_t x, uint32_t y) -{ - return (x >= (uint32_t)extents.x && x < (uint32_t)(extents.x + extents.w) - && y >= (uint32_t)extents.y && y < (uint32_t)(extents.y + extents.h) ? true : false); -} - -// -// Menu class implementation -// - -Menu::Menu(uint32_t x/*= 0*/, uint32_t y/*= 0*/, uint32_t w/*= 0*/, uint32_t h/*= 0*/, - uint8_t fgcR/*= 0x00*/, uint8_t fgcG/*= 0x00*/, uint8_t fgcB/*= 0x7F*/, uint8_t fgcA/*= 0xFF*/, - uint8_t bgcR/*= 0x3F*/, uint8_t bgcG/*= 0x3F*/, uint8_t bgcB/*= 0xFF*/, uint8_t bgcA/*= 0xFF*/, - uint8_t fgchR/*= 0x3F*/, uint8_t fgchG/*= 0x3F*/, uint8_t fgchB/*= 0xFF*/, uint8_t fgchA/*= 0xFF*/, - uint8_t bgchR/*= 0x87*/, uint8_t bgchG/*= 0x87*/, uint8_t bgchB/*= 0xFF*/, uint8_t bgchA/*= 0xFF*/): - Element(x, y, w, GetFontHeight(), fgcR, fgcG, fgcB, fgcA, bgcR, bgcG, bgcB, bgcA), - activated(false), clicked(false), - inside(0), insidePopup(0), menuChosen(-1), menuItemChosen(-1), - activatedSave(false), clickedSave(false), - insideSave(0), insidePopupSave(0), menuChosenSave(-1), menuItemChosenSave(-1) -{ -#if 0 - // This *should* allow us to store our colors in an endian safe way... :-/ - // Nope. Only on SW surfaces. With HW, all bets are off. :-( - uint8_t * c = (uint8_t *)&fgColorHL; - c[0] = fgchR, c[1] = fgchG, c[2] = fgchB, c[3] = fgchA; - c = (uint8_t *)&bgColorHL; - c[0] = bgchR, c[1] = bgchG, c[2] = bgchB, c[3] = bgchA; -#else - fgColorHL = SDL_MapRGBA(screen->format, fgchR, fgchG, fgchB, fgchA); - bgColorHL = SDL_MapRGBA(screen->format, bgchR, bgchG, bgchB, bgchA); -#endif -} - -Menu::~Menu() -{ - for(uint32_t i=0; i Inside Menu::HandleMouseMove()...\n"); -#endif - SaveStateVariables(); - - inside = insidePopup = 0; - - if (Inside(x, y)) - { - // Find out *where* we are inside the menu bar - uint32_t xpos = extents.x; - - for(uint32_t i=0; i= xpos && x < xpos + width) - { - inside = i + 1; - menuChosen = i; - break; - } - - xpos += width; - } - } - - if (!Inside(x, y) && !clicked) - { - menuChosen = -1; - } - - if (itemList[menuChosen].Inside(x, y) && clicked) - { - insidePopup = ((y - itemList[menuChosen].extents.y) / GetFontHeight()) + 1; - menuItemChosen = insidePopup - 1; - } - - CheckStateAndRedrawIfNeeded(); -} - -void Menu::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ -#ifdef DEBUG_MENU -WriteLog("--> Inside Menu::HandleMouseButton()...\n"); -#endif - SaveStateVariables(); - - if (!clicked) - { - if (mouseDown) - { - if (inside) - clicked = true; - else - menuChosen = -1; // clicked is already false...! - } - } - else // clicked == true - { - if (insidePopup && !mouseDown) // I.e., mouse-button-up - { - activated = true; - - if (itemList[menuChosen].item[menuItemChosen].action != NULL) - { - SDL_Event event; - event.type = SDL_USEREVENT; - event.user.code = MENU_ITEM_CHOSEN; - event.user.data1 = (void *)itemList[menuChosen].item[menuItemChosen].action; - SDL_PushEvent(&event); - } - - clicked = false, menuChosen = menuItemChosen = -1; - } - - if (!inside && !insidePopup && mouseDown) - clicked = false, menuChosen = menuItemChosen = -1; - } - - CheckStateAndRedrawIfNeeded(); -} - -void Menu::Draw(void) -{ -#ifdef DEBUG_MENU -WriteLog("--> Inside Menu::Draw()...\n"); -#endif - char separator[] = "--------------------------------------------------------"; - - uint32_t xpos = extents.x; - - for(uint32_t i=0; i Attempting to prime pubs...\n pubs x/y/w/h = %u/%u/%u/%u\n surface = %08X\n", - itemList[menuChosen].extents.x, - itemList[menuChosen].extents.y, - itemList[menuChosen].extents.w, - itemList[menuChosen].extents.h, - itemList[menuChosen].popupBackstore); -#endif - SDL_BlitSurface(screen, &itemList[menuChosen].extents, itemList[menuChosen].popupBackstore, NULL); -#ifdef DEBUG_MENU - } -#endif - - // Draw sub menu (but only if active) - if (clicked) - { - uint32_t ypos = extents.y + GetFontHeight() + 1; - - for(uint32_t i=0; i 0) - DrawStringOpaque(screen, itemList[menuChosen].extents.x, ypos, - color1, color2, " %-*.*s ", itemList[menuChosen].charLength, - itemList[menuChosen].charLength, itemList[menuChosen].item[i].name.c_str()); - else - DrawStringOpaque(screen, itemList[menuChosen].extents.x, ypos, - fgColor, bgColor, "%.*s", itemList[menuChosen].charLength + 2, separator); - - ypos += GetFontHeight(); - } - } - - // Do cleanup if we're done with the popup menu - if (clickedSave && !clicked) // If we transitioned from popup to no popup - { - SDL_Rect r; - - r.x = itemList[menuChosenSave].extents.x; - r.y = itemList[menuChosenSave].extents.y; - SDL_BlitSurface(itemList[menuChosenSave].popupBackstore, NULL, screen, &r); - } - - needToRefreshScreen = true; -} - -void Menu::Notify(Element *) -{ -} - -void Menu::Add(MenuItems mi) -{ - for(uint32_t i=0; i mi.charLength) - mi.charLength = mi.item[i].name.length(); - - // Set extents here as well... - mi.extents.x = extents.x + extents.w; - mi.extents.y = extents.y + GetFontHeight() + 1; - mi.extents.w = (mi.charLength + 2) * GetFontWidth(); - mi.extents.h = mi.item.size() * GetFontHeight(); - - mi.popupBackstore = SDL_CreateRGBSurface(SDL_SWSURFACE, mi.extents.w, mi.extents.h, 32, - MASK_R, MASK_G, MASK_B, 0x00); - - itemList.push_back(mi); - extents.w += (mi.title.length() + 2) * GetFontWidth(); - -//This is incorrect--this should be sampled just *before* we draw the popup! !!! FIX !!! [DONE] -// SDL_BlitSurface(screen, &mi.extents, mi.popupBackstore, NULL); -#ifdef DEBUG_MENU -WriteLog("--> Added menu item...\n pubs x/y/w/h = %u/%u/%u/%u\n surface = %08X\n", - mi.extents.x, - mi.extents.y, - mi.popupBackstore->w, - mi.popupBackstore->h, - mi.popupBackstore); -#endif -} - -void Menu::SaveStateVariables(void) -{ - activatedSave = activated; - clickedSave = clicked; - insideSave = inside; - insidePopupSave = insidePopup; - menuChosenSave = menuChosen; - menuItemChosenSave = menuItemChosen; -} - -void Menu::CheckStateAndRedrawIfNeeded(void) -{ - // Check to see if any of our state variables changed since we last saved them... - if (activated != activatedSave || clicked != clickedSave - || inside != insideSave || insidePopup != insidePopupSave - || menuChosen != menuChosenSave || menuItemChosen != menuItemChosenSave) - Draw(); -} diff --git a/src/gui/menu.h b/src/gui/menu.h deleted file mode 100644 index 47ed93b..0000000 --- a/src/gui/menu.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// MENU.H -// -// Graphical User Interface menu support -// - -#ifndef __MENU_H__ -#define __MENU_H__ - -#include -#include -#include "window.h" - -struct NameAction -{ - std::string name; - Element * (* action)(void); - SDL_Scancode hotKey; - - NameAction(std::string n, Element * (* a)(void) = NULL, SDL_Scancode k = SDL_SCANCODE_UNKNOWN): name(n), - action(a), hotKey(k) {} -}; - -class MenuItems -{ - public: - MenuItems(); - bool Inside(uint32_t x, uint32_t y); - - std::string title; - std::vector item; - uint32_t charLength; - SDL_Rect extents; - SDL_Surface * popupBackstore; -}; - -class Menu: public Element -{ - public: - Menu(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0, - uint8_t fgcR = 0x00, uint8_t fgcG = 0x00, uint8_t fgcB = 0x7F, uint8_t fgcA = 0xFF, - uint8_t bgcR = 0x3F, uint8_t bgcG = 0x3F, uint8_t bgcB = 0xFF, uint8_t bgcA = 0xFF, - uint8_t fgchR = 0x3F, uint8_t fgchG = 0x3F, uint8_t fgchB = 0xFF, uint8_t fgchA = 0xFF, - uint8_t bgchR = 0x87, uint8_t bgchG = 0x87, uint8_t bgchB = 0xFF, uint8_t bgchA = 0xFF); - ~Menu(); - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(void); - virtual void Notify(Element *); - void Add(MenuItems mi); - void SaveStateVariables(void); - void CheckStateAndRedrawIfNeeded(void); - - protected: - bool activated, clicked; - uint32_t inside, insidePopup; - int menuChosen, menuItemChosen; - uint32_t fgColorHL, bgColorHL; - - private: - std::vector itemList; - bool activatedSave, clickedSave; - uint32_t insideSave, insidePopupSave; - int menuChosenSave, menuItemChosenSave; -}; - -#endif // __MENU_H__ diff --git a/src/gui/text.cpp b/src/gui/text.cpp deleted file mode 100644 index 34e0140..0000000 --- a/src/gui/text.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// -// Static text class -// -// by James Hammons -// - -#include "text.h" - -#include "guimisc.h" - -Text::Text(uint32_t x/*= 0*/, uint32_t y/*= 0*/, uint32_t w/*= 0*/, uint32_t h/*= 0*/, Element * parent/*= NULL*/): - Element(x, y, w, h, parent) -{ - fgColor = 0xFF8484FF, bgColor = 0xFF84FF4D; -} - -Text::Text(uint32_t x, uint32_t y, std::string s, uint32_t fg/*= 0xFF8484FF*/, uint32_t bg/*= 0xFF84FF4D*/, Element * parent/*= NULL*/): - Element(x, y, 0, 0, parent), text(s) -{ - fgColor = fg, bgColor = bg; -} - -void Text::Draw(void) -{ - if (text.length() > 0) - { -// DrawString(screenBuffer, extents.x + offsetX, extents.y + offsetY, false, "%s", text.c_str()); - SDL_Rect r = GetScreenCoords(); - DrawStringOpaque(screen, r.x, r.y, fgColor, bgColor, "%s", text.c_str()); - } -} - -void Text::SetText(std::string s) -{ - text = s; -} diff --git a/src/gui/text.h b/src/gui/text.h deleted file mode 100644 index afbcbf0..0000000 --- a/src/gui/text.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// Static text class -// -// by James Hammons -// - -#ifndef __TEXT_H__ -#define __TEXT_H__ - -#include -#include "element.h" - -class Text: public Element -{ - public: - Text(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0, Element * parent = NULL); - Text(uint32_t x, uint32_t y, std::string s, uint32_t fg = 0xFF8484FF, uint32_t bg = 0xFF84FF4D, Element * parent = NULL); - virtual void HandleKey(SDL_Scancode key) {} - virtual void HandleMouseMove(uint32_t x, uint32_t y) {} - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) {} - virtual void Draw(void); - virtual void Notify(Element *) {} - void SetText(std::string s); - - protected: -// uint32_t fgColor, bgColor; - std::string text; -}; - -#endif // __TEXT_H__ diff --git a/src/gui/textedit.cpp b/src/gui/textedit.cpp deleted file mode 100644 index b671103..0000000 --- a/src/gui/textedit.cpp +++ /dev/null @@ -1,253 +0,0 @@ -// -// TEXTEDIT.CPP -// -// Graphical User Interface button class -// by James Hammons -// -// JLH = James Hammons -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JLH 02/17/2006 Created this file -// JLH 03/01/2006 Added basic editing functionality -// - -#include "textedit.h" -#include "guimisc.h" // Various support functions - -#if SDL_BYTEORDER == SDL_BIG_ENDIAN -#define MASK_R 0xFF000000 -#define MASK_G 0x00FF0000 -#define MASK_B 0x0000FF00 -#define MASK_A 0x000000FF -#else -#define MASK_R 0x000000FF -#define MASK_G 0x0000FF00 -#define MASK_B 0x00FF0000 -#define MASK_A 0xFF000000 -#endif - -// -// Text edit class implementation -// - -TextEdit::TextEdit(uint32_t x/*= 0*/, uint32_t y/*= 0*/, uint32_t w/*= 0*/, uint32_t h/*= 0*/, - std::string s/*= ""*/, Element * parent/*= NULL*/): - Element(x, y, w, h, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x40, 0x40, 0xFF, parent), - activated(false), clicked(false), inside(false), - img(NULL), text(s), caretPos(0), scrollPos(0), - activatedSave(false), clickedSave(false), insideSave(false), - caretPosSave(0), scrollPosSave(0) -{ - if (extents.h == 0) - extents.h = GetFontHeight(); - - // Setup hardwired colors... - - uint8_t * c = (uint8_t *)&hiliteColor; - c[0] = 0xFF, c[1] = 0x80, c[2] = 0x00, c[3] = 0xFF; - c = (uint8_t *)&cursorColor; - c[0] = 0x40, c[1] = 0xFF, c[2] = 0x60, c[3] = 0xFF; - - // Create the text edit surface here... - - img = SDL_CreateRGBSurface(SDL_SWSURFACE, extents.w, extents.h, 32, - MASK_R, MASK_G, MASK_B, MASK_A); - - Draw(); // Can we do this in the constructor??? Mebbe. -} - -TextEdit::~TextEdit() -{ - if (img) - SDL_FreeSurface(img); -} - -//Set different filters depending on type passed in on construction, e.g., filename, amount, etc...? -void TextEdit::HandleKey(SDL_Scancode key) -{ - if (!activated) - return; - -// Punting this for now on SDL 2... -#if 0 - SaveStateVariables(); - SDLMod keyMod = SDL_GetModState(); - - if ((key >= SDLK_a && key <= SDLK_z) || (key >= SDLK_0 && key <= SDLK_9) - || key == SDLK_PERIOD || key == SDLK_SLASH || key == SDLK_SPACE) - { - uint8_t chr = (uint8_t)key; - - // Handle shift key as well... - if (keyMod & KMOD_SHIFT) - { - if (key >= SDLK_a && key <= SDLK_z) - chr &= 0xDF; // Set to upper case - } - - text.insert(scrollPos + caretPos, 1, chr); - - // If we hit the edge, then scroll; else advance the caret - if ((GetFontWidth() * caretPos) > (extents.w - GetFontWidth())) - scrollPos++; - else - caretPos++; - } - else if (key == SDLK_BACKSPACE) - { - // If there's something to delete, go ahead and delete it - if ((scrollPos + caretPos) > 0) - { - text.erase(scrollPos + caretPos - 1, 1); - - // Scroll the cursor to the left if possible, otherwise move the scroll position - if (caretPos > 0) - caretPos--; - else - scrollPos--; - } - } - else if (key == SDLK_DELETE) - { - if ((scrollPos + caretPos) < text.length()) - text.erase(scrollPos + caretPos, 1); - } - else if (key == SDLK_LEFT) - { - if (caretPos > 0) - caretPos--; - else if (scrollPos > 0) - scrollPos--; - } - else if (key == SDLK_RIGHT) - { - if ((scrollPos + caretPos) < text.length()) - { - if ((GetFontWidth() * caretPos) > (extents.w - GetFontWidth())) - scrollPos++; - else - caretPos++; - } - } - else if (key == SDLK_RETURN) - { - clicked = activated = false; - } - - CheckStateAndRedrawIfNeeded(); -#endif -} - -void TextEdit::HandleMouseMove(uint32_t x, uint32_t y) -{ - SaveStateVariables(); - inside = Inside(x, y); - CheckStateAndRedrawIfNeeded(); -} - -void TextEdit::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ - SaveStateVariables(); - -//Not sure that this is right way to handle this... -//Should set the cursor position based on where in the text box it was clicked... - if (inside) - { - if (mouseDown) - clicked = true; - - if (clicked && !mouseDown) - { - clicked = false, activated = true; - - // Send a message to our parent widget (if any) that we're activated - if (parent) - parent->Notify(this); - } - } - else - clicked = activated = false; - - CheckStateAndRedrawIfNeeded(); -} - -void TextEdit::Draw(void) -{ - if (img == NULL) - return; // Bail out if no surface was created... - - SDL_Rect rect = GetScreenCoords(); - - // Now, draw the appropriate text state! - - if (!activated) - { - if (inside) - { - SDL_Rect rect2; - rect2.x = 1; - rect2.y = 1; - rect2.w = extents.w - 2; - rect2.h = extents.h - 2; - - SDL_FillRect(img, NULL, hiliteColor); - SDL_FillRect(img, &rect2, bgColor); - } - else - SDL_FillRect(img, NULL, bgColor); - } - else - SDL_FillRect(img, NULL, bgColor);//Make a different color here, so we're clear we're editing... - -//Should also draw different text color depending on whether or not we're activated... - if (activated) - DrawStringTrans(img, 0, 0, fgColor, text.c_str() + scrollPos); - else - DrawStringTrans(img, 0, 0, fgColor, text.c_str()); - - // Draw the cursor, if any - - if (activated) - { - SDL_Rect rectCursor; - rectCursor.x = caretPos * GetFontWidth(); - rectCursor.y = 0; - rectCursor.w = 2; - rectCursor.h = GetFontHeight(); - - SDL_FillRect(img, &rectCursor, cursorColor); - } - - SDL_BlitSurface(img, NULL, screen, &rect); // This handles alpha blending too! :-D - - needToRefreshScreen = true; -} - -void TextEdit::Notify(Element *) -{ -} - -std::string TextEdit::GetText(void) -{ - return text; -} - -void TextEdit::SaveStateVariables(void) -{ - activatedSave = activated; - clickedSave = clicked; - insideSave = inside; - caretPosSave = caretPos; - scrollPosSave = scrollPos; - lengthSave = text.length(); -} - -void TextEdit::CheckStateAndRedrawIfNeeded(void) -{ - // Check to see if any of our state variables changed since we last saved them... - if (activated != activatedSave || clicked != clickedSave || inside != insideSave - || caretPos != caretPosSave || scrollPos != scrollPosSave - || text.length() != lengthSave) - Draw(); -} diff --git a/src/gui/textedit.h b/src/gui/textedit.h deleted file mode 100644 index 11904bf..0000000 --- a/src/gui/textedit.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// TEXTEDIT.H -// -// Graphical User Interface text edit class -// - -#ifndef __TEXTEDIT_H__ -#define __TEXTEDIT_H__ - -#include -#include "element.h" - -class TextEdit: public Element -{ - public: - TextEdit(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0, std::string s = "", Element * parent = NULL); - ~TextEdit(); - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(void); - virtual void Notify(Element *); - std::string GetText(void); - void SaveStateVariables(void); - void CheckStateAndRedrawIfNeeded(void); - - protected: - bool activated, clicked, inside; - SDL_Surface * img; - std::string text; - uint32_t caretPos, scrollPos; - - private: - bool activatedSave, clickedSave, insideSave; - uint32_t caretPosSave, scrollPosSave, lengthSave; - uint32_t hiliteColor, cursorColor; -}; - -#endif // __TEXTEDIT_H__ diff --git a/src/gui/window.cpp b/src/gui/window.cpp deleted file mode 100644 index 421e32a..0000000 --- a/src/gui/window.cpp +++ /dev/null @@ -1,183 +0,0 @@ -// -// WINDOW.CPP -// -// Graphical User Interface window class -// by James Hammons -// -// JLH = James Hammons -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JLH 02/03/2006 Created this file -// JLH 02/09/2006 Fixed various problems with the class implementation -// JLH 02/14/2006 Added window rendering -// - -#include "window.h" -#include "button.h" -#include "guimisc.h" // Various support functions -#include - -// Debug support... -//#define DESTRUCTOR_TESTING - -// Rendering experiment... -//BAH -//#define USE_COVERAGE_LISTS - -#if SDL_BYTEORDER == SDL_BIG_ENDIAN -#define MASK_R 0xFF000000 -#define MASK_G 0x00FF0000 -#define MASK_B 0x0000FF00 -#define MASK_A 0x000000FF -#else -#define MASK_R 0x000000FF -#define MASK_G 0x0000FF00 -#define MASK_B 0x00FF0000 -#define MASK_A 0xFF000000 -#endif - -// -// Window class implementation -// -// NOTE: FG/BG colors are hard-wired -// - -Window::Window(uint32_t x/*= 0*/, uint32_t y/*= 0*/, uint32_t w/*= 0*/, uint32_t h/*= 0*/, - void (* f)(Element *)/*= NULL*/): - Element(x, y, w, h, 0x4D, 0xFF, 0x84, 0xFF, 0x1F, 0x84, 0x84, 0xFF), handler(f), - cbWidth((closeBox[0] << 8) | closeBox[1]), cbHeight((closeBox[2] << 8) | closeBox[3]), - cbUp(SDL_CreateRGBSurfaceFrom(&closeBox[4], cbWidth, cbHeight, 32, cbWidth * 4, - MASK_R, MASK_G, MASK_B, MASK_A)), - cbDown(SDL_CreateRGBSurfaceFrom(&closeBoxDown[4], cbWidth, cbHeight, 32, cbWidth * 4, - MASK_R, MASK_G, MASK_B, MASK_A)), - cbHover(SDL_CreateRGBSurfaceFrom(&closeBoxHover[4], cbWidth, cbHeight, 32, cbWidth * 4, - MASK_R, MASK_G, MASK_B, MASK_A)), drawBackground(true) -{ -//Could probably move this into the initializer list as well... -// closeButton = new Button(w - (cbWidth + 1), 1, cbUp, cbHover, cbDown, this); -// list.push_back(closeButton); - - CreateBackstore(); - Draw(); // Can we do this in the constructor??? Mebbe. -} - -Window::~Window() -{ -#ifdef DESTRUCTOR_TESTING -printf("Inside ~Window()...\n"); -#endif - for(uint32_t i=0; iHandleKey(key); -} - -void Window::HandleMouseMove(uint32_t x, uint32_t y) -{ - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseMove(x - extents.x, y - extents.y); -} - -void Window::HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown) -{ -#if 1 - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseButton(x - extents.x, y - extents.y, mouseDown); -#else //? This works in draggablewindow2... - // Handle the items this window contains... - for(uint32_t i=0; iHandleMouseButton(x - extents.x, y - extents.y, mouseDown); - - if (list[i]->Inside(x - extents.x, y - extents.y)) - clicked = false; - } -#endif -} - -void Window::Draw(void) -{ -#ifdef USE_COVERAGE_LISTS - // These are *always* top level and parentless, so no need to traverse up through - // the parent chain... - for(std::list::iterator i=coverList.begin(); i!=coverList.end(); i++) - SDL_FillRect(screen, &(*i), bgColor); - - // Handle the items this window contains... - for(uint32_t i=0; iDraw(); -#else - if (drawBackground) - { - // These are *always* top level and parentless, so no need to traverse up through - // the parent chain... - SDL_FillRect(screen, &extents, bgColor); - } - else - RestoreScreenFromBackstore(); - - // Handle the items this window contains... - for(uint32_t i=0; iDraw(); -#endif - -//Prolly don't need this since the close button will do this for us... -//Close button isn't mandatory anymore... - needToRefreshScreen = true; -} - -// This is only called if a close button has been added -void Window::Notify(Element * e) -{ - if (e == closeButton) - { - SDL_Event event; - event.type = SDL_USEREVENT; - event.user.code = WINDOW_CLOSE; - event.user.data1 = (void *)this; - SDL_PushEvent(&event); - } -} - -void Window::AddElement(Element * e) -{ - list.push_back(e); -} - -void Window::AddCloseButton(void) -{ - // Only allow this to happen once! - if (closeButton == NULL) - { - closeButton = new Button(extents.w - (cbWidth + 1), 1, cbUp, cbHover, cbDown, this); - list.push_back(closeButton); - } -} - -void Window::SetBackgroundDraw(bool state) -{ - drawBackground = state; -} diff --git a/src/gui/window.h b/src/gui/window.h deleted file mode 100644 index 0a4fd32..0000000 --- a/src/gui/window.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// WINDOW.H -// -// Graphical User Interface window class -// - -#ifndef __WINDOW_H__ -#define __WINDOW_H__ - -#include "element.h" -#include - -class Button; // Forward declaration - -class Window: public Element -{ - public: - Window(uint32_t x = 0, uint32_t y = 0, uint32_t w = 0, uint32_t h = 0, - void (* f)(Element *) = NULL); - ~Window(); //Does this destructor need to be virtual? Not sure... Check! - virtual void HandleKey(SDL_Scancode key); - virtual void HandleMouseMove(uint32_t x, uint32_t y); - virtual void HandleMouseButton(uint32_t x, uint32_t y, bool mouseDown); - virtual void Draw(void); - virtual void Notify(Element *); - void AddElement(Element * e); - void AddCloseButton(void); - void SetBackgroundDraw(bool); - - protected: - void (* handler)(Element *); - Button * closeButton; - std::vector list; - - private: - uint16_t cbWidth, cbHeight; - SDL_Surface * cbUp, * cbDown, * cbHover; - bool drawBackground; -}; - -#endif // __WINDOW_H__