OSDN Git Service

[UI][Qt][OSD][LOG] CDROM: May works with new messaging framework.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Thu, 16 Feb 2023 18:47:25 +0000 (03:47 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Thu, 16 Feb 2023 18:47:25 +0000 (03:47 +0900)
- This also contains logging by SIGNAL()/SLOT() model of Qt for OSD::.
  See osd_base.cpp & osd_base.h .
- Some names of signals and slots are changed . see mainwidget_base.h .
- On EMU:: , for open/close CD-ROM, needs wait correctly.
  See EMU::open_compact_disc() and EMU::close_compact_disc() at emu.cpp .
- [VM][FMTOWNS] Cue parser : Fix typo of .ccd file detection.
                See vm/fmtowns/cdrom/cdrom_ccd_parser.cpp .

18 files changed:
source/src/common.cpp
source/src/emu.cpp
source/src/qt/common/emu_thread_slots.cpp
source/src/qt/gui/csp_logger.cpp
source/src/qt/gui/csp_logger.h
source/src/qt/gui/mainwidget_base.h
source/src/qt/gui/menu_compactdisc.cpp
source/src/qt/gui/qt_main.h
source/src/qt/gui/util_cd.cpp
source/src/qt/osd_base.cpp
source/src/qt/osd_base.h
source/src/qt/osd_input.cpp
source/src/qt/osd_wrapper.cpp
source/src/vm/device.cpp
source/src/vm/fmtowns/cdrom.h
source/src/vm/fmtowns/cdrom/cdrom.cpp
source/src/vm/fmtowns/cdrom/cdrom_ccd_parser.cpp
source/src/vm/fmtowns/cdrom/cdrom_cue_parser.cpp

index aff68ac..bc56c67 100644 (file)
@@ -108,7 +108,6 @@ errno_t DLL_PREFIX my_tcscat_s(_TCHAR *strDestination, size_t numberOfElements,
        // Sanitize string
        memset(strDestination, 0x00, numberOfElements);
        _dst.copy(strDestination, numberOfElements - 1);
-
        return 0;
 }
 
@@ -137,7 +136,6 @@ errno_t DLL_PREFIX my_strcpy_s(char *strDestination, size_t numberOfElements, co
                count = numberOfElements - 1;
        }
        strncpy(strDestination, strSource, count);
-
        return 0;
 }
 
@@ -1486,8 +1484,11 @@ void DLL_PREFIX get_long_full_path_name(const _TCHAR* src, _TCHAR* dst, size_t d
        }
 #elif defined(_USE_QT)
        QString tmp_path = QString::fromLocal8Bit(src);
+//     QString tmp_path = QString::fromUtf8(src);
        QFileInfo info(tmp_path);
+//     strncpy(dst, info.absoluteFilePath().toLocal8Bit().constData(), dst_len);
        my_tcscpy_s(dst, dst_len, info.absoluteFilePath().toLocal8Bit().constData());
+//     my_tcscpy_s(dst, dst_len, info.absoluteFilePath().toUtf8().constData());
 #else
        // write code for your environment
 
index d7bd62c..52b9beb 100644 (file)
@@ -2444,6 +2444,7 @@ void EMU::update_media()
        for(int drv = 0; drv < USE_COMPACT_DISC; drv++) {
                if(compact_disc_status[drv].wait_count != 0 && --compact_disc_status[drv].wait_count == 0) {
                        vm->open_compact_disc(drv, compact_disc_status[drv].path);
+                       //printf(_T("update_media(): LOAD CDROM: %s\n"), compact_disc_status[drv].path);
 #if USE_COMPACT_DISC > 1
                        out_message(_T("CD%d: %s"), drv + BASE_COMPACT_DISC_NUM, compact_disc_status[drv].path);
 #else
@@ -2559,11 +2560,11 @@ void EMU::restore_media()
                if(tape_status[drv].path[0] != _T('\0')) {
                        if(tape_status[drv].play) {
                                vm->play_tape(drv, tape_status[drv].path);
-                       EMU_MESSAGE_TYPE::type_t mess = EMU_MESSAGE_TYPE::MEDIA_MOUNTED;
-                       osdcall_string(EMU_MEDIA_TYPE::HARD_DISK,
-                                                  drv,
-                                                  mess,
-                                                  tape_status[drv].path);
+                               EMU_MESSAGE_TYPE::type_t mess = EMU_MESSAGE_TYPE::MEDIA_MOUNTED;
+                               osdcall_string(EMU_MEDIA_TYPE::TAPE,
+                                                          drv,
+                                                          mess,
+                                                          tape_status[drv].path);
                        } else {
                                tape_status[drv].path[0] = _T('\0');
                        }
@@ -2574,6 +2575,11 @@ void EMU::restore_media()
        for(int drv = 0; drv < USE_COMPACT_DISC; drv++) {
                if(compact_disc_status[drv].path[0] != _T('\0')) {
                        vm->open_compact_disc(drv, compact_disc_status[drv].path);
+                       //printf(_T("restore_media(): LOAD CDROM: %s\n"), compact_disc_status[drv].path);
+                       osdcall_string(EMU_MEDIA_TYPE::COMPACT_DISC,
+                                                  drv,
+                                                  EMU_MESSAGE_TYPE::MEDIA_MOUNTED,
+                                                  (_TCHAR*)compact_disc_status[drv].path);
                }
        }
 #endif
@@ -2581,6 +2587,10 @@ void EMU::restore_media()
        for(int drv = 0; drv < USE_LASER_DISC; drv++) {
                if(laser_disc_status[drv].path[0] != _T('\0')) {
                        vm->open_laser_disc(drv, laser_disc_status[drv].path);
+                       osdcall_string(EMU_MEDIA_TYPE::LASER_DISC,
+                                                  drv,
+                                                  EMU_MESSAGE_TYPE::MEDIA_MOUNTED,
+                                                  laser_disc_status[drv].path);
                }
        }
 #endif
@@ -2588,6 +2598,13 @@ void EMU::restore_media()
        for(int drv = 0; drv < USE_BUBBLE; drv++) {
                if(bubble_casette_status[drv].path[0] != _T('\0')) {
                        vm->open_bubble_casette(drv, bubble_casette_status[drv].path, bubble_casette_status[drv].bank);
+                       EMU_MESSAGE_TYPE::type_t mess = EMU_MESSAGE_TYPE::MEDIA_MOUNTED;
+                       mess |= ((is_bubble_casette_protected(drv)) ? EMU_MESSAGE_TYPE::WRITE_PROTECT : 0);
+
+                       osdcall_string(EMU_MEDIA_TYPE::BUBBLE_CASETTE | (bubble_casette_status[drv].bank & EMU_MEDIA_TYPE::EMU_SLOT_MASK),
+                                                  drv,
+                                                  mess,
+                                                  (_TCHAR *)bubble_casette_status[drv].path);
                }
        }
 #endif
@@ -3261,9 +3278,11 @@ void EMU::push_apss_rewind(int drv)
 void EMU::open_compact_disc(int drv, const _TCHAR* file_path)
 {
        if(drv < USE_COMPACT_DISC) {
+               //printf(_T("open_compact_disc(): CALLED: %s\n"), file_path);
                if(vm->is_compact_disc_inserted(drv)) {
                        vm->close_compact_disc(drv);
                        // wait 0.5sec
+                       clear_media_status(&compact_disc_status[drv]);
                        compact_disc_status[drv].wait_count = (int)(vm->get_frame_rate() / 2);
 #if USE_COMPACT_DISC > 1
                        out_message(_T("CD%d: Ejected"), drv + BASE_COMPACT_DISC_NUM);
@@ -3276,6 +3295,7 @@ void EMU::open_compact_disc(int drv, const _TCHAR* file_path)
                                                0);
                } else if(compact_disc_status[drv].wait_count == 0) {
                        vm->open_compact_disc(drv, file_path);
+                       //printf(_T("open_compact_disc(): LOAD CDROM: %s\n"), file_path);
 #if USE_COMPACT_DISC > 1
                        out_message(_T("CD%d: %s"), drv + BASE_COMPACT_DISC_NUM, file_path);
 #else
@@ -3286,7 +3306,7 @@ void EMU::open_compact_disc(int drv, const _TCHAR* file_path)
                                                        EMU_MESSAGE_TYPE::MEDIA_MOUNTED,
                                                        (_TCHAR*)file_path);
                }
-               my_tcscpy_s(compact_disc_status[drv].path, _MAX_PATH, file_path);
+               my_tcscpy_s(compact_disc_status[drv].path,  _MAX_PATH, file_path);
        }
 }
 
@@ -3295,6 +3315,7 @@ void EMU::close_compact_disc(int drv)
        if(drv < USE_COMPACT_DISC) {
                vm->close_compact_disc(drv);
                clear_media_status(&compact_disc_status[drv]);
+               compact_disc_status[drv].wait_count = (int)(vm->get_frame_rate() / 2);
 #if USE_COMPACT_DISC > 1
                out_message(_T("CD%d: Ejected"), drv + BASE_COMPACT_DISC_NUM);
 #else
index dade6e3..0c2ce22 100644 (file)
@@ -355,8 +355,10 @@ void EmuThreadClassBase::sub_close_compact_disc_internal(int drv)
 {
        std::shared_ptr<USING_FLAGS> p = using_flags;
        if(p.get() == nullptr) return;
+
        if((p->is_use_compact_disc()) && (p->get_max_cd() > drv)) {
                //QMutexLocker _locker(&uiMutex);
+
                p_emu->close_compact_disc(drv);
                emit sig_change_virtual_media(CSP_DockDisks_Domain_CD, drv, QString::fromUtf8(""));
        }
@@ -368,7 +370,7 @@ void EmuThreadClassBase::do_open_compact_disc(int drv, QString path)
        if(path.isNull()) return;
 
        std::shared_ptr<USING_FLAGS>up = using_flags;
-       if(up.get() != nullptr) return;
+       if(up.get() == nullptr) return;
        if(!((up->get_max_cd() > drv) && (up->is_use_compact_disc()))) return;
 
        const _TCHAR *file_path = (const _TCHAR *)(path.toLocal8Bit().constData());
@@ -388,7 +390,7 @@ void EmuThreadClassBase::do_eject_compact_disc()
        if(cp == nullptr) return;
        struct CSP_Ui_Menu::DriveIndexPair tmp = cp->data().value<CSP_Ui_Menu::DriveIndexPair>();
        int drv = tmp.drive;
-       sub_close_laser_disc_internal(drv);
+       sub_close_compact_disc_internal(drv);
 }
 
 
index 6bffa13..95f7dcb 100644 (file)
@@ -139,7 +139,7 @@ CSP_Logger::~CSP_Logger()
                QThread::msleep(100);
        }
        delete console_printer;
-       
+
        loglist.clear();
        log_sysname.clear();
        squeue.clear();
@@ -158,7 +158,7 @@ void CSP_Logger::reset(void)
        device_names.clear();
        max_cpus = 0;
        max_devices = 0;
-       
+
        const char *components[] = {
                "GENERAL",
                "OSD",
@@ -216,7 +216,7 @@ void CSP_Logger::reset(void)
                        vfile_names.append(tmps + ss);
                }
        }
