unit KaMResourceInput; interface uses Classes; function KaMResourceExists(const aReference: string): Boolean; function KaMOpenResourceStream(const aReference: string): TStream; implementation uses CastleUriUtils, CastleDownload; function ResourceProtocol(const aReference: string): string; begin if aReference = '' then raise EDownloadError.Create('KaMResourceInput: empty resource reference'); Result := UriProtocol(aReference); if (Result <> '') and (Result <> 'file') and (Result <> 'castle-data') then raise EDownloadError.Create('KaMResourceInput: unsupported resource protocol: ' + Result); end; function KaMResourceExists(const aReference: string): Boolean; begin ResourceProtocol(aReference); case UriExists(aReference) of ueFile: Result := True; ueNotExists, ueDirectory: Result := False; ueUnknown: raise EDownloadError.Create('KaMResourceInput: resource existence is unknown: ' + aReference); end; end; function KaMOpenResourceStream(const aReference: string): TStream; begin if ResourceProtocol(aReference) = '' then Result := TFileStream.Create(aReference, fmOpenRead) else Result := Download(aReference, [soForceMemoryStream]); end; end.