/* ************************************** * Includes * * *************************************/ #include "LoadMenu.h" /* ************************************** * Defines * * *************************************/ /* ************************************** * Structs and enums * * *************************************/ enum { SMALL_FONT_SIZE = 8, SMALL_FONT_SIZE_BITSHIFT = 3, SMALL_FONT_SPACING = 6 }; enum { BG_BLUE_TARGET_VALUE = 0xC0, BG_WHITE_TARGET_VALUE = /*0x40*/ 0, BG_INCREASE_STEP = 0x10 }; enum { LOADING_BAR_X = 64, LOADING_BAR_Y = 200, LOADING_BAR_N_LINES = 4, LOADING_BAR_WIDTH = 256, LOADING_BAR_HEIGHT = 16, LOADING_BAR_LUMINANCE_TARGET = NORMAL_LUMINANCE, LOADING_BAR_LUMINANCE_STEP = 10 }; enum { LOADING_TITLE_CLUT_X = 384, LOADING_TITLE_CLUT_Y = 496, LOADING_TITLE_X = 128, LOADING_TITLE_Y = 32, LOADING_TITLE_U = 0, LOADING_TITLE_V = 0, LOADING_TITLE_LUMINANCE_STEP = 10, LOADING_TITLE_LUMINANCE_TARGET = NORMAL_LUMINANCE }; enum { PLANE_START_X = 56, PLANE_START_Y = 200, PLANE_U = 0, PLANE_V = 32, PLANE_SIZE = 16, PLANE_LUMINANCE_STEP = 0x10, PLANE_LUMINANCE_TARGET_VALUE = NORMAL_LUMINANCE }; /* ************************************* * Local Prototypes * *************************************/ static void LoadMenuLoadFileList( char* fileList[], void * dest[], uint8_t szFileList, uint8_t szDestList); /* ************************************* * Local Variables * *************************************/ static char* LoadMenuFiles[] = { "cdrom:\\DATA\\FONTS\\FONT_2.FNT;1" }; static void * LoadMenuDest[] = { (TYPE_FONT*)&SmallFont }; static char* strCurrentFile; // Flags to communicate with ISR state // * startup_flag: background fades in from black to blue. // * end_flag: tells the background to fade out to black. // * isr_ended: background has totally faded out to black. // * isr_started: tells the ISR has finished starting up. static volatile bool startup_flag; static volatile bool isr_started; static volatile bool end_flag; static volatile bool isr_ended; // Set to true when LoadMenuInit() has been called, and set to false // once LoadMenuEnd() is called. // It's used when multiple modules call LoadMenu() at the same time, // so load menu does not have to be initialised each time; static bool load_menu_running; void LoadMenuInit(void) { static bool first_load = false; if(first_load == false) { first_load = true; LoadMenuLoadFileList( LoadMenuFiles, LoadMenuDest, sizeof(LoadMenuFiles) / sizeof(char*), sizeof(LoadMenuDest) / sizeof(void*)); } FontSetSize(&SmallFont, SMALL_FONT_SIZE, SMALL_FONT_SIZE_BITSHIFT); FontSetSpacing(&SmallFont, SMALL_FONT_SPACING); SmallFont.spr.r = 0; SmallFont.spr.g = 0; SmallFont.spr.b = 0; GfxSetGlobalLuminance(NORMAL_LUMINANCE); } void LoadMenu( char* fileList[], void * dest[], uint8_t szFileList , uint8_t szDestList) { if(load_menu_running == false) { LoadMenuInit(); } LoadMenuLoadFileList(fileList,dest,szFileList,szDestList); } void LoadMenuLoadFileList( char* fileList[], void * dest[], uint8_t szFileList, uint8_t szDestList) { char aux_file_name[100]; char* extension; uint8_t fileLoadedCount; if(szFileList != szDestList) { dprintf("File list size different from dest list size! %d vs %d\n", szFileList, szDestList); return; } for(fileLoadedCount = 0; fileLoadedCount < szFileList ; fileLoadedCount++) { if(fileList[fileLoadedCount] == NULL) { continue; } strCurrentFile = fileList[fileLoadedCount]; //dprintf("Files %d / %d loaded. New plane X = %d.\n",fileLoadedCount,szFileList,LoadMenuPlaneSpr.x); // Backup original file path strncpy(aux_file_name,fileList[fileLoadedCount],100); //We want to get file extension, so split into tokens strtok(fileList[fileLoadedCount],".;"); extension = strtok(NULL,".;"); dprintf("File extension: .%s\n",extension); //Restore original file path in order to load file strncpy(fileList[fileLoadedCount],aux_file_name,100); if(strncmp(extension,"TIM",3) == 0) { if(GfxSpriteFromFile(fileList[fileLoadedCount], dest[fileLoadedCount]) == false) { dprintf("Could not load image file \"%s\"!\n",fileList[fileLoadedCount]); } } else if(strncmp(extension,"CLT",3) == 0) { if(dest[fileLoadedCount] != NULL) { dprintf("WARNING: File %s linked to non-NULL destination pointer!\n", dest[fileLoadedCount]); } if(GfxCLUTFromFile(fileList[fileLoadedCount]) == false) { dprintf("Could not load CLUT file \"%s\"!\n",fileList[fileLoadedCount]); } } else if(strncmp(extension,"FNT",3) == 0) { if(FontLoadImage(fileList[fileLoadedCount], dest[fileLoadedCount]) == false) { dprintf("Could not load font file \"%s\"!\n",fileList[fileLoadedCount]); } } else { dprintf("LoadMenu does not recognize following extension: %s\n",extension); } } }