Example #1
0
BOOL LoadDIB(LPCTSTR filename, HGLOBAL *phDIB, HPALETTE *pPal, int pic_type)
{
	mame_file *mfile;
	BOOL success;
	const char *zip_name = NULL;

	switch (pic_type)
	{
	case TAB_SCREENSHOT :
		set_pathlist(FILETYPE_ARTWORK,GetImgDir());
		zip_name = "snap";
		break;
	case TAB_FLYER :
		set_pathlist(FILETYPE_ARTWORK,GetFlyerDir());
		zip_name = "flyers";
		break;
	case TAB_CABINET :
		set_pathlist(FILETYPE_ARTWORK,GetCabinetDir());
		zip_name = "cabinets";
		break;
	case TAB_MARQUEE :
		set_pathlist(FILETYPE_ARTWORK,GetMarqueeDir());
		zip_name = "marquees";
		break;
	case TAB_TITLE :
		set_pathlist(FILETYPE_ARTWORK,GetTitlesDir());
		zip_name = "titles";
		break;
	case TAB_CONTROL_PANEL :
		set_pathlist(FILETYPE_ARTWORK,GetControlPanelDir());
		zip_name = "cpanel";
		break;
	case BACKGROUND :
		set_pathlist(FILETYPE_ARTWORK,GetBgDir());
		zip_name = "bkground";
		break;
	default :
		// in case a non-image tab gets here, which can happen
		return FALSE;
	}
	
	// look for the raw file
	mfile = mame_fopen(NULL,filename,FILETYPE_ARTWORK,0);
	if (mfile == NULL)
	{
		// and look for the zip
		mfile = mame_fopen(zip_name,filename,FILETYPE_ARTWORK,0);
	}

	if (mfile == NULL)
		return FALSE;

	success = png_read_bitmap(mfile, phDIB, pPal);

	mame_fclose(mfile);

	return success;
}
Example #2
0
// display a snap, cabinet, title, flyer, marquee, pcb, control panel
static BOOL LoadDIB(const char *filename, HGLOBAL *phDIB, HPALETTE *pPal, int pic_type)
{
	osd_file::error filerr = osd_file::error::NOT_FOUND; // defined in osdcore.h
	util::core_file::ptr file = NULL;
	BOOL success = FALSE;
	const char *dir_name;
	const char *zip_name;
	void *buffer = NULL;
	std::string fname;
	if (pPal != NULL )
		DeletePalette(pPal);

	char *system_name = 0;
	char *file_name = 0;
	char* dir_name1 = 0;
	int i,j;
	bool ok = FALSE; // TRUE indicates split success

	switch (pic_type)
	{
		case TAB_SCREENSHOT:
			dir_name = GetImgDir();
			zip_name = "snap";
			break;
		case TAB_FLYER:
			dir_name = GetFlyerDir();
			zip_name = "flyers";
			break;
		case TAB_CABINET:
			dir_name = GetCabinetDir();
			zip_name = "cabinets";
			break;
		case TAB_MARQUEE:
			dir_name = GetMarqueeDir();
			zip_name = "marquees";
			break;
		case TAB_TITLE:
			dir_name = GetTitlesDir();
			zip_name = "titles";
			break;
		case TAB_CONTROL_PANEL:
			dir_name = GetControlPanelDir();
			zip_name = "cpanel";
			break;
		case TAB_PCB :
			dir_name = GetPcbDir();
			zip_name = "pcb";
			break;
		default :
			// in case a non-image tab gets here, which can happen
			return FALSE;
	}

	// allocate space
	system_name = (char*)malloc(strlen(filename) + 1);
	file_name = (char*)malloc(strlen(filename) + 1);

	// if the filename contains a system, split them

	// get system = find colon and truncate there
	for (i = 0; filename[i] && !ok; i++)
	{
		if (filename[i] != ':')
			system_name[i] = filename[i];
		else
		{
			ok = TRUE;
			system_name[i] = '\0';
		}
	}
	system_name[i] = '\0'; // 'i' is one more here than above but needed if no colon

	// now left-justify the filename
	if (ok)
	{
		for (j = 0; filename[i]; j++,i++)
			file_name[j] = filename[i];
		file_name[j] = '\0';
	}
	else
	// it wasn't a software title, copy over to get around const nonsense
	{
		for (i = 0; filename[i]; i++)
			file_name[i] = filename[i];
		file_name[i] = '\0';
	}

	// another const workaround
	dir_name1 = (char*)malloc(strlen(dir_name) + 2);
	for (i = 0; dir_name[i]; i++)
		dir_name1[i] = dir_name[i];
	dir_name1[i++] = ';';
	dir_name1[i] = '\0';

	// Support multiple paths
	char* dir_one = strtok(dir_name1, ";");

	while (dir_one && filerr != osd_file::error::NONE)
	{
		//Add handling for the displaying of all the different supported snapshot pattern types
		//%g

		// Do software checks first
		if (ok)
		{
			// Try dir/system/game.png
			fname = std::string(system_name) + PATH_SEPARATOR + std::string(file_name) + ".png";
			filerr = OpenRawDIBFile(dir_one, fname.c_str(), file);

			// Try dir/system.zip/game.png
			if (filerr != osd_file::error::NONE)
			{
				fname = std::string(file_name) + ".png";
				filerr = OpenZipDIBFile(dir_one, system_name, fname.c_str(), file, &buffer);
			}

			// Try dir/system.zip/system/game.png
			if (filerr != osd_file::error::NONE)
			{
				fname = std::string(system_name) + "/" + std::string(file_name) + ".png";
				filerr = OpenZipDIBFile(dir_one, system_name, fname.c_str(), file, &buffer);
			}

			// Try dir/zipfile/system/game.png
			if (filerr != osd_file::error::NONE)
			{
				filerr = OpenZipDIBFile(dir_one, zip_name, fname.c_str(), file, &buffer);
			}
		}

		// give up on software-specific, try dir/system.png
		if (filerr != osd_file::error::NONE)
		{
			fname = std::string(system_name) + ".png";
			filerr = OpenRawDIBFile(dir_one, fname.c_str(), file);
		}

		// For SNAPS only, try filenames with 0000.
		if (pic_type == TAB_SCREENSHOT)
		{
			if (filerr != osd_file::error::NONE)
			{
				//%g/%i
				fname = std::string(system_name) + PATH_SEPARATOR + "0000.png";
				filerr = OpenRawDIBFile(dir_one, fname.c_str(), file);
			}
			if (filerr != osd_file::error::NONE)
			{
				//%g%i
				fname = std::string(system_name) + "0000.png";
				filerr = OpenRawDIBFile(dir_one, fname.c_str(), file);
			}
			if (filerr != osd_file::error::NONE)
			{
				//%g/%g%i
				fname = std::string(system_name) + PATH_SEPARATOR + std::string(system_name) + "0000.png";
				filerr = OpenRawDIBFile(dir_one, fname.c_str(), file);
			}
		}

		// Try dir/zipfile/system.png
		if (filerr != osd_file::error::NONE)
		{
			fname = std::string(file_name) + ".png";
			filerr = OpenZipDIBFile(dir_one, zip_name, fname.c_str(), file, &buffer);
		}

		dir_one = strtok(NULL, ";");
	}

	if (filerr == osd_file::error::NONE)
	{
		success = png_read_bitmap_gui(*file, phDIB, pPal);
		file.reset();
	}

	// free the buffer if we have to
	if (buffer != NULL)
		free(buffer);
	free(system_name);
	free(file_name);
	free(dir_name1);

	return success;
}
Example #3
0
BOOL LoadDIB(LPCTSTR filename, HGLOBAL *phDIB, HPALETTE *pPal, int pic_type)
{
	mame_file_error filerr;
	mame_file *mfile = NULL;
	char *fname;
	BOOL success;
	const char *zip_name = NULL;
	char *pngfilename = NULL;
	char tmp[MAX_PATH];
	strcpy(tmp, filename);
	strcat(tmp,  ".png");
	pngfilename = mame_strdup(tmp);
	switch (pic_type)
	{
	case TAB_SCREENSHOT :
		options_set_string(SEARCHPATH_ARTWORK,GetImgDir());
		zip_name = "snap";
		break;
	case TAB_FLYER :
		options_set_string(SEARCHPATH_ARTWORK,GetFlyerDir());
		zip_name = "flyers";
		break;
	case TAB_CABINET :
		options_set_string(SEARCHPATH_ARTWORK,GetCabinetDir());
		zip_name = "cabinets";
		break;
	case TAB_MARQUEE :
		options_set_string(SEARCHPATH_ARTWORK,GetMarqueeDir());
		zip_name = "marquees";
		break;
	case TAB_TITLE :
		options_set_string(SEARCHPATH_ARTWORK,GetTitlesDir());
		zip_name = "titles";
		break;
	case TAB_CONTROL_PANEL :
		options_set_string(SEARCHPATH_ARTWORK,GetControlPanelDir());
		zip_name = "cpanel";
		break;
	case BACKGROUND :
		options_set_string(SEARCHPATH_ARTWORK,GetBgDir());
		zip_name = "bkground";
		break;
	default :
		// in case a non-image tab gets here, which can happen
		return FALSE;
	}
	
	// look for the raw file
	filerr = mame_fopen(SEARCHPATH_ARTWORK, pngfilename, OPEN_FLAG_READ, &mfile);
	if (filerr != FILERR_NONE)
	{
		// and look for the zip
		fname = assemble_3_strings(zip_name, PATH_SEPARATOR, pngfilename);
		filerr = mame_fopen(SEARCHPATH_ARTWORK, fname, OPEN_FLAG_READ, &mfile);
		free(fname);
	}
	if (filerr != FILERR_NONE)
		return FALSE;

	success = png_read_bitmap(mfile, phDIB, pPal);

	mame_fclose(mfile);

	return success;
}
BOOL LoadDIB(const char *filename, HGLOBAL *phDIB, HPALETTE *pPal, int pic_type)
{
	file_error filerr;
	core_file *file = NULL;
	BOOL success = FALSE;
	const char *dir_name;
	const char *zip_name;
	astring *fname;
	void *buffer = NULL;
	if (pPal != NULL ) {
		DeletePalette(pPal);
	}

	switch (pic_type)
	{
		case TAB_SCREENSHOT:
			dir_name = GetImgDir();
			zip_name = "snap";
			break;
		case TAB_FLYER:
			dir_name = GetFlyerDir();
			zip_name = "flyers";
			break;
		case TAB_CABINET:
			dir_name = GetCabinetDir();
			zip_name = "cabinets";
			break;
		case TAB_MARQUEE:
			dir_name = GetMarqueeDir();
			zip_name = "marquees";
			break;
		case TAB_TITLE:
			dir_name = GetTitlesDir();
			zip_name = "titles";
			break;
		case TAB_CONTROL_PANEL:
			dir_name = GetControlPanelDir();
			zip_name = "cpanel";
			break;
        case TAB_PCB :
			dir_name = GetPcbDir();
		    zip_name = "pcb";
			break;
		case BACKGROUND:
			dir_name = GetBgDir();
			zip_name = "bkground";
			break;
		default :
			// in case a non-image tab gets here, which can happen
			return FALSE;
	}
	//Add handling for the displaying of all the different supported snapshot patterntypes
	//%g
	fname = astring_assemble_2(astring_alloc(), filename, ".png");
	filerr = OpenDIBFile(dir_name, zip_name, astring_c(fname), &file, &buffer);
	astring_free(fname);
	if (filerr != FILERR_NONE) {
		//%g/%i
		fname = astring_assemble_3(astring_alloc(), filename, PATH_SEPARATOR, "0000.png");
		filerr = OpenDIBFile(dir_name, zip_name, astring_c(fname), &file, &buffer);
		astring_free(fname);
	}
	if (filerr != FILERR_NONE) {
		//%g%i
		fname = astring_assemble_2(astring_alloc(), filename, "0000.png");
		filerr = OpenDIBFile(dir_name, zip_name, astring_c(fname), &file, &buffer);
		astring_free(fname);
	}
	if (filerr != FILERR_NONE) {
		//%g/%g
		fname = astring_assemble_4(astring_alloc(), filename, PATH_SEPARATOR, filename, ".png");
		filerr = OpenDIBFile(dir_name, zip_name, astring_c(fname), &file, &buffer);
		astring_free(fname);
	}
	if (filerr != FILERR_NONE) {
		//%g/%g%i
		fname = astring_assemble_4(astring_alloc(), filename, PATH_SEPARATOR, filename, "0000.png");
		filerr = OpenDIBFile(dir_name, zip_name, astring_c(fname), &file, &buffer);
		astring_free(fname);
	}

	if (filerr == FILERR_NONE) {
		success = png_read_bitmap_gui(file, phDIB, pPal);
		core_fclose(file);
	}

	// free the buffer if we have to
	if (buffer != NULL) {
		free(buffer);
	}
	return success;
}
Example #5
0
BOOL LoadDIB(const WCHAR *filename, HGLOBAL *phDIB, HPALETTE *pPal, int pic_type)
{
	file_error filerr;
	core_file *file = NULL;
	BOOL success = FALSE;
	const WCHAR *zip_name;
	const WCHAR *dir_name;
	void *buffer = NULL;
	char *utf8filename;
	char *utf8zip_name;
	char *utf8dir_name;
	if (pPal != NULL ) {
		DeletePalette(pPal);
	}

	switch (pic_type)
	{
	case TAB_SCREENSHOT :
		dir_name = GetImgDir();
		zip_name = TEXT("snap");
		break;
	case TAB_FLYER :
		dir_name = GetFlyerDir();
		zip_name = TEXT("flyers");
		break;
	case TAB_CABINET :
		dir_name = GetCabinetDir();
		zip_name = TEXT("cabinets");
		break;
	case TAB_MARQUEE :
		dir_name = GetMarqueeDir();
		zip_name = TEXT( "marquees");
		break;
	case TAB_TITLE :
		dir_name = GetTitlesDir();
		zip_name = TEXT("titles");
		break;
	case TAB_CONTROL_PANEL :
		dir_name = GetControlPanelDir();
		zip_name = TEXT("cpanel");
		break;
        case TAB_PCB :
		dir_name = GetPcbDir();
		zip_name = TEXT("pcb");
		break;
	case BACKGROUND :
		dir_name = GetBgDir();
		zip_name = TEXT("bkground");
		break;
#ifdef USE_IPS
	case TAB_IPS :
		dir_name = GetIPSDir();
		zip_name = TEXT("ips");
		break;
#endif /* USE_IPS */
	default :
		// in case a non-image tab gets here, which can happen
		return FALSE;
	}

	utf8filename = utf8_from_wstring(filename);
	utf8zip_name = utf8_from_wstring(zip_name);
	utf8dir_name = utf8_from_wstring(dir_name);

	//Add handling for the displaying of all the different supported snapshot patterntypes
	//%g
	astring fname(utf8filename, ".png");
	filerr = OpenDIBFile(utf8dir_name, utf8zip_name, fname, &file, &buffer);
	if (filerr != FILERR_NONE)
	{
		//%g/%i
		astring fname(utf8filename, PATH_SEPARATOR, "0000.png");
		filerr = OpenDIBFile(utf8dir_name, utf8zip_name, fname, &file, &buffer);
	}
	if (filerr != FILERR_NONE)
	{
		//%g%i
		astring fname(utf8filename, "0000.png");
		filerr = OpenDIBFile(utf8dir_name, utf8zip_name, fname, &file, &buffer);
	}
	if (filerr != FILERR_NONE)
	{
		//%g/%g
		astring fname(utf8filename, PATH_SEPARATOR, utf8filename, ".png");
		filerr = OpenDIBFile(utf8dir_name, utf8zip_name, fname, &file, &buffer);
	}
	if (filerr != FILERR_NONE)
	{
		//%g/%g%i
		astring fname(utf8filename, PATH_SEPARATOR, utf8filename, ".png");
		filerr = OpenDIBFile(utf8dir_name, utf8zip_name, fname, &file, &buffer);
	}

	if (filerr == FILERR_NONE)
	{
		success = png_read_bitmap_gui(file, phDIB, pPal);
		core_fclose(file);
	}

	// free the buffer if we have to
	if (buffer != NULL)
	{
		free(buffer);
	}

	osd_free(utf8filename);
	osd_free(utf8zip_name);
	osd_free(utf8dir_name);

	return success;
}
Example #6
0
static BOOL Directories_OnInitDialog(HWND hDlg, HWND hwndFocus, LPARAM lParam)
{
    RECT        rectClient;
    LVCOLUMN    LVCol;
    char*       token;
    char        buf[MAX_PATH * MAX_DIRS];
	int			i;

    pDirInfo = (struct tDirInfo*) malloc(sizeof(struct tDirInfo));
    if (pDirInfo == NULL) /* bummer */
    {
        EndDialog(hDlg, -1);
        return FALSE;
    }

	for (i = LASTDIR - 1; i >= 0; i--)
	{
		ComboBox_InsertString(GetDlgItem(hDlg, IDC_DIR_COMBO), 0, dir_names[i]);
	}

    ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_DIR_COMBO), 0);

    GetClientRect(GetDlgItem(hDlg, IDC_DIR_LIST), &rectClient);

    memset(&LVCol, 0, sizeof(LVCOLUMN));
    LVCol.mask    = LVCF_WIDTH;
    LVCol.cx      = rectClient.right - rectClient.left - GetSystemMetrics(SM_CXHSCROLL);
    
    ListView_InsertColumn(GetDlgItem(hDlg, IDC_DIR_LIST), 0, &LVCol);


    /* Keep a temporary copy of the directory strings in pDirInfo. */
    memset(pDirInfo, 0, sizeof(struct tDirInfo));

    strcpy(buf, GetRomDirs());

    pDirInfo->m_Paths[ROM].m_NumDirectories = 0;
    token = strtok(buf, ";");
    while ((DirInfo_NumDir(pDirInfo, ROM) < MAX_DIRS) && token)
    {
        strcpy(DirInfo_Path(pDirInfo, ROM, DirInfo_NumDir(pDirInfo, ROM)), token);
        DirInfo_NumDir(pDirInfo, ROM)++;
        token = strtok(NULL, ";");
    }
    pDirInfo->m_Paths[ROM].m_bModified = FALSE;

    strcpy(buf, GetSampleDirs());

    pDirInfo->m_Paths[SAMPLE].m_NumDirectories = 0;
    token = strtok(buf, ";");
    while ((DirInfo_NumDir(pDirInfo, SAMPLE) < MAX_DIRS) && token)
    {
        strcpy(DirInfo_Path(pDirInfo, SAMPLE, DirInfo_NumDir(pDirInfo, SAMPLE)), token);
        DirInfo_NumDir(pDirInfo, SAMPLE)++;
        token = strtok(NULL, ";");
    }
    pDirInfo->m_Paths[SAMPLE].m_bModified = FALSE;

    strcpy(DirInfo_Dir(pDirInfo, CFG),		GetCfgDir());
    strcpy(DirInfo_Dir(pDirInfo, HI),		GetHiDir());
    strcpy(DirInfo_Dir(pDirInfo, IMG),		GetImgDir());
    strcpy(DirInfo_Dir(pDirInfo, INP),		GetInpDir());
    strcpy(DirInfo_Dir(pDirInfo, STATE),	GetStateDir());
    strcpy(DirInfo_Dir(pDirInfo, ART),		GetArtDir());
	strcpy(DirInfo_Dir(pDirInfo, MEMCARD),	GetMemcardDir());
	strcpy(DirInfo_Dir(pDirInfo, FLYER),	GetFlyerDir());
	strcpy(DirInfo_Dir(pDirInfo, CABINET),	GetCabinetDir());
	strcpy(DirInfo_Dir(pDirInfo, NVRAM),	GetNvramDir());

    UpdateDirectoryList(hDlg);

    return TRUE;
}