[vlc-devel] [PATCH] Add disc drives probing for services discovery on OS/2

Rémi Denis-Courmont remi at remlab.net
Sat Mar 10 09:10:56 CET 2012


I don't know what charset 'y' is, nor does git. I could not merge.

Le dimanche 4 mars 2012 13:54:14 KO Myung-Hun, vous avez écrit :
> ---
>  modules/services_discovery/Modules.am |    8 +++
>  modules/services_discovery/os2drive.c |  103
> +++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 0
> deletions(-)
>  create mode 100644 modules/services_discovery/os2drive.c
> 
> diff --git a/modules/services_discovery/Modules.am
> b/modules/services_discovery/Modules.am index b802fb7..e35ecf8 100644
> --- a/modules/services_discovery/Modules.am
> +++ b/modules/services_discovery/Modules.am
> @@ -42,6 +42,14 @@ if HAVE_WIN32
>  libvlc_LTLIBRARIES += libwindrive_plugin.la
>  endif
> 
> +libos2drive_plugin_la_SOURCES = os2drive.c
> +libos2drive_plugin_la_CFLAGS = $(AM_CFLAGS)
> +libos2drive_plugin_la_LIBADD = $(AM_LIBADD)
> +libos2drive_plugin_la_DEPENDENCIES =
> +if HAVE_OS2
> +libvlc_LTLIBRARIES += libos2drive_plugin.la
> +endif
> +
>  EXTRA_LTLIBRARIES += \
>  	libudev_plugin.la
>  libvlc_LTLIBRARIES += \
> diff --git a/modules/services_discovery/os2drive.c
> b/modules/services_discovery/os2drive.c new file mode 100644
> index 0000000..9e0166c
> --- /dev/null
> +++ b/modules/services_discovery/os2drive.c
> @@ -0,0 +1,103 @@
> +/**
> + * @file os2drive.c
> + * @brief List of disc drives for VLC media player for OS/2
> + */
> +/*************************************************************************
> **** + * Copyright © 2012 KO Myung-Hun
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU Lesser General Public License as published
> by + * the Free Software Foundation; either version 2.1 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> License + * along with this program; if not, write to the Free Software
> Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA
> 02110-1301, USA. +
> **************************************************************************
> ***/ +
> +#ifdef HAVE_CONFIG_H
> +# include <config.h>
> +#endif
> +
> +#include <vlc_common.h>
> +#include <vlc_services_discovery.h>
> +#include <vlc_plugin.h>
> +
> +#define IOCTL_CDROMDISK2        0x82
> +#define CDROMDISK2_DRIVELETTERS 0x60
> +
> +static int Open (vlc_object_t *);
> +
> +VLC_SD_PROBE_HELPER("disc", "Discs", SD_CAT_DEVICES)
> +
> +/*
> + * Module descriptor
> + */
> +vlc_module_begin ()
> +    add_submodule ()
> +    set_shortname (N_("Discs"))
> +    set_description (N_("Discs"))
> +    set_category (CAT_PLAYLIST)
> +    set_subcategory (SUBCAT_PLAYLIST_SD)
> +    set_capability ("services_discovery", 0)
> +    set_callbacks (Open, NULL)
> +    add_shortcut ("disc")
> +
> +    VLC_SD_PROBE_SUBMODULE
> +
> +vlc_module_end ()
> +
> +/**
> + * Probes and initializes.
> + */
> +static int Open (vlc_object_t *obj)
> +{
> +    services_discovery_t *sd = (services_discovery_t *)obj;
> +
> +    HFILE hcd2;
> +    ULONG ulAction;
> +    ULONG ulParamLen;
> +    ULONG ulData;
> +    ULONG ulDataLen;
> +    ULONG rc;
> +
> +    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 VLC_EGENERIC;
> +
> +    rc = DosDevIOCtl (hcd2, IOCTL_CDROMDISK2, CDROMDISK2_DRIVELETTERS,
> +                      NULL, 0, &ulParamLen, &ulData, sizeof(ulData),
> &ulDataLen); +    if (!rc)
> +    {
> +        char mrl[] = "file:///A:/", name[] = "A:";
> +
> +        int count = LOUSHORT(ulData);
> +        int drive = HIUSHORT(ulData);
> +
> +        input_item_t *item;
> +        char          letter;
> +
> +        for (; count; --count, ++drive)
> +        {
> +            letter = 'A' + drive;
> +
> +            mrl[8] = name[0] = letter;
> +            item = input_item_NewWithType (mrl, name, 0, NULL, 0, -1,
> ITEM_TYPE_DISC); +            msg_Dbg (sd, "adding %s (%s)", mrl, name);
> +            if (item == NULL)
> +                break;
> +
> +            services_discovery_AddItem (sd, item, _("Local drives"));
> +        }
> +    }
> +
> +    DosClose (hcd2);
> +
> +    return rc ? VLC_EGENERIC : VLC_SUCCESS;
> +}


-- 
Rémi Denis-Courmont
http://www.remlab.net/
http://fi.linkedin.com/in/remidenis



More information about the vlc-devel mailing list