diff options
Diffstat (limited to 'packages/cdrom/src/lincd.pp')
| -rw-r--r-- | packages/cdrom/src/lincd.pp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/packages/cdrom/src/lincd.pp b/packages/cdrom/src/lincd.pp index 9eef43bb3e..f038e79e25 100644 --- a/packages/cdrom/src/lincd.pp +++ b/packages/cdrom/src/lincd.pp @@ -708,8 +708,15 @@ procedure set_sense_key(var a : Trequest_sense; __sense_key : Tu8); { --------------------------------------------------------------------- Utility functions ---------------------------------------------------------------------} +type + TCDSearchRec = record + Name: String; + i,j: Integer; + end; Function IsCDDevice(Device : String) : Boolean; +Function FindFirstCD(var ACDSearchRec: TCDSearchRec): Boolean; +Function FindNextCD(var ACDSearchRec: TCDSearchRec): Boolean; Function DetectCd : String; implementation @@ -1098,6 +1105,61 @@ Const '/dev/sr?', '/dev/optcd'); +function FindFirstCD(var ACDSearchRec: TCDSearchRec): Boolean; +begin + Result := False; + With ACDSearchRec do + begin + I := 1; + J := 0; + Name := ''; + end; + Result := FindNextCD(ACDSearchRec); +end; + +function FindNextCD(var ACDSearchRec: TCDSearchRec): Boolean; +var + L: integer; + S: String; + FoundDev: String; +begin + + Result := False; + FoundDev := ''; + with ACDSearchRec do + begin + While (FoundDev='') and (I<NrDevices) do + begin + S:=Devices[i]; + L:=Length(S); + If S[l]='?' then + begin + S:=Copy(S,1,L-1); + if j >= 3 then + j := 0; + while (j <= 3) and (Length(FoundDev)=0) do + begin + If IsCdDevice(S+Chr(Ord('0')+J)) then + FoundDev:=S+Chr(Ord('0')+J) + else If IsCdDevice(S+Chr(Ord('a')+J)) then + FoundDev:=S+Chr(Ord('a')+J); + Inc(j); + end; + if J >= 3 then + Inc(i); + end + else + begin + If IsCdDevice(S) then + FoundDev:=S; + Inc(i); + end; + end; + end; + Result := Length(FoundDev) > 0; + ACDSearchRec.Name:=FoundDev; +end; + Function DetectCD : String; Var @@ -1163,7 +1225,9 @@ begin If fpStat(Device,info)<>0 then exit; DeviceMajor:=info.st_rdev shr 8; + {$ifdef debug} Writeln('Device major : ',DeviceMajor); + {$endif} If DeviceMajor in [IDE0_MAJOR,IDE1_MAJOR,IDE2_MAJOR,IDE3_MAJOR] then Result:=TestCDRomIOCTL(Device) else |
