Mailinglist Archive: opensuse (3135 mails)

< Previous Next >
Re: [opensuse] I there a way to view my DVD-RW capabilities under Linux (like Nero InfoTool) ? ?
  • From: Frank Seidel <fseidel@xxxxxxx>
  • Date: Fri, 9 Mar 2007 12:28:02 +0100
  • Message-id: <200703091228.07922.fseidel@xxxxxxx>
On Friday 09 March 2007 09:34:29 Alexey Eremenko wrote:
> Is there a way to check for Lightscribe capability?

Not that easily, to what i know. You can use the (GUI) tools
at http://www.lightscribe.com to check whether your
drive supports it.

Or for commandline .. as there also is a SDK with a documented API a 
simple tool for this could look like the one i just yet wrote and
attached (be warned, i have no such drive and so this not
tested at all .. just some codepeace of crap that _could_ work
.. at your own risk of course ;-).
But you'll still need the SDK and system libs installed
(from lightscribe.com) for this to work/compile.

If this works for you.. and there are more interested in a commandline
tool like this (that also may get extended a bit to check for 
capabilites like color or monochrome printing etc.) i might build a
rpm in the openSUSE buildservice from it.. so, any feedback is 
appreciated (as always ;-)

Have fun,
Frank

P.S.: Please no flames for the codequality.. i know its crappy. 
I haven't written C++ for ages (at least it feels like that).
/* lschk: is a extremely simple check if drives with lightscribe technology 
 * are present in the system.
 *
 * Author: Frank Seidel <fseidel@xxxxxxx>
 * Version: 0.1alpha
 * Date: 09-03-2007
 * License: GPLv2
 */

#include <stdlib.h>
#include <lightscribe.h>
#include <iostream>

using namespace std;


int main(int, char**)
{
        int ret_val = EXIT_SUCCESS;
        unsigned long drive_counter = 0UL;
        unsigned long drive_index = 0UL;
        size_t strSize = 0;
        char *name = NULL;
        char *path = NULL;

        /* get discprintmgr */
        LS_DiscPrintMgrHandle myDiscPrintMgr;
        if (LS_DiscPrintMgr_Create( &myDiscPrintMgr) != LS_OK) {
                ret_val = EXIT_FAILURE;
                goto out;
        }

        /* enumeration of ls drives */
        LS_EnumDiscPrintersHandle ls_enum;
        if (LS_DiscPrintMgr_EnumDiscPrinters(myDiscPrintMgr, &ls_enum) != LS_OK) {
                ret_val = EXIT_FAILURE;
                goto out;
        }
        if (LS_EnumDiscPrinters_Count(ls_enum, &drive_counter) != LS_OK) {
                ret_val = EXIT_FAILURE;
                goto out;
        }
        
        cout << "Drives detected with lightScribe capabilities: " << drive_counter << endl;
        LS_DiscPrinterHandle myDrive;
        for (;drive_index < drive_counter; ++drive_index) {
                if (LS_EnumDiscPrinters_Item(ls_enum, drive_index, &myDrive) != LS_OK) {
                        ret_val = EXIT_FAILURE;
                        goto out;
                }

                if (LS_DiscPrinter_GetPrinterDisplayNameSize(myDrive, &strSize) != LS_OK) {
                        ret_val = EXIT_FAILURE;
                        goto out;
                }
                if ((name = (char*) malloc(strSize)) == NULL) {
                        ret_val = EXIT_FAILURE;
                        goto out;
                }
                if (LS_DiscPrinter_GetPrinterDisplayName(myDrive, name)!= LS_OK) {
                        free(name);
                        ret_val = EXIT_FAILURE;
                        goto out;
                }
                if (LS_DiscPrinter_GetPrinterPathSize(myDrive, &strSize) != LS_OK) {
                        free(name);
                        ret_val = EXIT_FAILURE;
                        goto out;
                }
                if ((path = (char*) malloc(strSize)) == NULL) {
                        free(name);
                        ret_val = EXIT_FAILURE;
                        goto out;
                }
                if (LS_DiscPrinter_GetPrinterPath(myDrive, path) != LS_OK) {
                        free(path);
                        free(name);
                        ret_val = EXIT_FAILURE;
                        goto out;
                }

                cout << "Drive[" << drive_index << "]: " << name << " (" << path << ")" <<endl;

                free(path);
                free(name);

                if (LS_DiscPrinter_Destroy(&myDrive) != LS_OK) {
                        ret_val = EXIT_FAILURE;
                        goto out;
                }
        }

        /* some cleanup */
        if ((LS_EnumDiscPrinters_Destroy( &ls_enum) != LS_OK) ||
                (LS_DiscPrintMgr_Destroy( &myDiscPrintMgr) != LS_OK) )
                ret_val = EXIT_FAILURE;

out:
        if (ret_val) {
                cerr << "Error occured while scanning for lightScribe capable drives." << endl;
                LS_LastChanceCleanup();
        }
        return ret_val;
}

all: lschk

lschk: lschk.cpp
        g++ -g -W -Wall -pthread -llightscribe  -lpthread -o lschk lschk.cpp

clean:
        rm -fv lschk



< Previous Next >