示例#1
0
bool CapriceOpenDisk::HandleMessage(CMessage* pMessage)
{
	bool bHandled = false;
	if (pMessage)
	{
		switch(pMessage->MessageType())
        {
		case CMessage::CTRL_SINGLELCLICK:
		{
			if (pMessage->Destination() == this)
			{
				if (pMessage->Source() == m_pButtonCancel) {
					CloseFrame();
					CMessageServer::Instance().QueueMessage(new CMessage(CMessage::APP_EXIT, 0, this));
                    break;
                }
				if (pMessage->Source() == m_pButtonOpen) {
                    // Put selected ROM filename on button: (if there is a selection)
                    int selectedDiskIndex = m_pListBoxDisk->getFirstSelectedIndex();
                    if (selectedDiskIndex >= 0)
							{
                        DriveFile = (m_pListBoxDisk->GetItem(selectedDiskIndex)).sItemText;
                        if (selDrive) strncpy(CPC.drvB_file, DriveFile.c_str(), sizeof(CPC.drvB_file));
								else strncpy(CPC.drvA_file, DriveFile.c_str(), sizeof(CPC.drvA_file));
								std::string pchFile = DrivePath+DriveFile;
                        dsk_load(pchFile.c_str(),pDrive,'A');
								CloseFrame();
                        CMessageServer::Instance().QueueMessage(new CMessage(CMessage::APP_EXIT, 0, this));
                    }
                    break;
                }
				if (pMessage->Source() == m_pButtonClear)
				{
					if (selDrive)
					{
						strcpy(CPC.drvB_file, "");
					}
					else
					{
						strcpy(CPC.drvA_file, "");
					}
					dsk_eject(pDrive);
					CloseFrame();
					bHandled = true;
                    break;
                }
           		CMessageServer::Instance().QueueMessage(new CMessage(CMessage::APP_EXIT, 0, this));
			}
			break;
		}

		default :
			bHandled = CFrame::HandleMessage(pMessage);
			break;
		}
	}
	return bHandled;
}
示例#2
0
int dsk_load (const std::string &filename, t_drive *drive)
{
   int iRetCode = 0;

   LOG_DEBUG("Loading disk: " << filename);
   dsk_eject(drive);
   if ((pfileObject = fopen(filename.c_str(), "rb")) != nullptr) {
     iRetCode = dsk_load(pfileObject, drive);
     fclose(pfileObject);
   } else {
      LOG_ERROR("File not found: " << filename);
      iRetCode = ERR_FILE_NOT_FOUND;
   }

   if (iRetCode != 0) { // on error, 'eject' disk from drive
      dsk_eject(drive);
   }
   return iRetCode;
}
示例#3
0
static void load_options(void)
{
	XFILE *file;
	Options tmp;
	int error = 0;
	long n, opt_n;

	get_set_video(0); /* DjV 007 030103 get current video mode */
	
	if ((file = x_fopen(optname, O_DENYW | O_RDONLY, &error)) != NULL)
	{
		opt_n = sizeof(Options);
		tmp.version = 0;
		x_fread(file, &tmp, sizeof(int));

/* HR 240103: load older cfg versions */
		if (   tmp.version >= MIN_VERSION
		    && tmp.version <  CFG_VERSION
		   )
		{
			memset(&tmp.V2_2, 0, sizeof(tmp.V2_2));
			opt_n -= sizeof(tmp.V2_2);
		}

		x_fclose(file);
	}

	if ((file = x_fopen(optname, O_DENYW | O_RDONLY, &error)) != NULL)
	{
		if ((n = x_fread(file, &tmp, opt_n)) == opt_n)
		{
			if (   tmp.version >= MIN_VERSION		/* DjV 005 120103 (was 0x119) */
			    && tmp.version <= CFG_VERSION
			    && tmp.magic   == MAGIC
			   )
			{
				options = tmp;
				if (opt_n != sizeof(Options))		/* HR 240103 */
				{
					options.V2_2.fields = WD_SHSIZ | WD_SHDAT | WD_SHTIM | WD_SHATT; /* DjV 010 251202 HR 240103 */
					options.attribs = FA_SUBDIR | FA_SYSTEM; /* DjV 004 251202 HR 240103 */
				}
				ins_shorts();     /* DjV 019 080103 put kbd shortcuts into menu texts */
				wd_deselect_all();
				wd_default();

				if (tmp.cprefs & SAVE_COLORS)
					error = load_colors(file);

				if (error == 0)
					if ((error = dsk_load(file)) == 0)
						if ((error = ft_load(file)) == 0)
							if ((error = icnt_load(file)) == 0)
								if ((error = app_load(file)) == 0)
									if ((error = prg_load(file)) == 0)
										error = wd_load(file);
			}
			else
			{
				alert_printf(1, MVALIDCF);
				x_fclose(file);
				return;
			}
			/* DjV 007 030103 ---vvv--- */
			
			/* If read ok, set video state but do not change resolution */
			
			get_set_video(1);
			
			/* DjV 007 030103 ---^^^--- */
		}
		else
		{
			error = (n < 0) ? (int) n : EEOF;
			hndl_error(MLOADCFG, error);
			x_fclose(file);
			return;
		}
		x_fclose(file);
	}

	if (error != 0)
	{
		hndl_error(MLOADCFG, error);

		opt_default();
		dsk_default();
		ft_default();
		icnt_default();
		app_default();
		prg_default();
		wd_default();
	}

	if (options.version < 0x0130)
		options.dial_mode = (options.cprefs & 0x80) ? XD_BUFFERED : XD_NORMAL;

	xd_setposmode((options.cprefs & DIALPOS_MODE) ? XD_MOUSE : XD_CENTERED);
	set_dialmode();

	options.version = CFG_VERSION;
}
示例#4
0
extern byte *pbRAMbuffer;

extern FILE *pfileObject;

struct file_loader
{
  DRIVE drive;
  std::string extension;
  int (*load_from_filename)(const std::string& filename);
  int (*load_from_file)(FILE *file);
};

file_loader files_loader_list[] =
{
  { DSK_A, ".dsk",
    [](const std::string& filename) -> int { return dsk_load(filename, &driveA); },
    [](FILE* file) -> int { return dsk_load(file, &driveA); } },

  { DSK_B, ".dsk",
    [](const std::string& filename) -> int { return dsk_load(filename, &driveB); },
    [](FILE* file) -> int { return dsk_load(file, &driveB); } },

#ifdef WITH_IPF
  { DSK_A, ".ipf",
    [](const std::string& filename) -> int { return ipf_load(filename, &driveA); },
    [](FILE* file) -> int { return ipf_load(file, &driveA); } },

  { DSK_B, ".ipf",
    [](const std::string& filename) -> int { return ipf_load(filename, &driveB); },
    [](FILE* file) -> int { return ipf_load(file, &driveB); } },
#endif