-       
+
        tmps = QString::fromUtf8("CPU"); // Enable to update
        for(int i = 0; i < 8; i++) {
                QString ss;
@@ -244,14 +244,14 @@ void CSP_Logger::reset(void)
 void CSP_Logger::open(bool b_syslog, bool cons, const char *devname)
 {
        int flags = 0;
-       
+
        QMutexLocker locker(lock_mutex);
        log_onoff = true;
-       
+
        loglist.clear();
        log_sysname.clear();
        squeue.clear();
-       
+
        QString dname;
        if(devname != NULL) {
                dname = QString::fromUtf8(devname);
@@ -260,11 +260,11 @@ void CSP_Logger::open(bool b_syslog, bool cons, const char *devname)
        }
        log_sysname = QString::fromUtf8("CSP(");
        log_sysname = log_sysname + dname + QString::fromUtf8(")");
-       
+
        if(b_syslog) {
 #if !defined(Q_OS_WIN)
                syslog_flag = true;
-               if(cons) { 
+               if(cons) {
                        flags = LOG_CONS;
                }
                //openlog(devname, flags | LOG_PID | LOG_NOWAIT, LOG_USER);
@@ -279,10 +279,10 @@ void CSP_Logger::open(bool b_syslog, bool cons, const char *devname)
        log_opened = true;
        log_cons_out = log_cons;
        syslog_flag_out = syslog_flag;
-       
+
        cons_log_levels = 1 << CSP_LOG_INFO;
-       
-#if !defined(Q_OS_WIN)   
+
+#if !defined(Q_OS_WIN)
        sys_log_levels = 1 << CSP_LOG_INFO;
        sys_log_levels |= (1 << CSP_LOG_DEBUG);
        sys_log_levels |= (1 << CSP_LOG_WARN);
@@ -291,17 +291,17 @@ void CSP_Logger::open(bool b_syslog, bool cons, const char *devname)
 #endif
        linenum = 1;
        line_wrap = 0;
-       
+
        this->debug_log(CSP_LOG_INFO, "Start logging.");
 }
-                       
+
 void CSP_Logger::debug_log(int level, const char *fmt, ...)
 {
        QMutexLocker locker(lock_mutex);
        char strbuf[4096];
        va_list ap;
-       
-       va_start(ap, fmt);      
+
+       va_start(ap, fmt);
        vsnprintf(strbuf, 4095, fmt, ap);
        debug_log(level, 0, strbuf);
        va_end(ap);
@@ -313,8 +313,8 @@ void CSP_Logger::debug_log(int level, int domain_num, const char *fmt, ...)
        QMutexLocker locker(lock_mutex);
        char strbuf[4096];
        va_list ap;
-       
-       va_start(ap, fmt);      
+
+       va_start(ap, fmt);
        vsnprintf(strbuf, 4095, fmt, ap);
        debug_log(level, domain_num, strbuf);
        va_end(ap);
@@ -332,16 +332,17 @@ void CSP_Logger::debug_log(int level, int domain_num, char *strbuf)
        char strbuf2[256];
        char strbuf3[24];
        struct timeval tv;
-       
+
        if(!log_opened) return;
+       if(strbuf == nullptr) return;
        if(level < 0) level = 0;
        if(level >= CSP_LOG_LEVELS) level = CSP_LOG_LEVELS - 1;
-               
-#if !defined(Q_OS_WIN)   
+
+#if !defined(Q_OS_WIN)
        int level_flag = LOG_USER;
        if(level == CSP_LOG_DEBUG) {
           level_flag |= LOG_DEBUG;
-       } else if(level == CSP_LOG_INFO) { 
+       } else if(level == CSP_LOG_INFO) {
           level_flag |= LOG_INFO;
        } else if(level == CSP_LOG_WARN) {
           level_flag |= LOG_WARNING;
@@ -349,15 +350,16 @@ void CSP_Logger::debug_log(int level, int domain_num, char *strbuf)
           level_flag |= LOG_DEBUG;
        }
 #endif
-       char *p;
+       char *p = strbuf;
        char *p_bak;
        const char delim[2] = "\n";
+
        QMutexLocker locker(lock_mutex);
        {
 #ifdef __MINGW32__
                p = strtok(strbuf, delim);
 #else
-               p = strtok_r(strbuf, delim, &p_bak); 
+               p = strtok_r(strbuf, delim, &p_bak);
 #endif
        }
        if(strbuf != NULL) {
@@ -368,26 +370,26 @@ void CSP_Logger::debug_log(int level, int domain_num, char *strbuf)
                timedat = localtime(&nowtime);
                strftime(strbuf2, 255, "%Y-%m-%d %H:%M:%S", timedat);
                snprintf(strbuf3, 23, ".%06ld", tv.tv_usec);
-               
+
                QString time_s = QString::fromLocal8Bit(strbuf2) + QString::fromLocal8Bit(strbuf3);
-               
+
                int cons_log_level_n = (1 << level) & cons_log_levels;
                int sys_log_level_n = (1 << level) & sys_log_levels;
                QString domain_s;
                bool record_flag = true;
-               
+
                domain_s.clear();
                if((domain_num > 0) && (domain_num < CSP_LOG_TYPE_COMPONENT_END)) {
                        domain_s = component_names.at(domain_num - 1);
                } else if((domain_num >= CSP_LOG_TYPE_VM_CPU0) && (domain_num < CSP_LOG_TYPE_VM_DEVICE_0)) {
                        domain_s = cpu_names.at(domain_num - CSP_LOG_TYPE_VM_CPU0);
-                       
+
                        record_flag = level_cpu_out_record[domain_num - CSP_LOG_TYPE_VM_CPU0][level];
                        if(!level_cpu_out_syslog[domain_num - CSP_LOG_TYPE_VM_CPU0][level]) sys_log_level_n = 0;
                        if(!level_cpu_out_console[domain_num - CSP_LOG_TYPE_VM_CPU0][level]) cons_log_level_n = 0;
                } else if((domain_num >= CSP_LOG_TYPE_VM_DEVICE_0) && (domain_num <= CSP_LOG_TYPE_VM_DEVICE_END)) {
                        domain_s = device_names.at(domain_num - CSP_LOG_TYPE_VM_DEVICE_0);
-                       
+
                        record_flag = level_dev_out_record[domain_num - CSP_LOG_TYPE_VM_DEVICE_0][level];
                        if(!level_dev_out_syslog[domain_num - CSP_LOG_TYPE_VM_DEVICE_0][level]) sys_log_level_n = 0;
                        if(!level_dev_out_console[domain_num - CSP_LOG_TYPE_VM_DEVICE_0][level]) cons_log_level_n = 0;
@@ -404,7 +406,7 @@ void CSP_Logger::debug_log(int level, int domain_num, char *strbuf)
                }
                if(!log_cons || !log_cons_out) cons_log_level_n = 0;
                if(!syslog_flag || !syslog_flag_out) sys_log_level_n = 0;
-               
+
                do {
                        if(p != NULL) {
                                CSP_LoggerLine *tmps = NULL;
@@ -414,13 +416,13 @@ void CSP_Logger::debug_log(int level, int domain_num, char *strbuf)
                                        if(cons_log_level_n != 0) {
                                                emit sig_console_message(log_sysname, tmps->get_element_console());
                                        }
-#if !defined(Q_OS_WIN)   
+#if !defined(Q_OS_WIN)
                                        if(sys_log_level_n != 0) {
                                                syslog(level_flag, "%s",
                                                           tmps->get_element_syslog().toLocal8Bit().constData());
                                        }
 #endif
-                                       
+
                                }
                                {
 #ifdef __MINGW32__
@@ -447,7 +449,7 @@ void CSP_Logger::debug_log(int level, int domain_num, char *strbuf)
                        {
                                fflush(stdout);
                        }
-#endif                 
+#endif
                } while(p != NULL);
        }
 }
@@ -456,7 +458,7 @@ void CSP_Logger::set_log_status(bool sw)
 {
        log_onoff = sw;
 }
-   
+
 void CSP_Logger::set_log_stdout(int level, bool sw)
 {
        if((level < 0) || (level >= 32)) {
@@ -473,7 +475,7 @@ void CSP_Logger::set_log_stdout(int level, bool sw)
 
 void CSP_Logger::set_log_syslog(int level, bool sw)
 {
-#if !defined(Q_OS_WIN)   
+#if !defined(Q_OS_WIN)
        if((level < 0) || (level >= 32)) {
                syslog_flag_out = sw;
                return;
@@ -491,26 +493,26 @@ bool CSP_Logger::get_status(void)
 {
        return log_opened;
 }
-   
-       
+
+
 void CSP_Logger::close(void)
 {
        QMutexLocker locker(lock_mutex);
 
        log_opened = false;
-#if !defined(Q_OS_WIN)   
+#if !defined(Q_OS_WIN)
        if(syslog_flag != 0) {
             closelog();
        }
 #endif
        syslog_flag = false;
        syslog_flag_out = false;
-       
+
        log_cons = false;
        log_cons_out = false;
-       
+
        log_onoff = false;
-       
+
 //     while(!squeue.isEmpty()) {
 //             CSP_LoggerLine *p = squeue.dequeue();
 //             if(p != NULL) delete p;
@@ -536,34 +538,49 @@ void CSP_Logger::set_emu_vm_name(const char *devname)
        log_sysname = log_sysname + dname + QString::fromUtf8(")");
 }
 
-void CSP_Logger::set_device_name(int num, char *devname)
+void CSP_Logger::do_set_device_name(int num, QString devname)
 {
-       QString tmps;
        if(num < 0) return;
        if(num > (CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0)) return;
-       
+
        QMutexLocker locker(lock_mutex);
-       if(devname == NULL) {
+
+       if(devname.isEmpty()) {
                QString s;
                s.setNum(num);
-               tmps = QString::fromUtf8("Device#");
+               QString tmps = QString::fromUtf8("Device#");
                tmps = tmps + s;
+               device_names.replace(num, tmps);
        } else {
-               tmps = QString::fromUtf8(devname);
+               device_names.replace(num, devname);
        }
-       device_names.replace(num, tmps);
+
        if(max_devices <= num) max_devices = num + 1;
 }
 
+void CSP_Logger::set_device_name(int num, char *devname)
+{
+       QString tmps;
+       if(devname == nullptr) {
+               do_set_device_name(num, QString::fromUtf8(""));
+       } else {
+               do_set_device_name(num, QString::fromUtf8(devname));
+       }
+}
+
 void CSP_Logger::set_cpu_name(int num, char *devname)
 {
+       if(devname == nullptr) return;
+       do_set_cpu_name(num, QString::fromUtf8(devname));
+}
+
+void CSP_Logger::do_set_cpu_name(int num, QString devname)
+{
        if(num < 0) return;
        if(num > (CSP_LOG_TYPE_VM_CPU7 - CSP_LOG_TYPE_VM_CPU0)) return;
-       if(devname == NULL) return;
+
        QMutexLocker locker(lock_mutex);
-       
-       QString tmps = QString::fromUtf8(devname);
-       device_names.replace(num, tmps);
+       device_names.replace(num, devname);
        if(max_cpus <= num) max_cpus = num + 1;
 }
 
@@ -647,7 +664,7 @@ void CSP_Logger::set_device_node_log(int to_output, int type, int *flags, int st
 {
        if(flags == NULL) return;
        if(start < 0) return;
-       
+
        int i;
        bool f;
        for(i = 0; i < devices; i++) {
@@ -662,11 +679,11 @@ void CSP_Logger::output_event_log(int device_id, int level, const char *fmt, ...
        char strbuf2[4096];
        char *p = NULL;
        p = (char *)(device_names.at(device_id).toLocal8Bit().constData());
-       
+
        va_list ap;
-       va_start(ap, fmt);      
+       va_start(ap, fmt);
        vsnprintf(strbuf2, 4095, fmt, ap);
-       snprintf(strbuf, 4500, "[%s] %s", p, strbuf2); 
+       snprintf(strbuf, 4500, "[%s] %s", p, strbuf2);
        debug_log(level, CSP_LOG_TYPE_EVENT, strbuf);
        va_end(ap);
 }
@@ -767,10 +784,10 @@ int64_t CSP_Logger::write_log(const _TCHAR *name, const char *domain_name, bool
 {
        int64_t n_len = (int64_t)-1;
        if(name == NULL) return n_len;
-       
+
        FILEIO *fio = new FILEIO();
        if(fio == NULL) return n_len;
-       
+
        if(!fio->Fopen(name, FILEIO_READ_WRITE_BINARY)) {
                delete fio;
                return n_len;
@@ -803,9 +820,9 @@ int64_t CSP_Logger::copy_log(char *buffer, int64_t buf_size, int64_t *lines, cha
        int64_t ssize = start_size;
        if(ssize < 0) ssize = 0;
        if(start_size >= buf_size) return -1;
-       
+
        char *p = &(buffer[start_size]);
-       
+
        if(line < 0) line = 0;
        {
                QMutexLocker locker(lock_mutex);
index 8c082de..a68fde1 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Log functions
  * (C) 2014-06-30 K.Ohta
- * 
+ *
  * History:
  *  Dec 30, 2014 Move from XM7/SDL, this was Ohta's original code.
  * Licence : GPLv2
@@ -30,7 +30,7 @@
 
 #define CSP_LOG_ON 1
 #define CSP_LOG_OFF 0
-   
+
 #define CSP_LOG_DEBUG 0
 #define CSP_LOG_INFO 1
 #define CSP_LOG_WARN 2
@@ -129,7 +129,7 @@ public:
        void run() override;
 public slots:
        void do_message(QString header, QString message);
-       
+
 };
 
 class DLL_PREFIX CSP_Logger: public QObject {
@@ -151,7 +151,7 @@ private:
        bool level_state_out_record;
        bool level_state_out_syslog;
        bool level_state_out_console;
-       
+
        QString loglist;
        QString log_sysname;
        QStringList component_names;
@@ -159,7 +159,7 @@ private:
        QStringList cpu_names;
        QStringList device_names;
        CSP_Log_ConsoleThread *console_printer;
-       
+
        // Device
        bool level_dev_out_record[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1][CSP_LOG_LEVELS]; // Record to log chain
        bool level_dev_out_syslog[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1][CSP_LOG_LEVELS]; // Syslog chain
@@ -169,7 +169,7 @@ private:
        bool level_cpu_out_record[8][CSP_LOG_LEVELS]; // Record to log chain
        bool level_cpu_out_syslog[8][CSP_LOG_LEVELS]; // Syslog chain
        bool level_cpu_out_console[8][CSP_LOG_LEVELS]; // Console log chain
-       
+
        QVector<CSP_LoggerLine *> squeue;
 #if QT_VERSION >= 0x051400
        QRecursiveMutex *lock_mutex;
@@ -188,7 +188,6 @@ public:
        ~CSP_Logger();
        void set_osd(OSD_BASE *p) { p_osd = p; }
        void open(bool b_syslog, bool cons, const char *devname);
-       void reset(void);
        void debug_log(int level, const char *fmt, ...);
        void debug_log(int level, int domain_num, const char *fmt, ...);
        void debug_log(int level, int domain_num, char *strbuf);
@@ -197,7 +196,7 @@ public:
        void set_log_syslog(int level, bool sw);
        void set_log_stdout(int level, bool sw);
        bool get_status(void);
-       
+
        void set_emu_vm_name(const char *devname);
        void set_device_name(int num, char *devname);
        void set_cpu_name(int num, char *devname);
@@ -211,11 +210,14 @@ public:
        int64_t copy_log(char *buffer, int64_t buf_size, int64_t *lines = NULL, char *domainname = NULL, bool utf8 = true, bool forget = false, int64_t start = 0, int64_t start_size = 0, int64_t *end_line = 0);
        void *get_raw_data(bool forget = false, int64_t start = 0, int64_t *end_line = NULL);
 public slots:
+       void reset(void);
        void do_debug_log(int level, int domain_num, QString mes);
        void set_device_node_log(int device_id, int to_output, int type, bool flag);
        void set_device_node_log(int to_output, int type, bool* flags, int start, int devices);
        void set_device_node_log(int to_output, int type, int *flags, int start, int devices);
-       
+       void do_set_device_name(int num, QString devname);
+       void do_set_cpu_name(int num, QString devname);
+
 signals:
        int sig_console_message(QString, QString);
        int sig_console_quit();
index b02cc23..e93de32 100644 (file)
@@ -793,7 +793,7 @@ public slots:
 
        int set_recent_compact_disc(int drv, int num);
        void do_eject_compact_disc(int drv);
-       void do_open_compact_disc(int drv, QString path);
+       void do_open_compact_disc_ui(int drv, QString path);
        void do_update_compact_disc_history(int drive, QStringList lst);
        void do_ui_compact_disc_insert_history(int drv, QString fname);
        void do_ui_eject_compact_disc(int drv);
index 93447d9..158035d 100644 (file)
@@ -18,6 +18,16 @@ Menu_CompactDiscClass::Menu_CompactDiscClass(QMenuBar *root_entry, QString desc,
 {
        use_write_protect = false;
        use_d88_menus = false;
+}
+
+Menu_CompactDiscClass::~Menu_CompactDiscClass()
+{
+}
+
+
+void Menu_CompactDiscClass::create_pulldown_menu_device_sub(void)
+{
+       //
        action_swap_byteorder = new Action_Control(p_wid, using_flags);
 
        struct CSP_Ui_Menu::DriveIndexPair tmp;
@@ -29,6 +39,7 @@ Menu_CompactDiscClass::Menu_CompactDiscClass(QMenuBar *root_entry, QString desc,
        action_swap_byteorder->setVisible(true);
        action_swap_byteorder->setCheckable(true);
 
+       std::shared_ptr<USING_FLAGS>p = using_flags;
        if(p.get() != nullptr) {
                action_swap_byteorder->setChecked(p->is_cdaudio_swap_byteorder(media_drive));
        } else {
@@ -37,21 +48,11 @@ Menu_CompactDiscClass::Menu_CompactDiscClass(QMenuBar *root_entry, QString desc,
        addAction(action_swap_byteorder);
 }
 
-Menu_CompactDiscClass::~Menu_CompactDiscClass()
-{
-}
-
-
-void Menu_CompactDiscClass::create_pulldown_menu_device_sub(void)
-{
-       //
-}
-
 
 void Menu_CompactDiscClass::connect_menu_device_sub(void)
 {
 
-       connect(this, SIGNAL(sig_open_media(int, QString)),     p_wid, SLOT(do_open_compact_disc(int, QString)));
+       connect(this, SIGNAL(sig_open_media(int, QString)),     p_wid, SLOT(do_open_compact_disc_ui(int, QString)));
        connect(this, SIGNAL(sig_eject_media(int)),     p_wid, SLOT(do_eject_compact_disc(int)));
        connect(this, SIGNAL(sig_set_recent_media(int, int)), p_wid, SLOT(set_recent_compact_disc(int, int)));
        // Will move to EMUTHREADCLASS?
@@ -64,6 +65,7 @@ void Menu_CompactDiscClass::connect_via_emu_thread(EmuThreadClassBase *p)
        connect(action_eject, SIGNAL(triggered()), p, SLOT(do_eject_compact_disc()), Qt::QueuedConnection);
 }
 
+
 void Menu_CompactDiscClass::retranslate_pulldown_menu_device_sub(void)
 {
        action_insert->setText(QApplication::translate("MenuMedia", "Insert Compact Disc", 0));
index bf2572c..477f243 100644 (file)
@@ -41,7 +41,7 @@ extern const int DLL_PREFIX screen_mode_height[];
 static inline void SETUP_HISTORY(void* recent, QStringList& list, const ssize_t width = MAX_HISTORY)
 {
        if(recent == nullptr) return;
-       
+
        list.clear();
        const size_t length = _MAX_PATH;
        _TCHAR* p = (_TCHAR *)recent;
@@ -56,9 +56,9 @@ static inline void WRITEBACK_TO_HISTORY(void* recent, QStringList list, const ss
 {
        const size_t length = _MAX_PATH;
        if(recent == nullptr) return;
-       
+
        _TCHAR* p = (_TCHAR *)recent;
-       // Clear LIST 
+       // Clear LIST
        for(int i = 0; i < width; i++) {
                memset(p, 0x00, length);
                p = &(p[length]);
@@ -87,7 +87,7 @@ static inline void UPDATE_HISTORY(QString path, void *recent, QStringList& list,
        // Set temporally list
        QStringList tmpl;
        SETUP_HISTORY(recent, tmpl, width);
-       
+
        if(!(path.isEmpty())) {
                tmpl.push_front(path);
        }
@@ -105,13 +105,14 @@ static inline void UPDATE_HISTORY(QString path, void *recent, QStringList& list,
        WRITEBACK_TO_HISTORY(recent, tmpl2, width);
        list = tmpl2;
 }
-       
+
 static inline void UPDATE_HISTORY(_TCHAR *path, void *recent, QStringList& list, const ssize_t width = MAX_HISTORY)
 {
-       
+
        if(recent == nullptr) return;
        if(path == nullptr) return;
        QString _path = QString::fromLocal8Bit(path);
+       //QString _path = QString::fromUtf8(path);
        UPDATE_HISTORY(_path, recent, list, width);
 }
 
index d59247a..6ed792b 100644 (file)
@@ -27,14 +27,15 @@ void Ui_MainWindowBase::CreateCDROMMenu(int drv, int drv_base)
 
        menu_CDROM[drv]->create_pulldown_menu();
        // Translate Menu
+       ext_play = "*.ccd *.cue *.iso *.gz";
+       desc_play = "Compact Disc";
+       menu_CDROM[drv]->do_clear_inner_media();
+       menu_CDROM[drv]->do_add_media_extension(ext_play, desc_play);
+
        SETUP_HISTORY(p_config->recent_compact_disc_path[drv], listCDROM[drv]);
        menu_CDROM[drv]->do_update_histories(listCDROM[drv]);
        menu_CDROM[drv]->do_set_initialize_directory(p_config->initial_compact_disc_dir);
 
-       ext_play = "*.ccd *.cue *.iso *.bin *.gz";
-       desc_play = "Compact Disc";
-       menu_CDROM[drv]->do_add_media_extension(ext_play, desc_play);
-
 }
 
 void Ui_MainWindowBase::CreateCDROMPulldownMenu(void)
@@ -59,7 +60,7 @@ int Ui_MainWindowBase::set_recent_compact_disc(int drv, int num)
 
        s_path = QString::fromLocal8Bit(p_config->recent_compact_disc_path[drv][num]);
        if(s_path.isEmpty()) return -1;
-       do_open_compact_disc(drv, s_path);
+       do_open_compact_disc_ui(drv, s_path);
        return 0;
 }
 
@@ -88,22 +89,18 @@ void Ui_MainWindowBase::do_ui_compact_disc_insert_history(int drv, QString fname
        if(p.get() == nullptr) return;
        if(fname.length() <= 0) return;
 
-       if(using_flags->get_max_cd() <= drv) return;
+       if(p->get_max_cd() <= drv) return;
 
        _TCHAR path_shadow[_MAX_PATH] = {0};
 
        my_strncpy_s(path_shadow, _MAX_PATH, fname.toLocal8Bit().constData(), _TRUNCATE);
        if(!(FILEIO::IsFileExisting(path_shadow))) return;
 
-       UPDATE_HISTORY(path_shadow, p_config->recent_compact_disc_path[drv], listCDROM[drv]);
+       UPDATE_HISTORY(fname, p_config->recent_compact_disc_path[drv], listCDROM[drv]);
        my_strncpy_s(p_config->initial_compact_disc_dir,
                                 sizeof(p_config->initial_compact_disc_dir) / sizeof(_TCHAR),
                                 get_parent_dir((const _TCHAR*)path_shadow),
                                 _TRUNCATE);
-       my_strncpy_s(path_shadow,
-                                _MAX_PATH,
-                                fname.toLocal8Bit().constData(),
-                                _TRUNCATE);
        menu_CDROM[drv]->do_set_initialize_directory(p_config->initial_compact_disc_dir);
        do_update_compact_disc_history(drv, listCDROM[drv]);
 
@@ -113,7 +110,7 @@ void Ui_MainWindowBase::do_ui_compact_disc_insert_history(int drv, QString fname
        }
 }
 
-void Ui_MainWindowBase::do_open_compact_disc(int drv, QString path)
+void Ui_MainWindowBase::do_open_compact_disc_ui(int drv, QString path)
 {
        std::shared_ptr<USING_FLAGS>p = using_flags;
        if(p.get() == nullptr) return;
index 128bb1b..eda59f2 100644 (file)
@@ -68,6 +68,11 @@ OSD_BASE::OSD_BASE(std::shared_ptr<USING_FLAGS> p, std::shared_ptr<CSP_Logger> l
        m_sound_period = 0;
        sound_initialized = false;
        sound_ok = false;
+
+       connect(this, SIGNAL(sig_debug_log(int, int, QString)), p_logger.get(), SLOT(do_debug_log(int, int, QString)), Qt::QueuedConnection);
+       connect(this, SIGNAL(sig_logger_reset()), p_logger.get(), SLOT(reset()), Qt::QueuedConnection);
+       connect(this, SIGNAL(sig_logger_set_device_name(int, QString)), p_logger.get(), SLOT(do_set_device_name(int, QString)), Qt::QueuedConnection);
+       connect(this, SIGNAL(sig_logger_set_cpu_name(int, QString)), p_logger.get(), SLOT(do_set_cpu_name(int, QString)), Qt::QueuedConnection);
 }
 
 OSD_BASE::~OSD_BASE()
@@ -373,19 +378,24 @@ void OSD_BASE::reset_vm_node(void)
 {
        device_node_t sp;
        device_node_list.clear();
-       p_logger->reset();
+       emit sig_logger_reset();
        max_vm_nodes = 0;
 }
 
 void OSD_BASE::debug_log(int level, int domain_num, char *strbuf)
 {
-       p_logger->debug_log(level, domain_num, strbuf);
+       QString tmps = QString::fromLocal8Bit(strbuf);
+       emit sig_debug_log(level, domain_num, tmps);
 }
 
 
 void OSD_BASE::set_device_name(int id, char *name)
 {
-       p_logger->set_device_name(id, (char *)name);
+       if(name != nullptr) {
+               emit sig_logger_set_device_name(id, QString::fromUtf8(name));
+       } else {
+               emit sig_logger_set_device_name(id, QString::fromUtf8(""));
+       }
 }
 
 void OSD_BASE::set_vm_node(int id, const _TCHAR *name)
index 4ffd26a..584420c 100644 (file)
@@ -821,6 +821,11 @@ signals:
        int sig_ui_bubble_close(int);
        int sig_ui_bubble_write_protect(int, quint64);
 
+       // To Logger.
+       int sig_debug_log(int, int, QString);
+       int sig_logger_reset();
+       int sig_logger_set_device_name(int, QString);
+       int sig_logger_set_cpu_name(int, QString);
 };
 
 QT_END_NAMESPACE
index 4666f3e..457a303 100644 (file)
@@ -75,7 +75,7 @@ void OSD_BASE::initialize_input()
        }
        delete fio;
        now_auto_key = false;
-       
+
        // initialize shift+numpad conversion
        memset(key_converted, 0, sizeof(key_converted));
        key_shift_pressed = key_shift_released = false;
@@ -115,9 +115,9 @@ void OSD_BASE::update_input_mouse()
                double factor = (double)(p_config->mouse_sensitivity & ((1 << 16) - 1));
                diffx = (diffx * factor) / 8192.0;
                diffy = (diffy * factor) / 8192.0;
-               
+
                mouse_status[0] = (int32_t)rint(diffx);
-               mouse_status[1] = (int32_t)rint(diffy); 
+               mouse_status[1] = (int32_t)rint(diffy);
                mouse_status[2] = mouse_button;
                //printf("Mouse delta(%d, %d)\n", delta_x, delta_y);
                mouse_oldx = mouse_ptrx;
@@ -169,7 +169,7 @@ void OSD_BASE::update_input()
                                        status[vk[i]] = 1;
                                }
                        }
-               } else if(p_config->joy_to_key_type == 1) { // 2468                     
+               } else if(p_config->joy_to_key_type == 1) { // 2468
                        std::lock_guard<std::recursive_timed_mutex>  n(joystick_mutex);
                        static const int vk[] = {VK_NUMPAD8, VK_NUMPAD2, VK_NUMPAD4, VK_NUMPAD6};
                        for(int i = 0; i < 4; i++) {
@@ -191,7 +191,7 @@ void OSD_BASE::update_input()
                        case 0x01       : status[VK_NUMPAD8] = 1; break; // up
                        case 0x01 + 0x08: status[VK_NUMPAD9] = 1; break; // up-right
                        }
-               } else if(p_config->joy_to_key_type == 3) { // 1235                     
+               } else if(p_config->joy_to_key_type == 3) { // 1235
                        static const int vk[] = {VK_NUMPAD5, VK_NUMPAD2, VK_NUMPAD1, VK_NUMPAD3};
                        std::lock_guard<std::recursive_timed_mutex>  n(joystick_mutex);
                        for(int i = 0; i < 4; i++) {
@@ -258,7 +258,7 @@ void OSD_BASE::update_input()
                                }
                        }
                }
-       }                                       
+       }
        // release keys
        if(lost_focus && !now_auto_key) {
                // we lost key focus so release all pressed keys
@@ -286,7 +286,7 @@ void OSD_BASE::update_input()
 
        // update mouse status
        //update_input_mouse();
-       
+
 }
 
 void OSD_BASE::key_down(int code, bool extended, bool repeat)
@@ -353,7 +353,7 @@ void OSD_BASE::key_down(int code, bool extended, bool repeat)
                        default:
                                break;
                        }
-   
+
 //                     if(code == VK_LSHIFT || code == VK_RSHIFT) {
                        if(code == VK_LSHIFT) {
                                key_shift_pressed = true;
@@ -440,7 +440,9 @@ void OSD_BASE::key_up(int code, bool extended)
 //#ifdef USE_AUTO_KEY
        if(!__USE_AUTO_KEY || (!now_auto_key && !p_config->romaji_to_kana)) {
 //#endif
-               //csp_logger->debug_log(CSP_LOG_DEBUG, CSP_LOG_TYPE_OSD, "KEY UP %d", code);
+               // _TCHAR __tmps1[128] = {0};
+               // my_stprintf_s(__tmps1, sizeof(__tmps1) - 1, "KEY UP %d", code);
+               //emit sig_debug_log(CSP_LOG_DEBUG, CSP_LOG_TYPE_OSD, QString::fromUtf8(__tmps));
                //if(!dinput_key_available) {
                        if(code == VK_SHIFT) {
                                if((key_status[VK_LSHIFT] & 0x80) && !(GetAsyncKeyState(VK_LSHIFT) & 0x8000)) {
@@ -495,7 +497,7 @@ void OSD_BASE::key_up(int code, bool extended)
                        default:
                                break;
                        }
-                                       
+
 //                     if(code == VK_LSHIFT || code == VK_RSHIFT) {
                                if(code == VK_LSHIFT) {
                                        key_shift_pressed = false;
@@ -555,7 +557,7 @@ void OSD_BASE::key_up(int code, bool extended)
 void OSD_BASE::key_down_native(int code, bool repeat)
 {
        bool keep_frames = false;
-       
+
        if(code == 0xf0) {
                code = VK_CAPITAL;
                keep_frames = true;
@@ -584,11 +586,11 @@ void OSD_BASE::key_down_native(int code, bool repeat)
        uint8_t prev_shift = key_status[VK_SHIFT];
        uint8_t prev_control = key_status[VK_CONTROL];
        uint8_t prev_menu = key_status[VK_MENU];
-       
+
        key_status[VK_SHIFT] = key_status[VK_LSHIFT] | key_status[VK_RSHIFT];
        key_status[VK_CONTROL] = key_status[VK_LCONTROL] | key_status[VK_RCONTROL];
        key_status[VK_MENU] = key_status[VK_LMENU] | key_status[VK_RMENU];
-       
+
        if(code == VK_LSHIFT || code == VK_RSHIFT) {
                if(prev_shift == 0 && key_status[VK_SHIFT] != 0) {
                        vm_key_down(VK_SHIFT, repeat);
@@ -617,15 +619,15 @@ void OSD_BASE::key_up_native(int code)
                return;
        }
        vm_key_up(code);
-       
+
        uint8_t prev_shift = key_status[VK_SHIFT];
        uint8_t prev_control = key_status[VK_CONTROL];
        uint8_t prev_menu = key_status[VK_MENU];
-       
+
        key_status[VK_SHIFT] = key_status[VK_LSHIFT] | key_status[VK_RSHIFT];
        key_status[VK_CONTROL] = key_status[VK_LCONTROL] | key_status[VK_RCONTROL];
        key_status[VK_MENU] = key_status[VK_LMENU] | key_status[VK_RMENU];
-       
+
        if(code == VK_LSHIFT || code == VK_RSHIFT) {
                if(prev_shift != 0 && key_status[VK_SHIFT] == 0) {
                        vm_key_up(VK_SHIFT);
@@ -644,7 +646,7 @@ void OSD_BASE::key_up_native(int code)
 void OSD_BASE::key_down_sub(int code, bool repeat)
 {
        bool keep_frames = false;
-       
+
        if(code == 0xf0) {
                code = VK_CAPITAL;
                keep_frames = true;
@@ -658,7 +660,7 @@ void OSD_BASE::key_down_sub(int code, bool repeat)
        if(!(code == VK_LSHIFT || code == VK_RSHIFT || code == VK_LCONTROL || code == VK_RCONTROL || code == VK_LMENU || code == VK_RMENU || code == VK_MENU)) {
                code = keycode_conv[code];
        }
-       
+
 
        if(get_dont_keeep_key_pressed()) {
                if(!(code == VK_LSHIFT || code == VK_RSHIFT || code == VK_LCONTROL || code == VK_RCONTROL || code == VK_LMENU || code == VK_RMENU || code == VK_MENU)) {
@@ -673,11 +675,11 @@ void OSD_BASE::key_down_sub(int code, bool repeat)
        uint8_t prev_shift = key_status[VK_SHIFT];
        uint8_t prev_control = key_status[VK_CONTROL];
        uint8_t prev_menu = key_status[VK_MENU];
-       
+
        key_status[VK_SHIFT] = key_status[VK_LSHIFT] | key_status[VK_RSHIFT];
        key_status[VK_CONTROL] = key_status[VK_LCONTROL] | key_status[VK_RCONTROL];
        key_status[VK_MENU] = key_status[VK_LMENU] | key_status[VK_RMENU];
-       
+
        {
                if(keep_frames) {
                        repeat = false;
@@ -721,7 +723,7 @@ void OSD_BASE::key_up_sub(int code)
        if((key_status[code] &= 0x7f) != 0) {
                return;
        }
-       
+
        uint8_t prev_shift = key_status[VK_SHIFT];
        uint8_t prev_control = key_status[VK_CONTROL];
        uint8_t prev_menu = key_status[VK_MENU];
@@ -804,7 +806,7 @@ void OSD_BASE::press_button(int num)
 {
        if(get_one_board_micro_computer()) {
                int code = get_vm_buttons_code(num);
-               
+
                if(code) {
                        key_down_sub(code, false);
                        key_status[code] = KEY_KEEP_FRAMES;
@@ -823,7 +825,7 @@ void OSD_BASE::enable_mouse()
                std::lock_guard<std::recursive_timed_mutex>  n(mouse_mutex);
                double xx = (double)(get_screen_width() / 2);
                double yy = (double)(get_screen_height() / 2);
-               
+
                mouse_oldx = xx;
                mouse_oldy = yy;
                mouse_ptrx = xx;
@@ -864,19 +866,19 @@ void OSD_BASE::set_mouse_pointer(double x, double y)
 {
        if((mouse_enabled)) {
                std::lock_guard<std::recursive_timed_mutex>  n(mouse_mutex);
-               
+
                mouse_ptrx = x;
                mouse_ptry = y;
        }
 }
 
-void OSD_BASE::set_mouse_button(int button) 
+void OSD_BASE::set_mouse_button(int button)
 {
        std::lock_guard<std::recursive_timed_mutex> n(mouse_mutex);
        mouse_button = button;
 }
 
-int32_t OSD_BASE::get_mouse_button() 
+int32_t OSD_BASE::get_mouse_button()
 {
        std::lock_guard<std::recursive_timed_mutex> n(mouse_mutex);
        return mouse_button;
@@ -903,7 +905,7 @@ void OSD_BASE::update_keyname_table(void)
                }
        }
 }
-       
+
 const _TCHAR *OSD_BASE::get_key_name_by_scancode(uint32_t scancode)
 {
        if(vm != NULL) {
index 2b6386f..f2a70b7 100644 (file)
@@ -122,7 +122,7 @@ int OSD::get_vm_buttons_code(int num)
 #else
        return 0;
 #endif
-}      
+}
 
 
 QString OSD::get_vm_config_name(void)
@@ -163,14 +163,14 @@ void OSD::initialize_screen()
        host_window_width = base_window_width = WINDOW_WIDTH;
        host_window_height = base_window_height = WINDOW_HEIGHT;
        host_window_mode = true;
-       
+
        vm_screen_width = SCREEN_WIDTH;
        vm_screen_height = SCREEN_HEIGHT;
        vm_window_width = WINDOW_WIDTH;
        vm_window_height = WINDOW_HEIGHT;
        vm_window_width_aspect = WINDOW_WIDTH_ASPECT;
        vm_window_height_aspect = WINDOW_HEIGHT_ASPECT;
-       
+
        QColor col(0, 0, 0, 255);
 
        vm_screen_buffer.width = SCREEN_WIDTH;
@@ -178,7 +178,7 @@ void OSD::initialize_screen()
        vm_screen_buffer.pImage = QImage(SCREEN_WIDTH, SCREEN_HEIGHT, QImage::Format_ARGB32);
        vm_screen_buffer.pImage.fill(col);
        now_record_video = false;
-       
+
        first_draw_screen = false;
        first_invalidate = true;
        self_invalidate = false;
@@ -234,14 +234,14 @@ void OSD::initialize_video()
        connect(this, SIGNAL(sig_movie_seek_frame(bool, int)), movie_loader, SLOT(do_seek_frame(bool, int)));
        //connect(this, SIGNAL(sig_movie_mute(bool, bool)), movie_loader, SLOT(do_mute(bool, bool)));
        connect(movie_loader, SIGNAL(sig_decoding_error(int)), this, SLOT(do_video_decoding_error(int)));
-#endif 
+#endif
 }
 
 void OSD::release_video()
 {
 #if defined(USE_MOVIE_PLAYER) || defined(USE_VIDEO_CAPTURE)
        delete movie_loader;
-#endif 
+#endif
        movie_loader = NULL;
 }
 
@@ -254,7 +254,7 @@ bool OSD::open_movie_file(const _TCHAR* file_path)
        if(movie_loader != NULL) {
                ret = movie_loader->open(QString::fromUtf8(file_path));
        }
-#endif 
+#endif
        return ret;
 }
 
@@ -281,7 +281,7 @@ uint32_t OSD::get_cur_movie_frame()
                }
                return (uint32_t)pos;
        }
-#endif 
+#endif
        return 0;
 }
 
@@ -305,7 +305,7 @@ void OSD::do_decode_movie(int frames)
 #if defined(USE_MOVIE_PLAYER) || defined(USE_VIDEO_CAPTURE)
        //movie_loader->do_decode_frames(frames, SCREEN_WIDTH, SCREEN_HEIGHT);
        movie_loader->do_decode_frames(frames, vm_window_width_aspect, vm_window_height_aspect);
-#endif 
+#endif
 }
 
 void OSD::get_video_buffer()
@@ -360,7 +360,7 @@ void OSD::release_socket()
                        udp_socket[i] = NULL;
                }
        }
-#endif 
+#endif
 }
 
 
@@ -375,7 +375,7 @@ void OSD::do_notify_socket_connected(int ch)
        // ToDo: Really need to lock? 20221011 K.O
        std::lock_guard<std::recursive_timed_mutex> lv(vm_mutex);
        vm->notify_socket_connected(ch);
-#endif 
+#endif
 }
 
 
@@ -414,7 +414,7 @@ void OSD::update_socket()
                                }
                        }
                }
-               if((p != nullptr) && (vm != nullptr)) { 
+               if((p != nullptr) && (vm != nullptr)) {
                        // recv
                        bytes = p->bytesAvailable();
                        if(bytes > 0) {
@@ -422,7 +422,7 @@ void OSD::update_socket()
                                uint8_t* buf0 = vm->get_socket_recv_buffer0(i, &size0, &size1);
                                uint8_t* buf1 = vm->get_socket_recv_buffer1(i);
                                qint64 size;
-                               
+
                                if(bytes > (qint64)(size0 + size1)) {
                                        bytes = (qint64)(size0 + size1);
                                }
@@ -444,7 +444,7 @@ void OSD::update_socket()
                        }
                }
        }
-#endif 
+#endif
 }
 
 bool OSD::initialize_socket_tcp(int ch)
@@ -469,7 +469,7 @@ bool OSD::initialize_socket_tcp(int ch)
        connect(tcp_socket[ch], SIGNAL(sig_connected(int)), this, SLOT(do_notify_socket_connected(int)));
        connect(tcp_socket[ch], SIGNAL(disconnected()), tcp_socket[ch], SLOT(do_disconnected()));
        connect(tcp_socket[ch], SIGNAL(sig_disconnected(int)), this, SLOT(do_notify_socket_disconnected(int)));
-#endif 
+#endif
        return true;
 }
 
@@ -494,7 +494,7 @@ bool OSD::initialize_socket_udp(int ch)
        connect(udp_socket[ch], SIGNAL(sig_connected(int)), this, SLOT(do_notify_socket_connected(int)));
        connect(udp_socket[ch], SIGNAL(disconnected()), udp_socket[ch], SLOT(do_disconnected()));
        connect(udp_socket[ch], SIGNAL(sig_disconnected(int)), this, SLOT(do_notify_socket_disconnected(int)));
-#endif 
+#endif
        return true;
 }
 
@@ -550,7 +550,7 @@ void OSD::disconnect_socket(int ch)
        }
        if(vm == nullptr) return;
        vm->notify_socket_disconnected(ch);
-#endif 
+#endif
 }
 
 bool OSD::listen_socket(int ch)
@@ -565,7 +565,7 @@ bool OSD::listen_socket(int ch)
        //connect(udp_socket[ch], SIGNAL(sig_connected(int)), this, SLOT(do_notify_socket_connected(int)));
        //connect(udp_socket[ch], SIGNAL(disconnected()), udp_socket[ch], SLOT(do_disconnected()));
        //connect(udp_socket[ch], SIGNAL(sig_disconnected(int)), this, SLOT(do_notify_socket_disconnected(int)));
-#endif 
+#endif
        return false;
 }
 
@@ -599,7 +599,7 @@ void OSD::send_socket_data_tcp(int ch)
                        vm->inc_socket_send_buffer_ptr(ch, (int)size2);
                }
        }
-#endif 
+#endif
 }
 
 void OSD::send_socket_data_udp(int ch, uint32_t ipaddr, int port)
@@ -618,7 +618,7 @@ void OSD::send_socket_data_udp(int ch, uint32_t ipaddr, int port)
                                return;
                        }
                        qint64 size2 = 0;
-                       
+
                        if(udp_socket[ch] != NULL) {
                                size2 = udp_socket[ch]->writeDatagram((const char *)buf, (qint64)size, addr, (quint16)port);
                                if(size2 < 0) {
@@ -632,7 +632,7 @@ void OSD::send_socket_data_udp(int ch, uint32_t ipaddr, int port)
                        vm->inc_socket_send_buffer_ptr(ch, (int)size2);
                }
        }
-#endif 
+#endif
 }
 
 void OSD::send_socket_data(int ch)
@@ -715,14 +715,14 @@ int OSD::draw_screen()
                return 0;
        }
        draw_screen_buffer = &vm_screen_buffer;
-       
+
        // calculate screen size
        // invalidate window
        // ToDo: Support MAX_DRAW_RANGES. 20221212 K.O
        emit sig_update_screen((void *)draw_screen_buffer, mapped);
 
        first_draw_screen = self_invalidate = true;
-       
+
        // record avi file
        if(now_record_video) {
                add_video_frames();
@@ -792,7 +792,7 @@ int OSD::add_video_frames()
                        counter++;
                }
        }
-       
+
        if(using_flags->is_use_one_board_computer()) {
                //int size = vm_screen_buffer.pImage.byteCount();
                int i = counter;
@@ -832,7 +832,7 @@ int OSD::add_video_frames()
                                if(pixel != 0x000000ff) {
                                        rec_image_buffer.setPixel(xx, yy, pixel);
                                }
-#endif                         
+#endif
                        }
                }
                if(i > 0) {
@@ -851,7 +851,9 @@ int OSD::add_video_frames()
                        emit sig_enqueue_video(i, vm_screen_width, vm_screen_height, &video_result);
                        //i--;
                }
-               //p_logger->debug_log(CSP_LOG_DEBUG2, CSP_LOG_TYPE_SCREEN,  "Push Video %d frames\n", counter);
+               // _TCHAR __tmps1[128] = {0};
+               // my_stprintf_s(__tmps1, sizeof(__tmps1) - 1, "Push Video %d frames\n", counter);
+               //emit sig_debug_log(CSP_LOG_DEBUG2, CSP_LOG_TYPE_SCREEN, QString::fromUtf8(__tmps1) );
        }
        return counter;
 }
@@ -903,14 +905,19 @@ void OSD::reset_vm_node(void)
 
        device_node_t sp;
        device_node_list.clear();
-       p_logger->reset();
+       emit sig_logger_reset();
+
        max_vm_nodes = 0;
        if(vm == NULL) return;
        for(DEVICE *p = vm->first_device; p != NULL; p = p->next_device) {
                sp.id = p->this_device_id;
                sp.name = p->this_device_name;
-               p_logger->set_device_name(sp.id, (char *)sp.name);
-               p_logger->debug_log(CSP_LOG_DEBUG, CSP_LOG_TYPE_GENERAL,  "Device %d :%s", sp.id, sp.name);
+               emit sig_logger_set_device_name(sp.id, QString::fromUtf8(sp.name));
+
+               _TCHAR tmps2[512] = {0};
+               my_stprintf_s(tmps2, sizeof(tmps2) - 1, "Device %d :%s", sp.id, sp.name);
+               emit sig_debug_log(CSP_LOG_DEBUG, CSP_LOG_TYPE_GENERAL, QString::fromUtf8(tmps2));
+
                device_node_list.append(sp);
                if(max_vm_nodes <= p->this_device_id) max_vm_nodes = p->this_device_id + 1;
        }
@@ -918,4 +925,3 @@ void OSD::reset_vm_node(void)
                emit sig_update_device_node_name(p->this_device_id, p->this_device_name);
        }
 }
-
index 7b85540..a364331 100644 (file)
@@ -265,7 +265,7 @@ uint32_t DEVICE::read_dma_data32w(uint32_t addr, int* wait)
 {
        return read_data32w(addr, wait);
 }
-       
+
 //<! i/o bus
 
 void DEVICE::write_io8(uint32_t addr, uint32_t data)
@@ -448,7 +448,7 @@ uint32_t DEVICE::read_dma_io32w(uint32_t addr, int* wait)
 {
        return read_io32w(addr, wait);
 }
-       
+
 // memory mapped i/o
 void DEVICE::write_memory_mapped_io8(uint32_t addr, uint32_t data)
 {
@@ -657,7 +657,7 @@ uint32_t DEVICE::get_intr_ack()
 
 void DEVICE::update_intr()
 {
-       
+
 }
 
 void DEVICE::notify_intr_reti()
@@ -667,7 +667,7 @@ void DEVICE::notify_intr_reti()
 void DEVICE::notify_intr_ei()
 {
 }
-       
+
 void DEVICE::do_dma()
 {
 }
@@ -697,7 +697,7 @@ uint32_t DEVICE::get_next_pc()
 {
        return 0;
 }
-       
+
 //<! bios
 bool DEVICE::bios_call_far_i86(uint32_t PC, uint16_t regs[], const uint16_t sregs[], int32_t* ZeroFlag, int32_t* CarryFlag, int* cycles, uint64_t* total_cycles)
 {
@@ -747,7 +747,7 @@ int DEVICE::release_sound_in_source(int bank)
        if(event_manager == NULL) return -1;
        return event_manager->release_sound_in_source(bank);
 }
-       
+
 bool DEVICE::is_sound_in_source_exists(int bank)
 {
        if(event_manager == NULL) {
@@ -1028,7 +1028,7 @@ uint32_t DEVICE::get_cpu_pc(int index)
 }
 
 uint64_t DEVICE::get_current_clock_uint64()
-{ 
+{
        __UNLIKELY_IF(event_manager == NULL) {
                event_manager = vm->first_device->next_device;
        }
@@ -1078,7 +1078,7 @@ int DEVICE::get_lines_per_frame()
 // Force render sound immediately when device's status has changed.
 // You must call this after you changing registers (or anything).
 // If has problems, try set_realtime_render.
-// See mb8877.cpp and ym2203.cpp. 
+// See mb8877.cpp and ym2203.cpp.
 // -- 20161010 K.O
 void DEVICE::touch_sound(void)
 {
@@ -1145,7 +1145,7 @@ void DEVICE::set_device_name(const _TCHAR *format, ...)
        if(format != NULL) {
                va_list ap;
                _TCHAR buffer[1024];
-               
+
                va_start(ap, format);
                my_vstprintf_s(buffer, 1024, format, ap);
                va_end(ap);
@@ -1160,16 +1160,16 @@ void DEVICE::set_device_name(const _TCHAR *format, ...)
 void DEVICE::out_debug_log(const char *fmt, ...)
 {
 #if defined(_USE_QT)
-       __UNLIKELY_IF(p_logger == NULL) return;
-       char strbuf[4096];
+       __UNLIKELY_IF(osd == nullptr) return;
+       char strbuf[4096] = {0};
        va_list ap;
-       
+
        va_start(ap, fmt);
        vsnprintf(strbuf, 4095, fmt, ap);
-       p_logger->debug_log(CSP_LOG_DEBUG, this_device_id + CSP_LOG_TYPE_VM_DEVICE_0, "%s", strbuf);
        va_end(ap);
+       osd->debug_log(CSP_LOG_DEBUG, this_device_id + CSP_LOG_TYPE_VM_DEVICE_0,  strbuf);
 #else
-       char strbuf[4096];
+       char strbuf[4096] = {0};
        va_list ap;
 
        va_start(ap, fmt);
@@ -1183,14 +1183,15 @@ void DEVICE::out_debug_log_with_switch(bool logging, const char *fmt, ...)
 {
        if(!(logging)) return;
 #if defined(_USE_QT)
-       __UNLIKELY_IF(p_logger == NULL) return;
-       char strbuf[4096];
+       __UNLIKELY_IF(osd == nullptr) return;
+       char strbuf[4096] = {0};
        va_list ap;
-       
+
        va_start(ap, fmt);
        vsnprintf(strbuf, 4095, fmt, ap);
-       p_logger->debug_log(CSP_LOG_DEBUG, this_device_id + CSP_LOG_TYPE_VM_DEVICE_0, "%s", strbuf);
        va_end(ap);
+       osd->debug_log(CSP_LOG_DEBUG, this_device_id + CSP_LOG_TYPE_VM_DEVICE_0, strbuf);
+
 #else
        char strbuf[4096];
        va_list ap;
@@ -1456,7 +1457,7 @@ const _TCHAR *DEVICE::get_lib_common_vm_version(void)
        return (const _TCHAR *)__LIBRARY_NAME;
 #else
        return (const _TCHAR *)"\0";
-#endif 
+#endif
 }
 
 
@@ -1482,4 +1483,3 @@ bool DEVICE::process_state(FILEIO* state_fio, bool loading)
                return true;
        }
 }
-
index 890ca82..78375c3 100644 (file)
@@ -89,8 +89,8 @@ namespace FMTOWNS {
 #pragma pack()
 #pragma pack(1)
        /*!
-        * 
-        * 
+        *
+        *
         */
        typedef struct {
                cd_data_head_t header;
@@ -113,7 +113,7 @@ namespace FMTOWNS {
 #pragma pack()
 #pragma pack(1)
        /*!
-        * @note 
+        * @note
         * @note 20201116 K.O
         */
        typedef union cdimage_buffer_s {
@@ -160,7 +160,7 @@ enum {
        CCD_PREGAP_MODE = 0x201,
        CCD_PREGAP_SUBC
 };
-       
+
 enum {
        CDROM_READ_MODE1 = 1,
        CDROM_READ_MODE2 = 2,
@@ -222,9 +222,9 @@ enum {
        TOWNS_CD_ACCEPT_04H_FOR_CMD_A0H = 0x04,
        TOWNS_CD_ACCEPT_08H_FOR_CMD_A0H = 0x08,
        TOWNS_CD_ACCEPT_MEDIA_CHANGED   = 0x09,
-       TOWNS_CD_ACCEPT_WAIT                    = 0x0d, 
+       TOWNS_CD_ACCEPT_WAIT                    = 0x0d,
 };
-               
+
 // status[1] @ status[0] == 21h
 // From Tsugaru Thanks to Yamakawa-San.
 enum {
@@ -252,7 +252,7 @@ enum {
        TOWNS_CD_PAUSE_CDDA,
        TOWNS_CD_UNPAUSE_CDDA,
 };
-       
+
 /*class TOWNS_CDROM : public SCSI_CDROM */
 class TOWNS_CDROM: public DEVICE {
 protected:
@@ -266,13 +266,13 @@ protected:
        // For Debugging, will remove 20200822 K.O
        DEVICE* d_cpu;
        DEVICE* d_dmac;
-       
+
        uint32_t max_fifo_length;
        uint32_t fifo_length;
-       
+
        uint16_t cpu_id;
        uint16_t machine_id;
-       
+
        uint8_t data_reg;
        bool dma_transfer;
        bool pio_transfer;
@@ -281,13 +281,13 @@ protected:
 
        bool cdrom_halted;
        bool status_seek;
-       
+
        SUBC_t subq_buffer[98]; // OK?
        int subq_bitptr;
        int subq_bitwidth;
        bool subq_overrun;
        bool is_playing;
-       
+
        int stat_track;
 
        bool is_cue;
@@ -301,9 +301,9 @@ protected:
                int physical_size;
                int logical_size;
        } toc_table[108];
-       _TCHAR track_data_path[100][_MAX_PATH];
+       _TCHAR track_data_path[101][_MAX_PATH];
        _TCHAR img_file_path_bak[_MAX_PATH];
-       bool with_filename[100];
+       bool with_filename[101];
 
        uint32_t cdda_start_frame;
        uint32_t cdda_end_frame;
@@ -313,7 +313,7 @@ protected:
        int cdda_repeat_count;
        bool cdda_interrupt;
        int cdda_buffer_ptr;
-       
+
        int mix_loop_num;
        int current_track;
        int read_sector;
@@ -322,7 +322,7 @@ protected:
 
        int next_seek_lba;
        int read_mode;
-       
+
        uint8_t prev_command;
        uint8_t latest_command;
        uint8_t reserved_command;
@@ -336,9 +336,9 @@ protected:
        bool dma_intr;
        bool mcu_intr_mask;
        bool dma_intr_mask;
-       
+
        bool mcuint_val;
-       
+
        int event_drq;
        int event_seek;
        int event_next_sector;
@@ -352,10 +352,10 @@ protected:
        int event_delay_command;
        int event_time_out;
        int event_eot;
-       
+
        int cdda_sample_l;
        int cdda_sample_r;
-               
+
        int _decibel_l;
        int _decibel_r;
        int volume_l;
@@ -363,7 +363,7 @@ protected:
 
        bool mute_left;
        bool mute_right;
-       
+
        uint8_t w_regs[16];
        static const uint16_t crc_table[256];
 
@@ -374,7 +374,7 @@ protected:
        uint8_t param_queue[8];
 
        bool command_received;
-       
+
        double seek_time;
        int track_num;
        uint32_t max_logical_block;
@@ -385,7 +385,7 @@ protected:
        uint32_t read_lba;
 
        bool cdrom_prefetch;
-       
+
        int extra_status;
        void play_cdda_from_cmd();
        void unpause_cdda_from_cmd();
@@ -410,32 +410,32 @@ protected:
        virtual bool seek_relative_frame_in_image(uint32_t frame_no);
     virtual int prefetch_audio_sectors(int sectors);
        virtual int __FASTCALL dequeue_audio_data(pair16_t& left, pair16_t& right);
-       
+
        virtual void read_cdrom();
-       virtual int read_sectors_image(int sectors, uint32_t& transferred_bytes);       
+       virtual int read_sectors_image(int sectors, uint32_t& transferred_bytes);
 
        bool check_notready_and_changed(bool force_int);
-       
+
        virtual void execute_command(uint8_t command);
-       
+
        bool __FASTCALL status_not_ready(bool forceint);
        bool __FASTCALL status_media_changed(bool forceint);
        bool __FASTCALL status_media_changed_or_not_ready(bool forceint);
-       
+
        void __FASTCALL status_hardware_error(bool forceint);
        void __FASTCALL status_parameter_error(bool forceint);
        void __FASTCALL status_read_done(bool forceint);
        void __FASTCALL status_data_ready(bool forceint);
-       
+
        void __FASTCALL status_accept(int extra, uint8_t s2, uint8_t s3);
        void __FASTCALL status_not_accept(int extra, uint8_t s1, uint8_t s2, uint8_t s3);
-       
+
        void __FASTCALL status_illegal_lba(int extra, uint8_t s1, uint8_t s2, uint8_t s3);
        void set_delay_ready();
        void set_delay_ready_nostatus();
        void set_delay_ready_eot();
        void set_delay_ready_cddareply();
-       
+
        uint32_t cdrom_get_adr(int trk);
 
        void __FASTCALL set_dma_intr(bool val);
@@ -447,7 +447,7 @@ protected:
         * @param use_mask true when masking mcu and dma.
         */
        void __FASTCALL set_intrs_force(bool mcu, bool dma, bool use_mask = false);
-       
+
        void __FASTCALL make_bitslice_subc_q(uint8_t *data, int bitwidth);
        uint16_t __FASTCALL calc_subc_crc16(uint8_t *databuf, int bytes, uint16_t initval);
 
@@ -458,11 +458,11 @@ protected:
 
        virtual bool open_iso_file(const _TCHAR* file_path);
        virtual bool open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path);
-       
+
        virtual uint8_t read_subq();
        virtual uint8_t get_subq_status();
        virtual void set_subq(void);
-       
+
        virtual int get_track_noop(uint32_t lba);
        virtual void get_track_by_track_num(int track);
        virtual uint32_t get_image_cur_position();
@@ -501,9 +501,9 @@ public:
                status_queue = NULL;
                _decibel_l = 0;
                _decibel_r = 0;
-               
+
                memset(subq_buffer, 0x00, sizeof(subq_buffer));
-               
+
                initialize_output_signals(&outputs_drq);
                initialize_output_signals(&outputs_mcuint);
                set_device_name(_T("FM-Towns CD-ROM drive"));
@@ -520,13 +520,13 @@ public:
        virtual void __FASTCALL write_io8(uint32_t addr, uint32_t data);
        virtual uint32_t __FASTCALL read_dma_io8(uint32_t addr);
        virtual void __FASTCALL write_dma_io8(uint32_t addr, uint32_t data);
-       
+
        virtual void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
        virtual uint32_t __FASTCALL read_signal(int id);
-       
+
        virtual void __FASTCALL event_callback(int event_id, int err);
        virtual void __FASTCALL mix(int32_t* buffer, int cnt);
-       
+
        virtual bool process_state(FILEIO* state_fio, bool loading);
 
        virtual bool mounted();
@@ -548,7 +548,7 @@ public:
                return 0x1fff; // Will change
        }
 
-       
+
        virtual void set_volume(int ch, int decibel_l, int decibel_r);
        virtual void get_volume(int ch, int& decibel_l, int& decibel_r);
        virtual bool read_buffer(int sectors);
@@ -628,7 +628,7 @@ public:
        {
                cpu_id = val & 0x07;
        }
-       
+
        void set_context_mpuint_line(DEVICE* dev, int id, uint32_t mask)
        {
                register_output_signal(&outputs_mcuint, dev, id, mask);
@@ -648,5 +648,5 @@ public:
        }
 };
 
-       
+
 }
index c4f0883..37490e6 100644 (file)
@@ -2591,6 +2591,7 @@ void TOWNS_CDROM::open_from_cmd(const _TCHAR* file_path)
                // get image file name
                if(open_ccd_file(file_path, img_file_path)) {
                        strncpy(img_file_path_bak, img_file_path, _MAX_PATH - 1);
+//                     strncpy(img_file_path_bak, file_path, _MAX_PATH - 1);
                }
        }
 
index f7b94b8..b06f6da 100644 (file)
@@ -18,6 +18,7 @@ namespace FMTOWNS {
 bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
 {
        my_stprintf_s(img_file_path, _MAX_PATH, _T("%s.img"), get_file_path_without_extensiton(file_path));
+
        if(!FILEIO::IsFileExisting(img_file_path)) {
                my_stprintf_s(img_file_path, _MAX_PATH, _T("%s.gz"), get_file_path_without_extensiton(file_path));
                if(!FILEIO::IsFileExisting(img_file_path)) {
@@ -38,6 +39,7 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
        image_tmp_data_path.clear();
 
        get_long_full_path_name(file_path, full_path_ccd, sizeof(full_path_ccd));
+//     out_debug_log(_T("open_ccd_file(): file_path = %s  / full_path_ccd = %s"), file_path, full_path_ccd);
        const _TCHAR *parent_dir = get_parent_dir((const _TCHAR *)full_path_ccd);
        std::map<std::string, int> ccd_phase;
        std::map<std::string, int> ccd_enum;
@@ -46,9 +48,9 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
        ccd_phase.insert(std::make_pair("[ENTRY ", CCD_PHASE_ENTRY));
        ccd_phase.insert(std::make_pair("[SESSION ", CCD_PHASE_SESSION));
        ccd_phase.insert(std::make_pair("[TRACK ", CCD_PHASE_TRACK));
-       ccd_phase.insert(std::make_pair("[CLONECDCD] ", CCD_PHASE_CLONECD));
+       ccd_phase.insert(std::make_pair("[CLONECD] ", CCD_PHASE_CLONECD));
        ccd_phase.insert(std::make_pair("[DISC] ", CCD_PHASE_DISC));
-       
+
        // [Entry foo]
        // ToDo:
        // Support AMin/ASec/AFrame and PMin/PSec/PFrame.
@@ -120,6 +122,7 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
                                        // Convert String to upper.
                                        std::transform(line_buf.begin(), line_buf.end(), line_buf.begin(),
                                           [](unsigned char c) -> unsigned char{ return std::toupper(c); });
+//                                     out_debug_log(_T("FILE_PATH=\"%s\"  line=\"%s\""), file_path, line_buf.c_str());
                                        //
                                        // Check Phase
                                        ;
@@ -139,12 +142,12 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
                                                                } catch (std::out_of_range &e) {
                                                                        arg2 = "";
                                                                }
-                                                               
+
                                                        }
                                                } else if(ptr2 != std::string::npos) {
                                                        token.resize(ptr2 + 1);
                                                }
-                                               
+
                                                try {
                                                        tmp_phase = ccd_phase.at(token);
                                                } catch (std::out_of_range &e) {
@@ -154,6 +157,7 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
                                                if(tmp_phase != CCD_PHASE_NULL) {
                                                        phase = tmp_phase;
                                                }
+//                                             out_debug_log(_T("open_ccd_file(): file_path = %s  / full_path_ccd = %s"), file_path, full_path_ccd);
                                                switch(phase) {
                                                case CCD_PHASE_ENTRY:
                                                        phase_arg = string_to_numeric(arg2);
@@ -206,7 +210,7 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
                                                }
                                                switch(phase) {
                                                case CCD_PHASE_SESSION:
-                                                       
+
                                                        // ToDo: Imprement around pregap.
                                                        break;
                                                case CCD_PHASE_DISC:
@@ -330,6 +334,8 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
                                                                break;
                                                        }
                                                        break;
+                                               default:
+                                                       break;
                                                }
                                        }
                                _n_continue:
@@ -363,20 +369,27 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
                                                        toc_table[i].lba_offset = 0;
                                                        toc_table[i].lba_size = toc_table[i + 1].index1 - toc_table[i].index0;
                                                }
+
 //                                             if((track_num == 2) && (max_logical_block > 0)) {
 //                                                     toc_table[track_num - 1].lba_size -= 1;
 //                                                     max_logical_block--;
 //                                             }
+
+                                               // ToDo: Will fix brakes insize of *file_ptr . 20230217 K.O
+#if 1
                                                for(int i = 1; i < track_num; i++) {
 //                                                     toc_table[i].index0 += toc_table[i].lba_offset;
 //                                                     toc_table[i].index1 += toc_table[i].lba_offset;
-                                                       out_debug_log(_T("TRACK#%02d TYPE=%s PREGAP=%d INDEX0=%d INDEX1=%d LBA_SIZE=%d LBA_OFFSET=%d PATH=%s\n"),
-                                                                                       i, (toc_table[i].is_audio) ? _T("AUDIO") : _T("MODE1/2352"),
-                                                                                       toc_table[i].pregap, toc_table[i].index0, toc_table[i].index1,
-                                                                                       toc_table[i].lba_size, toc_table[i].lba_offset, track_data_path[i - 1]);
+
+                                                       out_debug_log(_T("TRACK#%d TYPE=%s PREGAP=%d INDEX0=%d INDEX1=%d LBA_SIZE=%d LBA_OFFSET=%d"),
+
+                                                                                 i, ((toc_table[i].is_audio) ? _T("AUDIO") : _T("MODE1/2352")),
+                                                                                 toc_table[i].pregap, toc_table[i].index0, toc_table[i].index1,
+                                                                                 toc_table[i].lba_size, toc_table[i].lba_offset);
                                                        //#endif
                                                }
-
+#endif
+//                                             out_debug_log(_T("open_ccd_file(): track_num = %d file_path = %s  / full_path_ccd = %s"), track_num, file_path, full_path_ccd);
                                                break;
                                        }
                                }
@@ -398,7 +411,7 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
                if((max_logical_block = fio_img->FileLength() / 2352) > 0) {
                        // read ccd file
                        FILEIO* fio = new FILEIO();
-                       if(fio->Fopen(file_path, FILEIO_READ_BINARY)) {
+                       if(fio->Fopen(file_path, FILEIO_READ_ASCII)) {
                                char line[1024] = {0};
                                char *ptr;
                                int track = -1;
@@ -407,20 +420,20 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
                                                track = -1;
                                        } else if((ptr = strstr(line, "Point=0x")) != NULL) {
                                                if((track = hexatoi(ptr + 8)) > 0 && track < 0xa0) {
-                                                       if((track + 1) > track_num) {
+                                                       if(((track + 1) > track_num) && (track <= 100)) {
                                                                track_num = track + 1;
                                                        }
                                                }
                                        } else if((ptr = strstr(line, "Control=0x")) != NULL) {
-                                               if(track > 0 && track < 0xa0) {
+                                               if(track > 0 && track <= 100) {
                                                        toc_table[track].is_audio = (hexatoi(ptr + 10) != 4);
                                                }
                                        } else if((ptr = strstr(line, "ALBA=-")) != NULL) {
-                                               if(track > 0 && track < 0xa0) {
+                                               if(track > 0 && track <= 100) {
                                                        toc_table[track].pregap = atoi(ptr + 6);
                                                }
                                        } else if((ptr = strstr(line, "PLBA=")) != NULL) {
-                                               if(track > 0 && track < 0xa0) {
+                                               if(track > 0 && track <= 100) {
                                                        toc_table[track + 1].index0 = atoi(ptr + 5);
                                                }
                                        } else if((ptr = strstr(line, "[TRACK ")) != NULL) {
@@ -433,20 +446,20 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
                                                        char numbuf[3] = {0};
                                                        strncpy(numbuf, ptr + 7, (size_t)n);
                                                        track = atoi(numbuf);
-                                                       if((track + 1) > track_num) {
+                                                       if(((track + 1) > track_num) && (track <= 100)) {
                                                                track_num = track + 1;
                                                        }
                                                }
                                        } else if((ptr = strstr(line, "INDEX 0=")) != NULL) {
-                                               if(track > 0 && track < 0xa0) {
+                                               if(track > 0 && track <= 100) {
                                                        toc_table[track].index0 = atoi(ptr + 8);
                                                }
                                        } else if((ptr = strstr(line, "INDEX 1=")) != NULL) {
-                                               if(track > 0 && track < 0xa0) {
+                                               if(track > 0 && track <= 100) {
                                                        toc_table[track].index1 = atoi(ptr + 8);
                                                }
                                        } else if((ptr = strstr(line, "MODE=")) != NULL) {
-                                               if(track > 0 && track < 0xa0) {
+                                               if(track > 0 && track <= 100) {
                                                        int mode;
                                                        mode = atoi(ptr + 5);
                                                        switch(mode) {
@@ -480,6 +493,7 @@ bool TOWNS_CDROM::open_ccd_file(const _TCHAR* file_path, _TCHAR* img_file_path)
                                toc_table[0].physical_size = 0;
                                toc_table[0].logical_size = 0;
                                if(track_num > 0) {
+                                       if(track_num > 100) track_num = 101;
                                        for(int i = 1; i < track_num; i++) {
                                                // ToDo: Some types.
                                                toc_table[i].physical_size = 2352;
index 725618b..698184e 100644 (file)
@@ -42,7 +42,7 @@ bool TOWNS_CDROM::open_cue_file(const _TCHAR* file_path)
        image_tmp_data_path.clear();
 
        get_long_full_path_name(file_path, full_path_cue, sizeof(full_path_cue));
-       
+
        const _TCHAR *parent_dir = get_parent_dir((const _TCHAR *)full_path_cue);
 
        size_t _arg1_ptr;
@@ -64,7 +64,7 @@ bool TOWNS_CDROM::open_cue_file(const _TCHAR* file_path)
        cue_enum.insert(std::make_pair("INDEX", CUE_INDEX));
        cue_enum.insert(std::make_pair("PREGAP", CUE_PREGAP));
 
-       
+
        if(fio->Fopen(file_path, FILEIO_READ_ASCII)) { // ToDo: Support not ASCII cue file (i.e. SJIS/UTF8).20181118 K.O
                line_buf.clear();
                for(int i = 0; i < 100; i++) {
@@ -75,7 +75,7 @@ bool TOWNS_CDROM::open_cue_file(const _TCHAR* file_path)
                bool is_eof = false;
                int sptr = 0;
                bool have_filename = false;
-//             int _nr_num = 0;                        
+//             int _nr_num = 0;
                while(1) {
                        line_buf.clear();
                        int _np = 0;
@@ -95,7 +95,7 @@ bool TOWNS_CDROM::open_cue_file(const _TCHAR* file_path)
                        _arg1.clear();
                        _arg2.clear();
                        _arg3.clear();
-                       
+
                        ptr = line_buf.find_first_not_of((const char*)" \t");
                        if(ptr == std::string::npos) {
                                goto _n_continue;
@@ -141,7 +141,7 @@ bool TOWNS_CDROM::open_cue_file(const _TCHAR* file_path)
                                if((nr_current_track > 0) && (nr_current_track < 100)) {
                                        _arg2_ptr_s = _arg2.find_first_of((const char *)" \t");
                                        _arg2 = _arg2.substr(0, _arg2_ptr_s - 1);
-                                       
+
                                        toc_table[nr_current_track].pregap = get_frames_from_msf(_arg2.c_str());
                                }
                                break;
@@ -203,11 +203,12 @@ bool TOWNS_CDROM::open_cue_file(const _TCHAR* file_path)
                        for(int i = 1; i < track_num; i++) {
                                toc_table[i].index0 += toc_table[i].lba_offset;
                                toc_table[i].index1 += toc_table[i].lba_offset;
+#if 1
                                out_debug_log(_T("TRACK#%02d TYPE=%s PREGAP=%d INDEX0=%d INDEX1=%d LBA_SIZE=%d LBA_OFFSET=%d PATH=%s\n"),
                                                                        i, (toc_table[i].is_audio) ? _T("AUDIO") : _T("MODE1/2352"),
                                                                        toc_table[i].pregap, toc_table[i].index0, toc_table[i].index1,
                                                                        toc_table[i].lba_size, toc_table[i].lba_offset, track_data_path[i - 1]);
-                               //#endif
+#endif
                        }
                        toc_table[0].index0 = toc_table[0].index1 = toc_table[0].pregap = 0;
                        toc_table[0].physical_size = 2352;
@@ -225,25 +226,25 @@ bool TOWNS_CDROM::open_cue_file(const _TCHAR* file_path)
        // Not Cue FILE.
        return is_cue;
 }
-       
+
 bool TOWNS_CDROM::parse_cue_file_args(std::string& _arg2, const _TCHAR *parent_dir, std::string& imgpath)
 {
        size_t _arg2_ptr;
        size_t _arg3_ptr;
        std::string _arg3;
-       
+
        _arg2_ptr = _arg2.find_first_of((const char *)"\"") + 1;
        if(_arg2_ptr == std::string::npos) return false;
-                                       
+
        _arg2 = _arg2.substr(_arg2_ptr);
        _arg3_ptr = _arg2.find_first_of((const char *)"\"");
        if(_arg3_ptr == std::string::npos) return false;
        _arg2 = _arg2.substr(0, _arg3_ptr);
-       
+
        imgpath.clear();
        imgpath = std::string(parent_dir);
        imgpath.append(_arg2);
-       
+
 //     cdrom_debug_log(_T("**FILE %s\n"), imgpath.c_str());
 
        return true;
@@ -254,13 +255,13 @@ void TOWNS_CDROM::parse_cue_track(std::string &_arg2, int& nr_current_track, std
        size_t _arg2_ptr_s;
        size_t _arg2_ptr;
        _arg2_ptr_s = _arg2.find_first_of((const char *)" \t");
-                                       
+
        std::string _arg3 = _arg2.substr(_arg2_ptr_s);
        _arg2 = _arg2.substr(0, _arg2_ptr_s);
        size_t _arg3_ptr = _arg3.find_first_not_of((const char *)" \t");
        size_t _arg3_ptr_s;
        int _nr_num = atoi(_arg2.c_str());
-                               
+
        // Set image file
        if((_nr_num > 0) && (_nr_num < 100) && (_arg3_ptr != std::string::npos)) {
                std::map<std::string, int> cue_type;
@@ -275,7 +276,7 @@ void TOWNS_CDROM::parse_cue_track(std::string &_arg2, int& nr_current_track, std
 
                nr_current_track = _nr_num;
                _arg3 = _arg3.substr(_arg3_ptr);
-               
+
                memset(track_data_path[_nr_num - 1], 0x00, sizeof(_TCHAR) * _MAX_PATH);
                strncpy((char *)(track_data_path[_nr_num - 1]), imgpath.c_str(), _MAX_PATH - 1);
 //             image_tmp_data_path.clear();
@@ -283,10 +284,10 @@ void TOWNS_CDROM::parse_cue_track(std::string &_arg2, int& nr_current_track, std
 //             have_filename = false;
                _arg3_ptr_s = _arg3.find_first_of((const char *)" \t\n");
                _arg3.substr(0, _arg3_ptr_s);
-                                               
+
                std::transform(_arg3.begin(), _arg3.end(), _arg3.begin(),
                                           [](unsigned char c) -> unsigned char{ return std::toupper(c); });
-                                               
+
                toc_table[nr_current_track].is_audio = false;
                toc_table[nr_current_track].index0 = 0;
                toc_table[nr_current_track].index1 = 0;
@@ -300,10 +301,10 @@ void TOWNS_CDROM::parse_cue_track(std::string &_arg2, int& nr_current_track, std
                        track_type = MODE_NONE;
                }
                toc_table[nr_current_track].type = track_type;
-                                       
+
                switch(track_type) {
                case MODE_AUDIO:
-                       toc_table[nr_current_track].is_audio = true; 
+                       toc_table[nr_current_track].is_audio = true;
                        toc_table[nr_current_track].logical_size = 2352;
                        break;
                case MODE_MODE1_2048:
@@ -351,17 +352,17 @@ int TOWNS_CDROM::parse_cue_index(std::string &_arg2, int nr_current_track)
        if((nr_current_track > 0) && (nr_current_track < 100)) {
                _arg2_ptr_s = _arg2.find_first_of((const char *)" \t");
                if(_arg2_ptr_s == std::string::npos) return -1;;
-               
+
                _arg3 = _arg2.substr(_arg2_ptr_s);
                _arg2 = _arg2.substr(0, _arg2_ptr_s);
                _arg3_ptr = _arg3.find_first_not_of((const char *)" \t");
                if(_arg3_ptr == std::string::npos) return -1;
-               
+
                _arg3 = _arg3.substr(_arg3_ptr);
                _arg3_ptr_s = _arg3.find_first_of((const char *)" \t");
                _arg3.substr(0, _arg3_ptr_s);
                index = atoi(_arg2.c_str());
-               
+
                switch(index) {
                case 0:
                        toc_table[nr_current_track].index0 = get_frames_from_msf(_arg3.c_str());
@@ -376,5 +377,5 @@ int TOWNS_CDROM::parse_cue_index(std::string &_arg2, int nr_current_track)
        }
        return index;
 }
-       
+
 }