lpp[0] = '\0';
}
FILEIO* fio = new FILEIO();
+ if(!(fio->IsFileExisting(lpFileName))) return 0;
if(fio->Fopen(lpFileName, FILEIO_READ_ASCII)) {
bool in_section = false;
char section[1024], line[1024], *equal;
fio->Fclose();
}
delete fio;
- //csp_logger->debug_log(CSP_LOG_DEBUG, CSP_LOG_TYPE_GENERAL, "Try App: %s Key: %s", lpAppName, lpKeyName);
+ csp_logger->debug_log(CSP_LOG_DEBUG, CSP_LOG_TYPE_GENERAL, "Try App: %s Key: %s", lpAppName, lpKeyName);
return strlen(lpp);
}
//path = QString::fromUtf8(emu->d88_file[drive].path);
path = hRunEmu->get_d88_file_path(drive);
menu_fds[drive]->do_select_inner_media(num);
-#if 0
- if(emu && emu->d88_file[drive].cur_bank != num) {
- emit sig_open_disk(drive, path, num);
- if(emu->is_floppy_disk_protected(drive)) {
- menu_fds[drive]->do_set_write_protect(true);
- } else {
- menu_fds[drive]->do_set_write_protect(false);
- }
- }
-#else
if(hRunEmu->get_d88_file_cur_bank(drive) != num) {
emit sig_open_disk(drive, path, num);
if(hRunEmu->is_floppy_disk_protected(drive)) {
menu_fds[drive]->do_set_write_protect(false);
}
}
-#endif
return 0;
}
use_write_protect = true;
use_d88_menus = true;
icon_floppy = QIcon(":/icon_floppy.png");
+
+ for(int i = 0; i < 4; i++) {
+ type_mask[i] = true;
+ }
}
Menu_FDClass::~Menu_FDClass()
{
}
+void Menu_FDClass::do_set_create_mask(quint8 type, bool flag)
+{
+ switch(type) {
+ case 0x00: // 2D
+ type_mask[0] = flag;
+ break;
+ case 0x10: // 2DD
+ type_mask[1] = flag;
+ break;
+ case 0x20: // 2HD
+ type_mask[2] = flag;
+ break;
+ case 0x30: // 2HD/1.44M
+ type_mask[3] = flag;
+ break;
+ }
+}
+
+void Menu_FDClass::do_open_dialog_create_fd()
+{
+ CSP_CreateDiskDialog dlg(type_mask);
+
+ if(initial_dir.isEmpty()) {
+ QDir dir;
+ char app[PATH_MAX];
+ initial_dir = dir.currentPath();
+ strncpy(app, initial_dir.toLocal8Bit().constData(), PATH_MAX - 1);
+ initial_dir = QString::fromLocal8Bit(get_parent_dir(app));
+ }
+
+ dlg.dlg->setDirectory(initial_dir);
+ QString create_ext = QString::fromUtf8("*.d88 *.d77");
+ QString create_desc = QString::fromUtf8("D88/D77 Virtual Floppy Image.");
+ QString all = QString::fromUtf8("All Files (*.*)");
+ QString tmps = create_desc;
+ tmps.append(QString::fromUtf8(" ("));
+ tmps.append(create_ext.toLower());
+ tmps.append(QString::fromUtf8(" "));
+ tmps.append(create_ext.toUpper());
+ tmps.append(QString::fromUtf8(")"));
+ QStringList __filter;
+ __filter.clear();
+ __filter << tmps;
+ __filter << all;
+ __filter.removeDuplicates();
+ dlg.dlg->setNameFilters(__filter);
+
+ tmps.clear();
+ tmps = QApplication::translate("MenuMedia", "Create D88/D77 virtual floppy", 0);
+ if(!window_title.isEmpty()) {
+ tmps = tmps + QString::fromUtf8(" ") + window_title;
+ } else {
+ tmps = tmps + QString::fromUtf8(" ") + this->title();
+ }
+ dlg.dlg->setWindowTitle(tmps);
+
+ QObject::connect(&dlg, SIGNAL(sig_create_disk(quint8, QString)), this, SLOT(do_create_media(quint8, QString)));
+
+ dlg.show();
+ dlg.dlg->exec();
+ return;
+}
+
+void Menu_FDClass::do_create_media(quint8 media_type, QString name)
+{
+
+ if(!(name.isEmpty())) {
+#pragma pack(1)
+ struct {
+ char title[17];
+ uint8_t rsrv[9];
+ uint8_t protect;
+ uint8_t type;
+ uint32_t size;
+ uint32_t trkptr[164];
+ } d88_hdr;
+#pragma pack()
+ memset(&d88_hdr, 0, sizeof(d88_hdr));
+ my_strcpy_s(d88_hdr.title, sizeof(d88_hdr.title), "BLANK");
+ d88_hdr.type = media_type;
+ d88_hdr.size = sizeof(d88_hdr);
+
+ FILEIO *fio = new FILEIO();
+ if(fio->Fopen(name.toUtf8().data(), FILEIO_WRITE_BINARY)) {
+ fio->Fwrite(&d88_hdr, sizeof(d88_hdr), 1);
+ fio->Fclose();
+ emit sig_open_media(media_drive, name);
+ }
+ delete fio;
+ }
+}
+
+
void Menu_FDClass::create_pulldown_menu_device_sub(void)
{
config_t *p;
action_count_immediate->setCheckable(true);
action_count_immediate->binds->setDrive(media_drive);
+ action_create_fd = new Action_Control(p_wid, using_flags);
+ action_create_fd->setVisible(true);
+ action_create_fd->setCheckable(false);
+
p = p_config;
if(p != NULL) {
if(p->correct_disk_timing[media_drive]) action_correct_timing->setChecked(true);
void Menu_FDClass::connect_menu_device_sub(void)
{
this->addSeparator();
+ this->addAction(action_create_fd);
+ this->addSeparator();
this->addAction(action_ignore_crc_error);
this->addAction(action_correct_timing);
this->addAction(action_count_immediate);
connect(action_count_immediate, SIGNAL(toggled(bool)),
action_count_immediate->binds, SLOT(do_set_disk_count_immediate(bool)));
-
+
+ connect(action_create_fd, SIGNAL(triggered()), this, SLOT(do_open_dialog_create_fd()));
+
connect(this, SIGNAL(sig_open_media(int, QString)), p_wid, SLOT(_open_disk(int, QString)));
connect(this, SIGNAL(sig_eject_media(int)), p_wid, SLOT(eject_fd(int)));
connect(this, SIGNAL(sig_write_protect_media(int, bool)), p_wid, SLOT(write_protect_fd(int, bool)));
action_correct_timing->setText(QApplication::translate("MenuMedia", "Correct transfer timing", 0));
action_correct_timing->setToolTip(QApplication::translate("MenuMedia", "Correct transferring timing.\nUseful for some softwares\n needs strict transfer timing.", 0));
+ action_create_fd->setText(QApplication::translate("MenuMedia", "Create Virtual Floppy", 0));
+ action_create_fd->setToolTip(QApplication::translate("MenuMedia", "Create and mount virtual blank-floppy disk.\nThis makes only D88/D77 format.", 0));
+
action_count_immediate->setText(QApplication::translate("MenuMedia", "Immediate increment", 0));
action_count_immediate->setToolTip(QApplication::translate("MenuMedia", "Increment data pointer immediately.\nThis is test hack for MB8877.\nUseful for some softwares\n needs strict transfer timing.", 0));
}
class DLL_PREFIX Menu_FDClass: public Menu_MetaClass {
Q_OBJECT
protected:
+ class Action_Control *action_create_fd;
class Action_Control *action_ignore_crc_error;
class Action_Control *action_correct_timing;
class Action_Control *action_count_immediate;
QIcon icon_floppy;
+ bool type_mask[6];
public:
Menu_FDClass(QMenuBar *root_entry, QString desc, USING_FLAGS *p, QWidget *parent = 0, int drv = 0, int base_drv = 1);
~Menu_FDClass();
void create_pulldown_menu_device_sub();
void connect_menu_device_sub(void);
void retranslate_pulldown_menu_device_sub(void);
+
+public slots:
+ void do_open_dialog_create_fd();
+ void do_create_media(quint8 media_type, QString name);
+ void do_set_create_mask(quint8 type, bool flag);
};
QT_END_NAMESPACE
emit sig_open_binary_file(drive, s, play);
}
+
+CSP_CreateDiskDialog::CSP_CreateDiskDialog(bool *masks, QWidget *parent = 0) : QWidget(parent)
+{
+ __real_media_type = 0x00;
+ dlg = new QFileDialog(NULL, Qt::Widget);
+ dlg->setParent(this);
+ dlg->setOption(QFileDialog::ReadOnly, false);
+ dlg->setOption(QFileDialog::DontConfirmOverwrite, false);
+ dlg->setOption(QFileDialog::DontUseNativeDialog, true);
+ dlg->setAcceptMode(QFileDialog::AcceptSave);
+ dlg->setFileMode(QFileDialog::AnyFile);
+
+ param = new CSP_FileParams();
+ if(masks[0]) media_type.addItem(QString::fromUtf8("2D"), (const quint8)0x00);
+ if(masks[1]) media_type.addItem(QString::fromUtf8("2DD"), (const quint8)0x10);
+ if(masks[2]) media_type.addItem(QString::fromUtf8("2HD"), (const quint8)0x20);
+ if(masks[3]) media_type.addItem(QString::fromUtf8("2HD/1.44M"), (const quint8)0x30);
+
+ type_label.setText(QApplication::translate("MenuMedia", "Virtual FD type:", 0));
+ type_label.setToolTip(QApplication::translate("MenuMedia", "Select type of virtual floppy.", 0));
+
+ layout.addWidget(&type_label, 1, 0);
+ layout.addWidget(&media_type, 1, 1);
+ layout.addWidget(dlg, 2, 0, 2, 4);
+
+ this->setLayout(&layout);
+ connect(&media_type, SIGNAL(activated(int)), this, SLOT(do_set_type(int)));
+ connect(dlg, SIGNAL(fileSelected(QString)), this, SLOT(do_create_disk(QString)));
+
+}
+
#define _CSP_QT_DIALOGS_H
#include <QFileDialog>
+#include <QComboBox>
+#include <QGridLayout>
+#include <QLabel>
+#include <QApplication>
+#include <QWindow>
#include "qt_main.h"
delete param;
}
} CSP_DiskDialog;
+
+class CSP_CreateDiskDialog : public QWidget {
+ Q_OBJECT
+ quint8 __real_media_type;
+ QComboBox media_type;
+ QLabel type_label;
+ QGridLayout layout;
+public:
+ QFileDialog* dlg;
+ CSP_FileParams *param;
+ CSP_CreateDiskDialog(bool *masks, QWidget *parent = 0);
+ ~CSP_CreateDiskDialog() {
+ delete param;
+ delete dlg;
+ }
+signals:
+ int sig_create_disk(quint8, QString);
+public slots:
+ void do_set_type(int i) {
+ __real_media_type = media_type.itemData(i).toUInt();
+ }
+ void do_create_disk(QString s) {
+ emit sig_create_disk(__real_media_type, s);
+ }
+};
+
QT_END_NAMESPACE
#endif //End.
emit sig_emu_update_config();
}
+
int Ui_MainWindowBase::write_protect_fd(int drv, bool flag)
{
if((drv < 0) || (drv >= using_flags->get_max_drive())) return -1;
menu_fds[drv]->do_clear_inner_media();
menu_fds[drv]->do_add_media_extension(ext, desc1);
+
+
SETUP_HISTORY(p_config->recent_floppy_disk_path[drv], listFDs[drv]);
menu_fds[drv]->do_update_histories(listFDs[drv]);
menu_fds[drv]->do_set_initialize_directory(p_config->initial_floppy_disk_dir);