Аналог mmsystem для Linux.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аналог mmsystem для Linux.

Сообщение BadBoyAlex » 25.06.2017 17:05:16

Здравствуйте, уважаемые форумчане!
Хочу портировать свой проект и на Линукс тоже. Загвоздка в том, что мой проект использует модуль mmsystem, которого в Лине нет. Использует он его для получения информации о диске и извлечении CD-диска:
Код: Выделить всё
function GetVolumeInfo (const ADisc: WideChar): TDiscInfo;
var root: PChar;
    res: LongBool;
    VolumeNameBuffer, FileSystemNameBuffer: PChar;
    VolumeNameSize,FileSystemNameSize: DWORD;
    VolumeSerialNumber, MaximumComponentLength, FileSystemFlags: DWORD;
    s: String;
begin
s:= ADisc + ':\';
root:= PChar(s);
GetMem(VolumeNameBuffer, 256);
Getmem(FileSystemNameBuffer, 256);
VolumeNameSize:= 255;
FileSystemNameSize:= 255;
res:= GetVolumeInformation(Root, VolumeNameBuffer, VolumeNameSize, @VolumeSerialNumber, MaximumComponentLength, FileSystemFlags, FileSystemNameBuffer, FileSystemNameSize);
with Result do
begin
diHasInfo:= res;
diDrive:= ADisc;
diVolumeName:= VolumeNameBuffer;
diFileSystem:= FileSystemNameBuffer;
diSerial:= VolumeSerialNumber;
end;
Freemem(VolumeNameBuffer, 256);
Freemem(FileSystemNameBuffer, 256);
end;
function EjectCD (const ADisc: WideChar): Boolean;
var Res: MciError;
    OpenParm: TMCI_Open_Parms;
    Flags: DWord;
    S: String;
    DeviceID: Word;
begin
Result:= False;
if ADisc = '' then
Abort;
S:= ADisc + ':';
if GetDriveType(PChar(S)) = DRIVE_CDROM then
begin
Flags:= mci_Open_Type or mci_Open_Element;
with OpenParm do
  begin
  dwCallback:= 0;
  lpstrDeviceType:= 'CDAudio';
  lpstrElementName:= PChar(S);
  end;
Res:= mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
if Res <> 0 then
  Exit;
DeviceID:= OpenParm.wDeviceID;
try
  Res:= mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
  if Res = 0 then
   Exit;
  Result:= True;
finally
  mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
  end;
end;
end;

Есть ли другие варианты, для которых бы указанный код (или код, который будет аналогичен (или лучше) по функционалу) работал?
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Аналог mmsystem для Linux.

Сообщение pupsik » 25.06.2017 19:57:15

eject -h

Или посмотрите тут. Там, вроде как есть работа с СД.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Аналог mmsystem для Linux.

Сообщение BadBoyAlex » 25.06.2017 20:54:36

pupsik писал(а):eject -h

Или посмотрите тут. Там, вроде как есть работа с СД.


Просто нужно реализовать не только извлечение/загрузку диска, но и получение информации о нём.
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Аналог mmsystem для Linux.

Сообщение Little_Roo » 25.06.2017 20:59:31

Bass ? Там есть все :)
http://un4seen.com
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 638
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Аналог mmsystem для Linux.

Сообщение BadBoyAlex » 25.06.2017 21:03:26

Little_Roo писал(а):Bass ? Там есть все :)
http://un4seen.com


А есть ли возможность получить информацию о диске, извлечь его без подключения сторонних библиотек?
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Аналог mmsystem для Linux.

Сообщение olegy123 » 25.06.2017 21:06:41

Код: Выделить всё
cat /proc/sys/dev/cdrom/info


есть пакет
https://ru.wikipedia.org/wiki/Cdrtools
cdrecord -prcap

а что конкретно нужно получить?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Аналог mmsystem для Linux.

Сообщение pupsik » 25.06.2017 21:10:32

...но и получение информации о нём.
а вы смотрели ссылку? Там, как бы, инфу извлечь можно. И, вроде как, работают через системные либы.
...извлечь его без подключения сторонних библиотек?
есть. Читайте маны...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Аналог mmsystem для Linux.

Сообщение BadBoyAlex » 25.06.2017 21:14:10

olegy123 писал(а):а что конкретно нужно получить?

Нужно получить список дисков, получить название вставленного диска, файловую систему, (опционально) серийный номер, размер и потом извлечь его.

pupsik писал(а):а вы смотрели ссылку? Там, как бы, инфу извлечь можно. И, вроде как, работают через системные либы.

Смотрел. AV выдаёт при подключении пакета. Там только под Win32, но у меня Win32/64, Lin...
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Аналог mmsystem для Linux.

Сообщение pupsik » 25.06.2017 21:25:02

Нужно получить список дисков, получить название вставленного диска...
сорцы DC...

..Там только под Win32, но у меня Win32/64, Lin
первоначальный вопрос был о лине. И я не писал о установке. Я советовал посмотреть какая реализация для лина.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Аналог mmsystem для Linux.

Сообщение alexs » 25.06.2017 21:40:53

А посмотреть в самом FPC?
Давно всё там есть. Кросплатформено.
fpcsrc/packages/cdrom
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Аналог mmsystem для Linux.

Сообщение olegy123 » 25.06.2017 22:00:55

Через консоль
cdrecord(форк wodim) от инфы по -devices до записи/копирования/извлечения.

если stdio стремно, и умеете линковать сишные либлы, то есть возможность поработать через
https://dev.lovelyhq.com/libburnia/web/wikis/home

Добавлено спустя 16 минут 34 секунды:
http://manual.aptosid.com/ru/cd-no-gui-burn-ru.htm
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Аналог mmsystem для Linux.

Сообщение BadBoyAlex » 28.06.2017 22:38:02

Новая проблема:
Код: Выделить всё
Hint: (11030) Start of reading config file /etc/fpc.cfg
Hint: (11031) End of reading config file /etc/fpc.cfg
Note: (11046) DWARF debug information cannot be used with smart linking on this target, switching to static linking
Free Pascal Compiler version 3.0.2+dfsg-2 [2017/04/09] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
(1002) Target OS: Linux for x86-64
...
(9015) Linking ...
/usr/bin/ld.bfd: warning: /media/babaev-an/.../link.res contains output sections; did you forget -T?
/usr/bin/objcopy: ... : Нет такого файла
Error: (9013) Error while linking
Fatal: (10026) There were 1 errors compiling module, stopping
Fatal: (1018) Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode

Как побороть?
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Аналог mmsystem для Linux.

Сообщение Лекс Айрин » 29.06.2017 09:09:06

Судя по всему, настроить права папки.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Аналог mmsystem для Linux.

Сообщение BadBoyAlex » 29.06.2017 10:03:06

Лекс Айрин писал(а):Судя по всему, настроить права папки.

Все права выставлены на чтение, запись и выполнение. Причём dll-ка туда компилится...
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

Re: Аналог mmsystem для Linux.

Сообщение Лекс Айрин » 29.06.2017 10:14:51

По всем путям откуда берутся файлы?
Если воспользоваться переводчиком, то стоит обратить внимание на такой текст "...contains output sections; did you forget -T?" " ...содержит разделы(секции) вывода; Ты забыл -Т?"
Тем более, что ошибка возникает как раз после этого.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 29

Рейтинг@Mail.ru