+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;
+ }
+}
+
+