]> git.sesse.net Git - vlc/commitdiff
Qt: Support disc drives probing for OS/2
authorKO Myung-Hun <komh78@gmail.com>
Sun, 5 Aug 2012 21:50:53 +0000 (23:50 +0200)
committerJean-Baptiste Kempf <jb@videolan.org>
Sun, 5 Aug 2012 21:51:14 +0000 (23:51 +0200)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
modules/gui/qt4/components/open_panels.cpp
modules/gui/qt4/components/open_panels.hpp

index f12d12d40bab2287006f239eec97faa28c013797..387912c166d968620dba2aa99bdc6dbab91b1c2f 100644 (file)
@@ -338,7 +338,7 @@ DiscOpenPanel::DiscOpenPanel( QWidget *_parent, intf_thread_t *_p_intf ) :
     ui.deviceCombo->setToolTip( qtr(I_DEVICE_TOOLTIP) );
     ui.deviceCombo->setInsertPolicy( QComboBox::InsertAtTop );
 
-#ifndef WIN32
+#if !defined( WIN32 ) && !defined( __OS2__ )
     char const * const ppsz_discdevices[] = {
         "sr*",
         "sg*",
@@ -404,6 +404,47 @@ void DiscOpenPanel::onFocus()
         SetErrorMode(oldMode);
     }
 }
+#elif defined( __OS2__ ) /* Disc drives probing for OS/2 */
+void DiscOpenPanel::onFocus()
+{
+
+    ui.deviceCombo->clear();
+
+#define IOCTL_CDROMDISK2        0x82
+#define CDROMDISK2_DRIVELETTERS 0x60
+
+    HFILE hcd2;
+    ULONG ulAction;
+    ULONG ulParamLen;
+    ULONG ulData;
+    ULONG ulDataLen;
+
+    if( DosOpen(( PSZ )"CD-ROM2$", ( PHFILE )&hcd2, &ulAction, 0, FILE_NORMAL,
+                OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW,
+                OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE,
+                NULL ))
+        return;
+
+    if( !DosDevIOCtl( hcd2, IOCTL_CDROMDISK2, CDROMDISK2_DRIVELETTERS,
+                      NULL, 0, &ulParamLen, &ulData, sizeof( ulData ), &ulDataLen ))
+    {
+        char szDriveName[] = "X:\\";
+
+        int count = LOUSHORT( ulData );
+        int drive = HIUSHORT( ulData );
+
+        for( ; count; --count, ++drive )
+        {
+            szDriveName[ 0 ] = 'A' + drive;
+
+            QString name = qfu( szDriveName );
+
+            ui.deviceCombo->addItem( name, name );
+        }
+    }
+
+    DosClose( hcd2 );
+}
 #endif
 
 DiscOpenPanel::~DiscOpenPanel()
@@ -422,7 +463,7 @@ void DiscOpenPanel::clear()
     m_discType = None;
 }
 
-#ifdef WIN32
+#if defined( WIN32 ) || defined( __OS2__ )
     #define setDrive( psz_name ) {\
     int index = ui.deviceCombo->findText( qfu( psz_name ) ); \
     if( index != -1 ) ui.deviceCombo->setCurrentIndex( index );}
index 137afb591a030346fbd32f469c4a8c0815fd2ec0..4b9cbfcb0bb2fb47344b1b643112ac7f1695ef43 100644 (file)
@@ -174,7 +174,7 @@ public:
     virtual ~DiscOpenPanel();
     virtual void clear() ;
     virtual void accept() ;
-#ifdef WIN32
+#if defined( WIN32 ) || defined( __OS2__ )
     virtual void onFocus();
 #endif
 private: